nginx部署django

文章目录

    • 简单安装
    • uwsgi
      • 单文件使用uwsgi
      • 开多进程
      • django程序使用uwsgi

简单安装

###安装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
###启动
然后通过
nginx部署django_第1张图片
然后找到linux的ip访问即可
nginx部署django_第2张图片

访问效果如下:
nginx部署django_第3张图片

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

然后查看进程
nginx部署django_第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

nginx部署django_第5张图片

####执行文件启动
创建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部署django_第6张图片

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

yum install nginx

启动nginx

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

nginx部署django_第7张图片

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
    

你可能感兴趣的:(Linux)