centos7 django uwsgi nginx 部署

Catalogue
  1. 1. 安全组,防火墙设置
  2. 2. 远程服务器环境部署
    1. 2.1. 验证django项目可以运行:
  3. 3. 第四步配置uwsgi:
  4. 4. 第五步生成将项目的静态文件全部集中到一个文件夹:
  5. 5. 配置nginx:
    1. 5.1. 配置nginx.conf:
    2. 5.2. 首先设置nginx的运行用户为root,解决nginx出现403 forbidden的问题,就是静态文件加载的时候403,css,图片,js都加载不了,在这里浪费一个下午。
  6. 6. 验证配置
    1. 6.1. !!注意:如果出现静态文件无权访问的情况,vi /etc/nginx/nginx.conf,在第一行添加user root,然后再次重启nginx即可。

2 Django + uswgi + nginx 将自己本地学习的博客部署到阿里云

参考网址:

https://blog.csdn.net/fengzq15/article/details/78633827

  1. 各软件版本

    1
    2
    3
    4
    5
    centos 7.4
    python 3.6 #virtualenv
    django 1.11.7
    uwsgi 2.0.17.1
    nginx 1.12.2

    前言

    不要问我为什么要重复造轮子!开始我也不明白,为什么那么多人重复去造轮子,不过当你在浩瀚如星空一样的教程里面谷歌,百度一天,就是找不到属于你的那一颗,呵呵…..还是做个自己的轮子自己滚吧。

  2. 安全组,防火墙设置

    进入到阿里云控制面板的安全组标签,在入口标签开启80,443,8000端口,出方向默认无限制。

    然后关闭 centos7 的 firewalld 防火墙,调试好再开启防火墙,开放端口。

    1
    2
    systemctl stop firewalld
    systemctl status firewalld #查看防火墙运行状态
  3. 远程服务器环境部署

    项目目录:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --root
    --project
    --blog
    --blog
    --settings.py
    --urls.py
    --wsgi.py
    --app
    --manage.py
    --uwsgi.ini(这个在后面才配置)
    --nginx.conf(可以先配置好然后ln过去,我是直接配置了)

    安装python3和pip3 参考另外一篇文章

    安装virtualenv 和virtualenvwrapper 管理虚拟环境,虚拟环境为:maguadj , 环境的导入导出

    1
    2
    3
    4
    5
    6
    #本地虚拟环境执行
    workon maguadj
    pip freeze > requirements.txt
    #服务器端执行
    workon maguadj #服务器进入虚拟环境
    pip install -r requirements.txt
    验证django项目可以运行:

    在服务器端blog的setting.py 里面找到并设置

    1
    2
    3
    DEBUG = True

    ALLOWED_HOSTS = ['*'] #设置允许登入的主机

    然后运行测试服务器

    1
    2
    3
    workon maguadj   #进入虚拟环境
    python3 manage.py runserver 0.0.0.0:8000 #注意和平常在本地测试的区别
    #在本地电脑输入远程服务器公网ip:8000,(确保你的服务器的8000端口已经开放),来验证是否可以访问网站。
  4. 第四步配置uwsgi:

    安装uwsgi: !!注意:在uwsgi安装之前要确定是否安装uwsgi的依赖库,如g++, python-devl等,否则安装失败

    1
    pip3 install uwsgi

    验证uwsgi:

    1
    2
    #进入到和django项目的manage.py所在的文件夹,运行如下命令:
    uwsgi --http :8000 --module Sport.wsgi

    !!注意:http和:之间有空格,blog换成你自己项目的名字。 用本地电脑浏览器登录服务器ip:8000来确定是否运行成功。

    编辑uwsgi配置文件,并验证:

    1
    2
    3
    find / -name django #查看自己的虚拟环境目录
    #/root/.virtualenvs/maguadj/lib/python3.6/site-packages/django
    vim uwsgi.ini
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [uwsgi]
    socket = :8000
    #http = :8000
    chdir = /home/tulin/project/blog
    home = /root/.virtualenvs/maguadj
    module = blog.wsgi
    master = true
    processes = 10
    chmod-socket = 664
    vacuum = true

    然后在uwsgi.ini所在目录运行

    1
    2
    workon maguadj #进入到虚拟环境
    uwsgi --ini uwsgi.ini

    正确运行出现如下信息

    1
    2
    3
    4
    5
    6
    7
    8
    …… 
    * uWSGI is running in multiple interpreter mode *
    spawned uWSGI master process (pid: 7158)
    spawned uWSGI worker 1 (pid: 7160, cores: 1)
    spawned uWSGI worker 2 (pid: 7161, cores: 1)
    spawned uWSGI worker 3 (pid: 7162, cores: 1)
    spawned uWSGI worker 4 (pid: 7163, cores: 1)
    ......

    用本地电脑登录远程服务器8000端口,这个是用来验证其他电脑能不能登录服务器运行的项目,如果不能登录,将uwsgi.ini里面的socket改为http,若这样登录成功就证明没问题。然后记得把http改回socket,这时应该可以顺利打开网页。

  5. 第五步生成将项目的静态文件全部集中到一个文件夹:

    首先修改settings.py,添加如下内容:

    1
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    我的设置

    1
    2
    3
    4
    5
    STATIC_URL = '/static/'
    STATIC_ROOT = '/home/tulin/project/blog/static'
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    )

    然后在manage.py 目录运行

    1
    2
    python3 manage.py collectstatic
    #完成后,会发下目录下多了一个static文件夹。所有静态文件会被拷贝到这里
  6. 配置nginx:

    安装nginx

    1
    2
    3
    4
    5
    yum install nginx
    systemctl status nginx
    systemctl start nginx
    #systemctl stop nginx
    systemctl restart nginx

    运行nginx后用自己电脑浏览器直接输入远程服务器地址不带端口,应该会出现nginx的欢迎界面。

    配置nginx.conf:
    首先设置nginx的运行用户为root,解决nginx出现403 forbidden的问题,就是静态文件加载的时候403,css,图片,js都加载不了,在这里浪费一个下午。

    参考网址:https://segmentfault.com/a/1190000010998164

    1
    2
    3
    4
    vim /etc/nginx/nginx.conf
    #user nginx; 找到这一行修改为下面的user root
    #user root;
    service nginx restart; #重启nginx

    nginx的配置文件默认是/etc/nginx/nginx.conf ,但是我们可以在/etc/nginx/conf.d文件夹里面创建自己的配置文件,在nginx启动的时候也会加载,注意要是.conf结尾的文件

    1
    vim /etc/nginx/conf.d blog.conf

    内容如下,/home/tulin/project/blog/static换成你自己的路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    upstream django {
    server 127.0.0.1:8000;
    }

    server {
    listen 80;
    server_name localhost;
    charset utf-8;

    client_max_body_size 75M;

    location /static {
    alias /home/tulin/project/blog/static;
    }

    location / {
    uwsgi_pass django;
    include /etc/nginx/uwsgi_params;
    }
    }

    自己的版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    server {
    listen 80;
    server_name xx.xx.xx.xx;
    charset UTF-8;
    access_log /var/log/nginx/myweb_access.log;
    error_log /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / {
    include uwsgi_params;
    uwsgi_pass xx.xx.xx.xx:8000;
    uwsgi_read_timeout 2;
    }
    location /static {
    expires 30d;
    autoindex on;
    add_header Cache-Control private;
    alias /home/tulin/project/blog/static;
    }
    }

    重新启动nginx:

    1
    systemctl restart nginx
  7. 验证配置

    1
       

    回到/home/tulin/project/ 文件夹下,输入uwsgi –ini uwsgi.ini启动项目,然后在本地电脑登录服务器ip地址即可(不用指定端口,现在是默认访问80端口,而非8000端口)。

    !!注意:如果出现静态文件无权访问的情况,vi /etc/nginx/nginx.conf,在第一行添加user root,然后再次重启nginx即可。
  8. 21

  9. 121