zoukankan      html  css  js  c++  java
  • 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!

    不积跬步,无以至千里。
  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/DeaconOne/p/12611489.html
Copyright © 2011-2022 走看看