邢光斌 王琴竹
摘要:Python語(yǔ)言是目前最熱門的程序設(shè)計(jì)語(yǔ)言之一,提供了類似Django、Flask等流行的網(wǎng)站框架,讓學(xué)生可以輕松搭建網(wǎng)站。本地測(cè)試成功后,在服務(wù)器端的部署成為一個(gè)難題。文章介紹了Django項(xiàng)目在CentOS7系統(tǒng)下的部署,并對(duì)部署過程中可能會(huì)遇到的問題進(jìn)行了解決。
關(guān)鍵詞:Python;Django;CentOS7環(huán)境部署
中圖分類號(hào):TP303? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)28-0248-03
Abstract:Python is one of the most popular programming languages at present. It provides a popular website framework like Django and Flask, which makes it easy for students to build websites. After successful local testing, deployment on the server side becomes a challenge. This paper introduces the deployment of Django project under CentOS7 system, and solves the problems that may be encountered in the deployment process.
Key words:Python;Django;CentOS7 Environmental Deployment
隨著人工智能、大數(shù)據(jù)時(shí)代的到來,Python語(yǔ)言已成為最熱門的程序設(shè)計(jì)語(yǔ)言之一,對(duì)于初學(xué)程序設(shè)計(jì)的學(xué)生來說,能夠用所學(xué)知識(shí)開發(fā)一個(gè)項(xiàng)目不但可以激發(fā)其學(xué)習(xí)興趣,而且可以提高自信心。Python提供了Django、Flask等流行的網(wǎng)站框架[1],讓學(xué)生可以輕松搭建網(wǎng)站。但在本地測(cè)試成功后,在服務(wù)器端的部署往往是學(xué)生們較難解決的問題。Django項(xiàng)目在本地測(cè)試無誤后,還需要將項(xiàng)目上傳至購(gòu)買的服務(wù)器進(jìn)行部署,這是開發(fā)項(xiàng)目至關(guān)重要的一步。文章從購(gòu)買基于Linux的CentOS7系統(tǒng)開始[2],介紹了各類軟件的安裝、防火墻的配置、數(shù)據(jù)庫(kù)的創(chuàng)建、代碼上傳前的修改、代碼的服務(wù)器端環(huán)境部署、域名的解析等步驟,并對(duì)可能出現(xiàn)的問題提出了解決方案。
1 軟件運(yùn)行環(huán)境的安裝
1.1 安裝工具類軟件
與Windows系統(tǒng)一樣,為了方便操作,我們需要安裝一些工具類軟件。
在CentOS7中,使用“yum install 軟件名”來安裝軟件。在本項(xiàng)目部署中,需要用到的軟件有三個(gè):
(1)文本編輯器軟件Vim
(2)文件上傳下載軟件lrzsz
(3)文件解壓軟件unzip
1.2 安裝Nginx
在服務(wù)器端,常用的代理服務(wù)器有“Apache”和“Nginx”兩種。“Nginx”是一個(gè)很強(qiáng)大的高性能Web和反向代理服務(wù),且能夠支持高達(dá)50000個(gè)并發(fā)連接數(shù)的響應(yīng),被更多的用于企業(yè)級(jí)項(xiàng)目中。因此,選用Nginx作為項(xiàng)目部署的服務(wù)器。
Nginx與其他服務(wù)器端軟件不同,在安裝時(shí),需要下載對(duì)應(yīng)當(dāng)前系統(tǒng)版本的Nginx包。然后進(jìn)入“tmp”目錄,通過“wget”工具獲取安裝包。具體如下:
(1)在http://nginx.org/packages/centos/7/noarch/RPMS/nginx- release-centos
-7-0.el7.ngx.noarch.rpm處下載安裝包。
(2)建立Nginx的yum倉(cāng)庫(kù):rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm。
(3)安裝Nginx:yum install nginx
至此,Nginx就安裝完成了,下一步通過“service nginx start” 命令啟動(dòng)Nginx。
1.3 安裝Mysql
Mysql是一款常用的免費(fèi)數(shù)據(jù)庫(kù)軟件,被廣泛應(yīng)用。因?yàn)長(zhǎng)inux系統(tǒng)默認(rèn)安裝了Mariadb數(shù)據(jù)庫(kù),需要使用“yum remove mariadb-libs.x86_64”將Mariadb數(shù)據(jù)庫(kù)卸載。然后通過“yum install mysql-devel”安裝Mysql開發(fā)用到的庫(kù)以及包含文件。
Mysql客戶端的安裝與Nginx 大致相同,需要去Mysql官網(wǎng)下載相對(duì)應(yīng)的Mysql版本安裝包進(jìn)行本地安裝。具體如下(以Mysql5.7為例,需要進(jìn)入“/tmp”目錄下):
(1)在wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm處下載安裝包。
(2)安裝源:yum localinstall mysql57-community-release-el7-8.noarch.rpm
(3)安裝Mysql:yum install mysql-community-server
(4)啟動(dòng)Mysql:service mysqld start
至此,Mysql已經(jīng)安裝成功。一般還需要獲取Mysql的默認(rèn)密碼進(jìn)入數(shù)據(jù)庫(kù),并修改數(shù)據(jù)庫(kù)的密碼,具體如下:
(1)獲取密碼:cat /var/log/mysqld.log | grep password。默認(rèn)的登錄密碼如圖1中畫線部分所示。
(2)輸入“mysql -uroot -p”按回車鍵后,在Password中輸入密碼進(jìn)入數(shù)據(jù)庫(kù)。
(3)通過“SET PASSWORD = PASSWORD('新密碼');”修改密碼。
1.4 安裝Python所需的環(huán)境
Linux系統(tǒng)默認(rèn)安裝了Python,還需要安裝Python的運(yùn)行環(huán)境。以Python2.7為例,依次安裝以下所有的安裝包:
(1)yum install python2-pip
(2)yum install gcc-c++ -y
(3)yum install ncurses-devel –y
(4)yum install zlib-devel
(5)yum install bzip2-devel
(6)yum install openssl-devel
(7)yum install ncurses-devel
(8)yum install sqlite-devel
(9)yum install -y gcc
(10)yum install python-devel
1.5 安裝項(xiàng)目所需的依賴包
運(yùn)行環(huán)境安裝完成后就可以安裝項(xiàng)目所需要的依賴包了?!癕ySQL-python”在安裝過程中最容易,單獨(dú)的通過Pip命令進(jìn)行安裝即可:pip install MySQL-python。
如果安裝中遇到問題,需要檢查環(huán)境安裝包是否全部安裝。
由于Django項(xiàng)目所需要的依賴包較多[3],如果挨個(gè)安裝會(huì)很浪費(fèi)時(shí)間,因此,可以在本地運(yùn)行Django項(xiàng)目,并在命令行中輸入“ pip freeze > Requirements.txt”導(dǎo)出所有的依賴包文件,并將文件上傳到“/Tmp”目錄下。
然后通過命令: pip install -r Requirements.txt 批量安裝所需要的依賴包即可。如果中途不報(bào)錯(cuò),表示安裝成功。
如果中途遇到安裝錯(cuò)誤的問題,要將前面安裝過的依賴包進(jìn)行刪除,從報(bào)錯(cuò)的安裝包重新開始安裝,且一定要將所有依賴包都安裝成功。
2 創(chuàng)建數(shù)據(jù)庫(kù)
Django項(xiàng)目的運(yùn)行離不開數(shù)據(jù)庫(kù),需要新建一個(gè)數(shù)據(jù)庫(kù)。如果使用“CREATE DATABASE 數(shù)據(jù)庫(kù)名”創(chuàng)建數(shù)據(jù)庫(kù),在運(yùn)行Django項(xiàng)目時(shí)會(huì)出現(xiàn)一些錯(cuò)誤。因此,本文專門提出創(chuàng)建方法,防止后期因?yàn)閿?shù)據(jù)庫(kù)引起的問題。具體如下:
進(jìn)入數(shù)據(jù)庫(kù)后,輸入“CREATE DATABASE 數(shù)據(jù)庫(kù)名 DEFAULT CHARACTER SET utf8 COLLATE utf8_General_Ci;”創(chuàng)建數(shù)據(jù)庫(kù)。這里添加了數(shù)據(jù)庫(kù)的編碼格式為Utf-8。如果使用的編碼為“GBK”則只需要“CREATE DATABASE 數(shù)據(jù)庫(kù)名”即可。
3 Django項(xiàng)目的配置修改
在項(xiàng)目上傳前,需要對(duì)項(xiàng)目中的“settings.py”配置文件進(jìn)行修改。具體步驟如下:
第一步:將數(shù)據(jù)庫(kù)信息修改為服務(wù)器端的數(shù)據(jù)庫(kù),HOST依舊為localhost。如圖2所示。
第二步:在本地項(xiàng)目中,往往需要添加靜態(tài)文件地址,如圖3所示。
第三步:在上傳服務(wù)器之前,還需要將圖中陰影部分的三行替換為“STATIC_ROOT = os.path.join(BASE_DIR, "static/")”。
為了不出現(xiàn)Utf-8編碼的錯(cuò)誤,在文件頭部添加“DEFAULT_CHARSET = 'utf-8'”。
第四步:修改訪問權(quán)限。項(xiàng)目上傳前,需將“DEBUG”模式調(diào)成False,并將下方的HOSTS進(jìn)行如圖4所示的設(shè)置,其中最后一項(xiàng)為自己的域名地址。
4 Django項(xiàng)目的上傳與測(cè)試
項(xiàng)目上傳前要將修改好的Django項(xiàng)目壓縮為.Zip格式,并在服務(wù)器端新建項(xiàng)目的根目錄(將“/Data/Www”作為項(xiàng)目的根目錄)。
1)通過“mkdir -p /data/www”創(chuàng)建根目錄,并通過“cd /data/www”進(jìn)入根目錄下。
2)通過 “rz” 功能,將本地文件上傳至服務(wù)器端。
3)通過“Unzip 壓縮包名”,將文件解壓。
4)進(jìn)入文件目錄中,通過“python manage.py createsuperuser ”和“python manage.py migrate ”創(chuàng)建數(shù)據(jù)庫(kù)。
5)與本地運(yùn)行項(xiàng)目一樣,通過“python manage.py createsuperuser ”創(chuàng)建超級(jí)用戶。
6)通過“python manage.py collectstatic” 將所有的靜態(tài)文件收集到 “Static” 文件下。該步驟必須有,否則網(wǎng)站可以運(yùn)行但缺少樣式文件。
7)通過“python manage.py runserver 8000” 在服務(wù)器本地運(yùn)行項(xiàng)目,如果正常運(yùn)行,則表明部署成功,如果報(bào)錯(cuò),則將提示問題進(jìn)行修改,直至運(yùn)行成功。
5 項(xiàng)目的最終部署
項(xiàng)目測(cè)試成功后,需要將服務(wù)器與域名進(jìn)行綁定,這樣才可以通過域名訪問網(wǎng)站[4]。首先,需要登錄購(gòu)買域名的后臺(tái),找到域名解析,并按照提示進(jìn)行設(shè)置。需要注意的是,解析時(shí),主機(jī)的IP地址一定要填寫外網(wǎng)IP。
為了能通過外網(wǎng)訪問項(xiàng)目,需要對(duì)Nginx進(jìn)行相關(guān)的配置。
1)通過“cd /etc/nginx/conf.d”進(jìn)入Nginx的配置文件夾中。
2)通過“vim django.conf”新建一個(gè)Nginx的配置文件。
3)編輯文件內(nèi)容并保存:
4)一切就緒后,需要修改防火墻的配置,開通80端口,讓外部能夠訪問:
通過“vim /etc/sysconfig/iptables” 打開防火墻的配置文件,在文件中,加入
“-A INPUT –p tcp –m state –state NEW –m tcp –dport 80 –j ACCEPT”后保存。
5)修改完成后,通過“service nginx restart ”重啟Nginx服務(wù)。
6)通過 “nohup python manage.py runserver 8000&” 將項(xiàng)目在后臺(tái)運(yùn)行
此時(shí),通過域名訪問即可訪問到網(wǎng)站。
6 結(jié)語(yǔ)
本文對(duì)搭建網(wǎng)站在本地測(cè)試成功后,在服務(wù)器端的部署問題進(jìn)行了詳細(xì)的介紹。通過對(duì)各類軟件的安裝防火墻的配置、數(shù)據(jù)庫(kù)的創(chuàng)建、代碼上傳前的修改、代碼的服務(wù)器端環(huán)境部署、域名的解析等步驟的介紹,解決了搭建網(wǎng)站過程中的關(guān)鍵問題。
本文中與Python項(xiàng)目有關(guān)的搭建流程,僅適用于Python2版本編輯的Django項(xiàng)目,其余的服務(wù)器部署、數(shù)據(jù)庫(kù)搭建等在所有項(xiàng)目搭建中都適用。本文介紹的部署過程并沒有太多的考慮除防火墻之外的其他保護(hù)網(wǎng)站安全的措施,因此,搭建步驟僅適用于學(xué)習(xí)與研究,并不適用于企業(yè)級(jí)項(xiàng)目的部署。
參考文獻(xiàn):
[1] 陳勇.基于Django框架的實(shí)時(shí)課堂投票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].大連理工大學(xué),2014.
[2] 楊明.基于CentOS操作系統(tǒng)部署NTP服務(wù)[J].電子世界,2018(23).
[3] 曹駿.基于Django的數(shù)據(jù)收集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南京大學(xué),2013.
[4] 于濤.基于CentOS平臺(tái)Tomcat的部署與配置[J].科技咨詢,2014(08).
【通聯(lián)編輯:代影】