Django+nginx+gunicorn+fabric部署學習

最近在學習一個 Django博客教程,邊學邊練習。在Vultr上部署花了好長時間。寫點心得總結一下部署方法。另外,Vultr的註冊鏈接

安裝軟件

yangxg@localhost:~$ sudo apt-get install nginx
yangxg@localhost:~$ sudo apt-get install git python3 python3-pip
yangxg@localhost:~$ sudo pip3 install virtualenv

nginx 配置

先在服務器的 /etc/nginx/sites-available/ 目錄下新建一個配置文件,文件名我一般就設置爲域名。寫上下面的配置內容:

server {
    charset utf-8;
    listen 80;
    server_name www.rubic.win;

    location /static {
        alias /home/gaoyan/sites/blogprojecttwo/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/www.rubic.win.socket;
    }
}

創建一個符號鏈接,把這個配置文件加入到啓用的網站列表中去,被啓用網站的目錄在 /etc/nginx/sites-enabled/,你可以理解爲從 sites-available/ 目錄下發送了一個配置文件的快捷方式到 sites-enabled/ 目錄。具體命令如下:

sudo ln -s /etc/nginx/sites-available/www.rubic.win /etc/nginx/sites-enabled/www.rubic.win

nginx 啓動、重啓、關閉:

sudo service nginx start
sudo service nginx stop
sudo service nginx reload

Django 配置

配置虛擬環境:

gaoyan@vultr:~/sites$ virtualenv venv
gaoyan@vultr:~/sites$ source venv/bin/activate
(venv) gaoyan@vultr:~/sites$ 

Django

第一步:安裝項目依賴的庫。
第二步:手機靜態文件到項目根目錄下的 static 文件夾下。settings.py 要添加STATIC_ROOT = os.path.join(BASE_DIR, 'static')
第三步:創建數據庫文件
第四步:創建超集用戶

(venv) gaoyan@vultr:~/sites/blogprojecttwo$ pip install -r requirements.txt
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py collectstatic
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py migrate
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py createsuperuse

Gunicorn + Fabric 部署

這種方法應該是所有系統通用的方法,是我試過後兩種方法在Ubuntu16.04 失敗後找到的方法。
首先,在項目根目錄先新建一個 shell 文件,文件裏內容如下:

#!/usr/bin/env bash
nohup gunicorn --bind unix:/tmp/www.rubic.win.socket blogprojecttwo.wsgi:application&

然後,新建 fabfile.py ,內容如下:

from fabric.api import env, run
from fabric.operations import sudo

import win_unicode_console
win_unicode_console.enable()


GIT_REPO = 'git倉庫'

env.user = '用戶名'
env.password = '密碼'

env.hosts = ['主機名']

env.port = '22'

def deploy():
    source_folder = '/home/gaoyan/sites/blogprojecttwo'

    run('cd {} && git pull'.format(source_folder))
    run("""
            cd {} && 
            source ../venv/bin/activate 
            pip install -r requirements.txt &&
            python manage.py collectstatic --noinput &&
            python manage.py migrate &&
            sh -x start-gunicorn.sh &&
            sleep 1
        """.format(source_folder))
    sudo('service nginx reload')

在本地根目錄下命令行輸入 fab deploy即可自動部署。

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