Django線上部署教程:騰訊雲+Ubuntu+Django+Uwsgi(轉載)

網站名稱: 向東的筆記本
本文連接: https://www.eastnotes.com/post/29
版權聲明: 本博客全部文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!css

終於將Django成功部署到了騰訊雲上,也實現了HTTPS的功能。現將步驟方法,部署環境一一列舉以下,方便往後查看。python

網站源碼已經在github開源:https://github.com/mxdshr/DjangoEast ,歡迎克隆使用,並給個star~mysql

1.部署環境與工具

  • 騰訊雲
  • Ubuntu Server 16.04.1 LTS 64位
  • Django2.0.8
  • python3.6.7
  • Git
  • Nginx1.10.3
  • Uwsgi
  • Filezilla
    其中Filezilla是用來向服務器上傳文件的,以前我一直嘗試給Ubuntu安裝vsftpd,覺得得搭建ftp才能傳文件,其實否則,用Filezilla登陸root帳戶也能進行傳文件,端口是22。

2.部署步驟

在進行部署前,請保證你的Ubuntu是剛剛裝好的,純淨的!也要確保系統的登陸用戶是root,若是不是root,使用下面的命令切換到root便可。nginx

sudo sugit

2.1 安裝python3.6

因爲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 python3sql

2.2安裝pip3

pip的做用不用多說了,主要是用來管理安裝Python的各類包,安裝方法以下:數據庫

apt-get install python3-pip

安裝完還只是第一步,與Python同樣,咱們在終端輸入pip,使用的仍是系統自帶的版本。咱們須要作一下更改,原理與上面的python是同樣的。django

cd /usr/bin
rm pip3
ln -s pip3.6 pip3

從新登陸可生效,而後就能夠用pip3裝庫了

pip3 install --upgrade pip

不知道是什麼緣由,這樣操做以後不會立馬生效,須要你從新登陸一下服務器才行。好,假設你如今從新登陸了,在終端輸入pip3也是咱們所要的了,如今須要給pip作一下升級。

pip3 install --upgrade pip

2.3安裝並配置虛擬環境virtualenv

建議你們在一個獨立的Python虛擬環境中對網站進行操做,安裝命令以下:

pip3 install virtualenv

進入一個你想要存放虛擬環境的目錄,這裏我選擇/home,虛擬環境名我取爲django,而後建立並激活虛擬環境:

virtualenv django
source /home/django/bin/activate

之後你們在進行操做的時候,必定要記得先激活虛擬環境,在django的環境下安裝python包或者操做django的manage.py文件。

2.4 安裝git,下載網站

使用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包

2.5安裝網站運行環境

進行此操做前,請保證你如今已經處於Django這個虛擬環境中:

pip install -r requirements.txt

這個時候,Django程序運行所須要的全部python包,都已經裝入到你的環境中了,如今網站還不能運行,咱們須要安裝數據庫。

2.6安裝數據庫MySQL

這裏我選擇的是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。

2.7安裝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:

2.8安裝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便可。

2.9配置uwsgi

以前咱們只是簡單的測試了一下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

若是結果中有多個進程,咱們就能夠看到它啓動成功了。

2.10 配置HTTPS

如今的網站基本都標配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費勁啊!!!

3.經常使用命令

# 檢查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號
相關文章
相關標籤/搜索