CentOS7 + Python3 + Django(rest_framework) + MariaDB + nginx + uwsgi 部署 API 開發環境

ryoma發表於2019-02-22

這是一個 Django 環境部署教程,也是一個我坑爹的 Django 環境部署記錄:

開始擼程式碼之前有兩點需要提醒:

  1. 本教程完美適配如題開發環境但不侷限於此環境,其他開發環境僅需將命令操作轉換為當前環境下的命令即可;
  2. 我寫作的順序是我個人體驗比較好的操作順序僅供參考;

開擼:

1. MariaDB 的安裝與部署

# yum 安裝
yum -y install mariadb mariadb-server mariadb-devel

# 安裝完成MariaDB,首先啟動MariaDB
systemctl start mariadb
# 設定開機啟動
systemctl enable mariadb

# 接下來進行MariaDB的相關簡單配置
mysql_secure_installation

#首先是設定密碼,會提示先輸入密碼
Enter current password for root (enter for none):# 初次執行直接回車

#設定密碼
Set root password? [Y/n] # 是否設定root使用者密碼,輸入y並回車或直接回車
New password: # 設定root使用者的密碼
Re-enter new password: # 再輸入一次你設定的密碼

#其他配置
Remove anonymous users? [Y/n] # 是否刪除匿名使用者
Disallow root login remotely? [Y/n] #是否禁止root遠端登入
Remove test database and access to it? [Y/n] # 是否刪除test資料庫
Reload privilege tables now? [Y/n] # 是否重新載入許可權表

#初始化MariaDB完成,接下來測試登入
mysql -uroot -ppassword
複製程式碼

注意:切記安裝 mariadb-develUbuntu 下是 mysql-devlibmysqlclient-dev)否則在下面安裝 Pythonmysqlclient 包的時候可能會出現 mysql_config not found 的錯誤。

2. Python3 的安裝與部署

CentOS 中預設安裝了 Python2 如果你是基於 Python2 開發的話可以直接使用,但也要注意版本儘量升級到 Python2 的最新版。

2.1 安裝 Python3 所需依賴

CentOS 裡面是 XXX-devel,如果在 Ubuntu 下安裝則要改成 XXX-dev

# 為 CentOS 系統增加編譯功能
yum install -y gcc-c++

# 安裝這些模組都是為了成功編譯安裝 Python3,防止出現各種異常
yum install -y wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel xz-devel tk-devel gdbm-devel

# 3.7版本需要一個新的包libffi-devel,安裝此包之後再次進行編譯安裝即可。
yum install -y libffi-devel

# 安裝這個模組是為了讓 uwsgi 支援使用 -x 選項,能通過 xml 檔案啟動專案
yum install -y libxml*
複製程式碼

各個依賴的用途我就不展開講了,如果好奇的話可以去百度,度娘都知道。

提醒一點:如果你之前已經嘗試過一次安裝並且失敗了,可以看一下是不是少裝了某項依賴,在依賴完整的情況下,安裝完 Python3 後會自動附帶安裝 pip

2.2 編譯安裝 Python3.X

點選檢視 Python 官方 FTP 地址

# 點選上面的官方 FTP 地址選擇你想要的版本和壓縮方式,獲取下載連線
# 本例以 Python3.6.3 為例
# 在合適的路徑(推薦在使用者根路徑下如 /home 或者 /root )下執行下載命令:
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

# 下載完成後執行解壓命令:
tar -zxvf Python-3.6.3.tar.gz

# 進入解壓後的 Python-3.6.3 檔案,依次執行以下命令:
# 編譯設定將 Python3 安裝到 /usr/local/python3/ 路徑下
./configure --prefix=/usr/local/python3
make
make install

# 建立 Python3 軟連線,方便直接在命令列使用 Python3 和 pip3 直接呼叫 Python3 和 pip3
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
複製程式碼

3.3 利用 pip3 安裝必要的 Python 包

# 升級 pip3 到最新版本
pip3 install --upgrade pip
# 安裝需要的包( django djangorestframework mysqlclient ) 
pip3 install django djangorestframework mysqlclient
# 建立 django-admin 軟連線
ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin
複製程式碼

3. uwsgi 的安裝

本文推薦使用 pip3 直接下載安裝 uwsgi 若想使用其他安裝方法請自行百度。

# 下載安裝 uwsgi
pip3 install uwsgi
# 建立 uwsgi 軟連線
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3
複製程式碼

4. Django 專案建立或下載

在適合的位置用 django-admin startproject myproject 建立自己的專案,或者用 Git , FTP上傳工具 等上傳、克隆自己的專案,本文采用新建專案的方式呈現此過程:

# 在合適的地方建立用來存放 Django 專案的目錄
mkdir /var/www
# 進入目錄
cd /var/www
# 建立 Django 專案
django-admin startproject myproject
# 進入專案
cd myproject
# 檢視專案目錄
ls
myproject manage.py
# 其中 myproject 為專案配置檔案目錄 manage.py 為 Django 命令列工具
# 記住我剛剛定義的幾個名詞:
# 專案目錄:/var/www/myproject 
# 專案配置檔案目錄:/var/www/myproject/myproject 
# 這在後面的配置中有很大的作用千萬別搞混
# 下面,進入專案配置檔案目錄修改部署需要的配置
cd myproject
vim settings.py
# 必須修改的有(本設定不適合在上線專案中使用)
# 1. 修改 ALLPWED_HOSTS = ['*']
# 2. 修改 DATABASES 如下(相應位置改為你的專案的相應值):
DATABASES = {                                 
    'default': {                              
        'ENGINE': 'django.db.backends.mysql', # 資料庫型別
        'NAME': 'test', # 專案資料庫名稱                    
        'HOST': '127.0.0.1',  # 資料庫地址                 
        'PORT': '3306', # 埠號                       
        'USER': 'root', # 資料庫使用者名稱                      
        'PASSWORD': 'root', # 資料庫密碼          
    }                                         
}
# 注意:如果你是上傳的自己在本地環境寫好的程式別忘了同步資料庫
複製程式碼

5. uwsgi 設定

在適當的目錄下建立 uwsgi 配置檔案。 本文采用 xml 配置檔案,需要更多型別配置檔案請自行百度。

# 進入專案目錄
cd /var/www/myproject
# 建立編輯 uwsgi 配置檔案(檔名自起)
vim uwsgiset.xml
# 內容如下
<uwsgi>
    <socket>127.0.0.1:8997</socket><!-- 內部埠,自定義 -->
    <chdir>/var/www/myproject</chdir><!-- 專案目錄 -->
    <module>myproject.wsgi</module><!-- wsgi 啟動檔案 -->
    <processes>4</processes> <!-- 程式數 -->
    <daemonize>uwsgi.log</daemonize><!-- 日誌檔案路徑 -->
    <pidfile>uwsgi.pid</pidfile><!-- uwsgi 管理檔案路徑,用來重啟 uwsgi -->
</uwsgi>
# 更多配置資訊請自行百度
# 在專案目錄( /var/www/myproject )下啟動:
uwsgi3 -x uwsgiset.xml
# 提醒 [uWSGI] parsing config file myproject.xml 則啟用成功
# 注意僅僅是啟用成功
複製程式碼

6. nginx 下載、設定和啟用

# [必須]安裝 nginx 需要先將官網下載的原始碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝:
yum install -y gcc-c++

# [必須]PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 相容的正規表示式庫。nginx 的 http 模組使用 pcre 來解析正規表示式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。命令:
yum install -y pcre pcre-devel

# [自選]zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。
yum install -y zlib zlib-devel

# [自選]nginx 不僅支援 http 協議,還支援 https(即在ssl協議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。
yum install -y openssl openssl-devel

# 官網下載 Ngxin
# 直接下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
# 推薦選擇穩定版下載 : 當前版本 1.12.2
# 下載連結: https://nginx.org/download/nginx-1.12.2.tar.gz
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz

# 解壓 用到了之前下載的zlib庫 若沒下載可選擇其他方式解壓
tar -zxvf nginx-1.12.2.tar.gz

# 編譯前初始化配置
cd nginx-1.12.2 # 進入nginx目錄
./configure # 使用預設配置

# 編譯安裝
make
make install

# 查詢安裝路徑
[root@Ryoma nginx-1.12.2]#whereis nginx
nginx: /usr/local/nginx

# 啟動、停止 nginx
cd /usr/local/nginx/sbin/ # 進入 nginx sbin 目錄
./nginx # 啟動 nginx
./nginx -s quit # 此方式停止步驟是待 nginx 程式處理任務完畢進行停止
./nginx -s stop # 此方式相當於先查出 nginx 程式id再使用kill命令強制殺掉程式
./nginx -s reload # 重新載入

#查詢 nginx 程式:
ps aux|grep nginx

# 配置 nginx
vim /usr/local/nginx/conf/nginx.conf
# 個人配置圖如下
複製程式碼

nginx 個人配置圖

# :wq儲存後進入 /usr/local/nginx/sbin/ 目錄
# 先檢查配置檔案是否有錯
./nginx -t
# 沒有錯就執行以下命令:
./nginx
# 終端沒有任何提示就證明 nginx 啟動成功,可以通過連結檢視 nginx 是否啟動成功:
# http://192.168.1.111 (請將該ip替換成你的伺服器ip)
複製程式碼

若出現 nginx 錯誤,請自行查閱 nginx 錯誤日誌 (預設在 /usr/local/ngxin/logs/error.log) 若出現 internal server error,請檢視 uwsgi 日誌 (位置請看 uwsgi xml 配置檔案)

理論上來說到這裡你就能看到你的 Django 專案啟動成功了,如果過程中出現了任何你自己無法解決的問題,歡迎留言或郵件(ryomahan1996#gmail.com)聯絡我。

相關文章