记一次Django+uWSGI+nginx部署流程

2023-03-14 21:05:00
pjd
原创 352
摘要:django部署比较繁琐,记录下来供后续参考

准备工作:

# 导出第三方模块: 
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/; #静态资源路径
        }
    }
}