Django 部署到服務器
文章目錄
背景
-
部署到阿里雲ECS服務器
-
系統默認環境配置
- Ubuntu 14.0
- Python 2.7
- Python 3.4
-
項目環境配置
- Python 3.6
- django 2.1.8
- uwsgi
- nginx
- python第三方庫:
requests
-
注:
服務器Python 3 默認爲python 3.4,不能滿足項目需求。所以需要額外安裝python 3.6
-
文件路徑
-
python 3.6安裝位置
/usr/local/bin/python3.6
-
項目位置
/home/myWeb/myMusic
-
虛擬環境
/home/myWeb/myMusic/venv
-
static文件
/home/myWeb/myMusic/collect_static
-
uwsgi配置
/home/myWeb/website
-
nginx配置
/etc/nginx/sites-available/myMusic.conf
-
日誌文件
/home/myWeb/website/logs
/var/log/nginx
-
-
項目結構
下載安裝Python 3.6
-
轉至下載目錄:
cd /usr/src
-
下載
Python 3.6
壓縮包:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
-
解壓:
tar xzf Python-3.6.8.tgz
-
進入
Python-3.6.8
目錄cd /usr/src/Python-3.6.8
-
編輯
Python-3.6.8
目錄下的Modules/Setup
文件Python3.6安裝pip時, 會報錯:zipimport.ZipImportError: can't decompress data; zlib not available
主要是由於系統默認配置有Python3.4
與之衝突所以要修改Setup文件,用於安裝獨立的pip 3.6。
打開Modules/Setup文件,在第366行附近有一句
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
,將這句開頭的#
去掉,然後保存即可。 -
然後執行安裝命令:
make && make install
-
將
python3
命令指向python3.6
:系統默認是將
python3
命令指向了python3.4
,所以要修改。輸入命令:
update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.6.8
-
python 3.6 安裝完成後默認已經安裝了pip,爲了避免與系統默認的python 3.4的pip衝突,用
pip3.6
命令進行安裝第三方庫。
Virtualenv 虛擬環境安裝
pip安裝第三方庫時,使用國內的鏡像下載的速度會比較快些,這裏使用清華大學的鏡像
-
安裝
Virtualenv
:pip3.6 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
-
給項目創建一個虛擬環境:
virtualenv --python=/usr/local/bin/python3.6 /home/myWeb/myMusic/venv
注:我的項目存放在
/home/myWeb/myMusic
虛擬環境的名是venv
。 -
轉到項目的位置
cd /home/myWeb/myMusic
-
啓動虛擬環境
source /home/myWeb/myMusic/venv/bin/activate
-
在虛擬環境裏安裝第三方庫
-
安裝uwsgi
留意: uwsgi要安裝兩次,先在系統裏安裝一次,然後進入對應的虛擬環境安裝一次。
pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
-
安裝requests
pip3.6 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
注:我的項目裏用到了
requests
庫,所以要安裝。 -
安裝django
pip3.6 install django -i https://pypi.tuna.tsinghua.edu.cn/simple
注:由於pip默認安裝的是最新版本的django,由於版本的不同運行項目時可能會報錯。
-
卸載已安裝的django
pip3 uninstall django
-
安裝django指定版本(2.1.8)
pip3 install django==2.1.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
-
退出虛擬環境
deactivate
安裝uwsgi
留意: uwsgi要安裝兩次,先在系統裏安裝一次,然後進入對應的虛擬環境安裝一次。
pip3.6 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝Nginx
apt-get install nginx
項目配置
Django項目配置
- setting.py文件相關配置
-
ALLOWED_HOSTS
ALLOWED_HOSTS = ['*']
-
關掉DEBUG。
DEBUG = False
-
static文件
STATIC_ROOT = os.path.join(BASE_DIR, "collect_static")
靜態文件位置,我的設置在項目目錄下的
collect_static
裏(/home/myWeb/myMusic/collect_static
)
- 相關遷移
-
進入虛擬環境
cd /home/myWeb/myMusic/
source /home/myWeb/myMusic/venv/bin/activate
-
遷移數據庫
python manage.py makemigrations
python manage.py migrate
-
static文件
python manage.py collectstatic
django會把所有的static文件都複製到
STATIC_ROOT
文件夾下。 -
創建超級管理員
python manage.py createsuperuser
uwsgi 配置
-
新建相關文件夾
-
站點配置文件夾
mkdir /home/myWeb/website # 站點配置文件,如uwsgi.ini, uwsgi.pid, 相關日誌等
mkdir /home/myWeb/website/logs # 用於存放日誌文件
mkdir /home/myWeb/website/logs/uwsgi # 用於存放uwsgi的運行日誌文件
-
uwsgi配置文件
-
在
/home/myWeb/website
下面新建uwsgi.ini
文件touch /home/myWeb/website/uwsgi.ini
-
寫入uwsgi.ini配置文件
[uwsgi] socket = 127.0.0.1:8000 // 用於連接nginx master = true //主進程 ;vhost = false //多站模式 ;no-site = true //多站模式時不設置入口模塊和文件 workers = 4 //子進程數 reload-mercy = 10 vacuum = true //退出、重啓時清理文件 max-requests = 5000 limit-as = 512 buffer-size = 30000 home=/home/myWeb/myMusic/venv //虛擬環境位置 chdir=/home/myWeb/myMusic //項目位置 module=myMusic.wsgi:application // 項目的wsgi.py pidfile = /home/myWeb/website/uwsgi.pid ; //pid文件,用於後面的腳本啓動、停止該進程 daemonize = /home/myWeb/website/logs/uwsgi/uwsgi.log ; // 日誌文件
uwsgi.ini 文件需要根據自己的項目情況進行配置。
-
Nginx配置
- 新建文件夾和文件
-
日誌文件夾
mkdir /home/myWeb/website/logs/nginx
-
站點配置文件
myMusic.conf
touch /etc/nginx/sites-available/myMusic.conf
-
寫入站點配置文件
myMusic.conf
server { listen 80; # 監聽80端口 server_name 39.96.75.223 *.brightxu.xyz; # 用戶訪問網站的網址,可以是ip地址和域名 charset utf-8; client_max_body_size 75M; access_log /home/myWeb/website/logs/nginx/host.access.log; # 訪問日誌文件位置 error_log /home/myWeb/website/logs/nginx/error.log; # 錯誤日誌文件位置 location /static { alias /home/myWeb/myMusic/collect_static; # 靜態文件的位置,要與項目的setting.py裏的STATIC_ROOT一致 } location / { uwsgi_pass 127.0.0.1:8000; # 這個值要與前面uwsgi.ini的配置一致 include /etc/nginx/uwsgi_params; } }
-
激活站點
ln -s /etc/nginx/sites-available/myMusic.conf /etc/nginx/sites-enabled/myMusic.conf
啓動站點
-
啓動uwsgi
uwsgi --ini /home/myWeb/website/uwsgi.ini
-
啓動nginx
nginx
其他命令
-
uwsgi
-
查看進程
ps -ef | grep uwsgi
-
啓動
uwsgi --ini /home/myWeb/website/uwsgi.ini
-
停止
killall -9 uwsgi # 關閉進程
uwsgi --stop /home/myWeb/website/uwsgi.pid
-
重啓
uwsgi --reload /home/myWeb/website/uwsgi.pid
注:上面的
uwsgi.pid
文件對應uwsgi.ini
裏pidfile
的設置
-
-
nginx
-
查看進程
ps -ef | grep nginx
-
啓動
nginx
service nginx start
-
停止
nginx -s quit # 完整有序的停止nginx
nginx -s stop # 快速停止nginx
killall -9 nginx # 關閉進程
service nginx stop
-
重啓
nginx -s reload # 修改配置後重新加載生效
nginx -s reopen # 重新打開日誌文件
service nginx reload
-
阿里雲安全組規則
爲了安全起見,阿里雲一般默認80端口是關閉的,所以默認下不能通過域名直接訪問。因此需要手動爲80端口添加一個入站規則。
-
新建一個安全組規則(入站方向)
授權策略:允許
授權對象:0.0.0.0/0
端口範圍:80/80
優先級:1