1. 程式人生 > >Django和uwsgi,配合nginx做靜態緩存

Django和uwsgi,配合nginx做靜態緩存

libmysql mct script 靜態 make nginx代理 項目配置 t權限 nag

python-env

1, mysql

grant all on demo.* to demo@‘127.0.0.1‘ identified by ‘wd1023‘;
flush privileges;
create database demo character set = utf8;

2,nginx 和初始壞境腳本

# onestack的腳本
wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ~/oneinstack/install.sh --nginx_option 1     

# python編譯安裝和虛擬環境                                               
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz && tar xvf Python-3.6.5.tar.xz && cd Python-3.6.5/     
./configure && make && make install             
mkdir -p /data/ && cd /data                         
python3.6 -m venv py36                          
source /data/py36/bin/activate

# 項目安裝
unzip demo.zip 
mv demo wwwroot/project
cd /data/wwwroot/project/
apt install libmysqlclient-dev -y
pip install -r requirements.txt

3, Django 項目配置

vi demo/settings.py                             
ALLOWED_HOSTS = [‘*‘]                               #允許任意主機訪問
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘demo‘,
        ‘USER‘:‘demo‘,
        ‘PASSWORD‘:‘wd1023‘,
        ‘HOST‘:‘192.168.1.200‘
        ‘PORT‘:‘3306‘,
        ‘OPTIONS‘: MYSQL_DATABASE_OPTIONS,
    }
}                                                           
STATIC_ROOT = os.path.join(BASE_DIR, ‘static/‘)     #設置靜態目錄

python manage.py collectstatic                      #采集靜態文件到指定的STATIC_ROOT

python manage.py makemigrations
python manage.py migrate                            #數據庫對象生成
python manage.py createsuperuser                    #超級管理員
python manage.py runserver 0.0.0.0:8000             #測試運行

4, uwsgi相關配置文件和目錄

mkdir /data/uwsgi-script -p                         #創建uwsgi-script存放log等文件(原來是想存放自動腳本)
chown www.www -R /data/wwwroot/project              #修改項目文件屬主和uwsgi中一致
mkdir /etc/uwsgi/sites/ -p                          #建立uwsgi統一的站點配置目錄(類似於nginx的conf/vhost目錄)
cat /etc/uwsgi/sites/demo.ini                       #生成項目的uwsgi配置demo.ini
[uwsgi]
#socket = :8000                                 
uid = www
socket = /run/uwsgi/demo.sock                       #用unix-socket方式
chmod-socket = 660                                  #socket權限
chown-socket = www:www                              #socket屬主
    
#http = 192.168.1.210:8000
static-map=/static=/data/wwwroot/project/static/    #靜態文件路徑和setting裏的STATIC_ROOT一致
chdir = /data/wwwroot/project/                      #項目主目錄
module = demo.wsgi:application                      #項目的app中的wsgi路徑(因為uwsgi其實是封裝wsgi)
home = /data/py36                                   #虛擬環境主目錄
pidfile = /data/uwsgi-script/demo/uwsgi.pid         #pid文件
daemonize = /data/uwsgi-script/demo/uwsgi.log       #日誌文件
master = true                                       
processes = 3                                       #進程和線程數
threads = 2
vacuum = true                                       #這項必須開啟,才能使用emperor模式
max-requests = 2000

PS: 不創建會報錯
mkdir /data/uwsgi-script/demo/
touch /data/uwsgi-script/demo/uwsgi.log

5, nginx相關配置

mkdir /usr/local/nginx/conf/vhost
vi /usr/local/nginx/conf/vhost/demo.conf
server {
    listen 80;
    server_name _;
    access_log      /data/wwwlogs/demo_nginx_access.log;
    client_max_body_size 75M;
    charset utf-8;
    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
    location /static {                                  #nginx跳過uwsgi直接處理靜態請求
        alias /data/wwwroot/project/static/;
    }

    location / {
        include uwsgi_params;
#        uwsgi_pass 127.0.0.1:8000;
        uwsgi_pass unix:/run/uwsgi/demo.sock;           #nginx代理uwsgi的unix-socket
    }
}

vi /usr/local/nginx/conf/nginx.conf   #備註主配置中的default server 
:61,92 s/^/#/g

nginx -t
nginx -s reload

6, systemcd腳本

cat /lib/systemd/system/demo.service
[Unit]
Description=uWSGI Emperor service

[Service]
ExecStartPre=/bin/bash -c ‘mkdir -p /run/uwsgi; chown www.www /run/uwsgi‘
ExecStart=/data/py36/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

systemctl enable demo

7,uwsgi 測試命令

啟動:uwsgi --ini your_path/demo.ini
停止:uwsgi --stop your_path/uwsgi.pid
重啟:uwsgi --reload your_path/uwsgi.pid

Django和uwsgi,配合nginx做靜態緩存