使用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
現在,一切配置完成!你可以訪問你的域名了!
※pandas創始人手把手教你利用Python進行數據分析
※花旗銀行將Python納入分析師培訓體系
TAG:Python |