详解Centos7服务器上使用Uwsgi+Nginx部署Django项目
前提:项目可以正常运行,使用python manage.py runserver 开启项目后,在本地能够访问的到!
1.Uwsgi部署
uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。
- 进入项目虚拟环境安装uwsgi
-
pip install uwsgi
- 配置uWSGI,在项目目录下创建uwsgi.ini文件,其中服务器地址和端口号要输入你自己的,并且要对外开启端口,配置如下:
-
[uwsgi] #使用nginx连接时使用 #socket=192.*.*.*:8000 #直接做web服务器使用 http=192.*.*.*:8000 #项目目录 chdir=/www/projects/项目1 #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=项目1/wsgi.py processes=4 threads=2 master=True pidfile=uwsgi.pid daemonize=uwsgi.log
- 启动uwsgi
-
uwsgi --ini uwsgi.ini
- 查看uwsgi启动情况
-
ps ajx|grep uwsgi
- 在浏览器输入服务器网址和端口号,如果可以正常访问则配置成功!
-
#你自己的服务器地址和端口号 http://192.*.*.*:8000/
- 关闭uwsgi(不想使用的话可以用此命令关闭)
-
uwsgi --stop uwsgi.pid
2.Nginx部署
使用nginx的作用主要包括负载均衡、反向代理。
- 在uwsgi.ini中将配置中启用socket,禁用http。
-
[uwsgi] #使用nginx连接时使用 socket=192.*.*.*:8000 #直接做web服务器使用 #http=192.*.*.*:8000 #项目目录 chdir=/www/projects/项目1 #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=项目1/wsgi.py processes=4 threads=2 master=True pidfile=uwsgi.pid daemonize=uwsgi.log
- 关闭uwsgi,并重新开启
-
# 关闭 uwsgi --stop uwsgi.pid # 开启 uwsgi --ini uwsgi.ini
- 下载linux版的nginx后上传到服务器上,解压缩。nginx下载地址http://nginx.org/
- 下载后上传到自己的服务器上再进行解压(进入服务器中存放nginx压缩包的目录进行nginx解压)
-
tar zxvf nginx-1.6.3.tar.gz
- 进入解压后的nginx-1.6.3目录,依次执行以下命令进行编译安装
-
# 编译安装 ./configure make sudo make install
- 默认安装到/usr/local/nginx/目录,进入此目录
-
cd /usr/local/nginx/
- nginx默认的是80端口,若在启动时报错,很可能就是端口被占用了,我们更改一下端口即可。
- 若启动正常,按照以下步骤执行
- 启动nginx
-
sudo sbin/nginx
- 查看nginx进程
- 打开浏览器,输入如下网址: http://192.*.*.*:80 (80 是nginx的默认端口,若不能访问,先查看一下服务器是否对外开启了80端口)
- 如果可以正常访问则说明nginx安装成功,接下来就可以配置我们的项目。
- 关闭nginx
-
sudo sbin/nginx -s stop
- 没有报错的可以直接跳过下面的步骤
- *******************************************************************************************************************************************
- 如果报错:80端口被占用,我们则需要重新为nginx开启一个端口,我这里以端口8001为例
- 在服务器上开启8001端口
-
# 运行命令: firewall-cmd --get-active-zones # 运行完成之后,可以看到zone名称 # 开启端口号 firewall-cmd --zone=public --add-port=8001/tcp --permanent # 重启防火墙,运行命令: firewall-cmd --reload # 查看端口号是否开启,运行命令: firewall-cmd --query-port=8001/tcp
- 修改打开conf/nginx.conf文件
-
vim /usr/local/nginx/conf/nginx.conf
- 将server节点下 listen 的端口号由80改为8001
- 重新开启nginx即可
-
sudo sbin/nginx
- *******************************************************************************************************************************************
- nginx能够正常开启之后,我们就可以让nginx指向我们的uwsgi项目
- 打开conf/nginx.conf文件
-
vim /usr/local/nginx/conf/nginx.conf
- 在server节点下添加新的location项,指向uwsgi的ip与端口。
-
location / { #将所有的参数转到uwsgi下 include uwsgi_params; #uwsgi的ip与端口 uwsgi_pass 192.*.*.*:8000; }
- 并在server节点下添加新的location项,用于处理静态文件。(所有的静态文件都会由nginx处理,不会将请求转到uwsgi)
-
location /static { alias /www/projects/项目1/static/; }
- 添加完成后是这样的结构
-
....... keepalive_timeout 65; #gzip on; server { listen 8001; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} location / { #将所有的参数转到uwsgi下 include uwsgi_params; #uwsgi的ip与端口 uwsgi_pass 192.*.*.*:8000; } location /static { alias /www/projects/项目1/static/; } .......
- 修改项目1中static目录的权限。
-
sudo chmod 777 /www/projects/项目1/static/
- 修改 项目1/项目1/settings.py文件,添加 STATIC_ROOT
-
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATIC_URL = '/static/'
- 收集所有静态文件到static_root指定目录。在项目目录下执行下面的语句,按YES下一步
-
python manage.py collectstatic
- 重新启动nginx服务(确保uwsgi服务已经开启)
-
# 关闭 sudo sbin/nginx -s stop # 开启 sudo sbin/nginx
- 在本地浏览器中输入http://192.*.*.*:8001,如果可以正常访问则部署成功。如果访问失败请查看(8000、80或8001端口是否对外开启),uwsgi和nginx服务是否成功开启!
部署完毕,祝君成功!