zoukankan      html  css  js  c++  java
  • Django和uwsgi,配合nginx做静态缓存

    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

  • 相关阅读:
    HDU 4738——Caocao's Bridges——————【求割边/桥的最小权值】
    POJ 3177——Redundant Paths——————【加边形成边双连通图】
    亲历:IT 从业者避免猝死攻略 v1.0
    Linux如何统计进程的CPU利用率
    gcp – 源于CP的高级命令行文件拷贝工具
    丰田栽了的原因,嵌入式软件工程师都该看看
    四件在我步入职业软件开发生涯那天起就该知道的事情
    浅谈自底向上的Shell脚本编程及效率优化
    实用硬件产品集锦
    [置顶] openHAB 体系结构与编程模型 (1) --- 术语
  • 原文地址:https://www.cnblogs.com/ops-sylar/p/8984629.html
Copyright © 2011-2022 走看看