本身嘗試在本地搭建了 Django 項目後,想部署到本身雲服務器上,常常屢次嘗試和屢次踩坑(捂臉),總結以下:html
環境:ubuntu14, django2.0, apache2。python
1.首先安裝須要的庫包,在 ubuntu 下執行以下指令,爲了能順利安裝建議使用 root 用戶登陸 Ubuntu 或在 apt-get 前加上 sudo :git
安裝 Apache2github
apt-get update #獲取更新列表 apt-get install apache2 #安裝 Apache2
apt-get install libapache2-mod-wsgi-py3 #讓 Apache2識別 Python 程序的請求,安裝 mod-wsgi模塊
確認安裝的 Apache2 版本號apache
apachectl -v
安裝和配置 Git(這是爲了從遠程文檔庫中推送遠程倉庫到本地,如需上線的 Django 項目)django
apt-get install git git config --global user.name 'yourname' git config --global user.email 'youremail'
安裝 Python 的 pip 組件管理程序和虛擬機環境程序 virtualenvubuntu
apt-get install python3-pip pip3 install virtualenv
2.配置遠程的 Django 項目vim
Linux 操做系統中的 Apache 網頁服務器通常會把網頁放在 /var/www/html 中,(安裝 Apache2後便生成 /var/www 目錄),因此咱們也將 Django 項目放在 /var/www 下。首先在 /var/www 下使用 virtualenv 建立虛擬環境並啓用,而後再使用 git clone 命令推送遠程 Django 項目分支到本地(這裏以我本身的倉庫爲例 https://github.com/weixuqin/myDjango.git),操做以下:瀏覽器
cd /var/www #移動到 /var/www 目錄下 virtualenv VENV #建立虛擬環境 VENV source VENV/bin/activate #激活虛擬環境 VENV git clone https://github.com/weixuqin/myDjango.git #克隆遠程倉庫到本地
cd myDjango/mblog #移動到項目目錄 pip install -r requirements.txt #安裝 requirements.txt文件中的庫包
接下來咱們可使用下列命令來啓動 Django 來訪問看看網站內容是否完整呈現。安全
python manage.py runserver 0:8000
3.修改settings.py,增長靜態文件等設置
正式上線的網站咱們不能經過使用 python manage.py runserver 這樣的方式啓用。應該經過網頁服務器(如 Apache)把遠程瀏覽器的請求轉送到 Django 程序中執行,再把執行後的結果經過 Apache 傳回給瀏覽器。
主要涉及到兩個文件,setting.py 和 wsgi.py。setting.py 負責作 Django 網站的相關設置,而 wsgi.py 負責建立一個可讓 Apache 順利轉交程序代碼以及返回執行結果的設置文件。
setting.py 中修改以下:
# SECURITY WARNING: keep the secret key used in production secret! #基於安全考慮,把原有 SECRET_KEYS的內容建立爲/etc/secret_key.txt 文件,並使用讀取的方式獲取 SECRET_KEYS 的內容
with open('/etc/secret_key.txt') as f: SECRET_KEY = f.read().strip() # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False #關閉 debug 模式,關閉後靜態文件不會自動加載,需指定路徑
ALLOWED_HOSTS = ['*'] #指定容許存取此網站的 IP 地址爲'*',表示不作任何限制
而後咱們修改 setting.py,讓靜態文件正常加載:
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] STATC_ROOT = '/var/www/staticfiles'
而後運行
python manage.py collectstatic
將全部STATICFILES_DIRS中全部文件夾中的文件,以及各app中static中的文件都複製到 STATIC_ROOT 指定的文件夾中,把這些文件放到一塊兒是爲了用apache等部署的時候更方便。
Linux 對文件權限很敏感,咱們還須要修改文件權限讓 Apache2 可以正確讀取到。
通常目錄權限設置爲 755,文件權限設置爲 644 。
cd /var/www/myDjango/mblog sudo chmod -R 644 zqxt sudo find mblog -type d | xargs chmod 755
4.修改 Apache 中的文件,讓網站上線
建立一個網站的配置文件
sudo vim /etc/apache2/sites-available/sitename.conf
這裏以個人配置文件爲例,可根據實際需求自行更改
<VirtualHost *:80>
#添加 wsgi.py 文件路徑和虛擬環境路徑
WSGIScriptAlias / /var/www/myDjango/mblog/mblog/wsgi.py WSGIDaemonProcess mblog python-path=/var/www/myDjango/mblog:/var/www/VENV/lib/python3.4/site-packages WSGIProcessGroup mblog
#添加靜態文件路徑
Alias /static/ /var/www/staticfiles/ <Directory /var/www/staticfiles> Require all granted </Directory>
#獲取 wsgi.py 中內容
<Directory /var/www/myDjango/mblog/mblog> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
切換到目錄:/etc/apache2/sites-available/ 運行:
sudo service apache2 reload sudo a2dissite 000-default && sudo a2ensite sitename.conf sudo service apache2 restart
接着輸入 服務器 IP 地址,若是成功,你將看到網站顯示正常的內容,後續能夠經過將域名解析到服務器等方式來訪問。
我本身的以下:
**PS:本身將域名解析到服務器後網站一直報500錯誤,可是本身經過 IP 地址訪問卻一切正常,查找下緣由,發現是解析域名到服務器,服務器若是在國內的,須要備案,否則是沒法訪問的,而本身恰巧是騰訊雲的國內服務器,查找了很久,才發現一直報錯是什麼緣由(捂臉)。