Django+uWSGI+Nginx+supervisor部署Django项目

安装Python3.8

安装编译相关工具
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel python-devel
yum install libffi-devel -y
下载安装包并解压
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
tar -xvf Python-3.8.0.tar.xz
编译安装python并创建软连接
mkdir /usr/local/python3
cd Python-3.8.0
./configure --prefix=/usr/local/python3
make && make install

ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
测试
python3 -V
pip3 -V
使用虚拟环境管理器创建虚拟环境
pip3 install --upgrade pip  # 升级pip
pip3 install virtualenvwrapper
# 安装后找到virtualenvwrapper.sh文件,在下面要用
mkdir /usr/local/pythonvirtualenvs

vi ~/.bashrc

export WORKON_HOME=/usr/local/pythonVirtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh

保存退出后执行 source ~/.bashrc使配置生效
# 此时可以使用管理工具workon查看虚拟环境

# 创建虚拟环境
mkvirtualenv shop_admin
测试虚拟环境
# 查看
workon
#使用某个虚拟环境
workon shop_admin
#退出
deactivate
将项目导入到服务器
安装依赖
pip install -r requirements.txt
在项目根目录下新增uwsgi配置文件uwsgi.ini
[uwsgi]
chdir=/usr/local/shop_admin
#the local unix socket file than commnuincate to Nginx
socket=127.0.0.1:8001
# the virtualenv directory(full path)
home=/usr/local/pythonVirtualenvs/shop_admin/
module=adminDemo.wsgi:application
master=True
pidfile=/home/shop_admin/shop_admin.pid
# 使用supervisor进行监控时不能使用守护进程,否则supervisor启动uwsgi后无发监控uwsgi进程
# daemonize = /home/shop_admin/shop_admin.log

processes = 4
max-requests=5000
# daemonize=/var/log/uwsgi/shop_admin.log
chmod-socket=666
vacuum=True
# 修改代码后自动重启
# py-autoreload = 1
  • 测试
uwsgi --ini uwsgi.ini

# 查看
ps -aux | grep uwsgi
# 看到多个uwsgi进程即没有问题
安装nginx
yum install epel-release
yum install nginx
在/etc/nginx/conf.d文件夹下加入配置文件shop_admin.conf
# 将nginx用户改为root
vi /etc/nginx/nginx.conf
将user nginx 修改为user root

# 到/etc/nginx/conf.d目录下
vi shop_admin.conf

# 加入如下配置
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

server{
    listen 80;
    server_name 192.168.154.129;
    charset utf-8;
    client_max_body_size 75M;  #上传文件大小限制

    # 网站静态文件所在目录
    location /static{
        alias /usr/local/shop_admin/static;
    }

    # 上传文件所在目录
    location /media{
        alias /usr/local/shop_admin/media;
    }

    # 动态文件交给uwsgi处理
    location / {
        uwsgi_pass 127.0.0.1:8001;
        include /etc/nginx/uwsgi_params;
    }
}

启动nginx
systemctl enable nginx && systemctl start nginx
配置supervisor
  • 查看默认模板语法
echo_supervisord_conf
  • 生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
  • 新建supervisord管理的配置目录
mkdir  /etc/supervisor/
  • 编辑supervisord.conf配置文件
vi supervisord.conf
# 将下面配置
;[include]
;files = relative/directory/*.ini
#改成 ---切记要将[include]前面注释也去掉
[include]
files = /etc/supervisor/*.conf

/tmp/supervisor.sock 改成 /var/run/supervisor.sock, /tmp/supervisord.log 改成 /var/log/supervisor.log, /tmp/supervisord.pid 改成 /var/run/supervisor.pid
# 添加权限
chmod 777 /var/run
chmod 777 /var/log
# 创建supervisor.sock
touch /var/run/supervisor.sock
chmod 777 /var/run/supervisor.sock
  • 在 /etc/supervisor/文件夹下加入需要管理的uwsgi配置文件uwsgi.conf
# 加入如下配置
[program:uwsgi]
# uwsgi的启动命令
command=/usr/local/pythonVirtualenvs/shop_admin/bin/uwsgi --ini /usr/local/shop_admin/uwsgi.ini
user=root
# uwsgi关闭后是否自动重启
autorestart=true
#是否随supervisor启动而启动
autostart=true
#启动失败自动重试次数,默认是 3
startretries=3
#把 stderr 重定向到 stdout,默认 false
redirect_stderr=true
#启动 5 秒后没有异常退出,就当作已经正常启动了
startsecs=5
#日志文件存放目录, 此目录需要新建
stdout_logfile=/var/log/django/supervisor.log
#是否干掉程序的所有进程(包括子进程)
stopasgroup=true
killasgroup=true
3程序启动优先级,若有多个进程管理时使用,默认-1
priority=100
启动supervisor
# 启动,如果echo_supervisord_conf > /etc/supervisord.conf不是将配置文件生成到默认路径,在每次使用supervisorctl 管理工具时需要指定配置文件:比如supervisorctl -c /xxx/supervisord.conf restart 进程名
supervisord -c /etc/supervisord.conf
# kill所有supervisor进程
pkill supervisord
# 查看所有进程ID
ps -aux | grep supervisord
#查看所有进程的运行状态
supervisorctl status

#查看某一进程的运行状态
supervisorctl status 进程名

#启动某一进程
supervisorctl start 进程名

#启动所有进程
supervisorctl start all

#停止某一进程
supervisorctl stop 进程名

#停止所有进程
supervisorctl stop all

#重启某一进程
supervisorctl restart 进程名

#重启所有进程
supervisorctl restart all

#新增进程后,更新进程(不影响其他进程运行)
supervisorctl update

#修改配置和新增进程后,重启所有进程
supervisorctl reload
在浏览器控制进程
# 编辑supervisord.conf将下面两行注释掉
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001
  • 在浏览器输入ip+端口即可在网页查看supervisor管理的进程
写在最后
  • 安装mysqlclient时报错OSError: mysql_config not found解决方法
# 创建软连接
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
# 下载依赖
yum install mysql-devel
  • 启动nginx后访问后台地址出现502网关错误
查看nginx日志,是否为connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream
改原因是因为SeLinux的限制
解决方法:
setsebool -P httpd_can_network_connect 1

常用命令
# 检查nginx配置文件是够有错误
nginx -t

# 重启nginx
service nginx restart

# 查看uwsgi进程
ps -aux | grep uwsgi

# 正常关闭uwsgi进程
uwsgi --stop /home/mysite_uwsgi/master.pid

# 强制关闭全部uwsgi进程
ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9
killall -s INT uwsgi

# 重新加载uwsgi
uwsgi --reload /home/mysite_uwsgi/master.pid
参考文档

建站指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值