• Ubuntu环境下部署Django+uwsgi+nginx总结


    前言

    这是我在搭建Django项目时候的过程,拿来总结记录,以备不时之需。

    项目采用nginx+uwsgi的搭配方式。

    项目依赖包采用requirements.txt文件管理的方式。

    本地准备工作

    1. 确认项目能够运行起来,没有bug

    2. 将当前环境的包导出 pip freeze > requirements.txt

    3. 将项目上传到服务器上的/srv目录下。这里以git的形式为例, 打开终端, 依次输入如下命令:

      $ git init
      $ git remote add origin xxx.git    # 替换成你的项目git地址
      $ git add .
      $ git commit -m 'first commit'
      $ git pull origin master --allow-unrelated-histories
      $ git push origin master
      

    部署项目到服务器

    安装python

    1. 安装好项目用到的python

      $ sudo apt install python
      $ sudo apt install python-pip
      $ pip install --upgrade pip
      
    2. 安装virtualenv以及virutalenvwrapper,并创建虚拟环境。

      $ pip install virtualenv
      $ pip install virtualenvwrapper
      $ sudo apt install vim
      
    3. 编辑文件~/.bashrc

      $ vim ~/.bashrc
      
      # 添加如下2行代码
      export WORKON_HOME=$HOME/.virtualenvs
      source /usr/local/bin/virtualenvwrapper.sh
      
      # 保存文件,让文件成效
      $ source ~/.bashrc
      

    安装git:

    $ sudo apt install git
    
    # 为了方便XShell或者CRT连接服务器,建议安装OpenSSH
    $ sudo apt install openssh-server openssh-client
    $ service ssh restart
    

    安装MySQL

    $ sudo apt install mysql-server mysql-client
    $ sudo apt-get install libmysqld-dev
    

    测试配置

    1. 安装依赖包,进入虚拟环境 workon ***,进入项目根目录,执行命令pip install -r requirements.txt
    2. 创建数据库,新打开一个终端,登录数据库,mysql -uroot -p , 创建相应的数据库 CREATE DATABASE IF NOT EXISTS my_db default charset utf8mb4;
    3. 迁移数据,python manage.py migrate
    4. 收集静态文件, python manage.py collectstatic
    5. 启动服务器,执行 python manage.py runserver 0.0.0.0:8000,然后在你自己电脑上,在浏览器中输入http://<your server ip>:8000,访问下网站所有页面,确保所有页面都没有错误。

    注意:

    1. 设置 ALLOW_HOST 为你的域名或 ip 地址。
    2. 设置 DEBUG=False

    安装uwsgi

    uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。

    uwsgi是使用python编写的,因此通过pip install uwsgi就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。

    1. 命令行启动uwsgi

      $ uwsgi --http :8000 --module test.wsgi --vritualenv=/root/.virtualenvs/django-env-py36
      

      如果能够在浏览器中访问到测试的页面,说明uwsgi可以加载项目了。

    2. 配置文件方式启动uwsgi

      在项目的根路径下面,创建一个文件djangotest.ini,填写以下代码:

      [uwsgi]
      # Django相关的配置
      # 必须全部为绝对路径
      # 项目的路径
      chdir=/srv/djangotest
      
      # Django的wsgi文件
      module=djangotest.wsgi
      
      # Python虚拟环境的路径
      home=/root/.virtualenvs/django-env-py36
      
      # 进程相关的设置
      # 主进程
      master=true
      
      # 最大数量的工作进程
      processes=10
      
      # socket文件路径,绝对路径
      socket=/srv/djangotest/djangotest.sock
      
      # 设置socket的权限
      chmod-socket=666
      
      # 退出的时候是否清理环境
      vacuum=true
      然后使用命令uwsgi --ini djangotest.ini,看下是否还能启动这个项目。
      

    安装nginx

    nginx是一个web服务器。用来加载静态文件和接收http请求的。

    1. 通过命令sudo apt install nginx即可安装。

    2. nginx常用命令:

      • 启动nginx:service nginx start
      • 关闭nginx:service nginx stop
      • 重启nginx:service nginx restart
    3. 收集静态文件:

      静态文件应该让nginx来处理,而不是让django来做。

      首先确保你的settings.py文件中有一个STATIC_ROOT配置,这个配置应该指定你的静态文件要放在哪个目录下。

      那么我们可以执行以下命令:python manage.py collectstatic来收集所有静态文件(已经执行过请忽略)。

    4. 编写nginx配置文件,在/etc/nginx/conf.d目录下,新建一个文件 djangotest.conf,然后将以下代码贴进去:

      upstream djangotest {
          server unix:///srv/djangotest/djangotest.sock; 
      }
      
      # 配置服务器
      server {
          # 监听的端口号
          listen      80;
          # 域名
          server_name 192.168.0.101; 
          charset     utf-8;
      
          # 最大的文件上传尺寸
          client_max_body_size 75M;  
      
          # 静态文件访问的url
          location /static {
              # 静态文件地址
              alias /srv/djangotest/static_dist; 
          }
      
          # 最后,发送所有非静态文件请求到django服务器
          location / {
              uwsgi_pass  djangotest;
              # uwsgi_params文件地址
              include     /etc/nginx/uwsgi_params; 
          }
      }
      
    5. 测试配置文件:service nginx configtest。注意:每次修改完配置需要重启nginx: service nginx restart

    使用supervisor

    让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,自动重启。

    1. 安装supervisor:在系统级别的python环境下 pip install supervisor

    2. 在项目根目录下创建一个文件my_supervisor.conf。编写内容:

      # supervisor的程序名字
      [program:mysite]
      # supervisor执行的命令
      command=uwsgi --ini zlkt_uwsgi.ini
      # 项目的目录
      directory = /srv/djangotest 
      # 开始的时候等待多少秒
      startsecs=0
      # 停止的时候等待多少秒
      stopwaitsecs=0  
      # 自动开始
      autostart=true
      # 程序挂了后自动重启
      autorestart=true
      # 输出的log文件
      stdout_logfile=/srv/djangotest/log/supervisord.log
      # 输出的错误文件
      stderr_logfile=/srv/djangotest/log/supervisord.err
      
      [supervisord]
      # log的级别
      loglevel=info
      
      # 使用supervisorctl的配置
      [supervisorctl]
      # 使用supervisorctl登录的地址和端口号
      serverurl = http://127.0.0.1:9001
      
      # 登录supervisorctl的用户名和密码
      username = admin
      password = 123
      
      [inet_http_server]
      # supervisor的服务器
      port = :9001
      # 用户名和密码
      username = admin
      password = 123
      
      [rpcinterface:supervisor]
      supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
      
    3. 运行supervisor,执行supervisord -c my_supervisor.conf

    4. 进入supervisor管理控制台, supervisorctl -c my_supervisor.conf

    5. supervisor管理控制台常用命令

      # 查看状态
      status 
      
      # 启动程序
      start program_name
      
      # 重新启动程序
      restart program_name
      
      # 关闭程序
      stop program_name
      
      # 重新加载配置文件
      reload
      
      # 退出控制台
      quit 
      

    Enjoy your code!

    不积跬步,无以至千里。
  • 相关阅读:
    【C#】结对项目开发-电梯调度仿真系统(Bata版)(党云龙、黄为)
    【C】二维数组求最大子数组(基于一维数组的拓展)
    【敏捷开发】敏捷开发方法综述
    【C#】结对项目开发-电梯调度仿真系统(内部开发者版)(党云龙、黄为)
    【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
    软件单元测试与代码规范
    统计英文文本文档中前十个出现频率最多的单词
    floatyfish阶段总结(Alpha版)
    每日站立会议-5-7
    小组站立会议-5-6
  • 原文地址:https://www.cnblogs.com/DeaconOne/p/12611489.html
Copyright © 2020-2023  润新知