使用nginx,gunicorn,fabric設置網(wǎng)站自動部署

環(huán)境:

Ubuntu 16.04 64位
Django 1.11.4
python  3.5.2
以下使用 web123.com作為網(wǎng)址,user123作為用戶名 

1 創(chuàng)建新用戶

useradd -m -s /bin/bash user123 # 創(chuàng)建新用戶
usermod -a -G sudo user123 # 將新用戶加入超級權限組
passwd user123 # 給新用戶增加密碼
su - user123 # 切換用戶
#切換后用戶由root變?yōu)閡ser123

2 安裝必要環(huán)境

sudo apt-get update # 檢查和安裝升級
sudo apt-get upgrade
sudo apt-get install nginx  # 安裝所需軟件
sudo apt-get install git python3 python3-pip

3 啟動nginx服務

sudo service nginx start

打開網(wǎng)站顯示以下結果,nginx啟動成功


4 django設置

#settings.py
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.web123.com','主機IP']
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

將本地安裝庫導出到文件

pip freeze > requirements.txt

5 代碼上傳到github

注意數(shù)據(jù)庫文件不要上傳!

6 設置服務器目錄

創(chuàng)建目錄,方便分類管理

mkdir -p ~/sites/web123.com

當前目錄下創(chuàng)建虛擬環(huán)境

python3 -m venv venv1

成功后當前目錄下生成venv1文件夾
當前目錄下將github上代碼克隆進來

7 安裝依賴庫

source venv1/bin/activate # 開啟虛擬環(huán)境
cd project #進入項目目錄
pip install -r requirements.txt # 安裝依賴庫

8 收集靜態(tài)文件,數(shù)據(jù)庫生成

python manage.py collectstatic # 項目目錄下運行
python manage.py migrate # 項目目錄下運行

9 配置 Nginx

在服務器的 /etc/nginx/sites-available/ 目錄下新建一個配置文件,可以用網(wǎng)站地址做文件名,方便區(qū)分

vi /etc/nginx/sites-available/web123.com
server {
    charset utf-8;
    listen 80;
    server_name web123.com;  #域名

    location /static { 
        alias /home/user123/sites/web123.com/project/static; 
    }

    location / { 
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/web123.com.socket;
    }
}

創(chuàng)建配置文件符號鏈接,將配置文件加到啟用的網(wǎng)站列表中

sudo ln -s /etc/nginx/sites-available/web123.com /etc/nginx/sites-enabled/web123.com

10 使用 Gunicorn

進入虛擬環(huán)境安裝gunicorn

pip install gunicorn

在項目目錄中用gunicorn啟動服務器進程

gunicorn --bind unix:/tmp/web123.com.socket project.wsgi:application

11 自動啟動 Gunicorn

新建自啟動服務文件

sudo mkdir -p /usr/lib/systemd/system # 創(chuàng)建目錄
sudo vi /usr/lib/systemd/system/web123.service # 創(chuàng)建文件

web123.service文件中

[Unit]
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=user123 # 用戶名
WorkingDirectory=/home/user123/sites/web123.com/project #項目目錄
# gunicorn啟動命令
ExecStart=/home/user123/sites/web123.com/venv1/bin/gunicorn --bind unix:/tmp/web123.com.socket project.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target

啟動服務

sudo systemctl start web123 # 服務文件是web123.service 

添加服務到開機自動運行

sudo systemctl enable web123.service

驗證啟動

ps -ef | grep gunicorn  # 查看gunicorn是否已經(jīng)啟動,有兩個進程

以后更新代碼后,可以重啟gunicorn

sudo systemctl restart web123

12 使用Fabric自動部署

安裝fabric

pip install fabric  #fabric只有python2版本,需用python2安裝

在項目目錄下新建fabfile.py

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

GIT_REPO = "git repository"   # github上項目地址

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

# 填寫你自己的主機對應的域名
env.hosts = ['web123.com'] 

# 一般情況下為 22 端口,如果非 22 端口請查看你的主機服務提供商提供的信息
env.port = '22'

def deploy():
    source_folder = '/home/user123/sites/web123.com/project'  # 項目地址

    run('cd %s && git pull' % source_folder)  #更新項目代碼
    run("""
        cd {} &&
        ../env/bin/pip install -r requirements.txt && #更新必要庫
        ../env/bin/python3 manage.py collectstatic --noinput && # 收集靜態(tài)文件
        ../env/bin/python3 manage.py migrate # 更新數(shù)據(jù)庫
        """.format(source_folder)) 
    sudo('systemctl restart web123')  # 重啟gunicorn服務
    sudo('service nginx reload') # 重啟nginx服務

以后更新代碼后,可以

fab deploy

自動進行部署

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容