環(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
自動進行部署