Ubuntu下nginx+uwsgi部署Django项目

[TOC]

Ubuntu下nginx+uwsgi部署Django项目


项目环境

ubuntu 18.04
django 2.1.7
Python 3.6.6

一、安装uwsgi,及配置

  • Xshell连接远程服务器,进入虚拟环境,输入命令
pip install uwsgi

或者通过pycharm安装也可以,打开settings选项卡
Ubuntu下nginx+uwsgi部署Django项目_第1张图片
通过pycharm安装
  • 在项目目录下创建配置文件 wang_blog/uwsgi.ini
# wang_blog/uwsgi.ini
[uwsgi]
# 使用nginx连接时使用,和我一样就行
# socket = 127.0.0.1:8000  
# 项目的绝对路径,在命令行输入pwd查看
chdir = /home/pyvip/wang 
# 直接做web服务器使用,写你自己的服务器ip地址
http = 192.168.159.128:8000 
# 项目名.wsgi
module = lublog.wsgi 
# settings文件所在路径
wsgi-file = /home/pyvip/wang/wang/wsgi.py
# 不用修改
master = true
# 指定启动的工作的进程数
processes = 4
# 指定工作进程中的线程数
threads = 2
#monitor uwsgi status  通过该端口可以监控 uwsgi 的负载情况
stats = 127.0.0.1:9191
# 后台运行,并输出日志
daemonize = /var/log/uwsgi.log
# 设置虚拟环境路径
virtualenv =  /home/pyvip/.virtualenvs/my_blog/

请反复确认路径是否正确,ip地址是否正确!!!
请反复确认路径是否正确,ip地址是否正确!!!
请反复确认路径是否正确,ip地址是否正确!!!

  • 进入项目目录,使用uwsgi命令启动项目
    注:uwsgi.ini一定要在项目目录下
(wang) pyvip@VIP:~$ cd /home/pyvip/wang
(wang) pyvip@VIP:~/wang$ ls
db.sqlite3  manage.py  my_blog  static  templates  uwsgi.ini  wang
(wang) pyvip@VIP:~/wang$ uwsgi --ini uwsgi.ini

看到下面开启了4个进程就成功了,根据配置不同,显示的进程数也不同

(wang) pyvip@VIP:~$ ps aux | grep uwsgi
laowang    483  0.0  0.1  14428  1072 pts/0    S+   12:31   0:00 grep --color=auto uwsgi
laowang  29873  0.3  6.2 189196 59272 ?        S    12:28   0:00 uwsgi --ini uwsgi.ini
laowang  29895  0.0  5.3 262928 50592 ?        Sl   12:28   0:00 uwsgi --ini uwsgi.ini
laowang  29897  0.0  5.3 262928 50592 ?        Sl   12:28   0:00 uwsgi --ini uwsgi.ini
laowang  29899  0.1  6.3 273896 59836 ?        Sl   12:28   0:00 uwsgi --ini uwsgi.ini
laowang  29900  0.0  6.2 273896 59260 ?        Sl   12:28   0:00 uwsgi --ini uwsgi.ini

在浏览器输入ip地址加端口号,启动成功!!!
Ubuntu下nginx+uwsgi部署Django项目_第2张图片

这个时候是没有图片显示的,如果有就是你浏览器缓存没清除,接下来配置nginx就可以显示图片了

  • uwsgi停止命令sudo pkill -f uwsgi -9

二、安装nginx,及配置

  • xshell 中输入命令
sudo apt-get update
sudo apt-get install nginx
  • 添加配置文件到项目目录下,除了修改注释的内容,其他和我一样就行
# /home/pyvip/wang/mysite_nginx.conf
server {
    listen      80;
    # 写你的IP地址,或者域名 .xxxxx.com 都行;域名解析备案什么的不说了
    server_name 192.168.159.128;
    charset     utf-8;

    location /static {
        # 写你静态文件的目录
        alias /home/pyvip/wang/static;
    }

    location / {
        uwsgi_pass  127.0.0.1:8000;
        include     /etc/nginx/uwsgi_params; 
    }
}
  • /etc/nginx/sites-enabled 目录下创建本文件的连接,使nginx能够使用它:
(wang) pyvip@VIP:~/wang$ sudo ln -s /home/pyvip/wang/mysite_nginx.conf /etc/nginx/sites-enabled/
(wang) pyvip@VIP:~/wang$ ls /etc/nginx/sites-enabled/
default  mysite_nginx.conf
  • 修改uwsgi.ini,启动socket,关闭http
# wang_blog/uwsgi.ini
[uwsgi]
# 使用nginx连接时使用
socket = 127.0.0.1:8000
# 项目的绝对路径,在命令行输入pwd查看
chdir = /home/pyvip/wang
# 直接做web服务器使用
# http = 192.168.159.128:8000
# 项目名.wsgi
module = wang.wsgi
# settings文件所在路径
wsgi-file = /home/pyvip/wang/wang/wsgi.py
# 不用修改
master = true
# 指定启动的工作的进程数
processes = 4
# 指定工作进程中的线程数
threads = 2
# 设置虚拟环境路径
virtualenv =  /home/pyvip/.virtualenvs/my_blog/
  • 修改项目settings文件,和我一样
DEBUG = False

ALLOWED_HOSTS = ['*']

# 这个文件路径原来配置过就不用配置了,或者用我这个,把你的注释掉
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 

  • 在项目文件夹下输入命令python manage.py collectstatic,以保证静态文件都在static下,如果后面图片显示不正确,可能就是没输入此命令
  • 检测nginx配置是否出错,然后重启nginx,如果报错请看文末
(wang) pyvip@VIP:/etc/nginx/sites-enabled$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(wang) pyvip@VIP:/etc/nginx/sites-enabled$ sudo service nginx restart
(wang) pyvip@VIP:/etc/nginx/sites-enabled$ ps aux | grep nginx
root       3510  0.0  0.0 140628  1532 ?        Ss   09:11   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   3511  0.0  0.3 143332  6168 ?        S    09:11   0:00 nginx: worker process
www-data   3512  0.0  0.3 143332  6168 ?        S    09:11   0:00 nginx: worker process
pyvip      3514  0.0  0.0  21536  1004 pts/0    S+   09:11   0:00 grep --color=auto nginx

配置成功,重启成功

三、启动uwsgi,访问域名或ip地址

  • 进入项目目录,命令行输入启动命令
(wang) pyvip@VIP:/etc/nginx/sites-enabled$ cd /home/pyvip/wang/
(wang) pyvip@VIP:~/wang$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
  • 访问ip
    注:不需要输入端口号
    成功!图片也可以加载了,到此部署就完成了。

写在最后:

  • 作者踩过的坑,nginx报错
(wang) pyvip@VIP:/etc/init.d$ sudo nginx -t
nginx: [emerg] open() "/etc/nginx/sites-enabled/mysite_nginx.conf" failed (2: No such file or directory) in /etc/nginx/nginx.conf:62
nginx: configuration file /etc/nginx/nginx.conf test failed

sudo nginx -t 失败可能是配置出错,确认mysite_nginx.conf配置无问题,再检查 /etc/nginx/sites-enabled/ 下的配置文件和项目目录下的配置文件是否一致,蓝色文件名则说明是一致的。

作者原创,转载请注明出处!我的博客地址 www.bloglu.cn 专注技术文章,风景美图,学习资源分享。
如果本文对你有帮助,点个赞支持一下作者吧!有任何问题欢迎下方留言。

你可能感兴趣的:(Ubuntu下nginx+uwsgi部署Django项目)