部署Wagtail CMS到Heroku

英文原文來自 https://wagtail.io/blog/deploying-wagtail-heroku/
文章是去年的媒至,較老了授瘦,可以對比 https://github.com/torchbox/wagtaildemo 該項(xiàng)目進(jìn)行學(xué)習(xí)

Heroku是一個好的平臺寇蚊,當(dāng)我們嘗試部署一個網(wǎng)站時(shí)肌似,它免去了很多系統(tǒng)管理的麻煩锭亏。但是你需要知道它的特質(zhì)來部署Wagtail。

  • 在本教程結(jié)束時(shí)茬腿,你會在Heroku上運(yùn)行一個簡單并能執(zhí)行工作的Wagtail內(nèi)容管理網(wǎng)站。
  • 開始前的準(zhǔn)備工作:
    • 你有一個Heroku的帳戶宜雀,并且已經(jīng)執(zhí)行了它的基本安裝說明切平。
    • 最好使用python3
    • Linux和OS X使用沒問題。但是Windows使用會有些小障礙辐董。

按常規(guī)創(chuàng)建自己的wagtail工程

wagtail start project .etc

  • 或者可以利用wagtaildemo-torchbox

使項(xiàng)目適用Heroku

  • 使用pip freeze或者直接添加requirements.txt文件內(nèi)容
pip install xxx
pip freeze > requirements.txt
# 以下為requirements.txt中部分內(nèi)容
# Dependencies for Heroku deployment
dj-database-url==0.3.0
whitenoise==2.0.4
uwsgi==2.0.11.2
  • 在項(xiàng)目根目錄創(chuàng)建Procfile文件悴品,并添加
    web: uwsgi --http :$PORT --module wagtaildemo.heroku_wsgi --master --processes 2 --static-map /media/=/app/media/ --offload-threads 1
    或者最簡情況
    web: gunicorn gettingstarted.wsgi
    Heroku 對它的解讀是,我們的應(yīng)用通過運(yùn)行 wsgi.py 啟動简烘,并且應(yīng)用將使用 gunicorn 作為 Web 服務(wù)器苔严。

在Heroku上使用指定版本的python

  • 在項(xiàng)目根目錄下創(chuàng)建runtime.txt文件铝宵,并添加python-3.4.3云稚,即你需要的Python版本。

為Heroku更新你的項(xiàng)目配置

  • 當(dāng)我們的app能被全網(wǎng)訪問時(shí)黄橘,我們要使用生產(chǎn)環(huán)境配置而不是本地開發(fā)配置亥至。我們的本地配置中Debug=True悼沈,并且使用了不安全的Django內(nèi)置靜態(tài)文件服務(wù)系統(tǒng)。
  • 首先姐扮,我們需要增加以下設(shè)置到我們的生產(chǎn)環(huán)境配置文件production.py中絮供。這些新的設(shè)置允許我們利用Heroku的PostgreSQL數(shù)據(jù)庫插件。要使Heroku能夠在它自動生成的域名上運(yùn)行我們的app茶敏,ALLOWED_HOSTS的設(shè)置是必須的壤靶。
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Allow all host headers
ALLOWED_HOSTS = ['*']

創(chuàng)建一個git庫

  • 在我們的app正式運(yùn)行之前,我們需要告訴Herko使用我們的生產(chǎn)環(huán)境配置文件惊搏。為此贮乳,我們需要創(chuàng)建一個git倉庫并且做初步的部署來讓Heroku來建立環(huán)境忧换。首先,我們需要創(chuàng)建一個.gitignore文件添加如下內(nèi)容
*.pyc
.DS_Store
*.swp
/venv/
/static/
/media/
.env

然后我們需要初始化我們的倉庫向拆,并做第一次提交亚茬,創(chuàng)建我們的Heroku app,并且提交我們的倉庫到Heroku浓恳。

git init
git add .
git commit -m "first commit to heroku"
heroku create 
# Creates a new Heroku app and connects it to your initialised git repo
git push heroku master 
# Pushes your commited code up to your new ap
heroku run python manage.py migrate 
# Heroku allows you to run shell commands remotely with the 'heroku run' command.
heroku run python manage.py createsuperuser
# Creates a new superuser on Heroku
heroku ps:scale web=1 
# Ensures that a new Dyno is running for your project

提交配置到Heroku

  • 我們希望我們的生產(chǎn)環(huán)境配置盡可能的安全刹缝,所以我們不想將他們保存在我們的git倉庫中。因此颈将,我們創(chuàng)建一個特殊的文件梢夯,它能夠?qū)⒛承┟舾信渲眯畔⑥D(zhuǎn)換為能被production.py文件引用的環(huán)境變量
  • 首先,我們在項(xiàng)目根目錄下創(chuàng)建一個.env文件晴圾。你會記得我們已經(jīng)將它加入了.gitignore文件颂砸。
  • 在文件中加入
DJANGO_SETTINGS_MODULE=project_title.settings.production
SECRET_KEY='####' #Replace this with your own randomly generated, 50 character key

第一行指定Heroku應(yīng)使用生產(chǎn)設(shè)置文件。第二個是站點(diǎn)密鑰死姚,為安全著想人乓,我們希望從我們的production.py文件之外引用它。

  • 為了使用上述配置知允,我們需要在production.py文件頂部加入:
import os
env = os.environ.copy()
SECRET_KEY = env['SECRET_KEY']

第一步我們將環(huán)境變量對象賦給一個本地變量撒蟀,然后在真正的配置文件中引用SECRET_KEY環(huán)境變量。
之后我們提交配置到Heroku温鸽。我們先安裝一個插件保屯,然后使用命令上傳:

heroku plugins:install git://github.com/ddollar/heroku-config.git
heroku config:push

最后,我們需要重新提交修改后的配置文件到Heroku:

git add .
git commit -m "Changing to use production settings"
git push heroku master
  • 恭喜涤垫!我們成功部署了wagtail到Heroku姑尺。
  • 現(xiàn)在可以通過命令heroku open來打開你的app,然后轉(zhuǎn)到/admin蝠猬。但是我們發(fā)現(xiàn)沒有任何的靜態(tài)文件提供的樣式和圖片切蟋,這是因?yàn)镈jango自身不能在生產(chǎn)環(huán)境提供靜態(tài)文件服務(wù)。
  • 下面我們開始使用Whitenoise來解決問題榆芦。

在Heroku上提供靜態(tài)文件服務(wù)

  • Whitenoise是一個python庫柄粹,它允許Django在不依賴CDN的情況下提供自己的靜態(tài)文件。我們先安裝它并添加到需求文件匆绣。
pip install whitenoise
pip freeze > requirements.txt
  • 然后我們通過修改wsgi.py文件來告訴Heroku我們要使用它:
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
#
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_title.settings")
#
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
  • 我們將使用Whitenoise的gzip功能驻右,并且激活離線壓縮功能,來產(chǎn)生admin界面的靜態(tài)資源崎淳。在production.py中添加如下內(nèi)容:
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
COMPRESS_OFFLINE = True
COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter',
]
COMPRESS_CSS_HASHING_METHOD = 'content'
  • 通常我們將在服務(wù)器上運(yùn)行命令python manage.py compress來產(chǎn)生靜態(tài)文件堪夭,然后一切OK。但是Heroku并不這樣工作。你可以登錄Heroku并且運(yùn)行compress森爽,但是當(dāng)你離開那個會話時(shí)那些壓縮文件就會被刪除恨豁。因此我們需要利用Heroku在部署過程中提供的鉤子,并且在部署時(shí)包含一組預(yù)處理命令爬迟。
  • 幸運(yùn)的是已經(jīng)有人為我們創(chuàng)建了一系列腳本來做所有我們需要做的事橘蜜,即heroku-django-cookbook。我們只需要簡單地將該倉庫中的bin文件夾拷貝到我們的工程根目錄雕旨。
  • 最后再次add扮匠,commit和push你的代碼,大功告成凡涩!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疹蛉,隨后出現(xiàn)的幾起案子活箕,更是在濱河造成了極大的恐慌,老刑警劉巖可款,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件育韩,死亡現(xiàn)場離奇詭異,居然都是意外死亡闺鲸,警方通過查閱死者的電腦和手機(jī)筋讨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摸恍,“玉大人悉罕,你說我怎么就攤上這事×⑾猓” “怎么了壁袄?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長媚媒。 經(jīng)常有香客問我嗜逻,道長,這世上最難降的妖魔是什么缭召? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任栈顷,我火速辦了婚禮,結(jié)果婚禮上嵌巷,老公的妹妹穿的比我還像新娘萄凤。我一直安慰自己,他們只是感情好晴竞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布蛙卤。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颤难。 梳的紋絲不亂的頭發(fā)上神年,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音行嗤,去河邊找鬼已日。 笑死,一個胖子當(dāng)著我的面吹牛栅屏,可吹牛的內(nèi)容都是我干的飘千。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼栈雳,長吁一口氣:“原來是場噩夢啊……” “哼护奈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哥纫,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤霉旗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛀骇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厌秒,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年擅憔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸵闪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑诸,死狀恐怖蚌讼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屠列,我是刑警寧澤啦逆,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站笛洛,受9級特大地震影響夏志,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苛让,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一沟蔑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狱杰,春花似錦瘦材、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朗和。三九已至,卻和暖如春簿晓,著一層夾襖步出監(jiān)牢的瞬間眶拉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工憔儿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忆植,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓谒臼,卻偏偏與公主長得像朝刊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜈缤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,963評論 1 3
  • Python 資源 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列的資源整理拾氓。a...
    葉冷隨記閱讀 7,798評論 1 225
  • Python 資源大全中文版 awesome-python[https://github.com/vinta/aw...
    萬色星辰閱讀 9,762評論 0 256
  • 最好的春節(jié)在童年,這是很多人的共同感覺底哥。 如果你也這樣認(rèn)為——恭喜你痪枫,這是你擁有“一個比較幸福的童年”的最好佐證。...
    小月同學(xué)閱讀 569評論 26 3
  • 一個是塵世放牛郎拒课,一個是九天織繡女,緣起偷衣裙事示,這樣的初識初遇早像,不如那場西湖大雨油紙傘,也不如書院癡情小姐扮儒生肖爵,...
    Young廣遇閱讀 279評論 5 2