當前位置:
首頁 > 最新 > 使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog項目

使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog項目

新blog目前的開發環境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicorn

blog雖然已經上線測試有一段時間了(2018.8.7上線),但是項目部署的筆記由於內容較多,沒時間整理。抽空整理了半天,發布出來供需要的同學借鑒參考。文中如有錯誤請多多指正。

由於我是markdown語法所寫轉換過來的。如遇到格式排版問題請點擊文章末尾的【查看原文】瀏覽

部署前的準備


伺服器

要部署項目就要先購買伺服器,如騰訊雲,阿里雲等等

注意:伺服器在國內的話,必須要備案!不然無法使用。

阿里雲優惠券:點擊前往領取騰訊雲代金券:點擊前往領取騰訊雲首頁:點擊直達騰訊雲西南區雲產品促銷鏈接:點擊直達騰訊雲伺服器購買鏈接:點擊直達


域名

域名購買選擇,可以到百度雲,騰訊雲,阿里雲,GoDaddy,namecheap等等

域名解析記錄類型說明:

A:將域名指向一個IPv4地址

AAAA:將域名指向一個IPv6地址

CNAME:將域名指向另外一個域名

NS:將子域名指定其他DNS伺服器解析

MX:將域名指向郵件伺服器地址

SRV:記錄提供特定的服務的伺服器

TXT:文本長度限制512,通常做SPF記錄(反垃圾郵件)

CAA:CA證書頒發機構授權校驗

顯性URL:將域名302重定向到另外一個地址

隱性URL:與顯性URL類似,但是會隱藏真實目標地址


xshell下載與安裝

安裝Nginx

首先用xshell登錄伺服器通過 yum 安裝 Nginx

yum install nginx

啟動 Nginx 服務

systemctl start nginx

或者

systemctl start nginx.servicesystemctl enable nginx.service

訪問伺服器IP地址,可以看到 nginx 的歡迎界面

Nginx相關命令:停止nginx

nginx -s stop重啟nginxnginx -s reload


Centos7.5安裝Python3

由於centos7.5原本默認安裝了Python2,而且這個Python2不能被刪除,因為有很多系統命令,比如yum都要用到。以下操作首先要用xshell登錄到伺服器輸入Python命令,查看可以得知是Python2.7.5版本

輸入

which python

可以查看位置,一般是位於/usr/bin/python目錄下。

下面介紹安裝Python3的方法

首先安裝依賴包

yum -y groupinstall "Development tools"yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

然後根據自己需求下載不同版本的Python3,我下載的是Python3.5.2

註:如果速度不夠快,可以直接去官網下載,利用WinSCP等軟體傳到伺服器上指定位置。

我的存放目錄是/usr/local/python3,使用命令:

mkdir /usr/local/python3

建立好一個空文件夾,進入該目錄

cd /usr/local/python3

使用一下命令下載壓縮包

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

然後解壓壓縮包安裝Python3

tar -xvJf Python-3.5.2.tar.xzcd Python-3.5.2./configure --prefix=/usr/local/python3make && make install

最後創建軟鏈接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

在命令行中輸入python3測試

升級pip3命令:

pip3 install --upgrade pip


部署前的項目配置

Django 項目中會有一些 CSS、JavaScript 等靜態文件,為了能夠方便地讓 Nginx 處理這些靜態文件的請求,我們把項目中的全部靜態文件收集到一個統一的目錄下,這個目錄通常位於 Django 項目的根目錄,並且命名為 static。為了完成這些任務,需要在項目的配置文件里做一些必要的配置:

STATICROOT 指明了靜態文件的收集目錄,即項目根目錄(BASEDIR)下的 static 文件夾。

為了安全起見,在生產環境下需要關閉 DEBUG 選項以及設置允許訪問的域名。打開 settings.py 文件,找到 DEBUG 和 ALLOWED_HOSTS 這兩個選項,將它們設置成如下的值:

項目還會依賴一些第三方 Python 庫,為了方便在伺服器上一次性安裝,我們將全部依賴寫入一個叫 requirements.txt 的文本文件中。激活本地的虛擬環境(如果你使用了虛擬環境的話),並進入項目的根目錄,運行 pip freeze > requirements.txt 命令:

(myblog_env) D:Djangoprojectsmyblog>pip freeze > requirements.txt

這時項目根目錄下會生成了一個 requirements.txt 的文本文件,其內容記錄了項目的全部依賴。由於有一些依賴包也有先後依賴關係,該調整的需要進去txt文件調整一下。

如果上傳到伺服器後修改,可以使用 "vi (文件名稱)" 打開文件,然後點擊鍵盤 "i" 鍵切換到輸入模式。修改完需要退出,先按鍵盤 "Esc" 鍵,然後輸入 ":wq" 保存退出。如果不想修改又無法退出可以用 ":q!" 強制退出,這樣不會保存你修改的內容更多的vi、vim命令使用方法可以自行到搜索引擎搜索學習,這裡就不一一講解了。


將代碼上傳到 GitHub 、 Gitee 、 或者Coding

將代碼上傳到 GitHub 等代碼託管平台,這樣我們就可以方便地把代碼拉取到伺服器了。如果訪問慢或者打不開GitHub的話,可以上傳到國內的Gitee或者Coding


Git的安裝和上傳代碼的簡單方法

安裝Git可以到官網 https://git-scm.com 下載,安裝的話可以一直下一步,完成。

首先你需要一個GitHub 、 Gitee 、 或者Coding賬號,所以還沒有的話先去註冊吧!

https://github.comhttps://gitee.comhttps://coding.net

1.進入Github首頁,點擊New repository新建一個項目

2.填寫相應信息後點擊create即可

Repository name: 倉庫名稱

Description(可選): 倉庫描述介紹

Public, Private : 倉庫許可權(公開共享,私有或指定合作者)

Initialize this repository with a README: 添加一個README.md

gitignore: 不需要進行版本管理的倉庫類型,對應生成文件.gitignore

license: 證書類型,對應生成文件LICENSE

一般可以填寫項目倉庫名稱,點擊create就可以了。因為免費用戶只有 Gitee 才可以創建私有倉庫

3.創建好項目倉庫後,在項目倉庫頁面點擊Clone or dowload會出現一個地址,copy這個地址備用。

4.接下來就到本地操作了,首先右鍵你的項目,如果你之前安裝git成功的話,右鍵會出現兩個新選項,分別為Git Gui Here,Git Bash Here,這裡我們選擇Git Bash Here進入界面,我的本地項目名為myblog。

5.接下來輸入如下代碼(關鍵步驟),把github上面的倉庫克隆到本地

git clone (粘貼上你之前複製的地址)

6.操作步驟5以後你的本地項目文件夾下面就會多出個文件夾,該文件夾名即為你github上面的項目名,如我多出了個myblogsite文件夾,我們把本地項目文件夾下的所有文件(除了新多出的那個文件夾不用),其餘都複製到那個新多出的文件夾下。

7.接著繼續輸入命令 cd myblogsite,進入myblogsite文件夾

8.接下來依次輸入以下代碼即可完成其他剩餘操作:

git add . (註:別忘記後面的.,此操作是把myblogsite文件夾下面的文件都添加進來)git commit -m "提交信息" (註:「提交信息」裡面換成你需要,如「first commit」)git push -u origin master (註:此操作目的是把本地倉庫push到github上面,此步驟需要你輸入GitHub帳號和密碼)

注意:資料庫文件不要上傳!要是SQLLITE3裡面有你測試的重要數據,將可能會泄露。


設置伺服器目錄結構

接下來需要把代碼上傳到伺服器了。我伺服器上存放代碼的目錄結構一般是這樣的:

一台伺服器可能部署多個網站,所有網站代碼都放在 sites/ 目錄下。markhoo.com/ 這個文件夾以網站的域名命名,便於區分。myblog_env 是 python 虛擬環境目錄。myblog 是 Django 博客項目目錄。創建這個目錄結構,注意目錄名替換為你自己的域名,以後涉及到 markhoo.com 的地方通常都要替換你自己的域名,後面就不再一一指出了。備註:上面的我的目錄結構.可能會有新手看不懂,解釋一下,就像下面這樣一直創建下去

最後的 myblog_env 和 myblog 是同級目錄位於markhoo.com下,這裡自己先不要創建。

創建目錄的命令為: mkdir (文件夾名稱)刪除目錄的命令為: rmdir (文件夾名稱)


安裝virtualenv

為了不影響外界環境的清潔,所以我們使用虛擬環境來配置 Django 項目首先用xshell登錄到你的伺服器,然後按一下步驟操作

pip3 install virtualenv

接下來創建虛擬環境,先進入到 markhoo.com 目錄下,然後運行 virtualenv 命令創建虛擬環境:

[root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com[root@instance-pkb22o0h markhoo.com]# virtualenv -p /usr/bin/python3 –-no-site-packages myblog_env

命令說明:-p: 指定你要虛擬的Python版本,這裡選擇了本地的python3–-no-site-packages:表示在建立虛擬環境時不將原版本中的第三方庫拷貝過來,這樣就能獲得一個純凈的Python環境。myblogenv:表明在該目錄下,建立一個叫做myblogenv的虛擬環境,這樣的命名方式,讓你一眼就能看出這個虛擬環境是為誰建立的。

virtualenv的命令使用方法:創建虛擬環境: $ virtualenv -p /usr/bin/python3.5 –-no-site-packages myblog_env啟動虛擬環境: $ source myblog/bin/activate 退出虛擬環境: $ deactivate 刪除虛擬環境: $ rm –r myblog

檢查一下虛擬環境是否創建成功,運行 ls 命令列出當前目錄下的文件和文件夾,看到 myblog_env 這個文件夾說明虛擬環境創建成功。

[root@instance-pkb22o0h markhoo.com]# lsmyblog_env


venv的使用

由於我只是測試項目,所以使用了Python自帶的venv。先進入到 markhoo.com 目錄下,然後運行 python3 -m venv myblog_env 創建虛擬環境:

[root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com[root@instance-pkb22o0h markhoo.com]# python3 -m venv myblog_env

檢查一下虛擬環境是否創建成功,運行 ls 命令列出當前目錄下的文件和文件夾,看到 myblog_env 這個文件夾說明虛擬環境創建成功。

[root@instance-pkb22o0h markhoo.com]# lsmyblog_env


在虛擬環境中安裝 django 以及依賴包並初始化項目

接著再從代碼倉庫把項目代碼拉取過來,把 git clone 後的地址換成你自己的 GitHub 倉庫地址!

[root@instance-pkb22o0h markhoo.com]# git clone https://github.com/MarkHoo/myblog.git

運行 ls 命令檢查一下是否拉取成功:

[root@instance-pkb22o0h markhoo.com]# lsmyblog myblog_env

多了 myblog 文件夾(文件夾名稱由你的 GitHub 倉庫名決定),說明拉取成功了。

接下來執行命令,啟動虛擬環境

[root@instance-pkb22o0h markhoo.com]# source myblogenv/bin/activate(myblogenv) [root@instance-pkb22o0h markhoo.com]#

安裝項目環境依賴

(myblogenv) [root@instance-pkb22o0h markhoo.com]# cd myblog(myblogenv) [root@instance-pkb22o0h myblog]# pip3 install -r requirements.txt

收集靜態文件運行 python manage.py collectstatic 命令收集靜態文件到 static 目錄下

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py collectstatic

生成資料庫

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate

創建超級用戶

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser

然後就會出現以下內容,第一個是用戶名,第二個是郵箱,第三和第四是密碼(輸入時沒有任何顯示,實際上已經輸入了)。最後顯示創建成功!

備註:這裡使用的是Django默認生成的sqlite3資料庫,我使用了這個,簡單寫寫博客夠用了。

啟動 Django

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000

如果沒有報錯,就說明 Django 已經安裝成功了,打開瀏覽器輸入你的伺服器IP:8000,就可以看到你的網站了

退出 Django

按 ctrl+c 退出 Django 服務


安裝 Mysql (使用MySQL資料庫同學可以借鑒)

安裝並啟動 mariadb

因為 CentOS 7 之後的版本都不在提供 Mysql 安裝源,這裡我們使用 mariadb 代替 mysql,依次執行下列命令

yum install mariadb mariadb-server -yyum install MySQL-python -ysystemctl start mariadb

對 mariadb 進行初始化設置

執行下面命令,根據提示操作

設置新密碼為 test

默認密碼為空,直接回車即可

mysqlsecureinstallation

使用設置的密碼登陸 mariadb

登陸 db,這裡假設密碼被設置為 admin123

mysql -uroot -ptest

創建一個資料庫

create database myblog;

成功後,輸入 exit 命令退出 db

exit

修改配置文件,與 Mysql 資料庫相關聯編輯 myblog/settings.py

創建 Django 資料庫

(myblogenv) [root@instance-pkb22o0h myblog]# cd /home/markhoo/sites/markhoo.com/myblog(myblogenv) [root@instance-pkb22o0h myblog]# python manage.py migrate

創建超級用戶

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser

然後就會出現以下內容,第一個是用戶名,第二個是郵箱,第三和第四是密碼(輸入時沒有任何顯示,實際上已經輸入了)。最後顯示創建成功!

啟動 Django

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000

如果沒有報錯,就說明 Django 已經安裝成功了,並且跟 Mysql 的連接正常。打開瀏覽器輸入你的伺服器IP:8000,就可以看到你的網站了

退出 Django

按 ctrl+c 退出 Django 服務


使用 Gunicorn

Gunicorn 一般用來管理多個進程,有進程掛了Gunicorn 可以把它拉起來,防止伺服器長時間停止服務,還可以動態調整 worker 的數量,請求多的時候增加 worker 的數量,請求少的時候減少。

在虛擬環境下,安裝 Gunicorn:

(myblog_env) [root@instance-pkb22o0h myblog]# pip3 install gunicorn

測試Gunicorn是否能啟動你的項目服務

(myblog_env) [root@instance-pkb22o0h myblog]# gunicorn --bind 0.0.0.0:8000 myblog.wsgi:application

注意:myblog.wsgi:application這裡的myblog對應的是 /home/markhoo/sites/markhoo.com/myblog/myblog, 根據自己的修改。瀏覽器輸入域名,可以看到訪問成功了!

訪問ip地址看瀏覽器是否能正常查看內容(此時沒有退出虛擬環境) 完成測試後,按CTRL-C 停止 Gunicorn 運行

退出虛擬環境

deactivate

創建一個 Gunicorn Systemd Service 文件,直接運行以下命令

vim /etc/systemd/system/gunicorn.service

修改內容如下:

一定要注意自己的項目路徑和虛擬環境路徑 WorkingDirectory與ExecStart 修改為自己的路徑

開啟Gunicorn服務並開機自啟,運行以下命令

systemctl start gunicornsystemctl enable gunicorn


配置 Nginx

接下是配置 Nginx 來處理用戶請求

配置nginx代理通過Gunicorn依次運行以下命令

(myblogenv) [root@instance-pkb22o0h myblog]# cd /etc/nginx/(myblogenv) [root@instance-pkb22o0h nginx]# lsconf.d fastcgi.conf fastcgiparams koi-utf mime.types nginx.conf scgiparams uwsgidefault.d fastcgi.conf.default fastcgiparams.default koi-win mime.types.default nginx.conf.default scgiparams.default uwsgi(myblog_env) [root@instance-pkb22o0h nginx]# vi nginx.conf或者直接運行vim /etc/nginx/nginx.conf

打開後默認的內容如下:

找到server內容進行修改,具體內容如下:

注意修改自己的IP地址或域名,還有文件路徑 serverdomainor_IP 代表你的IP地址或域名

這裡的域名為 markhoo.com,其次一定要添加 0.0.0.0 否則無法訪問,兩個之間用空格隔開。

所有URL 帶有 /static 的請求均由 Nginx 處理,alias 指明了靜態文件的存放目錄。

其它請求轉發給 Django 處理。proxy_pass 後面使用了 unix 套接字,其作用是防止埠衝突,這裡就不再詳述。

修改所涉及到的vim命令使用方法:使用 "vi (文件名稱)" 是打開文件,然後點擊鍵盤 "i" 鍵切換到輸入模式。修改完需要退出vim編輯器,先按鍵盤 "Esc" 鍵,然後輸入 ":wq" 保存退出。如果不想修改又無法退出可以用 ":q!" 強制退出,這樣不會保存你修改的內容。更多的vi、vim命令的具體使用方法可以自行到搜索引擎搜索學習,這裡也不一一講解了。

修改nginx的許可權

usermod -a -G root nginxchmod 710 /home/nginx -t

如果沒有報錯,就行下一步操作

開啟nginx服務並開機自啟

systemctl start nginxsystemctl enable nginx

現在,一切配置完成!你可以訪問你的域名了!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

pandas創始人手把手教你利用Python進行數據分析
花旗銀行將Python納入分析師培訓體系

TAG:Python |