Django Web项目部署流程
大纲
- 环境说明
- 系统环境:Debian10
- 代码运行环境:Python3.8
- 网络服务器:Daphne(支持wsgi和asgi协议)
- 反向代理:Nginx
- 进程管理:Supervisor
- 项目说明:http+websocket,需要用到asgi协议
- 部署的流程
- 环境准备
- 代码git同步
- 应用服务化
- 特殊的说明
一.环境准备
操作系统:Debian10
-
系统自行安装即可
-
如果是在内网部署,需要更新源:
cd etc/apt/
vi source.list
# 对内容进行修改,注释原url
# deb http//deb.debian.org/debian/ buster-updates man contrib
# deb-src http://deb,debian.org/debian/ buster-updates man contrib
# 添加内网源url
deb [trusted=yes] http://192.168.68.192/debian/ buster-updates main contrib
deb-src [trusted=yes] http://192.168.68.192/debian buster-updates main contrib
deb [trusted=yes] http://192.168.68.192/debian/ buster main contrib
deb-src [trusted=yes] http://192.168.68.192/debian buster main contrib
deb [trusted=yes] http://192.168.68.192/debian/ buster-backports main contrib
# 然后保存并退出
# 执行源检查,因为内网源可能会过期等问题,所以我们跳过源验证
apt update -o Acquire::Check-Valid-Until=false --allow-insecure-repositories
apt upgrade --allow-unauthenticated
- 检查ssh是否正常工作
systemctl status sshd
# 配置ssh,使可以root用户登录
vi /etc/ssh/sshd_config
将 #PermitRootLogin prohibit-password 更改为 PermitRootLogin yes
将 #PasswordAuthentication yes 前面的#去掉
# 然后保存文件,重启ssh即可,systemctl restart sshd
项目运行环境:Python3.8
debian10中自带了python2.7和python3.7,但是我们的项目需要运行在python3.8的环境中。此处我们使用源码包编译的方式安装python3.8
-
将源码包
Python-3.8.10.tar
上传至服务器,可使用scp命令:scp 本地路径 user@ip:/绝对路径
-
解压源码包:
tar xvf Python-3.8.10.tar
,如果是.tar.gz
结尾的话就用tar zxvf Python-3.8.10.tar
命令解压,最终会解压到当前目录下的Python-3.8.10
目录中 -
准备环境
# 确保 _ctypes
apt install libffi-dev
# 确保 _sqlite3
apt install libsqlite3-dev
# 确保 _ssl 这一步可以不先执行,出现 No module named '_ssl'再执行也可
根据博客:my.oschina.net/u/4050197/blog/5553562 操作即可
-
进入
Python-3.8.10.tar
目录,执行./configure --prefix=/opt/python3.8
,prefix
参数用于指定python安装路径 -
编译安装:
make && make install
-
如果出现找不到gcc或make命令的问题,那么执行
apt install gcc libc6-dev # 这一步确保gcc
apt install automake autoconf libtool make # 这一步确保安装make
-
命令行中输入
python3.8 --version
查看是否安装成功 -
确认pip已安装,
apt install python3-pip
,pip3 --version
网络服务器
Daphne是python的一个库,在后续代码部署时安装即可
反向代理
- 安装Nginx:
apt install nginx
进程管理
- 安装Supervisor:
apt install supervisor
二.开始部署
1. 使用git同步代码
git clone 代码地址
,如果出现权限问题请检查用户,如果出现ssh问题请检查证书(证书问题请查看其他文档)- 进入项目,切换至目标分支,
git checkout 分支名
- 配置git,使之不用每次拉代码都要输入用户名和密码(查阅其他文档)
2. 准备python虚拟环境
python3.8 -m venv venv
,该命令会在当前目录下创建一个名为venv
的目录,里面就是python虚拟环境source venv/bin/activate
, 运行该命令后会进入虚拟环境,此时python
命令就能指代python3.8
3. 安装项目
- 在进入虚拟环境的前提下进入项目目录,执行
pip install -r requirements.txt
- 安装项目:
python setup.py develop
- 测试运行:
daphne ly_web_server.asgi:application -b 0.0.0.0 -p 8001
,如果没报错即可;ctrl+c
退出
4. 项目服务化
- 配置supervisor
cd etc/supervisor
vi supervisord.conf
查看如下对应信息
[include]
files = /xxx/*.ini
也可以自己设定读取路径
[include]
files = /etc/supervisor/supervisord.d/*.ini
- 配置自己的配置,
vi /etc/supervisor/supervisord.d/asgi.ini
[program:daphne]
directory=/home/ly_web_server/ly_web_server # 项目路径
command=/home/ly_web_server/ly_web_server/venv/bin/daphne -b 0.0.0.0 -p 8000 --proxy-headers ly_web_server.asgi:application
# daphne启动命令 虚拟环境要指定daphne的绝对路径
autostart=true
autorestart=true
stdout_logfile=/opt/websocket.log # 运行日志保存路径
redirect_stderr=true
- 运行服务,
supervisord -c /etc/supervisor/supervisord.d/asgi.ini
supervisorctl status # 查看启动状态
有如下消息说明正常启动
daphne RUNNING pid 19997, uptime 0:21:53
- 服务管理:
supervisorctl # 进入supervisor环境
supervisorctl reread # 重载配置
supervisorctl update # 更新
supervisorctl start all # 开启
supervisorctl status # 查看启动状态
6. 配置反向代理
nginx配置如下:
upstream channels-backend {
server 0.0.0.0:8000; # dephne配置的web服务地址
}
map $http_upgrade $connection_upgrade{
default upgrade;
"" close;
}
server {
listen 80; # 提供客户端访问的端口号
location / {
proxy_pass http://channels-backend;
proxy_http_version 1.1; # 设置websocket网络协议支持
proxy_set_header Upgrade $http_upgrade; # 设置websocket网络协议支持
proxy_set_header Connection "upgrade"; # 设置websocket网络协议支持
proxy_redirect off; # 是否支持重定向
proxy_set_header Host $host; # 服务器本身的ip
proxy_set_header X-Real-IP $remote_addr; # 客户端的ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 路由顺序
proxy_set_header X-Forwarded-Host $server_name;
}
}
再systemctl restart nginx
或nginx -s reload
即可