Uwsgi部署Django

最后更新时间: 2018-02-10 | 作者: AberSheeran | 捐助

下载Nginx,uwsgi, Mysql

我用的是CentOS7和Python3.5,所以如下(安装新版Python参照我另一篇博客

1
2
yum install -y nginx mariadb mariadb-devel mariadb-server
pip3.5 install uwsgi

编写uwsgi,nginx, mysql配置

按照官方文档的说法,如下配置,保存在项目根目录下的uwsgi.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[uwsgi]
socket = django.sock
chmod-socket = 777
processes = 1
threads = 2
stats = 127.0.0.1:9001
chdir = /website/proxy/
wsgi-file = proxy/wsgi.py
daemonize = proxy.log
pidfile = proxy-master.pid
virtualenv = venv

然后在/etc/nginx/conf.d/proxy.conf中这样写

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
upstream django {
    server unix://website/proxy/django.sock;
}
server {
    listen       80;
    server_name  192.168.78.142;
    location / {
        include uwsgi_params;
        uwsgi_pass django;
    }
    location /static/ {
        alias /website/proxy/static/;
    }
}

uwsgi_pass的值和uwsgi.ini配置中socket的值必须一致。

配置mysql

/etc/my.cnf加入以下代码以配置默认编码为UTF8

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

接下来三条命令

1
2
3
4
5
# start mariadb
sudo systemctl start mariadb
# Harden MySQL Server
sudo mysql_secure_installation
sudo systemctl enable mariadb

nginx开机自启动

使用vi /etc/init.d/nginx写入如下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
# chkconfig: - 85 15
nginx=/usr/sbin/nginx
conf=/etc/nginx/nginx.conf

case $1 in
    start)
        echo -n "Starting Nginx"
        $nginx -c $conf
        echo " done"
    ;;

    stop)
        echo -n "Stopping Nginx"
        $nginx -s stop
        echo " done"
    ;;

    test)
        $nginx -t -c $conf
    ;;

    reload)
        echo -n "Reloading Nginx"
        $nginx -s reload
        echo " done"
    ;;

    restart)
        $0 stop
        $0 start
    ;;

    show)
        ps -aux|grep nginx
    ;;

    *)
        echo -n "Usage: $0 {start|restart|reload|stop|test|show}"
    ;;

esac

然后使用三条命令:

1
2
3
sudo chmod +x /etc/init.d/nginx
sudo chkconfig --add nginx
sudo chkconfig nginx on

uwsgi开机自启动

同理,使用vi /etc/init.d/uwsgi写入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# chkconfig: - 85 15
conf=配置文件路径
pid=pidfile路径
case $1 in
    start)
        cd $path
        uwsgi $conf
    ;;

    stop)
        uwsgi --stop $pid
    ;;

    show)
        ps -ef|grep uwsgi
    ;;

    reload)
        uwsgi --reload $pid
    ;;

    *)
        echo -n "Usage: $0 {start|restart|stop|show}"
    ;;

esac

然后使用三条命令:

1
2
3
sudo chmod +x /etc/init.d/uwsgi
sudo chkconfig --add uwsgi
sudo chkconfig uwsgi on

最后,使用命令sudo service uwsgi startsudo service nginx start开启网站。

多站点配置方法

配置文件写法同上,写好多个配置文件放在一个文件夹下,以官方文档推荐的emperor模式运行即可,例如我将多个配置文件放在site.d中。
那么启动它们只需要执行uwsgi --emperor /website/site.d即可。

然后在Nginx里添加对应的站点配置。即可。

对于多个类似配置文件,建议使用uwsgi自带的变量来编写,这样既能减少维护成本,又方便快捷。变量的中文文档在此 magicvars

收录于#杂记