Django + Apache 部署

吐吐槽

此篇blog將詳細記錄部署Django的每一個步驟,網上現有的教程實在太少太老了!!第一次嘗試後臺很懵,踩了一些坑,最坑的地方是安裝的wsgi部分模塊需要更新。B站真是個學習的地方,竟發現了楊老師的部署視頻,楊老師的B站主頁放於文末(主頁有一系列的django學習視頻,推薦乾貨

用於部署的項目demo主要用了Django REST framework 提供後臺api,所以靜態文件僅有Django REST framework部分的。但是部署過程基本是一樣的

以下是項目demo的GitHub地址,由於是第一次使用python和後臺相關的東西,代碼寫得可能比較差,此blog主要用於記錄部署步驟
https://github.com/Joeoeoe/my...

考慮一個服務器有多個Django項目,這裏使用了virtualenv和mod_wsgi daemon mode(守護進程模式)

過程中的坑點儘量指出

環境

騰訊雲Ubuntu 16.04.1
tips:根據不同機器或者用戶有時會出現權限問題

思路

以下是部署思路

服務器安裝基本軟件

software-properties-common安裝
python版本更新
pip安裝及更新
MySQL8.0安裝
git(傳項目,用filezilla等也可以,這裏我們用GitHub,另外settings.py不建議放上GitHub,這裏僅是做個演示,所以沒有分離上傳)
virtualenv 安裝

tips:這裏爲了演示django的本地虛擬服務器,暫時先不安裝apache2

項目準備

從GitHub上clone項目
創建virtualenv虛擬環境,並安裝相關依賴

項目部署

apache2安裝
wsgi安裝及更新
編寫配置文件.conf
激活網站
收集靜態文件(這一步當然也可以放在前面)

主要思路以上

一、服務器安裝基本軟件

1.安裝software-properties-common及python更新

Ubuntu初始的python版本是2.7和3.5,這裏我們要更新成3.6,並更換軟鏈接
先更新

sudo apt-get install software-properties-common //管理軟件庫
sudo apt-add-repository ppa:jonathonf/python-3.6  //加入python3.6
sudo apt-get update //更新列表
sudo apt-get install python3.6

更改軟連接

cd /usr/bin
sudo rm python
sudo ln -s python3.6 python 
sudo rm python3
sudo ln -s python3.6 python3

2.pip安裝及更新

sudo apt-get install python3-pip //安裝完後是8.1.1,指向python 3.6,pip需要升級

pip3 list  //可查看已安裝依賴

pip3 install --upgrade pip  //升級,升級之後有個很神奇的地方,只能使用pip而不能使用pip3了
                            //例如輸入pip -V或pip3.6 -V會顯示18.1版本,而輸入pip3 -V會報錯。
                           //但是斷開鏈接重新登錄就三個命令都能用了。

3.MySQL安裝

這裏不使用sudo apt-get install mysql-server安裝,因爲它默認裝5.7的版本,這裏裝MySQL8.0
這是官網apt鏈接https://dev.mysql.com/downloa...,點擊download後進去新的頁面右鍵複製鏈接地址

clipboard.png

把軟件包放到/home/ubuntu目錄裏吧

cd /home/ubuntu
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb //獲得軟件包,這個鏈接正是
                                                                 //複製來的鏈接                                                  

clipboard.png

這是下載好的軟件包,接下來dpkg,選擇配置吧

sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

配置都選8.0
clipboard.png

確定完兩個配置後最後選ok
clipboard.png

更新軟件列表並安裝MySQL

sudo apt-get update
sudo apt-get install mysql-server

接着輸入密碼,選擇加密方式就ok了,這裏加密方式我選擇第一個

4.git和virtualenv安裝

sudo apt-get install git
pip3 install --user virtualenv

二、項目準備

這裏步驟都很簡單

1.從GitHub上clone項目

我們把項目放到/home/ubuntu下

cd /home/ubuntu
git clone https://github.com/Joeoeoe/mysite.git

2.創建虛擬環境,安裝依賴

虛擬環境創建到/home/ubuntu下,取名爲mysite_env,並且激活進入虛擬環境

virtualenv mysite_env
source mysite_env/bin/activate

顯示如下表示我們已進入虛擬環境

clipboard.png

通過pip list命令可以看見我們此環境下只有基本依賴

clipboard.png

接着安裝依賴,這裏有一個非常方便的方法,就是使用項目中的**`requirements.txt中

cd /home/ubuntu/mysite
pip install -r requirments.txt

pip list之後就可以查看我們已安裝的依賴了

clipboard.png

ok,接下來進入MySQL創建我們的數據庫blog_db

CREATE DATABASE `blog_db` CHARACTER SET utf8 COLLATE utf8_general_ci;

然後到項目目錄下完成遷移,並啓動虛擬服務器

$python manage.py makemigrations
$python manage.py migrate
$python manage.py runserver 0.0.0.0:8000

輸入你的ip地址加端口號

clipboard.png
正常情況下會看到這個頁面

clipboard.png
這時我們得在settings.py中添加允許的http_host

ALLOWED_HOSTS = ["*"]

要限定host的話自己更改吧

再次啓動虛擬環境,訪問ip地址加端口號,按我的項目,因爲沒有首頁,所以會顯示如下

clipboard.png

我有寫一個test_view接口進行測試,加上/test_view/,接着會顯示Django REST framework的接口界面

clipboard.png

ok,到這裏沒問題的話,環境已經都安裝完成了。接下來是激活和部署階段了。

三、部署激活

1.安裝apache2和mod_wsgi

安裝apache是沒什麼問題的,這裏比較麻煩的是mod_wsgi

sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3

安裝完這兩個後,我們看看坑點在哪裏

cd /usr/lib/apache2/modules

到此目錄下查看內容,會發現

clipboard.png
mod_wsgi.so模塊是軟鏈接,並且指向mod_wsgi.so-3.5,這裏說實話不清楚是什麼原因,如果沒有對這個模塊進行更新的話,部署會出錯,這時要從mod_wsgi官網下載源代碼進行安裝,官網下載鏈接放在文末

//需要安裝apache和python對應dev包
sudo apt-get install apache2-dev
sudo apt-get install python3.6-dev

尋着mod_wsgi官網到GitHub上找到下載鏈接

clipboard.png

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz //也放到/home/ubuntu目錄下後進行解壓
tar xvfs 4.6.5.tar.gz
cd mod_wsgi-4.6.5/  //這是解壓出來的文件

可以看到裏面有個.configure腳本,它可以用來進行安裝配置,運行此腳本會在系統中尋找apxs或apx和python並提供合適的安裝配置,但是由於版本或系統的原因,這裏最好手動指定路徑

whereis apxs
whereis python

這裏我apxs的路徑爲/usr/bin/apxs
python使用的是3.6,所以選擇/usr/bin/python3.6
運行.configure腳本,不同地址對應換一下就好了

./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python3.6
make //編譯,若安裝失敗,記得先執行make clean
sudo make install

看看模塊有沒有更新

ls /usr/lib/apache2/modules/

clipboard.png
嗯,現在不是軟鏈接了,接下來編寫網站配置文件

2.編寫網站配置文件

cd /etc/apache2/sites-availablesudo vim mysite.conf

因爲使用了virtualenv和mod_wsgi daemon mode(守護進程模式),所以配置多了一點點

<VirtualHost *:80>
  #訪問網站以哪個目錄開始,第二個參數填寫路徑
  WSGIScriptAlias / /home/ubuntu/mysite/mysite/wsgi.py  
  <Directory /home/ubuntu/mysite/mysite>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
  #開放靜態目錄
  Alias /static/ /home/ubuntu/mysite/static/
  <Directory /home/ubuntu/mysite/static>
    Require all granted
  </Directory>

  #開放上傳文件夾
  Alias /media/ /home/ubuntu/mysite/media/
  <Directory /home/ubuntu/mysite/media>
    Require all granted
  </Directory>

  #以下開始是因爲使用了virtualenv部署
  #第一個路徑是虛擬環境路徑,第二個是項目所在路徑
  WSGIDaemonProcess mysite python-home=/home/ubuntu/mysite_env python-path=/home/ubuntu/mysite
  #分組
  WSGIProcessGroup mysite
</VirtualHost>

保存退出

sudo a2ensite mysite.conf //激活
sudo a2dissite 000-default.conf //關閉自身站點
apache2ctl configtest //檢查配置有無問題,有的話自行解決
sudo apache2ctl restart

雖然還沒有手機靜態文件,但這時已經可以通過公網訪問了

clipboard.png

接下來做一下收集靜態文件的操作就好了

3.靜態文件收集

settings.py中添加此代碼,讓靜態文件都收集到此目錄下

STATIC_ROOT = '/home/ubuntu/mysite/static/'

虛擬環境裝了django,虛擬環境下運行命令

python manage.py collectstatic

刷新網頁,現在就ok了!完,附參考學習資料

clipboard.png

參考資料:

楊老師b站Django教程主頁:
https://space.bilibili.com/25...

Django靜態文件部署
https://docs.djangoproject.co...

apache部署Django
https://docs.djangoproject.co...

mod_wsgi官網快速安裝指南
https://modwsgi.readthedocs.i...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章