最近在學習一個 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
即可自動部署。