CentOS7.4 部署 Django + Python3 + Apache + Mod_wsgi

安裝環(huán)境

  • Remote: CentOS 7.4 x64 (django.example.com)

  • Python: Python3.6.5

  • Apache: Apache 2.4.6

  • Mod_wsgi: 4.6.4

  • Django: Django 2.0.4

一. 系統(tǒng)環(huán)境配置

1.關(guān)閉 iptables 和 selinux

# su - root

# service iptables stop

# setenforce 0

# vi /etc/sysconfig/selinux

修改

SELINUX=disabled

2.添加本地 host DNS

# vi /etc/hosts
127.0.0.1    django.example.com

二. Python 配置

1.安裝 python3.6.5 源及依賴包

# yum install epel-release -y

# yum groupinstall "Development tools" -y

# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel zx-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel -y

2.編譯安裝 python3.6.5 以及 pip package manager

# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz --no-check-certificate

# tar xf Python-3.6.5.tar.xz

# cd Python-3.6.5

# ./configure --prefix=/usr/local --with-ensurepip=install --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# make && make altinstall

3.安裝 virtualenv

# pip3.6 install --upgrade pip

# pip3.6 install virtualenv

三. Django 環(huán)境配置

1. 配置 Django virtualenv

# mkdir -p /var/www/html/django

# cd /var/www/html/django

# virtualenv -p /usr/local/bin/python3.6 .py3env

2. 開啟 virtualenv python3 環(huán)境

# source .py3env/bin/activate

3. 在此環(huán)境安裝 Django 相關(guān)模塊

# pip install django pymysql

四. Apache 配置

1. 安裝 apache package

# yum install httpd httpd-devel -y

2.安裝 mod_wsgi for python3

Tip:這里其實(shí)是一個遠(yuǎn)古巨坑, 網(wǎng)上 90% 以上資料的會粗心的直接使用 yum install mod_wsgi 去安裝 apache mod_wsgi 模塊, 這樣做其實(shí)最終 mod 模塊會調(diào)用本地默認(rèn)的 python2 的所有庫文件, 無論你后面如何配置 django 入口文件, apache 都不會使用我們配置的 virutalenv 下隔離的 python3, 導(dǎo)致 apache 無法調(diào)用 python3 而報(bào)錯. 這里小伙伴要注意哦.

# pip install mod_wsgi 

3.導(dǎo)出 apache 所需的 mod_wsgi 模塊

# mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"WSGIPythonHome "/var/www/html/.py3env"

4.配置 apache 配置文件

# vi /etc/httpd/conf/httpd.conf

末行添加:

LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
# vi /etc/httpd/conf.d/django.conf
Alias /static /var/www/html/django/static
<Directory /var/www/html/django/static>
Require all granted
</Directory>

<Directory /var/www/html/django/myproject>
 <Files wsgi.py>
   Require all granted
 </Files>
</Directory>

WSGIPythonHome "/var/www/html/django/.py3env"

Listen 8080
<VirtualHost *:8080>

ServerName django.example.com

WSGIDaemonProcess myproject python-path=/var/www/html/django/.py3env/lib/python3.6/site-pachages
WSGIScriptAlias / /var/www/html/django/myproject/wsgi.py

</VirtualHost>

5.重啟 apache 并設(shè)置開機(jī)自啟動

# systemctl restart httpd

# systemctl enable httpd

五. Django 項(xiàng)目配置

1. 保證 virtualenv python3 環(huán)境開啟

# source /var/www/html/django/.py3env/bin/activate

2.創(chuàng)建一個 Django 項(xiàng)目

# cd /var/www/html/django/

# django-admin startproject myproject .

3.添加 static 目錄

# vi myproject/settings.py

末行添加:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

4.創(chuàng)建本地 SQLlite 文件

Tip:這里使用 SQLlite 代替其他數(shù)據(jù)庫作為我們項(xiàng)目的 DB

# ./manage.py makemigrations

# ./manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying contenttypes.0002_remove_content_type_name... OK
 Applying auth.0002_alter_permission_name_max_length... OK
 Applying auth.0003_alter_user_email_max_length... OK
 Applying auth.0004_alter_user_username_opts... OK
 Applying auth.0005_alter_user_last_login_null... OK
 Applying auth.0006_require_contenttypes_0002... OK
 Applying auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying auth.0009_alter_user_last_name_max_length... OK
 Applying sessions.0001_initial... OK

5.創(chuàng)建項(xiàng)目管理員賬戶

# ./manage.py createsuperuser
Username (leave blank to use 'root'): root
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.

6.生成項(xiàng)目靜態(tài)文件目錄

# ./manage.py collectstatic

7.修改 wsgi 入口文件

# vi myproject/wsgi.py
import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
sys.path.append('/var/www/html/django')

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

8.添加ALLOWED_HOSTS

# vi myproject/settings.py

Update:

ALLOWED_HOSTS = ['django.example.com']

9.修改項(xiàng)目屬主和權(quán)限

# chmod -R 755 /var/www/html

# chown -R apache:apache /var/www/html

查看最終目錄下的生成的項(xiàng)目文件

# ls -l
-rwxr-xr-x 1 apache apache 38912 Apr 16 15:04 db.sqlite3
-rwxr-xr-x 1 apache apache   541 Apr 16 14:50 manage.py
drwxr-xr-x 3 apache apache  4096 Apr 16 15:21 myproject
drwxr-xr-x 3 apache apache  4096 Apr 16 15:05 static

最終瀏覽器訪問 django 項(xiàng)目

Tip:保證 windows 本地添加 django 服務(wù)器的 HOST 域名

django 測試頁面

項(xiàng)目主頁, 輸入之前創(chuàng)建的管理員賬號密碼

項(xiàng)目后臺

Finished...

轉(zhuǎn)載|本文由(showerlee)原創(chuàng)
原文鏈接:http://www.showerlee.com/archives/2511

公告通知

自動化運(yùn)維班锚扎、架構(gòu)師班洞翩、區(qū)塊鏈正在招生中

各位小伙伴們检号,歡迎試聽和咨詢:


掃碼添加小助手微信,備注"公開課稽鞭,來源簡書",進(jìn)入分享群
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末引镊,一起剝皮案震驚了整個濱河市朦蕴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弟头,老刑警劉巖吩抓,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赴恨,居然都是意外死亡疹娶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門伦连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雨饺,“玉大人,你說我怎么就攤上這事惑淳《罡郏” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵歧焦,是天一觀的道長移斩。 經(jīng)常有香客問我,道長绢馍,這世上最難降的妖魔是什么叹哭? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮痕貌,結(jié)果婚禮上风罩,老公的妹妹穿的比我還像新娘。我一直安慰自己舵稠,他們只是感情好超升,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布入宦。 她就那樣靜靜地躺著,像睡著了一般室琢。 火紅的嫁衣襯著肌膚如雪乾闰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天盈滴,我揣著相機(jī)與錄音涯肩,去河邊找鬼。 笑死巢钓,一個胖子當(dāng)著我的面吹牛病苗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播症汹,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼硫朦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了背镇?” 一聲冷哼從身側(cè)響起咬展,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞒斩,沒想到半個月后破婆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胸囱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年荠割,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旺矾。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔑鹦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箕宙,到底是詐尸還是另有隱情嚎朽,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布柬帕,位于F島的核電站哟忍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陷寝。R本人自食惡果不足惜锅很,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凤跑。 院中可真熱鬧爆安,春花似錦、人聲如沸仔引。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翘簇,卻和暖如春撬码,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背版保。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工呜笑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彻犁。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓叫胁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親袖裕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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