说明:
- 项目名称:mysite
- 项目路径:/mysite
- 主应用:mysite
- python版本:python3.6.8
- django版本:2.2
- 项目数据库:mysql 8.0.15
1. 运行测试服务器确保项目能正常启动
cd /mysite
python manage.py runserver
查看项目是否能正常启动,如果出现RuntimeError: cryptography is required for sha256_password or caching_sha2_password 错误,则需要安装cryptography,然后重启服务:
pip install cryptography
2. 安装Nginx
sudo yum install epel-release
sudo yum install python-devel
sudo yum install nginx
SELinux设置为宽容模式
如果不讲SELinux设置为宽容模式,Nginx会出现403 forbidden 错误。
- 通过命令设置
sudo setenforce 0
- 通过修改配置文件设置
vi /etc/selinux/config
SELINUX=enforcing #将enforcing修改为disabled或enforcing或permissive
修改完后需要重新启动。
3. 安装uWSGI
3.1 安装
sudo pip install uwsgi
3.2 测试项目
uwsgi --http :8080 --chdir /mysite --home=/mysite/env --module mysite.wsgi
3.3 使用UNIX socket代替TCP端口
在/mysite目录下创建mysite.sock并赋予777权限
touch mysite.sock
chmod 777 mysite.sock
使用socket启动uWSGI
uwsgi --socket mysite.sock --module mysite.wsgi [--chmod-socket=666]
3.4 使用配置文件启动uWSGI
在/mysite 下新建mysite_uwsgi.ini,并写入以下内容
[uwsgi]
chdir = /mysite
module = mysite.wsgi
home = /mysite/venv/
master = true
processes = 2
threads = 4
socket = /mysite/mysite.sock
chmod-socket = 664
vacuum = true
使用ini文件启动uWSGI
uwsgi --ini mysite_uwsgi.ini
4. 安装supervisor来管理Nginx
supervisor是一个专门用来管理进程的工具,uwsgi可以后台运行但其启动与关闭很不方便,因此我们用supervisor来管理uWSGI进程。
4.1 安装
sudo pip install supervisor
4.2 配置
- 生成默认配置文件
sudo echo_supervisord > /ect/supervisord.conf
- 修改配置文件
[program:demo]
command=/usr/local/bin/uwsgi --http :8080 --chdir /mysite --module mysite.wsgi
#如果使用配置文件启动则使用command=/usr/local/bin/uwsgi --ini /mysite/mysite_uwsgi.ini
directory=/mysite
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
- supervisor启动
supervisord -c /etc/supervisord.conf
- 管理项目进程(启动、重启、停止)
supervisorctl -c /ect/supervisord.conf [start|stop|restart] [program-name|all]
- 设置supervisor自启动
修改 /etc/rc.d/rc.local 文件,在文件最后增加一行:
usr/local/bin/supervisord -c /etc/supervisord.conf
5.配置Nginx
- 修改/etc/nginx/nginx.conf,在http模块中增加server:
server {
listen 8080;
server_name 127.0.0.1; #或者配置为域名 server_name www.example.com;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /mysite/media;
}
location /static {
alias /mysite/static;
}
location / {
uwsgi_pass unix:///mysite/mysite.sock;
include /etc/nginx/uwsgi_params;
}
}
- 测试配置
sudo service nginx configtest
或 /path/to/nginx -t
- **重启Nginx服务
sudo service nginx reload
或 sudo service nginx restart
或 /path/to/nginx -s reload
- 域名无法访问
如果服务器名配置的不是IP地址,而是域名(如www.example.com),则会出现域名无法访问的情况,解决办法参考 https://blog.csdn.net/loveangel1/article/details/89335603