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

相關代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章