ubuntu django+uwsgi+nginx服务器部署
程序员文章站
2022-05-09 13:26:30
...
django配置
- 项目settings中要修改以下内容:
DEBUG = False # 上线必须是False,此时静态文件全部失效
ALLOWED_HOSTS = ['*'] # 允许任意ip访问
# 静态文件交给nginx处理,配置静态文件的路径
STATCI_ROOT = '/var/www/项目名/static'
STATIC_URL = '/static/'
# 静态文件的目录配置保留
- 1
- 2
- 3
- 4
- 5
- 6
- 在项目的根目录(和manage.py同级目录内),新建uwsgi.ini文件,具体内容如下:
[uwsgi]
# 使用nginx连接时使用
socket = 127.0.0.1:8080
# 项目目录,服务器上的所在路径
chdir = /home/hy/Desktop/ganji_webserver
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file = ganji_web/wsgi.py
processes = 4 # 四个工作进程
threads = 2 # 每个进程两个线程
master = True # 1个主进程
pidfile=uwsgi.pid # 进程id存放文件
daemonize=uwsgi.log # 进程守护日志
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
uwsgi的配置
安装
pip install uwsgi
启动测试,要在uwsgi.ini所在的目录下运行
uwsgi --ini uwsgi.ini
然后通过ps aux|grep uwsgi
查看是否有进程,应当一共5个。- 访问127.0.0.1:8080
有可能出现服务器错误的提示,是因为如果使用的虚拟环境,wsgi找不到虚拟环境的路径,要单独配置。
打开wsgi.py,在django.core.wsgi导入之前,将路径添加到sys.path中。注意找对自己的django所在位置
import sys
sys.path.append('~/.virtualenvs/ganji_web_dj/lib/python3.5/site-packages/django')
from django.core.wsgi import get_wsgi_application
- 1
- 2
- 3
- 4
- 配置上述完成后,需要重启服务器
- ps -e 查看进程对应的pid
uwsgi --stop uwsgi.pid
关闭uwsgi --ini uwsgi.ini
启动
nginx
- 官方下载,拷贝至服务器解压缩
- ubuntu安装时如果提示 error: the HTTP rewrite module requires the PCRE library,需要安装需要安装 pcre 包。
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
# 你可能还需要安装
sudo apt-get install openssl libssl-dev
- 1
- 2
- 3
- 4
- 进入解压的nginx目录内执行以下命令安装
./configure
make
sudo make install
- 1
- 2
- 3
- 默认安装到了/usr/local/nginx目录
- 进入上述目录启动:
sudo sbin/nginx
默认80端口 - 打开浏览器,输入地址127.0.0.1/访问看到nginx的欢迎页面
- 修改配置文件nginx/conf/nginx.conf
在server节点下添加新的location,指向uwsgi的ip和端口
# 将原有的location / 注释掉
location / {
# 将所有的参数转到uwsgi下
include uwsgi_params;
# uwsgi的ip和端口
uwsgi_pass 127.0.0.1:8080;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 静态文件处理。所有的静态文件交由nginx处理,不会将请求转到uwsgi
还是上边的nginx.conf文件,sudo vim conf/nginx.conf
location /static{
alias /var/www/项目名/static;
}
- 1
- 2
- 3
- 在服务器创建以上的项目目录
`sudo mkdir -vp /var/www/项目名/static - 修改目录权限
sudo chmod 777 /var/www/项目名/static
- 收集所有静态文件到static_root 指定目录
python manage.py collectstatic
查看 ‘/var/www/项目名/static’ 下已经保存的静态文件是否完整 - 重启nginx
sudo sbin/nginx -s stop # 关闭
sudo sbin/nginx # 启动
- 1
- 2
- 以上针对非root用户情况的设置
配置多个web应用
- 修改nginx.conf文件,直接添加多个server,以不同的端口对应不同的web服务,每个server中的uwsgi对应不同的端口
- 每个项目中的uwsgi.ini文件设置不同的端口号,同一个ip地址,启动了多个uwsgi服务进程(还有只启动一个进程,运行多个web应用的方法)
静态文件处理
- static_root 的设置是为了在运行collectstatic时,知道将静态文件收集到何处
- 如果直接在服务器上执行git pull 更新代码,静态文件直接使用
python manage.py collectstatic
即可,将静态文件更新至对应目录,浏览器访问时,所有静态文件都可获取到
指定nginx的配置文件
- 如果需要为某个应用单独创建一个配置文件,在/user/local/nginx/conf内单独创建一个文件夹vhost,在其内创建单位的conf文件,如:mao.conf,其中单独写server,如下所示:
server {
listen 8002;
server_name 192.168.5.199;
location /static {
autoindex on;
alias /data/tdsd/static/;
}
location / {
uwsgi_send_timeout 300;
uwsgi_connect_timeout 300;
uwsgi_read_timeout 1800;
proxy_pass http://127.0.0.1:8101;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 35s;
include uwsgi_params;
access_log /var/logs/tdsd_server.log;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 然后在/user/local/nginx/conf内的nginx.conf中的http**最后一行**加上需要的配置的路径:
include /usr/local/nginx/conf/v_host/*.conf;
root用户
- 此时,需要有python和对应python版本的uwsgi存在,很可能会出现找不到python解释器的情况
- 安装uwsgi时,注意使用pip3,否则安装的是对应python2版本的
-
uwsgi --python-version
查看python版本
上一篇: 帝国cms目录结构分享,帝国cms目录
下一篇: PHPZip的使用