Django+Ubuntu WEB部署(超詳細版)

2017年12月4日教程更新能犯,請移步至最終版本:Django快速部署簡約版 v3.0

不推薦閱讀以下文章!


一、環(huán)境介紹

  • 服務器:Ubuntu 16.04 for 阿里云
  • 數(shù)據(jù)庫:MySQL 5.7.17
  • Python 3.6.0 + Django 1.10.6

二站削、準備工作

1.更新系統(tǒng):

sudo apt-get update
sudo apt-get upgrade

提示:安裝時出現(xiàn)的選擇項按自己實際情況選擇,這里不做過多闡述孵稽,實在看不懂许起,自行谷歌翻譯十偶。

2.安裝SSH(Git默認安裝了):

sudo apt-get install ssh

提示:本人的項目是通過FileZilla Client直接上傳的。
有興趣的可以看看教程:FTP使用教程之Filezilla使用教程

3.命令行查看自己的公網(wǎng)IP地址:

ifconfig

提示:得到網(wǎng)卡信息园细,這里的IP為192.168.0.154扯键,得到IP后,可以使用Filezilla連接服務器上傳文件珊肃。這里先擱置不用管荣刑。


網(wǎng)卡信息

三、安裝MySQL:

1.安裝命令:

sudo apt-get install mysql-server

提示:安裝過程中會提示讓你設置MySQL密碼 伦乔,輸入兩次密碼厉亏,回車即可,然后等待安裝完成

設置MySQL密碼

2.查看MySQL版本:

mysql --version

提示:輸出結果為:5.7.17烈和,事實上Mysql 5.7.6或更高版本爱只,數(shù)據(jù)目錄將自動初始化,這一點大部分教程都沒有提及招刹。所以這里我們不用初始化恬试。


查看Mysql版本

3.運行數(shù)據(jù)庫Mysql安全配置向導:

  sudo mysql_secure_installation

提示:輸入Mysql密碼


輸入root密碼:

提示:是否設置驗證密碼,輸入 n


是否設置驗證密碼疯暑,輸入 n

提示:是否修改Mysql密碼训柴,輸入 n


是否修改MySQL密碼,輸入 n

提示:是否移除匿名用戶妇拯,輸入y


是否移除匿名用戶,選y

提示:是否允許遠程登陸幻馁,如果選n的話,只能在本機訪問數(shù)據(jù)庫越锈,根據(jù)情況來仗嗦,本人數(shù)據(jù)庫和項目都在一個服務器上,為了安全考慮甘凭,這里我設置關閉稀拐,輸入n


設置關閉,輸入 n

提示:是否移除test數(shù)據(jù)庫丹弱,輸入y


是否移除test數(shù)據(jù)庫德撬,選y

提示:是否重新加載權限表,輸入y


是否重新加載權限表蹈矮,選y

注意:如果出現(xiàn)這種錯誤:

[error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)']

它表明你的Mysql服務砰逻,并沒有開啟鸣驱!輸入下列命令開啟即可:

sudo service mysql start 

sudo表明以管理員權限執(zhí)行泛鸟,教程:如何啟動/停止/重啟MySQL

4.配置Mysql默認字符集

提示:此時當前目錄為根目錄,進入 /etc/mysql/踊东,打開 my.cnf北滥。

不太熟悉vi命令的同學看這里:linux下vi命令大全

cd /etc/mysql/
vi my.cnf

按一下 i 代表輸入操作刚操,填入以下代碼:

[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

提示:編輯完成后按一下鍵盤 ESC 輸入:wq,代表保存退出再芋,然后重啟mysql服務使其生效:

sudo service mysql restart

5.創(chuàng)建網(wǎng)站的數(shù)據(jù)庫:

提示:進入mysql shell:

mysql -uroot -p

提示:輸入Mysql密碼菊霜,登陸即可,如圖所示登錄無問題:

登陸成功界面

提示:接下來創(chuàng)建數(shù)據(jù)庫并指定編碼方式為UTF-8(其中dataname 為數(shù)據(jù)庫名稱济赎,保證與Django連接數(shù)據(jù)庫名稱一致鉴逞,否則連接會出錯):

 CREATE DATABASE `dataname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

提示:數(shù)據(jù)庫操作基本命令:

SHOW DATABASES; #顯示所有數(shù)據(jù)庫
USE <NAME>;   #進入某數(shù)據(jù)庫 
SHOW TABLES; #顯示所有數(shù)據(jù)表
SELECT * FROM <NAME>; #查詢表內容

多余的不說了,忘記的看看:mysql基本操作命令匯總

退出命令:quit 退回根目錄 :cd


四司训、安裝配置Python環(huán)境:

提示:一般默認自帶python2.7+3.5构捡,我們使用的環(huán)境是python3.6.

1.安裝python-dev包:

sudo apt-get install python-dev

2.安裝或升級pip :

安裝:

sudo apt-get install python-pip

升級:

sudo pip install --upgrade pip

3.更換pip源

提示:因為國內使用默認的pip源速度很慢,所以需要更換壳猜,在用戶根目錄下新建 .pip 目錄勾徽,在該目錄下新建pip.conf文件。

sudo mkdir ~/.pip
sudo vi ~/.pip/pip.conf

填入:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

2.安裝Python 3.6

安裝之前统扳,我們需要給默認的Python2.7安裝pymysql+Django庫喘帚,因為后面會出錯就是因為未安裝這兩個庫!

pip install pymysql==0.7.10
pip install django==1.10.6

注意 :提醒在 /etc/ 目錄下下載安裝咒钟,因為解壓到哪里就安裝到哪里4涤伞!朱嘴!
安裝教程:如何在Ubuntu和LinuxMint上安裝Python 3.6.0

提示:如果下載速度太慢溉知,就看上面的 FileZilla 教程,自己下載好壓縮包上傳上去腕够,再解壓安裝级乍。
比如我這種速度,直接CTRL+Z退出


比如我這種速度帚湘,直接CTRL+Z退出

3.安裝虛擬環(huán)境玫荣,我們在這里淘汰virtualenv。

提示:因Python3+自帶虛擬環(huán)境大诸,更簡單好用捅厂,所以沒必要再裝一個。
在home目錄下創(chuàng)建名稱為vcmt的虛擬環(huán)境资柔。

python3.6 -m venv /home/vcmt

激活虛擬環(huán)境:

source /home/vcmt/bin/activate  

退出命令:

deactivate

進入成功:


進入成功

五焙贷、安裝Django等所有在原開發(fā)環(huán)境中依賴的庫:

--配置兩臺機器上相同的擴展庫環(huán)境:

--第一步,在已配置好的機器上使用

pip freeze > requirements.txt

--生成擴展庫信息列表贿堰;

--第二步辙芍,把生成的requirements.txt文件復制到目標機器上的python安裝目錄中scripts子目錄(沒有該目錄也不要緊,就放在root目錄下);

--第三步故硅,在目標機器上執(zhí)行pip install -r requirements.txt庶灿,讀取文件requirements.txt中的擴展庫信息并在本機進行安裝。

這里我們利用 FileZilla Client把文件上傳上去吃衅,并且把Django項目丟上去往踢。
我的目錄一般/home/
教程:阿里云服務器ECS連接 Linux 實例

注意:上傳項目文件后把 /項目名/app名/migrations/ 下的類似00.. 的記錄文件刪除,有幾個刪除幾個徘层,但是不要刪除別的文件峻呕。

Paste_Image.png

這是在本地進行數(shù)據(jù)同步時產(chǎn)生的記錄文件,由于我們并不是轉移的數(shù)據(jù)庫趣效,所以要刪除舊的記錄山上,后面會再同步!

pip list 顯示所有已安裝庫

干貨來了S⒅АE搴丁!###

關于Django項目靜態(tài)文件的說明:

開發(fā)環(huán)境中靜態(tài)文件設置:

部署前的設置(網(wǎng)站換成你自己的干花,或者是公網(wǎng)IP):

settings.py部署前的設置
settings.py部署前的設置

一般在開發(fā)環(huán)境中: 即settings.py中的DEBUG = True 時 妄帘, Django 會自動幫助我們處理靜態(tài)文件,所以不用操心靜態(tài)文件404的問題池凄,但是在部署時抡驼,出于安全考慮,我們必須關閉DEBUG肿仑!保證自己網(wǎng)站的信息不泄露致盟。只是當DEBUG關閉后,Djang就不會幫我們處理靜態(tài)文件了尤慰,所以會出現(xiàn)樣式丟失馏锡,靜態(tài)文件404問題。

1.MEDIA_ROOT:媒體文件伟端,所有上傳的文件杯道。示例:圖像,文件
2.STATIC_ROOT 在開發(fā)過程中無用责蝠,只需要部署党巾。
在開發(fā)中,STATIC_ROOT什么都不做霜医。你甚至不需要設置它齿拂。Django在每個應用程序目錄(myProject/appName/static)中查找靜態(tài)文件,并自動提供肴敛。
當你的項目部署時署海,事情有所不同。很可能你將使用Django提供動態(tài)內容,Nginx將提供靜態(tài)文件叹侄。為什么巩搏?因為Nginx的效率非常高昨登,并且會減少Django的工作量趾代。
這時候STATIC_ROOT才有用,因為Nginx不知道你的django項目丰辣,不知道在哪里找到靜態(tài)文件撒强。
所以你設置STATIC_ROOT = '/some/folder/', 并告訴Nginx尋找靜態(tài)文件/some/folder/。然后運行manage.py collectstatic笙什,Django將會從所有應用程序復制靜態(tài)文件/some/folder/飘哨。
3.STATICFILES_DIRS : 靜態(tài)文件的額外目錄
STATICFILES_DIRS用于包含要查找的其他目錄。例如琐凭,默認情況下芽隆,Django無法識別/myProject/static/。所以你可以把它設置一下统屈。
基本介紹到此胚吁,如果還有問題,可以聯(lián)系我愁憔,我不介意為你解答疑惑腕扶。


注意:這里可以看到我的靜態(tài)文件是放在 APP(blog)下的,*.html引用方式:

{% load staticfiles %}  #引用靜態(tài)文件目錄 放在HTML頭部
{% static 'css/bootstrap.min.css' % } #引用靜態(tài)文件
我的項目結構

后面會同步靜態(tài)文件吨掌!所以不用擔心admin樣式問題半抱。


Django項目配置

安裝好Django等必須庫后,進入Django項目下膜宋,同步并創(chuàng)建數(shù)據(jù)庫窿侈,執(zhí)行:

python manage.py makemigrations
python manage.py migrate

注意:如果出錯了,首先檢查models.py 里面是不是有什么錯誤秋茫,包括在第一行設置UTF-8編碼方式棉磨,因為我發(fā)現(xiàn)它有時也會出現(xiàn)這種問題!再檢查settings.py 關于連接部分的設置對不對学辱,最后檢查是不是3306端口沒打開乘瓤!一般都是這幾個問題。

建立后臺超級用戶:

python manage.py createsuperuser

啟動自帶的服務器策泣,測試是否可以正常運行Q每(此時settings.py 中的DEBUG = False)輸入:

python manage.py runserver 0.0.0.0:8000
靜態(tài)文件成功的復制到項目下的自定義靜態(tài)文件夾下了,所以沒有出現(xiàn)404錯誤萨咕!

至于樣式為什么沒應用统抬,是因為Django已經(jīng)不管靜態(tài)文件了,我們要讓nginx處理 靜態(tài)文件!往后看聪建!

啟動時錯誤總結钙畔!

這是端口被占用的問題,可以輸入 sudo fuser -k 8000/tcp 金麸,殺死與端口8000相關聯(lián)的所有進程即可擎析。

如果出現(xiàn)響應時間過長或者拒絕訪問,瀏覽器按F12挥下,查看network揍魂,按一下F5刷新一次,出現(xiàn) ...ERRO NET... 什么的棚瘟,就是端口未開啟现斋,用手機在ECS里配置安全組,增加一個8000配置即可偎蘸!

電腦手機均可配置庄蹋,自己找找。

電腦上的:

Paste_Image.png
Paste_Image.png

點擊公網(wǎng)入方向 添加安全組規(guī)則迷雪,參照它自己生成的那樣配置即可限书。

Paste_Image.png

接下來同步靜態(tài)文件:

先退出django啟動的服務,CTRL + C 強制退出振乏!

python manage.py collectstatic

此時項目下的settings.py 中的STATIC_ROOT 后面的文件夾應該是'static' .

下面是手動部署方法蔗包,如需要一鍵部署腳步請移步:
Django + uwsgi + nginx 一鍵部署腳本


六、uWSGI的安裝

1.安裝:

sudo pip install uwsgi

啟動測試:

uwsgi --http :8000  --chdir /home/nocmt/ -w nocmt.wsgi

啟動測試慧邮,應該可以正常訪問了调限。

2.uWSGI的配置

首先建立一個配置目錄及文件:

sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites

在里面建立以自己項目名命名的配置文件:

sudo vi nocmt.ini

填入以下內容:你只需要改project和Base,一個項目名稱误澳,一個項目路徑耻矮。

[uwsgi]
project = nocmt
base = /home

chdir = %(base)/%(project)
module = %(project).wsgi:application
home =  %(base)/vcmt

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

現(xiàn)在建立一個自啟腳本:

sudo vi /etc/init/uwsgi.conf

內容如下 setuid的值改為你的項目名:

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid nocmt
setgid www-data

exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

最后一個問題,www-data 用戶組沒有創(chuàng)建忆谓。


七裆装、反向代理:Nginx的安裝和配置

1.安裝

sudo apt-get install nginx

2.創(chuàng)建配置文件

sudo vi /etc/nginx/sites-available/nocmt

提示:填寫內容如下(server_name為被解析域名,如果暫時沒有域名那就填公網(wǎng)IP倡缠,Django項目settings.py中的哨免,靜態(tài)文件夾地址一定要填對,否則樣式會出錯j悸佟):

提示:簡潔版:

server {
    listen 80;
    server_name nocmt.com;

    location  /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
    root /home/nocmt;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/nocmt/nocmt.sock;
               }
}

提示: 開啟日志版琢唾,這要確保你的網(wǎng)站項目有favico網(wǎng)站圖標,也可自行刪改盾饮。

server{

    listen 80;
    server_name
    nocmt.com;
    access_log /home/nocmt/nginx.access.log;
    error_log /home/nocmt/nginx.error.log;

    location /static/ {
        root /home/nocmt;
        }
    location /favico.ico {
       root /home/nocmt/static/img/favico.ico;
        }
    location / {
        include uwsgi_params;
        uwsgi_pass unix: / home / nocmt / nocmt.sock;
        }
}

多域名問題看這里:Nginx 解決多域名問題

然后鏈接文件:

sudo ln -s /etc/nginx/sites-available/nocmt /etc/nginx/sites-enabled/

檢查是否有錯誤:

sudo service nginx configtest

出現(xiàn)錯誤采桃,那就是配置文件寫錯了懒熙,自己檢查一下,沒有就直接啟動普办!

sudo service nginx restart
提示ok才是正確的

最后輸入工扎,啟動uwsgi :

uwsgi /etc/uwsgi/sites/nocmt.ini -d /home/nocmt/nocmt.log
完成

訪問你的網(wǎng)站,試試看衔蹲!如果有問題歡迎簡信我肢娘!


參考文章:

1.基于Django框架的網(wǎng)站部署

2.Django+Nginx+uwsgi部署

3.在 Ubuntu 16.04 LTS 上安裝 Python 3.6.0

4.Linux下MySQL 5.5/5.6的修改字符集編碼為UTF8

5.STATICFILES_DIR,STATIC_ROOT和MEDIA_ROOT之間的差異

6.Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服務器

7.五步教你實現(xiàn)使用Nginx+uWSGI+Django方法部署Django程序(上)

8.五步教你實現(xiàn)使用Nginx+uWSGI+Django方法部署Django程序(下)

9.Django + uwsgi + nginx + bootstrap 創(chuàng)建自己的博客 -- 13.部署

10.CentOS+Apache+mod_wsgi+Python+Django - 昨踪危、夜星辰 - 博客園

......

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蔬浙,一起剝皮案震驚了整個濱河市猪落,隨后出現(xiàn)的幾起案子贞远,更是在濱河造成了極大的恐慌,老刑警劉巖笨忌,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓝仲,死亡現(xiàn)場離奇詭異,居然都是意外死亡官疲,警方通過查閱死者的電腦和手機袱结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來途凫,“玉大人垢夹,你說我怎么就攤上這事∥眩” “怎么了果元?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犀盟。 經(jīng)常有香客問我而晒,道長,這世上最難降的妖魔是什么阅畴? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任倡怎,我火速辦了婚禮,結果婚禮上贱枣,老公的妹妹穿的比我還像新娘监署。我一直安慰自己,他們只是感情好纽哥,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布钠乏。 她就那樣靜靜地躺著,像睡著了一般昵仅。 火紅的嫁衣襯著肌膚如雪缓熟。 梳的紋絲不亂的頭發(fā)上累魔,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機與錄音够滑,去河邊找鬼垦写。 笑死,一個胖子當著我的面吹牛彰触,可吹牛的內容都是我干的梯投。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼况毅,長吁一口氣:“原來是場噩夢啊……” “哼分蓖!你這毒婦竟也來了?” 一聲冷哼從身側響起尔许,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤么鹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后味廊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸甜,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年余佛,在試婚紗的時候發(fā)現(xiàn)自己被綠了柠新。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡辉巡,死狀恐怖恨憎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情郊楣,我是刑警寧澤憔恳,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站痢甘,受9級特大地震影響喇嘱,放射性物質發(fā)生泄漏。R本人自食惡果不足惜塞栅,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一者铜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧放椰,春花似錦作烟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至如蚜,卻和暖如春压恒,著一層夾襖步出監(jiān)牢的瞬間影暴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工探赫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留型宙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓伦吠,卻偏偏與公主長得像妆兑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毛仪,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容