Django 部署到服务器

Django 部署到服务器

背景

  • 部署到阿里云ECS服务器

  • 系统默认环境配置

    1. Ubuntu 14.0
    2. Python 2.7
    3. Python 3.4
  • 项目环境配置

    1. Python 3.6
    2. django 2.1.8
    3. uwsgi
    4. nginx
    5. python第三方库:
      requests
  • 服务器Python 3 默认为python 3.4,不能满足项目需求。所以需要额外安装python 3.6

  • 文件路径

    • python 3.6安装位置

      /usr/local/bin/python3.6
      
    • 项目位置

      /home/myWeb/myMusic
      
    • 虚拟环境

      /home/myWeb/myMusic/venv
      
    • static文件

      /home/myWeb/myMusic/collect_static
      
    • uwsgi配置

      /home/myWeb/website
      
    • nginx配置

      /etc/nginx/sites-available/myMusic.conf
      
    • 日志文件

      /home/myWeb/website/logs
      
      /var/log/nginx
      
  • 项目结构
    项目结构

下载安装Python 3.6

  1. 转至下载目录:

    cd /usr/src
    
  2. 下载Python 3.6压缩包:

    wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
    
  3. 解压:

    tar xzf Python-3.6.8.tgz
    
  4. 进入Python-3.6.8 目录

    cd /usr/src/Python-3.6.8
    
  5. 编辑Python-3.6.8 目录下的Modules/Setup文件

    Python3.6安装pip时, 会报错:zipimport.ZipImportError: can't decompress data; zlib not available主要是由于系统默认配置有Python3.4 与之冲突

    所以要修改Setup文件,用于安装独立的pip 3.6。

    打开Modules/Setup文件,在第366行附近有一句 #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz ,将这句开头的# 去掉,然后保存即可。

  6. 然后执行安装命令:

    make && make install
    
  7. python3 命令指向python3.6:

    系统默认是将python3 命令指向了python3.4 ,所以要修改。

    输入命令:

    update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.6.8
    
  8. python 3.6 安装完成后默认已经安装了pip,为了避免与系统默认的python 3.4的pip冲突,用pip3.6 命令进行安装第三方库。

Virtualenv 虚拟环境安装

pip安装第三方库时,使用国内的镜像下载的速度会比较快些,这里使用清华大学的镜像

  • 安装Virtualenv :

    pip3.6 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  • 给项目创建一个虚拟环境:

    virtualenv --python=/usr/local/bin/python3.6 /home/myWeb/myMusic/venv
    

    注:我的项目存放在/home/myWeb/myMusic 虚拟环境的名是venv

  • 转到项目的位置

    cd /home/myWeb/myMusic
    
  • 启动虚拟环境

    source /home/myWeb/myMusic/venv/bin/activate
    
  • 在虚拟环境里安装第三方库

    • 安装uwsgi

      留意: uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。

      pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
      
    • 安装requests

      pip3.6 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
      

      注:我的项目里用到了requests 库,所以要安装。

    • 安装django

      pip3.6 install django -i https://pypi.tuna.tsinghua.edu.cn/simple
      

      :由于pip默认安装的是最新版本的django,由于版本的不同运行项目时可能会报错。

    • 卸载已安装的django

      pip3 uninstall django
      
    • 安装django指定版本(2.1.8)

      pip3 install django==2.1.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
      
  • 退出虚拟环境

    deactivate
    

安装uwsgi

留意: uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。

pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple

安装Nginx

apt-get install nginx

项目配置

Django项目配置

  • setting.py文件相关配置
  1. ALLOWED_HOSTS

    ALLOWED_HOSTS = ['*']
    
  2. 关掉DEBUG。

    DEBUG = False
    
  3. static文件

    STATIC_ROOT = os.path.join(BASE_DIR, "collect_static")
    

    静态文件位置,我的设置在项目目录下的collect_static里(/home/myWeb/myMusic/collect_static

  • 相关迁移
  1. 进入虚拟环境

    cd /home/myWeb/myMusic/
    
    source /home/myWeb/myMusic/venv/bin/activate
    
  2. 迁移数据库

    python manage.py makemigrations
    
    python manage.py migrate
    
  3. static文件

    python manage.py collectstatic
    

    django会把所有的static文件都复制到STATIC_ROOT文件夹下。

  4. 创建超级管理员

    python manage.py createsuperuser
    

uwsgi 配置

  • 新建相关文件夹

  • 站点配置文件夹

    mkdir /home/myWeb/website     # 站点配置文件,如uwsgi.ini, uwsgi.pid, 相关日志等
    
    mkdir /home/myWeb/website/logs      # 用于存放日志文件
    
    mkdir /home/myWeb/website/logs/uwsgi   # 用于存放uwsgi的运行日志文件
    
  • uwsgi配置文件

    1. /home/myWeb/website 下面新建uwsgi.ini 文件

      touch /home/myWeb/website/uwsgi.ini
      
    2. 写入uwsgi.ini配置文件

      [uwsgi]
      socket = 127.0.0.1:8000    // 用于连接nginx
      master = true         //主进程
      ;vhost = false          //多站模式
      ;no-site = true        //多站模式时不设置入口模块和文件
      workers = 4           //子进程数
      reload-mercy = 10
      vacuum = true         //退出、重启时清理文件
      max-requests = 5000
      limit-as = 512
      buffer-size = 30000
      
      home=/home/myWeb/myMusic/venv    //虚拟环境位置
      chdir=/home/myWeb/myMusic       //项目位置
      module=myMusic.wsgi:application    // 项目的wsgi.py
      
      pidfile = /home/myWeb/website/uwsgi.pid
      ;          //pid文件,用于后面的脚本启动、停止该进程
      daemonize = /home/myWeb/website/logs/uwsgi/uwsgi.log
      ;         // 日志文件
      

      uwsgi.ini 文件需要根据自己的项目情况进行配置。

Nginx配置

  1. 新建文件夹和文件
  • 日志文件夹

    mkdir /home/myWeb/website/logs/nginx
    
  • 站点配置文件myMusic.conf

    touch /etc/nginx/sites-available/myMusic.conf
    
  1. 写入站点配置文件myMusic.conf

    server {
        listen      80;    # 监听80端口
        server_name   39.96.75.223  *.brightxu.xyz;    # 用户访问网站的网址,可以是ip地址和域名
        charset     utf-8;
        client_max_body_size 75M;
    
        access_log  /home/myWeb/website/logs/nginx/host.access.log;    # 访问日志文件位置
        error_log  /home/myWeb/website/logs/nginx/error.log;    # 错误日志文件位置
    
        location /static {
            alias /home/myWeb/myMusic/collect_static;    # 静态文件的位置,要与项目的setting.py里的STATIC_ROOT一致
        }
    
        location / {
            uwsgi_pass  127.0.0.1:8000;    # 这个值要与前面uwsgi.ini的配置一致
            include     /etc/nginx/uwsgi_params;
        }
    }
    
    
  2. 激活站点

    ln -s /etc/nginx/sites-available/myMusic.conf /etc/nginx/sites-enabled/myMusic.conf
    

启动站点

  1. 启动uwsgi

    uwsgi --ini /home/myWeb/website/uwsgi.ini
    
  2. 启动nginx

    nginx
    

其他命令

  • uwsgi

    • 查看进程

      ps -ef | grep uwsgi
      
    • 启动

      uwsgi --ini /home/myWeb/website/uwsgi.ini
      
    • 停止

      killall -9 uwsgi    # 关闭进程
      
      uwsgi --stop /home/myWeb/website/uwsgi.pid
      
    • 重启

      uwsgi --reload /home/myWeb/website/uwsgi.pid
      

      注:上面的uwsgi.pid文件对应uwsgi.inipidfile的设置

  • nginx

    • 查看进程

      ps -ef | grep nginx
      
    • 启动

      nginx
      
      service nginx start
      
    • 停止

      nginx -s quit      # 完整有序的停止nginx
      
      nginx -s stop      # 快速停止nginx
      
      killall -9 nginx    # 关闭进程
      
      service nginx stop
      
    • 重启

      nginx -s reload    # 修改配置后重新加载生效
      
      nginx -s reopen    # 重新打开日志文件
      
      service nginx reload
      

阿里云安全组规则

为了安全起见,阿里云一般默认80端口是关闭的,所以默认下不能通过域名直接访问。因此需要手动为80端口添加一个入站规则。

  • 新建一个安全组规则(入站方向)

    授权策略:允许

    授权对象:0.0.0.0/0

    端口范围:80/80

    优先级:1

相关代码

发布了16 篇原创文章 · 获赞 17 · 访问量 2064

猜你喜欢

转载自blog.csdn.net/weixin_44129085/article/details/101041922