记一次Django+uWSGI+nginx部署流程
- 2023-03-14 21:05:00
- pjd
- 原创 431
准备工作:
# 导出第三方模块:
pip freeze > requirements.txt
# 收集静态文件完成后改名为static:
python manage.py collectstatic
# 导出数据库密码root:
mysqldump -u {{数据库用户名}} -p {{数据库密码}} > {{数据库名}}.sql
# 推送代码:
git push
# 服务器中拉取代码:略
服务器中虚拟环境准备
# 安装虚拟环境第三方包:
pip install virtualenv
# 创建虚拟环境(在项目根目录下创建):
virtualenv {{虚拟环境名称}}/bin/activate
# 进入虚拟环境:
source {{虚拟环境名称}}/bin/activate
# 退出虚拟环境:
deactivate
虚拟环境中导入第三方模块
# 下载第三方模块,在虚拟环境中导入requirements.txt中的第三方模块: pip install -r requirements.txt
服务器的数据库准备
# 安装mysql驱动程序
pip install mysqlclient
# 创建数据库:
create database {{数据库名}};
# 导入数据库:
source {{sql文件名}}.sql;
# mysql创建用户:
create user '{{用户名}}'@'localhost' identified by '{{密码}}';
# mysql用户授权
GRANT ALL ON *.* TO '{{用户名}}'@'localhost';
uwsgi安装和调试
# 服务器中uwsgi安装: pip install uwsgi # 服务器中uwsgi运行: uwsgi --ini uwsgi.ini # 服务器中uwsgi停止1: uwsgi --stop uwsgi.pid # 服务器中uwsgi停止2: pkill -f uwsgi -9 # 服务器中uwsgi重启: uwsgi --reload uwsgi.pid # 如果启动有错,需要检查 配置文件的参数是否设置有误。 # 修改uwsgi配置文件:vim uwsgi.ini
项目文件中创建uwsgi.ini文件,配置如下:
#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:3000
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/{{项目根目录名}}/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名,注意用绝对路径
wsgi-file=/www/wwwroot/{{项目根目录名}}/{{wsgi.py文件所在目录名}}/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
启动运行uwsgi
#启动运行uwsgi uwsgi --ini uwsgi.ini显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功
nginx配置文件nginx.conf加入以下内容
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name quxuer.com www.quxuer.com; #改为自己的域名,没域名修改为127.0.0.1:80
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3000; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT {{wsgi.py所在的目录名}}.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /www/wwwroot/{{项目根目录名}}/; #项目路径
}
location /static/ {
alias /www/wwwroot/{{项目根目录名}}/static/; #静态资源路径
}
}
}