多專案上線Nginx+Django+uwsgi

Bobbyby發表於2018-06-29

本文章的前提是django專案除錯已經完成

環境配置

  • 安裝nginx

    sudo apt-get install nginx

  • 安裝uwsgi

    sudo apt-get install libpython3.6-dev

    pip install uwsgi

    資料庫修改字符集(方便插入中文)

修改mysql的配置檔案

cd /etc/mysql/mysql.conf.d

sudo cp mysql.cnf mysql.cnf.bak # 修改前先備個份

sudo vim mysql.cnf

在[mysqld]下增加一句:

character_set_server = utf8

儲存並重啟服務

sudo systemctl restart mysql.service #重啟服務

Nginx 配置

       include /etc/nginx/sites-enabled/*;
  • 配置檔案

    到/etc/nginx/sites-available 下寫配置檔案

    cd /etc/nginx/sites-available

    複製新建一個站點配置檔案

    sudo cp default your.example.com.conf

    sudo vim your.example.com.conf

    開始配置

    server {
        listen 80;
        server_name blog.19950314nina.top;
        charset     utf-8;
        client_max_body_size 75M;
    
        location /static {  # 注意靜態檔案路徑配置 
            alias /home/guoxd/temp/myblog/;
        }
        
        location / {
            include     /etc/nginx/uwsgi_params;  #  uwsgi_params的>位置, 否則域名無>法訪問, 一般與nginx預設配置目錄同級
            uwsgi_pass  127.0.0.1:8000;  # 埠與uwsgi一致
        }
    }
    

    因為是多站,在這裡再寫一個站點配置

    sudo cp default your.example2.com.conf

    sudo vim your.example2.com.conf

    開始配置

    
    server {
        listen 80;
        server_name bt.19950314nina.top;
        charset     utf-8;
        client_max_body_size 75M;
    
        location /static {  # 注意靜態檔案路徑配置 
            alias /home/guoxd/temp/bt/;
        }
        
        location / {
            include     /etc/nginx/uwsgi_params;  #  uwsgi_params的>位置, 否則域名無>法訪問, 一般與nginx預設配置目錄同級
            uwsgi_pass  127.0.0.1:8001;  # 埠與uwsgi一致
        }
    }
    

    建立存放靜態檔案的資料夾,先建立好,接下來會用到

    mkdir -p /home/guoxd/temp/bt

    mkdir -p /home/guoxd/temp/myblog

    到sites-enabled資料夾,建立軟連線,使配置生效

    cd /etc/nginx/sites-enabled

    sudo ln -s /etc/nginx/sites-available/your.example.com.conf your.example.com.conf

    sudo ln -s /etc/nginx/sites-available/your.example2.com.conf your.example2.com.conf

  • Nginx的使用

    sudo nginx -t #對nginx配置是否正確進行測試

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful # 輸出這兩句,說明配置沒問題

    sudo nginx -s reload # 重啟服務 修改完配置,重啟後生效

到這裡nginx裡的站點配置完成

Uwsgi 配置

我在測試時,兩個django專案的路徑

/home/guoxd/testpro/project2

/home/guoxd/testpro/project3

  • uwsgi 配置檔案

到專案目錄下新建一個 uwsgi.ini 配置檔案

cd /home/guoxd/testpro/project2

vim uwsgi.ini

開始配置

[uwsgi]
# 注意  這個埠 要與 對應的站點配置中的埠一致
socket=0.0.0.0:8001
# 專案目錄
chdir=/home/guoxd/testpro/project2
# wsgi 檔案
wsgi-file=project2/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

同理在另外的專案中也進行類似的配置, 路徑與埠修改一下即可.

到這裡,uwsgi的簡單配置就完成了.

  • uwsgi的使用
uwsgi --ini uwsgi.ini  # 啟動
uwsgi --stop uwsgi.pid  # 停止

Django 配置

修改settings檔案

#在settings開頭修改
DEBUG=False
allow = ['*']

# 在settings末尾新增
STATIC_ROOT = '/home/guoxd/temp/project2/bt' # 執行 collectstatic 時 檔案路徑
STATIC_URL = '/static/'
#把STATICFILES_DIRS註釋掉
'''
STATICFILES_DIRS =[
   os.path.join(BASE_DIR, 'static'),
]
'''

收集靜態檔案

python manage.py collectstatic

收集完成後,將靜態檔案複製到nginx站點配置時 對應的靜態檔案路徑下

  • 資料庫

python manage.py makemigrations

python manage.py migrate

在這裡,記錄一個mysql 匯出和匯入的命令

mysqldump -u(username) -p(password) (database_name) (something).sql #匯出sql資料庫

示例: mysqldump -uroot -p123 bt bt.sql

mysql -u(username) -p(password) --database (database_name) < (something).sql # 匯入資料庫

示例:mysql -uroot -p123 --database bt < bt.sql # 匯入資料庫

啟動

在django專案下 啟動

uwsgi --ini uwsgi.ini

相關文章