網站名稱: 向東的筆記本
本文連接: https://www.eastnotes.com/post/29
版權聲明: 本博客全部文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!css
終於將Django成功部署到了騰訊雲上,也實現了HTTPS的功能。現將步驟方法,部署環境一一列舉以下,方便往後查看。python
網站源碼已經在github開源:https://github.com/mxdshr/DjangoEast ,歡迎克隆使用,並給個star~mysql
在進行部署前,請保證你的Ubuntu是剛剛裝好的,純淨的!也要確保系統的登陸用戶是root,若是不是root,使用下面的命令切換到root便可。nginx
sudo su
git
因爲Ubuntu自帶python2.7和python3.5,但這並非我所須要的版本,所以須要額外安裝python3.6,若是你用的是其餘的版本,方法是同樣的。命令以下:github
apt-get install software-properties-common add-apt-repository ppa:jonathonf/python-3.6 apt-get update apt-get install python3.6
安裝完以後,在終端輸入python使用的仍是2.7的版本,所以咱們須要作下面的更改,使終端默認打開咱們安裝的python3.6:web
cd /usr/bin rm python3 ln -s python3.6 python3
sql
pip的做用不用多說了,主要是用來管理安裝Python的各類包,安裝方法以下:數據庫
apt-get install python3-pip
安裝完還只是第一步,與Python同樣,咱們在終端輸入pip,使用的仍是系統自帶的版本。咱們須要作一下更改,原理與上面的python是同樣的。django
cd /usr/bin rm pip3 ln -s pip3.6 pip3
pip3 install --upgrade pip
不知道是什麼緣由,這樣操做以後不會立馬生效,須要你從新登陸一下服務器才行。好,假設你如今從新登陸了,在終端輸入pip3也是咱們所要的了,如今須要給pip作一下升級。
pip3 install --upgrade pip
建議你們在一個獨立的Python虛擬環境中對網站進行操做,安裝命令以下:
pip3 install virtualenv
進入一個你想要存放虛擬環境的目錄,這裏我選擇/home,虛擬環境名我取爲django,而後建立並激活虛擬環境:
virtualenv django source /home/django/bin/activate
之後你們在進行操做的時候,必定要記得先激活虛擬環境,在django的環境下安裝python包或者操做django的manage.py文件。
使用Git能夠很方便的與github進行交互操做,幫咱們更新網站源碼文件,安裝方式以下:
apt-get install git
安裝完以後須要選擇一個存放網站程序的目錄,這裏我選擇/home/mysite,mysite目錄默認是沒有的,須要你建立,而後進入到此目錄中,用Git將網站pull下來,這裏我以個人已經開源到github上的Django博客爲例,下載網站程序的方法以下:
git init git remote add origin https://github.com/mxdshr/DjangoEast.git git pull origin master
好了,如今咱們已經獲取了網站的程序,接下來咱們安裝Django程序所需python包
進行此操做前,請保證你如今已經處於Django這個虛擬環境中:
pip install -r requirements.txt
這個時候,Django程序運行所須要的全部python包,都已經裝入到你的環境中了,如今網站還不能運行,咱們須要安裝數據庫。
這裏我選擇的是MySQL5.8版本,安裝步驟以下:
cd /home wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb dpkg -i mysql-apt-config_0.8.12-1_all.deb *選擇8.0便可* apt-get update apt-get install mysql-server
安裝的過程當中會提示你輸入密碼,必定要記好哈!安裝完以後須要建立數據庫,建立用戶並受權:
mysql -uroot -p CREATE DATABASE `數據庫名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER '用戶名'@'%' IDENTIFIED BY '密碼'; GRANT ALL PRIVILEGES ON *.* TO '用戶名'@'%'; FLUSH PRIVILEGES;
這個時候數據庫的配置咱們就弄完了,接下來,請先修改網站程序中djangoblog/settings.py中的數據庫配置,修改完以後的操做分爲兩種狀況: - 若是你想用以前的數據庫,請用MySQL客戶端(如Navicat)對其進行數據導入。 - 若是你沒有數據庫,請在網站根目錄下運行下面的命令,建立數據表。
python manage.py makemigrations python manage.py migrate
好了,Django程序和數據庫已經配置好了。咱們能夠簡單地運行一下網站了,先切換到網站根目錄下,而後執行:
python manage.py runserver 0.0.0.0:80
0.0.0.0:80表示任意ip可訪問,這樣設置你就可使用服務器ip地址訪問你的網站了。可是僅使用python自帶的runserver工具運行網站程序是遠遠不夠的。咱們還須要nginx或Apache等服務器管理軟件來更好的運行咱們的網站,另外咱們還須要安裝uwsgi。
安裝uwsgi以前咱們須要安裝python開發包:
apt-get install python3.6-dev
而後再安裝uwsgi,安裝以前請先退出django這個虛擬環境,咱們在公共環境中安裝它.
pip3 install uwsgi
安裝完以後,咱們就能夠用uwsgi來測試網站是否能成功運行了,使用下面的命令:
uwsgi --http :8888 --chdir /home/mysite --home /home/django --module djangoblog.wsgi:application
--http :用於指定端口,這裏我指定8888,請先在騰訊雲安全組中開放此端口
--chdir:用於指定網站根目錄
--home:用於指定虛擬環境地址
--module:用於指定你的Django項目地址
而後咱們在瀏覽器地址中輸入http://你的服務器ip地址:8888,就能夠看到沒有css樣式的頁面了。之因此看不到樣式,是由於uwsgi只能提供動態連接服務,要是訪問靜態文件須要安裝nginx:
apt-get install nginx
安裝完以後咱們須要對nginx進行一些配置,不過首先咱們須要知道nginx的配置文件都有哪些:
主配置文件:/etc/nginx/nginx.conf通常不用動 可用配置文件:/etc/nginx/sites-available咱們通常更改這裏的配置文件 已用配置文件:/etc/nginx/sites-enabled,已經啓用的配置文件 咱們在可用配置文件目錄,新建一個mysite.conf此文件用於配置咱們的項目。
cd /etc/nginx/sites-available vim mysite.conf
而後在文件中寫入下面的配置:
upstream django { server 127.0.0.1:8888; # for a web port socket (we'll use this first) } server{ listen 80; server_name mysite; charset utf-8; client_max_body_size 75M; #上傳文件大小限制 # 網站靜態文件所在目錄 location /static{ alias /home/mysite/static; } # 上傳文件所在目錄 location /media{ alias /home/mysite/media; } # 動態文件交給uwsgi處理 location / { uwsgi_pass 127.0.0.1:8888; include /etc/nginx/uwsgi_params; } }
而後將此文件再sites-enabled中建立一個軟鏈接,表示此配置文件已經啓用:
ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
另外咱們還須要將啓動nginx的用戶改成root,要否則會出現403 forbidden的錯誤。打開/etc/nginx/nginx.conf文件,將第一行中user後面的用戶改成root便可。
以前咱們只是簡單的測試了一下uwsgi,可是尚未對它進行配置。如今須要進行配置,首先在/home目錄下建立一個mysite_uwsgi目錄,而後在目錄中建立一個mysite.ini文件用於保存uwsgi的配置選項。
cd /home mkdir mysite_uwsgi cd mysite_uwsgi vim mysite.ini
寫入下面的內容
[uwsgi] chdir = /home/mysite home = /home/django module = djangoblog.wsgi:application master = True processes = 4 max-requests = 5000 harakiri = 60 socket = 127.0.0.1:8888 uid = root gid = root pidfile = /home/mysite_uwsgi/master.pid daemonize = /home/mysite_uwsgi/mysite.log vacuum = True
好了,如今nginx配置完了,uwsgi也配置完了,咱們就能夠測試網站是否可以成功了,因而用mysite.ini文件打開uwsgi。
uwsgi --ini /home/mysite_uwsgi/mysite.ini
檢查uwsgi是否啓動成功的命令:
ps -aux | grep uwsgi
若是結果中有多個進程,咱們就能夠看到它啓動成功了。
如今的網站基本都標配HTTPS,若是不是的話瀏覽器會提示你的網站不安全。也會影響搜索引擎收錄,所以咱們須要將網站升級到HTTPS。
我用的是騰訊雲,騰訊雲能夠免費申請一個TrustAsia TLS RSA CA證書,該SSL證書可用一年,申請以後你就能夠獲得兩個文件一個.crt,一個是.key。咱們須要將這兩個文件用Filezilla傳到/etc/nginx/目錄下。
而後在/etc/nginx/nginx.conf文件裏的http模塊中寫入下面的配置文件,這個內容是將http請求轉到https請求,網站域名改爲你本身的:
server{ listen 80; server_name eastnotes.com www.eastnotes.com; rewrite ^(.*) https://$host$1 permanent; }
而後打開/etc/nginx/sites-available/mysite.conf在裏面填入一下內容:
listen 443 ssl http2; server_name www.eastnotes.com,eastnotes.com; ssl_certificate 1_www.eastnotes.com_bundle.crt; ssl_certificate_key 2_www.eastnotes.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on;
重啓nginx
nginx -t service nginx restart
好了,如今打開網站應該就看到https的前綴了,可是還不夠,咱們須要將全部的不帶www的鏈接進行301重定向到帶www的鏈接,在/etc/nginx/sites-available的location裏面添加以下代碼:
if ($host != 'www.eastnotes.com' ) { rewrite ^/(.*)$ https://www.eastnotes.com/$1 permanent; }
至此,Django的線上部署所有完成......真TM費勁啊!!!
# 檢查nginx配置文件是夠有錯誤 nginx -t # 重啓nginx service nginx restart # 查看uwsgi進程 ps -aux | grep uwsgi # 正常關閉uwsgi進程 uwsgi --stop /home/mysite_uwsgi/master.pid # 強制關閉所有uwsgi進程 ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9 # 從新加載uwsgi uwsgi --reload /home/mysite_uwsgi/master.pid x lsof -i:9000 #查看端口占用狀態 netstat -lnp| grep 9000 #查看端口占用狀態 kill -9 +PID號