需求:在本地已经完成了一个博客系统/数据可视化系统的开发,需要部署到系统上,展示个人主页/个人作品

编程语言:Python
系统框架:Django
数据库:MySQL
服务架构:uwsgi+nginx
IDE:pycharm
代码管理:Git

我的系统目录:

1、购买服务器

首先购买云服务器,这里选择的阿里云ECS,使用的ubuntu系统

个人建站一般选择的是虚拟主机,这样经济实惠还方便,但是我使用的是Django自主开发,而且我的一些作品主要是数据项目,其中主要展现方式就是数据可视化,个人原因还是想把它用自己的技术在实现一遍。不过云服务器价格不菲(不过大学生购买的话一年只要一百多,不要太优惠了)

2、构建系统环境

然后进入系统,新建用户
在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。
useradd命令的使用格式如下: useradd [参数] 新建用户账号

参数 含义
-d 指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目录下建立与用户名同名目录为主目录
-m 自动建立目录
-g 指定组名称

相关说明:
● Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
● 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
● 用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的;
● 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。
命令含义

useradd -d /home/abc abc -m 创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
useradd -d /home/a a -g test -m 创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,
同时用户属于test组
cat /etc/passwd 查看系统当前用户名

我使用的命令是:useradd wfxu -m -d /home/wfxu
这样建立用户的好处是会建立用户目录
然后再更改密码:passwd wfxu
最后记得把用户加入sudores中

  1. 进入到root用户下。
  2. 添加文件的写权限。也就是输入命令”chmod u+w /etc/sudoers“。
  3. 编辑/etc/sudoers文件。也就是输入命令”gedit /etc/sudoers“,进入编辑模式,找到这一 行:
    root ALL=(ALL) ALL“在起下面添加”yourName ALL=(ALL)
    ALL”(这里的yourName是你的用户名),然后保存退出。
  4. 撤销文件的写权限。也就是输入命令”chmod u-w /etc/sudoers“。

新增用户后每次切换用户都会报错 unable to resolve host 解决方法
假设这台机器名字叫abc(机器的hostname), 每次执行sudo 就出现这个警告讯息: sudo: unable to resolve host abc 虽然sudo 还是可以正常执行, 但是警告讯息每次都出来,而这只是机器在反解上的问题,
所以就直接从/etc/hosts
设定, 让abc(hostname) 可以解回127.0.0.1 的IP 即可.
/etc/hosts 原始内容


127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

     在127.0.0.1 localhost 后面加上主机名称(hostname) 即可, /etc/hosts 内容修改成如下:

127.0.0.1 localhost abc #要保证这个名字与 /etc/hostname中的主机名一致才有效 或改成下面这两行
127.0.0.1 localhost
127.0.0.1 abc 这样设完后, 使用sudo 就不会再有那个提示信息了。

3、安装git

命令:sudo apt-get install git
会报错:Unable to locate package
这是因为新装的ubuntu系统,没有update的原因。然后进行update,输入命令:sudo apt-get update,最后再安装。

4、虚拟环境准备

● 在本地的虚拟环境中,项目根目录下,执行命令收集所有包pip freeze > plist.txt
● 通过git软件将开发好的项目上传到此服务器的某个目录

git config –global user.name “XX”
git config –global user.email XX
git clone git@github.com:账号名/项目名.git
git pull
上面是从git上获取项目,以下是提交代码
git add [目录]
git commit -m “说明”
git push origin master

● 在服务器上安装并创建虚拟环境,如果已有则跳过此步

sudo apt-get install python-virtualenv
sudo easy_install virtualenvwrapper
mkvirtualenv [虚拟环境名称]

在安装成功后创建环境的时候可能会报没有命令的错误,那么

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

把上面的命令加到 ~/.bashrc 后,source ~/.bashrc在运行mkvirtualenv 就可以了

● 安装数据库

在上面的plist.txt中会有MySQL-python这个安装包,
mysql-python安装时EnvironmentError: mysql_config not found
主要原因是没有安装:libmysqlclient-dev

sudo apt-get install libmysqlclient-dev

找到mysql_config文件的路径

sudo updatedb
locate mysql_config
mysql_config的位置为:/usr/bin/mysql_config
在mysql-python源码包下找到:setup_posix.py 文件,然后找到文件中的 mysql_config.path 将其值改为:/usr/bin/mysql_config,然后 sudo python setup.py install ,就ok了
这是网上说的,但我不没有照做,我是再安装msyql-server,然后就OK了

● 在虚拟环境上工作,安装所有需要的包

workon [虚拟环境名称]
pip install -r plist.txt

5.服务测试

● 更改settings.py文件

DEBUG = False
ALLOW_HOSTS=['*',]表示可以访问服务器的ip

启动服务器,运行正常,但是静态文件无法加载。
这里如果还要注意的是settings中MySQL的连接要更改,否则会Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 报错。
然后再运行 python manage.py runserver 测试是否可以运行

阿里云服务器有两个网络ip,一个是公网ip,这个就是对外的访问IP地址,也就是你域名解析的地址,还有一个是私有ip,主要是内部通信的,所以如果想在浏览器里测试效果,需要在上面你的命令加上IP地址和端口(云服务器的端口也需要添加,在安全组配置中设置添加规则)

我是直接添加公网IP的,然后就

Error: That IP address can't be assigned-to.

解决方法是:python manage.py runserver 0.0.0.0:8000.

6、安装使用uwsgi

● 安装uWSGI

pip install uwsgi

● 配置uWSGI,在项目中新建文件uwsgi.ini,编写如下配置

[uwsgi]
socket=外网ip:端口(使用nginx连接时,使用socket)
http=外网ip:端口(直接做web服务器,使用http)
chdir=项目根目录
wsgi-file=项目中wsgi.py文件的目录,相对于项目根目录
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log

● 启动:uwsgi --ini uwsgi.ini
● 停止:uwsgi --stop uwsgi.pid
● 重启:uwsgi --reload uwsgi.pid官网上这个命令重启,但我试了根本没用
● 使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
因为现在还没有使用nginx,所以使用的http协议,这里同样的不能使用公网IP

7、安装使用nginx

● 通过命令安装

sudo apt-get install nginx

● 网上说默认安装到/usr/local/nginx目录,但是我这里不是,配置目录和启动命令也不相同,配置文件夹在/etc/nginx/nginx.conf,具体命令如下
● 查看版本:sudo usr/sbin/nginx或nginx -v
● 启动:sudo usr/sbin/nginx或nginx
● 停止:sudo usr/sbin/nginx或nginx -s stop
● 重启:sudo usr/sbin/nginx或nginx -s reload
● 通过浏览器查看nginx运行结果
● 指向uwsgi项目:编辑conf/nginx.conf文件

sudo vi /etc/nginx/nginx.conf

在server下添加新的location项,指向uwsgi的ip与端口

location / {include uwsgi_params;将所有的参数转到uwsgi下uwsgi_pass uwsgi的ip与端口;
}

具体如下

server {listen 80 default_server;#listen [::]:80 default_server;#root /var/www/execution;#index index.html index.htm index.nginx-debian.html;server_name execution; # IP or FQDNlocation /static {alias /var/www/execution/static;}location / {uwsgi_pass 172.26.165.228:8080;include uwsgi_params;#try_files $uri $uri/ =404;}}

● 修改uwsgi.ini文件,启动socket,禁用http
● 重启nginx、uwsgi(启动nginx会报nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/default:17的错,把这个文件删除就行了:sudo rm /etc/nginx/sites-enabled/default
● 在浏览器中查看项目,发现静态文件加载不正常,接下来解决静态文件的问题

8、解决静态文件

● 所有的静态文件都会由nginx处理,不会将请求转到uwsgi
● 配置nginx的静态项,打开conf/nginx.conf文件,找到server,添加新location

location /static {alias /var/www/execution/static;
}

● 在服务器上创建目录结构“/var/www/execution/”
● 修改目录权限sudo chmod 777 /var/www/execution
● 创建static目录,注意顺序是先分配权限,再创建目录mkdir static,目的是可以将静态文件复制到static文件夹中
● 修改settings.py文件

STATIC_ROOT='/var/www/execution/static/'
STATIC_URL='/static/'

● 收集所有静态文件到static_root指定目录:python manage.py collectstatic
● 最终目录结构如下图:

● 重启nginx、uwsgi
部署成功!

ps:今天又重新买了一台一年的服务器,重新部署了下,地址为:http://106.15.177.175/showtime/execution 效果一样

python-django 阿里云ECS服务器部署uwsgi+nginx过程解说相关推荐

  1. 阿里云ECS服务器部署,nginx+node+git

    查看node.js中文文档时,看见阿里云服务器做广告,心急买了个低配的.就随便配了环境,Vue打包项目可正常访问.版本centos7,x 软件:ftp和xshell xshell可以说是命令行的形式, ...

  2. 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  3. 通过阿里云ECS服务器部署FRP实现Windows自带远程桌面

    由于TeamViewer的高额使用费及其安全问题,萌生了自己搭建FRP实现Windows远程桌面的想法,网上找了一圈基本没有全面且安全落地的,大部分都是面向技术达人的,对于新手的我来说走了不少弯路,在 ...

  4. 阿里云ECS服务器部署Node.js项目详细教程及多网站部署

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  5. 阿里云ECS服务器部署Node.js项目全过程详解

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  6. Code-server阿里云ECS服务器部署

    文章目录 环境 code-server安装包 基础部件 安装部件 部署 1.创建sreen窗口 2.编辑codeserver配置文件 3.端口开放 4.codeserver服务启动 5.登陆codes ...

  7. 阿里云ECS服务器部署

    阿里云ECS体验JavaWeb 基础步骤 其他操作 第一章 基础步骤 第01节 登录阿里云服务器 在购买ECS服务器后,系统会创建一个ECS实例.每一个ECS实例对应一台已购买的云服务器. 您可以通过 ...

  8. 阿里云ECS服务器部署javaweb项目整个流程

    阿里云ECS建网站超详细全套完整图文教程!菜鸟必看! 第一步:如何以最低价格快速买到阿里云服务器? 1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是 ...

  9. 使用阿里云ECS服务器部署Web应用流程介绍

    一.前言 学习了许久的Java,也参与开发了很多的Java项目,但一直没有系统的接触学习过项目部署,而我对项目部署也很有兴趣,于是便摸索学习了一番,在这里记录一下学习过程,参考博客,遇到的问题和解决办 ...

最新文章

  1. 关于Adium近期无法添加MSN联系人的说明
  2. android18lazuli,The Rise And Fall Of Android 17
  3. java整型和浮点型_Java基本的程序结构设计 整形和浮点型
  4. Docker - 导出导入容器
  5. autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
  6. 转:jQuery常用插件
  7. java mapreduce_通过简单的Word Count讲解MapReduce原理以及Java实现
  8. 如何查看centos安装了哪些程序
  9. jQuery鼠标事件整理
  10. 宋词10家--一人一首成名曲
  11. 图形轨迹c语言,OpenCV识别图像上的线条轨迹
  12. 网页设计html怎么做五星红旗,用CSS做各国国旗方法
  13. 大数据的淘金之旅,数据治理之数据资产管理
  14. 内存输出流ByteArrayOutputStream
  15. adobe 奥多比bridge extention等产品 “安装程序无法初始化。请下载Adobe Support Advisor检测该问题”
  16. python中年月日时分秒格式
  17. 山东双数认证大数据产品登记条件
  18. 如何选择云服务器配置?怎么买最划算?
  19. 【学习笔记】-提权篇(保姆级)
  20. matlab中文help,matlab中文帮助文档.pdf

热门文章

  1. Hive查询分析计算:股票分析
  2. 机试算法讲解:第26题 分解素因数
  3. TFT屏的驱动ST7735S使用实例
  4. python实现mongodb数据导入到mysql
  5. redis BITFIELD详解
  6. 一拍是多少秒 计算机制音乐,bpm换算节拍(bpm多少算快歌)
  7. 第05章 深度卷积神经网络模型
  8. python zipfile压缩的文件用shell命令解压_Python学习第177课——bzip2、zip方式压缩文件和解压文件...
  9. mysql 事件报错1314_mysql 1314
  10. 【EXPDP】11g版本EXPDP 的COMPRESSION参数压缩比堪比“gzip -9”