原文:Django部署的正確打開方式 v2.0 僅供參考,本文已正式更新,建議使用新版教程:
本次更新主要解決了兩個問題:
- uWSGI調用系統自帶Python2.7的問題
說明:困擾許久的問題,終于得以解決!再也不用擔心兼容性問題了,放心使用新特性!
- MySQL配置文件出錯的問題
說明:MySQL版本大于5.7.17,或者my.cnf中已經有一些數據的情況下,如何更新配置?
寫這篇文章時,我在想到底是寫給哪些人看的,但作為一個從新手小白走過來的人,我明白好的教程不好找,所以我決定盡量寫得通俗易懂,并且把以前寫過無用的東西全部剔除!
以實際項目部署為例:項目名稱:Think_v1_1;Python版本:Python3.6.3;虛擬環境名稱:vcmt;域名:read.nocmt.com;端口:80;服務器托管:阿里云;服務器版本:ubuntu_16_04;開發端系統:deepin_15.5;
1. 本地項目的配置
注意:命令應該一條一條執行
本地項目應該反復測試并設置好settings.py配置:
不會的,參考這里:創建Django項目不得不重復的那些步驟
在部署前,我們先修改一下settings.py:
# Think_v1_1/Think_v1_1/settings.py
ALLOWED_HOSTS = ['read.nocmt.com',]
刪除各app/migrations/下的以數字開頭的數據庫同步日志文件:
假設你使用的是Pycharm,我們要生成環境包:
命令:
pip freeze > requirements.txt
然后把整個項目壓縮,例如我的壓縮成:Think_v1_1.tar,無論你什么系統,如何壓縮的,你只要能把它丟到服務器上并成功解壓就行,由于我使用的是Linux系統,對于我而言,深度系統(deepin)的終端非常方便。
阿里云安全組的配置,也就是打開80和22端口
這部分不懂的照做即可:
購買服務器并配置登錄密碼以后,在首頁點擊 控制臺>云服務器ECS>(網絡與安全)安全組
沒有就創建,有就點配置規則>公網入方向>添加安全組規則,如圖所示,我們開放80端口,22端口也是這樣打開的(22端口,部署完畢后我們要關掉)。
登錄服務器,阿里云默認登陸就是root,擁有管理員權限,這很重要!如果你沒有管理員權限,請在最開始就獲取。
命令是:
sudo -i
2. 正式部署
系統更新:
sudo apt-get update
sudo apt-get dist-upgrade
安裝Python3.6.3
apt-get install python-dev
apt-get install python-pip
pip install --upgrade pip
如果報錯:解決辦法:locale.Error: unsupported locale setting
mkdir ~/.pip
vi ~/.pip/pip.conf
填入:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
[list]
format=columns
教程參考:Ubtuntu16.04 安裝 python3.6.1 教程
3.6.1改成3.6.3即可
安裝MySQL:
apt-get install mysql-server
輸入兩次自定義密碼,回車。
運行配置向導:
mysql_secure_installation
輸入密碼回車,回車,回車,然后4次輸入Y回車。
MYSQL配置文件修改:
cd /etc/mysql/
vi my.cnf
如果里面東西很多而不是下面這樣的,就不要修改,直接退出。
如果滿足條件,就輸入i,在最后一行把下面內容添加到里面,保存退出,vi不會用的同學:linux下vi命令大全
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8
[mysql]
no-auto-rehash
default-character-set=utf8
重啟并連接:
service mysql restart
mysql -uroot -p
輸入密碼,再輸入以下命令,創建你的數據庫:
CREATE DATABASE `DatabaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
quit命令退出。
在終端中創建虛擬環境:
python3.6 -m venv /home/vcmt
激活虛擬環境:
source /home/vcmt/bin/activate
cd到解壓好的項目下,比如我放在home目錄下,
執行安裝環境包命令:
pip install -r requirements.txt
同步數據庫,建立管理員賬號,同步靜態文件:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
然后測試:
python manage.py runserver 0.0.0.0:80
每次執行又強行關閉后,需要殺死端口,否則會被占用,命令如下:
fuser -k 80/tcp
如果無效,則執行:
netstat -anp
查看所有端口占用情況,殺死PID就行
kill -9 PID
強行退出快捷鍵:CTRL+C或Z
報錯請自行檢查項目,訪問無問題進行下一步:
安裝uWSGI:
pip install uwsgi
啟動測試:
uwsgi --http :80 --chdir /home/Think_v1_1/ -w Think_v1_1.wsgi
報錯請自行檢查項目,訪問無問題進行下一步:
mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
vi Think_v1_1.ini
填入以下內容:
[uwsgi]
project = Think_v1_1
base = /home
chdir = %(base)/%(project)
module = %(project).wsgi:application
master = true
processes = 5
socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true
保存退出,然后是安裝Nginx:
apt-get install nginx
vi /etc/nginx/sites-available/Think_v1_1
填入內容:
server {
listen 80;
server_name read.nocmt.com;
location /static/ {
root /home/Think_v1_1;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/home/Think_v1_1/Think_v1_1.sock;
}
}
保存退出,并檢測錯誤!提示ok,那才行!
ln -s /etc/nginx/sites-available/Think_v1_1 /etc/nginx/sites-enabled/
service nginx configtest
重啟服務:
service nginx restart
uwsgi /etc/uwsgi/sites/Think_v1_1.ini -d /home/Think_v1_1/Think_v1_1.log
如果這時候你的網站已經可以正常瀏覽使用了,別忘記再在項目中的settings.py中關閉你的Debug:
# Think_v1_1/Think_v1_1/settings.py
DEBUG = False
然后再重啟uwsgi。
下面是殺死uwsgi進程的方法
ps -ef|grep uwsgi
看一下PID,殺死就行。
kill -9 PID
所有步驟全部完成,關閉22端口!
---end---