使用nginx,gunicorn,fabric設(shè)置網(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 # 將新用戶加入超級權(quán)限組
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服務(wù)

sudo service nginx start

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


4 django設(shè)置

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

將本地安裝庫導(dǎo)出到文件

pip freeze > requirements.txt

5 代碼上傳到github

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

6 設(shè)置服務(wù)器目錄

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

mkdir -p ~/sites/web123.com

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

python3 -m venv venv1

成功后當(dāng)前目錄下生成venv1文件夾
當(dāng)前目錄下將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

在服務(wù)器的 /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啟動服務(wù)器進程

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

11 自動啟動 Gunicorn

新建自啟動服務(wù)文件

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

啟動服務(wù)

sudo systemctl start web123 # 服務(wù)文件是web123.service 

添加服務(wù)到開機自動運行

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 = ''  #密碼

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

# 一般情況下為 22 端口,如果非 22 端口請查看你的主機服務(wù)提供商提供的信息
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服務(wù)
    sudo('service nginx reload') # 重啟nginx服務(wù)

以后更新代碼后,可以

fab deploy

自動進行部署

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 最近看了《Flask Web開發(fā)--基于Python的Web應(yīng)用開發(fā)實戰(zhàn)》,還有廖雪峰老師的Python教程,前者...
    涵仔睡覺閱讀 5,423評論 0 18
  • 前言 之前知乎上面看到蕭大說的Flask學(xué)習(xí)入門,推薦了一本書叫做《Flask web 開發(fā)》。書確實是好書,一口...
    姚大寶Svan閱讀 3,887評論 10 27
  • 我的朋友Can,是我的大學(xué)同學(xué)。畢業(yè)六年,彼此是以每年給對方打一次電話維持著聯(lián)系。大學(xué)時她留的是短發(fā),中性的打扮。...
    比如藍(lán)天閱讀 387評論 0 0
  • 不瞻前顧后,就是干,年輕就是敢
    BBking凸閱讀 184評論 0 0

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