一個(gè)web應(yīng)用的誕生(13)--沖向云端

有句話叫所有的樂趣都在部署之前缕探,也許這個(gè)小應(yīng)用還有很多缺陷,也許它還不夠完美唆铐,但是哲戚,仔細(xì)想想,其實(shí)沒有什么能比自己的網(wǎng)站在互聯(lián)網(wǎng)中上線更令人滿足的了艾岂,但是滿足的背后顺少,總是存在著很多的風(fēng)險(xiǎn),以至于幾乎所有的開發(fā)人員都說過這樣的話:“在我這里運(yùn)行是正常的呀王浴!”脆炎,所以這章,會(huì)讓這個(gè)應(yīng)用在實(shí)際的互聯(lián)網(wǎng)中跑起來氓辣。

部署一個(gè)網(wǎng)站的大概步驟如下:

  1. 注冊(cè)一個(gè)域名(備案)
  2. 購買一個(gè)服務(wù)器
  3. 安裝萬維網(wǎng)服務(wù)
  4. 使用git將代碼上傳到服務(wù)器
  5. 使用virtualenv管理項(xiàng)目的python依賴
  6. 使用Gunicorn配置網(wǎng)站

安裝及配置服務(wù)器

首先秒裕,我們要注冊(cè)一個(gè)域名,這方面我想做開發(fā)的都應(yīng)該很熟悉钞啸,在萬網(wǎng)或新網(wǎng)以及各種小的代理商都可以几蜻,就不展開了。

然后体斩,還需要一個(gè)服務(wù)器梭稚,這個(gè)選擇也有很多,并且由于跑一個(gè)Python的站點(diǎn)需要的資源不是太多硕勿,所以哨毁,無論是阿里云,騰訊云源武,Amazon的AWS扼褪,微軟的azure想幻,甚至你箱子底下的一臺(tái)多年不用的BT服務(wù)器都行,只要能滿足以下條件:

  • 可以安裝Ubuntu(控制臺(tái)版本即可话浇,需要資源極少)
  • 自己有Ubuntu的root權(quán)限
  • 外網(wǎng)可訪問
  • 可以使用ssh控制

好吧脏毯,我推薦使用Ubuntu的原因是我只會(huì)用這個(gè),現(xiàn)在這些都很簡單幔崖,舉個(gè)例子食店,但并不是廣告,去阿里云官網(wǎng)赏寇,購買一個(gè)ecs實(shí)例吉嫩,之后選擇安裝操作系統(tǒng),可以選擇Ubuntu1604版本嗅定,輸入用戶名密碼自娩,他就會(huì)自動(dòng)安裝操作系統(tǒng),稍等一會(huì)渠退,在阿里云的控制臺(tái)顯示"運(yùn)行中"忙迁,即可使用:

這時(shí)候可以使用遠(yuǎn)程的ssh工具,輸入他的公網(wǎng)ip碎乃,以及之前輸入的用戶名密碼姊扔, 即可連接:

當(dāng)出現(xiàn)這些內(nèi)容,即表示已經(jīng)使用root賬戶聯(lián)通遠(yuǎn)程服務(wù)器梅誓,為了安全起見恰梢,可以自己配置一個(gè)非root賬戶,當(dāng)必須使用root權(quán)限的時(shí)候梗掰,使用sudo前綴即可:

useradd -m -s /bin/bash niufennan #添加niufennan賬戶
# m 表示創(chuàng)建home目錄删豺,s表示默認(rèn)可以使用bash(shell)
usermod -a -G sudo niufennan #將niufennan添加至sudo用戶組
passwd niufennan #設(shè)置密碼
su - niufennan #切換到niufennan用戶


當(dāng)然,其實(shí)最好的方式其實(shí)是使用私鑰認(rèn)證愧怜,關(guān)于這方面的內(nèi)容網(wǎng)上也有很多呀页,就不在展開。

安裝Nginx

在安裝軟件之前拥坛,最好先升級(jí)一下apt-get

sudo apt-get update

然后安裝并啟動(dòng)Nginx

sudo apt-get install nginx
sudo service nginx start

經(jīng)過一個(gè)安裝列表 并且啟動(dòng)服務(wù)后蓬蝶,即可在瀏覽器中通過ip地址訪問到nginx的歡迎頁:


Nginx可用了

接下來按照同樣的步驟安裝剩余所需的軟件(Python git pip)

sudo apt-get install git python3 python-pip

解析域名

總是使用ip訪問當(dāng)然是不行的,所以需要對(duì)域名進(jìn)行dns解析猜惋,這點(diǎn)不同的注冊(cè)商網(wǎng)站的解析界面都有所不同丸氛,但是我相信四處點(diǎn)擊幾次總會(huì)找到正確的方法。

安裝Gunicorn

Gunicorn是一個(gè)Python的http服務(wù)器著摔,使用起來非常簡單缓窜,安裝也很方便,,直接使用pip即可

sudo pip install gunicorn

準(zhǔn)備工作終于已經(jīng)完成禾锤,開始上傳代碼

安裝MySql

在Ubuntu上安裝mysql同樣非常簡單私股,只需要幾個(gè)命令就可以完成:

sudo apt-get install mysql-server 
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

其中安裝mysql-server的時(shí)候會(huì)出現(xiàn)讓輸入root密碼的界面,將焦點(diǎn)放置到ok按鈕上邊恩掷,回車后輸入密碼即可倡鲸。

然后在mysql中創(chuàng)建數(shù)據(jù)庫:

create database cblog default character set utf8 collate utf8_general_ci;

創(chuàng)建此數(shù)據(jù)庫的管理用戶

http://www.cnblogs.com/janken/p/5500320.html

此用戶可公網(wǎng)訪問,root數(shù)據(jù)庫則只能localhost訪問

上傳代碼

這里假設(shè)你已經(jīng)擁有g(shù)ithub賬戶并且熟悉簡單的git操作黄娘,并且已經(jīng)通過ssh公鑰方式與github庫關(guān)聯(lián)

首先峭状,到github中 創(chuàng)建一個(gè)庫,我的庫名字叫nblog

然后將文件push至遠(yuǎn)程庫(假設(shè)本地以及提交完成):

git remote add nblog 遠(yuǎn)程庫git地址
git push -u nblog master 

虛擬環(huán)境使用

到了這里逼争,突然發(fā)現(xiàn)之前的blog中优床,或者說開發(fā)中犯了一個(gè)嚴(yán)重的錯(cuò)誤,即沒有使用virtualenv誓焦,這個(gè)將導(dǎo)致在服務(wù)器上配置運(yùn)行環(huán)境將變成了一件非常繁瑣羔巢,困難,甚至變成挑戰(zhàn)自己極限的事情罩阵,不過好在還可以不就,那么启摄,首先在服務(wù)端安裝virtualenv吧:

sudo pip install virtualenv

然后自己的環(huán)境稿壁,只能不考慮其他,先打一個(gè)比較臃腫的包(全環(huán)境)

pip freeze > requirements.txt

這里會(huì)將本機(jī)所有的庫記錄歉备,到服務(wù)器端可以直接復(fù)原傅是,若有virtualenv,則會(huì)只記錄虛擬環(huán)境下的庫蕾羊,將非常的方便喧笔,下面看一下記錄中的內(nèi)容:

可以看到,雖然沒有細(xì)看龟再,但至少畫紅線的部分是本項(xiàng)目肯定沒有用到的书闸,可以手動(dòng)刪除。

將此文件添加至git庫中并推送到遠(yuǎn)程庫

git add requirements.txt
git commit -m "增加遷移文件"

git push -u nblog master

然后通過ssh鏈接到服務(wù)器利凑,到用戶的home文件夾浆劲,創(chuàng)建nblog文件夾

mkdir nblog

然后將git遠(yuǎn)程庫中的代碼復(fù)制到nblog文件夾中

git clone https://github.com/niufennan/nblog.git nblog/nblog.niufennan.com/source

注意,Linux下哀澈,目錄層級(jí)關(guān)系必須使用/

創(chuàng)建虛擬環(huán)境(此時(shí)在nblog.niufennan.com文件夾下)

sudo virtualenv  --python=python3 ../virtualenv

前一個(gè)為命令牌借,后一個(gè)為目錄名

virtualenv的使用方式有兩種,一種是執(zhí)行activete進(jìn)行環(huán)境切換割按,一種是直接指定virtualenv文件夾下的python和/或pip膨报,一般來講開發(fā)時(shí)可以切換,服務(wù)器直接指定路徑即可

在虛擬環(huán)境中安裝項(xiàng)目所用的庫:

sudo ../virtualenv/bin/pip3.5 install -r source/requirements.txt

這樣,就會(huì)將原本在開發(fā)機(jī)上記錄在requirements.txt上所有的庫都安裝在virtualenv的site-packages文件夾中

配置環(huán)境變量

這時(shí)候先別著急運(yùn)行现柠,別忘了有些值是配置在環(huán)境變量中的院领,主要有三個(gè):

access_key=os.environ.get("qn_access_key")
secret_key=os.environ.get("qn_secret_key")

SQLALCHEMY_DATABASE_URI=os.environ.get("nblog_mysql_str") 

其中七牛的都是公共的,以后即使有其他的應(yīng)用晒旅,這兩個(gè)依然不會(huì)變栅盲,sql鏈接字符串則是項(xiàng)目私有的,所有使用nblog前綴废恋。

vi /etc/profile

然后下拉到文檔最低端

好谈秫,現(xiàn)在在服務(wù)器上就可以跑起來了。

../virtualenv/python manage.py runserver

看看服務(wù)器:

這個(gè)時(shí)候鱼鼓,你肯定迫不及待的想要從自己的PC機(jī)上看到成果了拟烫,那么,該如何做呢迄本,在這里硕淑,我是把nblog這個(gè)二級(jí)域名分配給了這個(gè)輕博客,這樣嘉赎,需要對(duì)Nginx進(jìn)行一些配置置媳,首先進(jìn)入Nginx的目錄:

cd /etc/nginx

這里注意兩個(gè)目錄: sites-available和sites-enable,很好理解公条,看名字就能看出來拇囊,一個(gè)是備用一個(gè)是使用,下面在sites-available中新建我們所需要的nginx配置文件:

sudo vi nblog.niufennan.com

用vi創(chuàng)建后靶橱,輸入如下內(nèi)容:

server{
    listen 80;
    server_name nblog.niufennan.com;
    location / {
            proxy_pass http://127.0.0.1:5000;
    }   
}

很簡單寥袭,頁很好理解,即當(dāng)域名為nblog.niufennan.com的時(shí)候关霸,反向轉(zhuǎn)發(fā)到127.0.0.1:5000
保存后传黄,通過軟連接的方式,鏈接到sites-enable中

sudo ln -s /etc/nginx/sites-available/nblog.niufennan.com  /etc/nginx/sites-enable/nblog.niufennan.com

然后重啟nginx

sudo service nginx reload

啟動(dòng)服務(wù)

../virtualenv/python manage.py runserver

ok队寇,現(xiàn)在迫不及待的想要在本地訪問了膘掰,地址欄中輸入域名

nblog.niufennan.com

完美,但是此時(shí)做任何操作佳遣,都會(huì)報(bào)錯(cuò)炭序,因?yàn)閿?shù)據(jù)庫還沒有遷移,進(jìn)入項(xiàng)目目錄苍日,進(jìn)行數(shù)據(jù)庫遷移操作:

../virtualenv/python manage.py db init
../virtualenv/python manage.py db migrate -m "服務(wù)器"
../virtualenv/python manage.py db upgrade

注意惭聂,這里我遇到了一個(gè)問題,即數(shù)據(jù)庫遷移后的編碼為utf8相恃,中文會(huì)有亂碼問題辜纲,需手動(dòng)通過客戶端修改編碼為utf8mb4,不知是否有自動(dòng)化的方式,望高手解惑耕腾。

在運(yùn)行见剩,刷新數(shù)據(jù)庫,經(jīng)過簡單的測試扫俺,ok苍苞,完美:

但是,人生貌似就怕說但是狼纬,這個(gè)時(shí)候羹呵,生命周期僅僅是這個(gè)控制臺(tái),也就是說疗琉,一旦控制臺(tái)關(guān)閉了冈欢,對(duì)于現(xiàn)在來說,也就是xshell斷開連接盈简,則服務(wù)也就關(guān)閉了凑耻,即無法訪問了,那么柠贤,這時(shí)候香浩,應(yīng)該怎么辦呢?還記得剛剛安裝的獨(dú)角獸(Gunicorn)么臼勉?終于輪到它出馬了

../../virtualenv/bin/gunicorn -b 127.0.0.1:5000 -D manage:app

-b 表示使用ip及斷開
-D 表示后臺(tái)運(yùn)行

關(guān)于linux確實(shí)是小白邻吭,比如現(xiàn)在,其實(shí)應(yīng)該配置一個(gè)upstart坚俗,但配置多次始終不成功,如果有大牛希望能幫忙教教岸裙。

好猖败,就目前來說,至少一個(gè)簡單的降允,不考慮性能的輕博客已經(jīng)部署成功恩闻,下面想想還缺少的必須的功能:

  1. 郵件驗(yàn)證
  2. 用戶密碼加密及加鹽
  3. 對(duì)于發(fā)言的評(píng)論及反饋
  4. 有些發(fā)言的敏感詞過濾

等等,貌似功能還缺失很多剧董,但不管怎么說幢尚,現(xiàn)在也能算是一個(gè)小的里程碑了。想想翅楼,還是很了不起的:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尉剩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子毅臊,更是在濱河造成了極大的恐慌理茎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皂林,居然都是意外死亡朗鸠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門础倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烛占,“玉大人,你說我怎么就攤上這事沟启∫浼遥” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵美浦,是天一觀的道長弦赖。 經(jīng)常有香客問我,道長浦辨,這世上最難降的妖魔是什么蹬竖? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮流酬,結(jié)果婚禮上币厕,老公的妹妹穿的比我還像新娘。我一直安慰自己芽腾,他們只是感情好旦装,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摊滔,像睡著了一般阴绢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艰躺,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天呻袭,我揣著相機(jī)與錄音,去河邊找鬼腺兴。 笑死左电,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的页响。 我是一名探鬼主播篓足,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼闰蚕!你這毒婦竟也來了栈拖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤没陡,失蹤者是張志新(化名)和其女友劉穎辱魁,沒想到半個(gè)月后烟瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡染簇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年参滴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻弓。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砾赔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出青灼,到底是詐尸還是另有隱情暴心,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布杂拨,位于F島的核電站专普,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弹沽。R本人自食惡果不足惜檀夹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望策橘。 院中可真熱鬧炸渡,春花似錦、人聲如沸丽已。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沛婴。三九已至吼畏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘁灯,已是汗流浹背泻蚊。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旁仿,地道東北人藕夫。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓孽糖,卻偏偏與公主長得像枯冈,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子办悟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容