1. 程式人生 > >Django + Gunicorn + Nginx 部署 Ubuntu 服務器

Django + Gunicorn + Nginx 部署 Ubuntu 服務器

default sql 配置文件 str 原來 ack 建數據庫 ubunt make 自定義

Django + Gunicorn + Nginx 部署服務器

獲取騰訊雲 root權限

本人的服務器使用的是騰訊雲,騰訊雲默認是沒有開放 root 用戶的,我們來創建 root 用戶。
創建 root 賬號並設置密碼。

sudo passwd root

設置 root 賬戶登錄需要密碼。

sudo vim /etc/ssh/sshd_config 

修改 without-password 為 yes。

PermitRootLogin yes

重啟 ssh 服務。

sudo service ssh restart

關閉窗口,重新使用 root 賬號登錄。
PS: 平時的話我們使用用戶賬號登錄就行了,上面只是為了獲取 root 權限。

更新下系統

sudo apt-get update

sudo apt-get upgrade

安裝必要的軟件

這裏我們需要用到的軟件有: NginxPytohn3Gitpipvirtualenv

sudo apt-get install nginx

sudo apt-get install python3

sudo apt-get install python3-pip

sudo apt-get install git

sudo pip3 install virtualenv

啟動 Nginx服務

sudo service nginx start

在瀏覽器中輸入域名,如果能成功看到 Nginx 歡迎頁面,便說明我們的Nginx 服務是成功啟動的。

技術分享圖片

部署 Django 代碼

我們將從本地上傳到 GitHub 的代碼下載到我們的服務器中(這裏以我的博客代碼為例)。
我們還要設置 Django 代碼的存放路徑,我的路徑是在 /home/ubuntu/sites/weixuqin.cn 下。

mkdir -p /home/ubuntu/sites/weixuqin.cn

cd /home/ubuntu/sites/weixuqin.cn

git clone https://github.com/weixuqin/django_blog.git

創建虛擬環境並激活

virtualenv --python=python3 env

source env/bin/activate

接下來我們便可以在虛擬環境中通過 pip 安裝需要的依賴庫了。

移動到下載好的源碼目錄:django_blog,安裝需要的依賴庫。

cd django_blog

pip install -r requirements.txt

收集靜態文件

pytohon manage.py collectstatic

安裝 mysql
由於我的博客使用的是 MySQL 數據庫,Linux 並沒有帶有 MySQL,所以需要我們另外安裝。
使用 apt-get 安裝並設置密碼。

sudo apt-get install mysql-server

安裝完成後進入數據庫。

mysql -u root -p

創建名為 blog 的數據庫。

create database blog;

在 settings.py 中設置 debug 為 False,同時設置可用域名,並修改數據庫密碼,

DEBUG = False

ALLOWED_HOSTS = [‘*‘]

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘blog‘,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘: ‘‘,
        ‘HOST‘: ‘localhost‘,
        ‘PORT‘: ‘‘,
    }
}

生成數據庫文件和創建一個Django 超級用戶。

python manage.py makemigrations

python manage.py  migrate

python manage.py createsuperuser

更改 MySQL 數據庫默認編碼格式

liunx 上 MySQL 數據庫的默認編碼方式不是 utf8,一定要自己更改後使用,剛開始自己使用默認方式創建數據庫,結果到了管理後臺寫文章的時候發現文章全部亂碼(如下圖),所以一定要註意數據庫編碼格式。

技術分享圖片

進入 MySQL,查看 MySQL 編碼。

show variables like ‘%character%‘;

可以看到數據庫默認編碼為 latin1

技術分享圖片

需要修改MySQL 配置文件: /etc/mysql/my.cnf
打開 my.cnf ,在各項中添加如下語句。

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8

保存並退出。

再次執行 show variables like ‘%character%‘; ,便可以看到編碼已經修改了。

技術分享圖片

刪除原來創建的數據庫,並重新創建一個同名數據庫,執行 python manage.py migrate , 再次打開後臺編寫文章,我們的文章便不再顯示亂碼了。

技術分享圖片

Nginx 部署

在服務器 /etc/nginx/sites-available/ 目錄下新建一個配置文件(這裏以我的為例)。

sudo vim django_blog 打開文件。

server {
    charset utf-8;
    listen 80;
    server_name weixuqin.cn;

    location /media  {
        alias /home/ubuntu/sites/weixuqin.cn/django_blog/uploads;
    }

    location /static {
        alias /home/ubuntu/sites/weixuqin.cn/django_blog/staticfiles; 
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/weixuqin.cn.socket;
    }
}

設置監聽端口,指定媒體文件和靜態文件存放地址等。.socket 文件會自動生成,我們可以不用去管這個文件。

創建一個符號鏈接,將上述配置文件放到啟用的網站列表中區。被啟用網站的目錄在 /etc/nginx/sites-enabled/ 。

sudo ln -s /etc/nginx/sites-available/django_blog /etc/nginx/sites-enabled/django_blog

使用 Gunicorn 管理進程

我們使用 gunicorn 來管理多個進程。

在虛擬環境下安裝。

pip install gunicorn

移動到 django 項目中,用 Gunicorn 啟動服務器進程。

gunicorn --bind unix:/tmp/weixuqin.cn.socket django_blog.wsgi:application

在瀏覽器中輸入域名,便能看到訪問成功了。

PS: 如果輸入域名後還是出現 Nginx 的歡迎界面,可能是 /etc/nginx/site-enabled/ 的默認文件 default覆蓋了我們自定義的配置文件,將 default 刪除即可,並重新啟動 Nginx。

sudo rm default

sudo service nginx reload

創建 Gunicorn自啟動腳本

如果手動啟動 Gunicorn,一旦服務器重啟後我們便需要再次執行啟動命令,未免太過麻煩,我們創建腳本來實現 Gunicorn 的自動啟動。

在 /etc/init/ 下新建一個 .conf 文件。

sudo vim /etc/init/gunicorn-weixuqin.cn.conf
start on net-device-up
stop on shutdown

respawn

setuid ubuntu
chdir /home/ubuntu/sites/weixuqin.cn/django_blog

exec ../env/bin/gunicorn --bind unix:/tmp/weixuqin.cn.socket django_blog.wsgi:application
  • start on net-device-up 只在服務器聯網時啟動 Gunicorn。
  • 進程崩潰後,respawn 自動重啟 Gunicorn。
  • setuid 以 ubuntu 用戶的身份運行 Gunicorn 進程。
  • chdir 指定 Gunicorn 運行目錄(項目目錄)。
  • exec 開啟服務器進程。

啟動 gunicor

sudo start gunicorn-weixuqin.cn

如果以後更新了代碼,只需重啟下 Nginx 和 Gunicorn 就行了。

sudo service nginx reload

sudo restart gunicorn-weixuqin.cn

到這裏,如果一路順利的話,打開瀏覽器輸入你的域名,便能看到正確部署後的 Django 項目生成後的頁面了。

(比如我的)

技術分享圖片

PS: 為啥數據庫類型不支持 emoji 表情符號的,我明明在 Markdown 寫了好多好玩的表情符號(╯-_-)╯~╩╩

歡迎大家訪問我的博客 weixuqin.cn

Django + Gunicorn + Nginx 部署 Ubuntu 服務器