Django部署

  • docker架构在这里插入图片描述

nginx+uwsgi+supervisor+ubuntu部署Flask项目:
https://mp.weixin.qq.com/s/xrFNAvRCDIiLdXg-p_DZkw

centos7-下通过nginx-uwsgi部署django项目:
http://projectsedu.com/2017/08/15/centos7-%E4%B8%8B%E9%80%9A%E8%BF%87nginx-uwsgi%E9%83%A8%E7%BD%B2django%E5%BA%94%E7%94%A8/

  • 在开发机上的准备工作
  1. 确认项目没有bug

  2. 用pip freeze > requirements.txt将当前环境包导出到requirements.txt文件中,方便在部署的时候安装;
    后期拿到requirements.txt文件在待部署的环境下执行pip install requirements.txt就能将前期环境的包安装完成。(即完成环境搭建)

  3. 使用Git将项目上传到服务器上:

    git init
    git remote add origin https://gitee.com/fone933/deploy_test.git
    git add .
    git commit -m 'first commit'
    git pull origin master --allow-unrelated-histories
    git push origin master
    

pip install xxx出现SSLError
使用豆瓣源安装:pip install -i https://pypi.doubanio.com/simple/ virtualenv

yum命令执行30行报错SyntaxError
原因: yum包管理是使用python2.x写的,将python2.x升级到python3.x以后,由于python版本语法兼容性导致问题出现
解决办法:
修改yum配置文件,将python版本指向以前的旧版本
vim /usr/bin/yum
#!/usr/bin/python2.7


  • 在服务器上的操作(Ubuntu上使用apt命令安装,centos使用yum命令):
  1. 安装好项目用到的python版本
    yum install -y python
    yum install -y python-pip
    pip install --upgrade pip
  2. 安装virtualenv以及virutalenvwrapper并创建虚拟环境:
    pip install virtualenv
    pip install virtualenvwrapper
    yum -y install vim
    vim ~/.bashrc
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
  3. 安装git:
    yum -y install git
  4. 允许远程连接安装OpenSSH:
    yum -y install openssh-server openssh-client
    service ssh restart
  5. 安装MySQL服务器和客户端:
    yum install -y mysql-server mysql-client
    yum install libmysqld-dev
  6. 进入虚拟环境中,然后进入到项目所在目录,执行命令pip install -r requirements.txt安装相应的包。
  7. 在mysql中创建相应的数据库;
  8. 执行python manage.py migrate命令将迁移文件映射到数据库中,创建相应的表。
  9. 设置ALLOW_HOST为当前机器IP或域名。
  10. 执行python manage.py runserver 0.0.0.0:8000,然后在本机浏览器中输入http://服务器IP:8000访问下网站所有页面,确保所有页面都没有错误。
  11. 设置DEBUG=False,避免如果网站产生错误而将错误信息暴露给用户。
  12. 收集静态文件:python manage.py collectstatic
  • centos7防火墙开放端口:

firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload

  • 安装uwsgi:用于加载非静态文件
  1. uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他来完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过pip install uwsgi就可以安装。(必须安装在系统级别环境下)
  2. 使用命令uwsgi --http :8000 --module [项目名].wsgi --virtualenv=/root/.virtualenvs/django-env-py2。用uwsgi启动项目,如果能够在浏览器中访问到这个页面,说明uwsgi可以加载项目。

编写uwsgi配置文件:
在项目路径下创建 .ini 文件(如 obj_uwsgi.ini),写入一下配置:

```
[uwsgi]
; Django项目路径,必须全部用绝对路径
chdir           = /root/commit/deploy_test
; Django的.wsgi文件
module          = dobj.wsgi
; python虚拟环境路径
home            = /home/.virtualenvs/py2-env
; 指定端口,如果配置了socket就不用指定http
; http           = :8000
; 主进程
master          = true
; 最大数量的工作进程
processes       = 10
; socket文件路径,绝对路径
socket          = /root/commit/deploy_test/dobj.sock
; 设置socket的权限
chmod-socket    = 666
; 退出时是否清理环境
vacuum          = true
; 表示注释
```

注意如果Nginx报权限不足无法连接socket文件,检查一下socket文件及其所在目录的权限。
然后使用命令uwsgi --ini obj_uwsgi.ini看看是否还能启动项目。

  • 安装Nginx:用于加载静态文件
  1. Nginx是web服务器,用来加载静态文件和接收http请求。通过命令yum -y install nginx安装。
  2. Nginx常用命令:
    service nginx start 启动Nginx
    service nginx stop 关闭Nginx
    service nginx restart 重启Nginx
  • 收集静态文件:
    静态文件应该让Nginx来加载。首先确保setting.py文件中有配置STATIC_ROOT,这个配置用于指定静态文件要放在哪个目录下。执行python manage.py collectstatic来收集所有静态文件,将静态文件放在指定的目录(STATIC_ROOT)下。

  • 编写Nginx配置文件:
    在/etc/nginx/conf.d目录下,新建一个文件(obj.conf),然后写入配置信息:

    # 配置与uwsgi同步的socket文件
    upstream dobj {
        server unix:///root/commit/deploy_test/dobj.sock;
    }
    
    # 配置服务器
    server {
        # 监听的端口
        listen 80;
        # 允许访问的IP、域名
        server_name 192.168.1.6;
        charset utf-8;
        # 最大可上传多大的文件
        client_max_body_size 75M;
        # 静态文件访问Url
        location /static {
            # 静态文件地址
            alias /root/commit/deploy_test/static_dist;
        }
        # 配置发送所有静态文件请求到Django服务器
        location / {
            uwsgi_pass dobj;
            # Nginx下uwsgi_params地址
            include /etc/nginx/uwsgi_params;
        }
    }
    
    • 注意:uwsgi与Nginx是通过socket进行通信。配置文件中指定的.sock文件会自动创建,两者中的配置文件指定的套接字文件必须一致。
    • 写完配置文件后,为了测试配置文件是否设置成功,运行命令:service nginx configtest,如果返回Ok则说明没有问题。
    • 每次修改完配置文件,都要运行service nginx restart

  • 使用supervisor管理uwsgi进程:
    使用supervisor管理uwsgi,可以在uwsgi发生意外挂掉时自动重启。
  1. supervisor安装在系统级别环境:
    python2版本安装:pip install supervisor
    注意:supervisor默认安装(pip install supervisor)无法正常安装在python3环境中,因为默认supervisor只能运行在python2版本下,此时要用以下命令安装python3版本下的supervisor 4.0.0:
    pip install -i https://pypi.doubanio.com/simple/ git+https://github.com/Supervisor/supervisor

  2. 在项目的根目录下创建supervisor配置文件.conf(obj_supervisor.conf),编写一下配置信息:

    #  supervisor的程序名
    [program:dobj]
    # supervisor执行的命令
    command=uwsgi --ini obj_uwsgi.ini
    # 项目的目录
    directory = /root/commit/deploy_test
    # 开始的时候等待多少秒
    startsecs=0
    # 停止的时候等待多少秒
    stopwaitsecs=0
    # 自动开启
    autostart=true
    # 程序挂了后自动重启
    autorestart=true
    # 输出的log日志
    stdout_logfile=/root/commit/deploy_test/log/supervisord.log
    # 输出的错误日志
    stderr_logfile=/root/commit/deploy_test/log/supervisord.err
    
    [supervisord]
    # log的级别
    loglevel=info
    
    # 使用supervisorctl的配置
    [supervisorctl]
    # 使用supervisorctl登录的地址和端口号
    serverurl = http://127.0.0.1:8000
    # 登录supervisorctl的用户名和密码
    username = admin
    password = 123
    
    [inet_http_server]
    # supervisor的服务器
    port = 0.0.0.0:8000
    # 用户名和密码
    username = admin
    password = 123
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
  • 注意:这里指定的log和错误文件中的log目录要自行创建。

    然后使用supervisor运行uwsgi:supervisord -c supervisor.conf

  • 使用supervisorctl管理supervisord:supervisor是一个C/S模型,跟redis一样,有一个服务器,也有一个客户端命令用来管理服务的,使用以下命令进入到命令界面:
    supervisorctl -c supervisor.conf

  • 指定的文件必须和supervisord服务端保持一致。 一些常用的命令有:
    supervisorctl -c supervisor.conf

status # 查看状态
start program_name # 启动程序
restart program_name # 重新启动程序
stop program_name # 停止程序
reload # 重新加载配置文件
quit # 退出当前的客户端

页面返回502 Bad Gateway表示Nginx可以正常运行,但是uwsgi挂掉了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值