1. 程式人生 > 其它 >Django專案雲部署

Django專案雲部署

DJango專案部署

網站備案

在國內,網際網路必須由開發者或者擁有者進行實名備案:

  1. 進入某雲網站(騰訊雲,阿里雲,華為雲)進行備案

  2. 網站備案需要有合法的公網伺服器,並且伺服器可用時長超過3個月

域名備案

目的是減少IP重複和記憶對使用者帶來的困難

  • 需要有網站備案

    • 網站備案之後就會得到備案號(這是必須的)

  • 購買雲伺服器

    • 勾選分配免費公網IP

    • 伺服器就會被分配一個公網IP和內網IP

專案打包

activate 虛擬環境名
pip freeze > requirement.txt

伺服器環境部署

python3環境部署

# CentOS 系統
# 安裝系統依賴 yum install zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel openssl-devel gcc* make libffi-devel -y # 安裝python3 # 下載(版本自己選擇) wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz # 或者使用xshell進行ftp tar -zxvf python-3.7.2.tgz # 配置安裝 ./configure prefix=/usr/local/python3 #
配置安裝路徑 # 安裝 make && make install # 建立連結 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

安裝mariadb

mariadb就是開源不收費的mysql

# 安裝
yum install mariadb mariadb-server.x86_64 mariadb-devel -y
# 啟動mariadb服務
systemctl start mariadb
# 登陸
mysql

預設是開發模式,不需要密碼就能進入資料庫,需要命令進入生產模式

mysql_secure_installation
# 1.回車
# 2.輸入y,設定root密碼
# 3.輸入y,刪除匿名使用者
# 4.輸入y,禁止遠端登陸
# 5.輸入y,移除test資料庫,因為是在生產環境
# 6.輸入y,重新整理授權表
mysql -uroot -p**** # 輸入使用者名稱和密碼登陸
# 建立資料庫
>create database 庫名 charset=utf8

專案模組安裝

安裝python包

pip3 install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

關閉debug,開啟訪問介面

# settings.py
DEBUG = False
ALLOWED_HOST = [*]

uwsgi服務安裝

pip3 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

nginx服務安裝

# 解壓
tar -zxvf nginx-1.12.2.tar
# 配置安裝
./configure \
# 編譯安裝
make && make install
# 建立連結
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 啟動
nginx

專案配置

編寫uwsgi.ini

makdir /opt/scripts
touch uwsgi.ini
vim uwsgi.ini
-----------------------------------
# 理解為主
[uwsgi]
​
chdir=專案路徑
module=專案名.wsgi:application
socket=/opt/scripts/uwsgi.sock
workers=5   # 代表程序
pidfile=/opt/scripts/uwsgi.pid
http=內網IP:埠
static-map=/static=/opt/專案路徑/static # 讓nginx去找靜態檔案
uid=root
gid=root
master=true
vacumm=true
enable-thread=true
thunder-lock=true
harakiri=30     # 設定請求中斷時間
post-buffering=4096 # 快取大小
daemonize=/opt/專案路徑/uwsgi.log   # uwsgi日誌

配置nginx.conf

# 先備份
cp nginx.conf nginx.conf.bak
# /usr/local/nginx/conf/nginx.conf
http{
    ... # 保持原來的不動
    access_log logs/access.log main;    # nginx訪問日誌
    ... # 保持原來的不動
    gzip on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  # 支援壓縮的格式
    
    server{
        listen 80;
        server_name 服務名;
        
        charset utf-8;
        
        location /{
            include uwsgi_params;
            uwsgi_connect_timeout 30;   # 連線uwsgi 30秒後超時
            uwsgi_pass unix:/opt/sricpts/uwsgi.sock;    # uwsgi生成的sock檔案
        }
        error_page 500 502 503 504 /50x.html;
        location = /static/{        # 靜態檔案
            alias 專案路徑/static;
            index index.htm index.html;
        }
    }
}

啟動服務

uwsgi --init uwsgi.ini
# 若啟動異常,檢視uwsgi.log檔案
nginx
# 瀏覽器訪問公網IP:80
# 殺程序
# pkill -9 uwsgi
# pkill -9 nginx

pymysql模組配置

# 專案路徑/__init__.py
# 用pymysql替換mysqldb
import pymysql
pymysql.install_as_MySQLsb()
# 遷移
python3 manage.py makemigrations
python3 manage.py migrate

域名解析

在雲平臺中找到自己的域名,點選域名解析與對公網IP進行繫結