nginx部署django

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013210620/article/details/80422500

简单安装

安装python

安装python

查看默认Python版本
python -V

1、安装gcc,用于编译Python源码
    yum install gcc
2、下载源码包
    wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz
3、解压并进入源码文件
4、进入目录编译安装
    ./configure
    make all
    make install
5、查看版本
    /usr/local/bin/python2.7 -V
6、修改默认Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
7、防止yum执行异常,修改yum使用的Python版本
    vi /usr/bin/yum
    将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6

安装django-mysql

将django项目拖拽到xshell中的data目录

[root@safly data]# rz -E
rz waiting to receive.
[root@safly data]# ls
26380  6381  7000  7002  7004  a.txt  redis         safly.tar.gz
6380   6382  7001  7003  7005  b.txt  s8day145.zip

yum install zip
yum install unzip
然后解压 unzip s8day145.zip

[root@safly data]# ls
26380  6381  7000  7002  7004  a.txt  redis     s8day145.zip
6380   6382  7001  7003  7005  b.txt  s8day145  safly.tar.gz

安装依赖,然后重新编译python

- yum install openssl-devel
- yum install sqlite-devel

安装django pip3 install Djano

启动

然后通过
这里写图片描述
然后找到linux的ip访问即可
这里写图片描述

访问效果如下:
这里写图片描述

uwsgi

Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。
需要先安装:yum install python-devel

pip3 install uwsgi

单文件使用uwsgi

在服务器上编写一个Python文件app.py:

[root@safly data]# ls
26380  6381  7000  7002  7004  app.py  b.txt  s8day145      safly.tar.gz
6380   6382  7001  7003  7005  a.txt   redis  s8day145.zip
[root@safly data]# vim app.py
[root@safly data]# cat app.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

执行如下指令
[root@safly data]# uwsgi –http :9001 –wsgi-file app.py
或者
uwsgi –http :9002 –wsgi-file foobar.py –master –processes 4
PS: flask需要再加 –callable app

- 如果是flask程序:
                app.py 
                    app = Flask(....)

                    @app.
                    ...

                uwsgi --http :9002 --wsgi-file app.py  --callable app

这里写图片描述

查看进程数量:

Last login: Sun May  6 07:30:43 2018 from 10.0.0.1
[root@safly ~]# ps -ef|grep uwsgi
root      36594  36546  0 07:33 pts/1    00:00:00 uwsgi --http :9001 --wsgi-file app.py
root      36595  36594  0 07:33 pts/1    00:00:00 uwsgi --http :9001 --wsgi-file app.py
root      36671  36640  0 07:44 pts/2    00:00:00 grep --color=auto uwsgi
[root@safly ~]# 

开多进程

开进程

[root@safly data]uwsgi --http :9001 --wsgi-file app.py  --master --processes 4

然后查看进程
这里写图片描述

django程序使用uwsgi

执行命令启动

[root@safly data]# ls
26380  6380  6381  6382  7000  7001  7002  7003  7004  7005  app.py  a.txt  b.txt  redis  s8day145  s8day145.zip  safly.tar.gz
[root@safly data]# uwsgi --http :9005 --chdir /data/s8day145/ --wsgi-file s8day145/wsgi.py

这里写图片描述

执行文件启动

创建dj_conf.ini 文件

[root@safly s8day145]# ls
app01  db.sqlite3  dj_conf.ini  manage.py  s8day145  static  templates

编辑内容如下:

[uwsgi]
http = 0.0.0.0:9005
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 4
static-map = /static=/data/s8day145/allstatic
[root@safly s8day145]# 

然后通过[root@safly s8day145]# uwsgi --ini dj_conf.ini启动即可

静态文件

vim s8day145/settings.py

在django项目配置文件末尾添加 STATIC_ROOT="allstatic"

然后执行python3 manage.py collectstatic
会生成allstatic目录

[root@safly s8day145]# ls
allstatic  app01  db.sqlite3  dj_conf.ini  manage.py  s8day145  static  templates

里面是手机的静态文件

[root@safly s8day145]# cd allstatic/
[root@safly allstatic]# ls
admin  xianglong.jpg
[root@safly allstatic]# 

此刻图片就会展现出来
这里写图片描述

nginx

利用Nginx做反向代理、负载均衡以及处理静态文件
安装nginx

yum install nginx

启动nginx

[root@safly s8day145]# /bin/systemctl start nginx.service

这里写图片描述

nginx配置:/etc/nginx/nginx.conf

user root;
                worker_processes 4;

                error_log /var/log/nginx/error.log;
                pid /var/run/nginx.pid;

                events {
                    worker_connections  1024;
                }


                http {
                    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                      '$status $body_bytes_sent "$http_referer" '
                                      '"$http_user_agent" "$http_x_forwarded_for"';

                    access_log  /var/log/nginx/access.log  main;

                    sendfile            on;
                    tcp_nopush          on;
                    tcp_nodelay         on;
                    keepalive_timeout   65;

                    include             /etc/nginx/mime.types;
                    default_type        application/octet-stream;

                    upstream django {
                        server 127.0.0.1:8001; 
                        server 127.0.0.1:8002; 
                    }
                    server {
                        listen      80;

                        charset     utf-8;

                        # max upload size
                        client_max_body_size 75M;

                        location /static {
                            alias  /data/s8day145/allstatic; 
                        }

                        location / {
                            uwsgi_pass  django;
                            include     uwsgi_params;
                        }
                    }
                }

uwsgi配置:/data/s8day145/

s8day145_uwsgi_8001.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8001
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1


                s8day145_uwsgi_8002.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8002
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1

启动:

nginx:
                    /etc/init.d/nginx start 
                    /bin/systemctl restart nginx.service
                    /bin/systemctl start nginx.service
                    /bin/systemctl stop nginx.service

                uwsgi:
                    uwsgi --ini s8day145_uwsgi_8001.ini &
                    uwsgi --ini s8day145_uwsgi_8002.ini & 
  1. 如果进程挂了,supervisor帮助你自动将服务重新启动。

        /etc/supervisord.conf
            [program:s8day145]
            command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
            priority=999                ; 优先级(越小越优先)
            autostart=true              ; supervisord启动时,该程序也启动
            autorestart=true            ; 异常退出时,自动启动
            startsecs=10                ; 启动后持续10s后未发生异常,才表示启动成功
            startretries=3              ; 异常后,自动重启次数
            exitcodes=0,2               ; exit异常抛出的是0、2时才认为是异常
            stopsignal=QUIT             ; 杀进程的信号
            stopwaitsecs=10             ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将
            使用SIGKILL杀进程
            user=root                 ; 设置启动该程序的用户
            log_stdout=true             ; 如果为True,则记录程序日志
            log_stderr=false            ; 如果为True,则记录程序错误日志
            logfile=/var/log/cat.log    ; 程序日志路径
            logfile_maxbytes=1MB        ; 日志文件最大大小
            logfile_backups=10          ; 日志文件最大数量
    
        systemctl start supervisord.service
    

猜你喜欢

转载自blog.csdn.net/u013210620/article/details/80422500