Django 部署到服务器
文章目录
背景
-
部署到阿里云ECS服务器
-
系统默认环境配置
- Ubuntu 14.0
- Python 2.7
- Python 3.4
-
项目环境配置
- Python 3.6
- django 2.1.8
- uwsgi
- nginx
- python第三方库:
requests
-
注:
服务器Python 3 默认为python 3.4,不能满足项目需求。所以需要额外安装python 3.6
-
文件路径
-
python 3.6安装位置
/usr/local/bin/python3.6
-
项目位置
/home/myWeb/myMusic
-
虚拟环境
/home/myWeb/myMusic/venv
-
static文件
/home/myWeb/myMusic/collect_static
-
uwsgi配置
/home/myWeb/website
-
nginx配置
/etc/nginx/sites-available/myMusic.conf
-
日志文件
/home/myWeb/website/logs
/var/log/nginx
-
-
项目结构
下载安装Python 3.6
-
转至下载目录:
cd /usr/src
-
下载
Python 3.6
压缩包:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
-
解压:
tar xzf Python-3.6.8.tgz
-
进入
Python-3.6.8
目录cd /usr/src/Python-3.6.8
-
编辑
Python-3.6.8
目录下的Modules/Setup
文件Python3.6安装pip时, 会报错:zipimport.ZipImportError: can't decompress data; zlib not available
主要是由于系统默认配置有Python3.4
与之冲突所以要修改Setup文件,用于安装独立的pip 3.6。
打开Modules/Setup文件,在第366行附近有一句
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
,将这句开头的#
去掉,然后保存即可。 -
然后执行安装命令:
make && make install
-
将
python3
命令指向python3.6
:系统默认是将
python3
命令指向了python3.4
,所以要修改。输入命令:
update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.6.8
-
python 3.6 安装完成后默认已经安装了pip,为了避免与系统默认的python 3.4的pip冲突,用
pip3.6
命令进行安装第三方库。
Virtualenv 虚拟环境安装
pip安装第三方库时,使用国内的镜像下载的速度会比较快些,这里使用清华大学的镜像
-
安装
Virtualenv
:pip3.6 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
-
给项目创建一个虚拟环境:
virtualenv --python=/usr/local/bin/python3.6 /home/myWeb/myMusic/venv
注:我的项目存放在
/home/myWeb/myMusic
虚拟环境的名是venv
。 -
转到项目的位置
cd /home/myWeb/myMusic
-
启动虚拟环境
source /home/myWeb/myMusic/venv/bin/activate
-
在虚拟环境里安装第三方库
-
安装uwsgi
留意: uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。
pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
-
安装requests
pip3.6 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
注:我的项目里用到了
requests
库,所以要安装。 -
安装django
pip3.6 install django -i https://pypi.tuna.tsinghua.edu.cn/simple
注:由于pip默认安装的是最新版本的django,由于版本的不同运行项目时可能会报错。
-
卸载已安装的django
pip3 uninstall django
-
安装django指定版本(2.1.8)
pip3 install django==2.1.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
-
退出虚拟环境
deactivate
安装uwsgi
留意: uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。
pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
安装Nginx
apt-get install nginx
项目配置
Django项目配置
- setting.py文件相关配置
-
ALLOWED_HOSTS
ALLOWED_HOSTS = ['*']
-
关掉DEBUG。
DEBUG = False
-
static文件
STATIC_ROOT = os.path.join(BASE_DIR, "collect_static")
静态文件位置,我的设置在项目目录下的
collect_static
里(/home/myWeb/myMusic/collect_static
)
- 相关迁移
-
进入虚拟环境
cd /home/myWeb/myMusic/
source /home/myWeb/myMusic/venv/bin/activate
-
迁移数据库
python manage.py makemigrations
python manage.py migrate
-
static文件
python manage.py collectstatic
django会把所有的static文件都复制到
STATIC_ROOT
文件夹下。 -
创建超级管理员
python manage.py createsuperuser
uwsgi 配置
-
新建相关文件夹
-
站点配置文件夹
mkdir /home/myWeb/website # 站点配置文件,如uwsgi.ini, uwsgi.pid, 相关日志等
mkdir /home/myWeb/website/logs # 用于存放日志文件
mkdir /home/myWeb/website/logs/uwsgi # 用于存放uwsgi的运行日志文件
-
uwsgi配置文件
-
在
/home/myWeb/website
下面新建uwsgi.ini
文件touch /home/myWeb/website/uwsgi.ini
-
写入uwsgi.ini配置文件
[uwsgi] socket = 127.0.0.1:8000 // 用于连接nginx master = true //主进程 ;vhost = false //多站模式 ;no-site = true //多站模式时不设置入口模块和文件 workers = 4 //子进程数 reload-mercy = 10 vacuum = true //退出、重启时清理文件 max-requests = 5000 limit-as = 512 buffer-size = 30000 home=/home/myWeb/myMusic/venv //虚拟环境位置 chdir=/home/myWeb/myMusic //项目位置 module=myMusic.wsgi:application // 项目的wsgi.py pidfile = /home/myWeb/website/uwsgi.pid ; //pid文件,用于后面的脚本启动、停止该进程 daemonize = /home/myWeb/website/logs/uwsgi/uwsgi.log ; // 日志文件
uwsgi.ini 文件需要根据自己的项目情况进行配置。
-
Nginx配置
- 新建文件夹和文件
-
日志文件夹
mkdir /home/myWeb/website/logs/nginx
-
站点配置文件
myMusic.conf
touch /etc/nginx/sites-available/myMusic.conf
-
写入站点配置文件
myMusic.conf
server { listen 80; # 监听80端口 server_name 39.96.75.223 *.brightxu.xyz; # 用户访问网站的网址,可以是ip地址和域名 charset utf-8; client_max_body_size 75M; access_log /home/myWeb/website/logs/nginx/host.access.log; # 访问日志文件位置 error_log /home/myWeb/website/logs/nginx/error.log; # 错误日志文件位置 location /static { alias /home/myWeb/myMusic/collect_static; # 静态文件的位置,要与项目的setting.py里的STATIC_ROOT一致 } location / { uwsgi_pass 127.0.0.1:8000; # 这个值要与前面uwsgi.ini的配置一致 include /etc/nginx/uwsgi_params; } }
-
激活站点
ln -s /etc/nginx/sites-available/myMusic.conf /etc/nginx/sites-enabled/myMusic.conf
启动站点
-
启动uwsgi
uwsgi --ini /home/myWeb/website/uwsgi.ini
-
启动nginx
nginx
其他命令
-
uwsgi
-
查看进程
ps -ef | grep uwsgi
-
启动
uwsgi --ini /home/myWeb/website/uwsgi.ini
-
停止
killall -9 uwsgi # 关闭进程
uwsgi --stop /home/myWeb/website/uwsgi.pid
-
重启
uwsgi --reload /home/myWeb/website/uwsgi.pid
注:上面的
uwsgi.pid
文件对应uwsgi.ini
里pidfile
的设置
-
-
nginx
-
查看进程
ps -ef | grep nginx
-
启动
nginx
service nginx start
-
停止
nginx -s quit # 完整有序的停止nginx
nginx -s stop # 快速停止nginx
killall -9 nginx # 关闭进程
service nginx stop
-
重启
nginx -s reload # 修改配置后重新加载生效
nginx -s reopen # 重新打开日志文件
service nginx reload
-
阿里云安全组规则
为了安全起见,阿里云一般默认80端口是关闭的,所以默认下不能通过域名直接访问。因此需要手动为80端口添加一个入站规则。
-
新建一个安全组规则(入站方向)
授权策略:允许
授权对象:0.0.0.0/0
端口范围:80/80
优先级:1