澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Django安插到线上,远程文件的布局

本篇导航:

前言

《Django开拓轻松Blog系统》类别中,我们早就产生了三个MiniWeb项目。那么,怎么把这几个项目揭穿到线上吧?怎么样给它三个域名呢?

思路:nginx uwsgi

前言

《Django安顿到线上》一文中,非常多步骤不是必须的,有个别部分依旧是不对的,本文就轻松修改一下。
对象:把djsite项目安顿到/home/web目录中,而且给它分配二个域名称为djsite.voidking.com。

世家都学过了django,用django写了各类功用,写了bbs项目,写了路飞学城。

1. Django web project deployment

  • 大致阴毒
  • uwsgi
  • nginx
  • supervisor

条件准备

情况准备

咱俩都明白django是叁个web框架,方便大家非常快支付web程序,http央求的动态数据正是由web框架来提供管理的。

1.1项目计划

预备打包好项目费用web项目,通过FTP上盛传钦命的linux/unix服务器
案例项目:mysite/

 

服务器

Ali云服务器,centos7系统。

supervisor

1、安装

yum install python-pip
yum install supervisor
pip install supervisor

2、创建sock

touch /tmp/supervisor.sock
chmod 777 /tmp/supervisor.sock

前方邓超也对nginx轻便的介绍了,本文将nginx、WSGI、uwsgi、uWSGI、django那多少个涉及梳理一下。

1.2生育景况的备选

Django生产遭受服务器,常规状态下使用Linux/Unix平台作为服务器平台,要求常备不懈
如下运行境况
环境:python2 x/python3.x
软件:mysql-server、mysql-client
模块:pymysql、pillow、django、uwsgi

一、轻易阴毒

python

进步python到3.6.1,统一线上和地点python景况。

1、下载python3.6.1源码
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

2、解压源码

xz -d Python-3.6.1.tar.xz
tar -xvf Python-3.6.1.tar

3、编写翻译源码

mkdir /usr/local/python3
cd Python-3.6.1
./configure --prefix=/usr/local/python3 --enable-optimizations
make && make install

倘使编译战败,需求先更新编译情况:

gcc -v 
g   -v

yum install gcc
yum install gcc-c  

注:笔者的条件版本为 gcc version 4.8.5 二零一五0623 (Red Hat 4.8.5-11) (GCC) 。

4、替换python

cd /usr/bin
mv python python.bak
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
ll python*
python -V

5、消除遗留难点
负有python相关的运用,要是运用/usr/bin/python早先的本子,替换为/usr/bin/python2.7。例如:

vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down

python虚拟机

1、安装pyenv套装
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
内容除了含有 pyenv 以外,还蕴藏如下插件:

  • pyenv-doctor
  • pyenv-installer
  • pyenv-update
  • pyenv-virtualenv
  • pyenv-which-ext

2、路线增加
vim ~/.bash_profile,添加:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

3、使配置立刻生效
source ~/.bash_profile

4、查看安装意况
pyenv -v

5、常用命令

  • 翻看可设置的python版本列表:pyenv install -l
  • 设置钦赐版本的python:pyenv install 3.6.1
  • 翻看已设置的python:pyenv versions
  • 翻看当前设为暗中同意的python版本:pyenv version
wsgi    全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则。
运行在wsgi上的web框架有bottle,flask,django

uwsgi    和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型

uWSGI    是一个web服务器,实现了WSGI协议,uwsgi协议。a

nginx    web服务器,更加安全,更好的处理处理静态资源,缓存功能,负载均衡,因此nginx的强劲性能,配合uWSGI服务器会更加安全,性能有保障。

django 高级的python web框架,用于快速开发,解决web开发的大部分麻烦,程序员可以更专注业务逻辑,无须重新造轮子

1.3档案的次序布局【UWSGI】

(1)生产情状展开mysql-client命令行,实施项目sql脚本语言,开首化数据库
(2)在品种根目录中,增加uwsgi.ini配置文件,增多如下内容:

[uwsgi]
#点名服务器布置IP地址和端口
http=192.168.10.120:8000
#计划项目在时下服务器中的相对路线
chdir=/home/worker/django_pro/mysite
#相对路线钦定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
#设置运营的历程数量
processes=4
#设置每个进度运转的线程数量
threads=2
#设置主进程
master=True
#点名保存主进度编号的文书
padfile=uwsgi.pid
#点名守护进度的日记存款和储蓄
daemonize=uwsgi.log

(3) 项目周转
开行项目,当前路线中,直接运营命令运转项目

uwsgi --ini

悬停项目,通过包蕴主进度编号的文件设置截至项目

uwsgi --stop uwsgi.pid

起首项目

uwsgi --reload uwsgi.pid

花色支付完成,在铺排在此之前需求再配备文件元帅 ALLOWED_HOSTS配置安装为:当前服务器IP或*,如:

uwsgi

pip install uwsgi

编纂测量试验:

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

开发银行测验:
uwsgi --http :8001 --wsgi-file test.py

报错:uwsgi: command not found,看来大家供给把python3/bin出席到path。
vim /etc/profile,在文件最底部找到PATH,增加:

:/usr/local/python3/bin

使配置生效:source /etc/profile

访问 http://ip:8001 ,就能够见到Hello World 。

安装python3.6

1、配置pyenv下载源为地方目录(可选操作,不做的话下载速度会一点也不快)

mkdir /root/python/ && cd /root/python/

# 设置变量
export PYTHON_BUILD_CACHE_PATH=/root/python

# 设置变量
export PYTHON_BUILD_MIRROR_URL=/root/python

# 查看变量设置
env | grep PYTHON_BUILD_MIRROR_URL

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

2、安装python3.6.1,pyenv install 3.6.1
报错,EEnclaveROKoleos: The Python ssl extension was not compiled. Missing the OpenSSL lib? 须要安装信赖包:

yum install readline readline-devel readline-static -y
yum install openssl openssl-devel openssl-static -y
yum install sqlite-devel -y
yum install bzip2-devel bzip2-libs -y

3、改造全局版本
pyenv global 3.6.1python -V

附:改造回原版本
pyenv global systempython -V

4、刷新数据库
python rehash

逻辑图

澳门新浦京娱乐场网站 1

web服务器

传统的c/s架构,请求的过程是
客户端 > 服务器 
服务器 > 客户端
服务器就是:1.接收请求 2.处理请求 3.返回响应

web框架层

HTTP的动态数据交给web框架,例如django遵循MTV模式处理请求。
HTTp协议使用url定位资源,urls.py将路由请求交给views视图处理,然后返回一个结果,完成一次请求。
web框架使用者只需要处理业务的逻辑即可。

假如将贰次通讯转化为“对话”的历程

Nginx:hello wsgi,作者刚收到一个呼吁,你计划下然后让django来管理呢

WSGI:好的nginx,作者立刻安装境遇变量,然后把央浼提交django

Django:谢谢WSGI,作者管理完央浼立时给你响应结果

WSGI:好的,小编在等着

Django:化解啦,麻烦wsgi吧响应结果传递给nginx

WSGI:太棒了,nginx,响应结果请收好,已经依照供给传递给您了

nginx:好滴。笔者把响应交给客商。合营欢欣

1.4档案的次序布局【 UWSGI NGINX】

通过UWSGI服务器布置Django项目,通过nginx实行反向代理
(1)项目根目录创造uwsgi.ini配置文件

[uwsgi]
#安顿和nginx反向代理之间的总是地址

socket=localhost:8000
#配置项目根目录
chdir=/home/worker/django_pro/mysite
#相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
#设置启动的进程数量
processes=4
#设置每个进程启动的线程数量
threads=2
#设置主进程
master=True
#指定保存主进程编号的文件
pidfile=uwsgi.pid
#指定守护进程的日志存储
daemonzie=uwsgi.log

(2) 编制程序nginx.conf配置文件,设置反向代理
nginx和uwsgi进行合作使用时,nginx首要有四个成效,使用nginx作为静态文件服务器和反向代理服务器

  • 设置静态文件
    开辟django项目标布局文件,增添STATIC_ROOT配置
    编辑mysite/mysites/settings.py

STATIC_ROOT=/home/worker/django_pro/myweb/static_file/

跻身Django项目根目录实施命令手提式有线话机静态文件

>>>python manage.py collectstatic
  • 反向代理配置
    编辑/etc/nginx/nginx.conf配置文件,编辑sever配置选项
    主干配置反向代理server 服务器和静态文件外号
··
event {
    ···
}
··
http {
        ··
        server {
                listen 80;
                server_name 192.168.10.120;

                #反向代理配置
               location / {
                      include uwsgi_parmas;
                      uwsgi_paas 127.0.0.1:8000;
                  }
                  #静态文件路径配置
                  location /static{
                        alias  /home/worker/django_pro/myweb/static_file/;
                  }
               }
                ··
      }

(3) 运转项目举办测量试验

  • 先是走入项目目录,运转Django项目
>>>uwsgi --in uwsgi.ini
  • 启动nginx服务器
>>>nginx
  • 自己切磋进度运行状态
>>> ps -ef|grep wsgi
··
>>>ps -ef|grep nginx
  • 测量检验访谈项目
    test
ALLOWED_HOSTS = ["*",]

nginx和mysql

参考《在CentOS7上布置PHP运维条件》,安装好了nginx和mysql。

花色布局

Django Nginx uwsgi 安装配备

在前方的章节中大家利用 python manage.py runserver 来运作服务器。那只适用测量试验遭逢中应用。

行业内部公布的劳动,须求三个足以安静而反复的服务器。

1.5类型分布式安排【UWSGU NGINX】

使用UWSGI配置Django项目标多进度安排,使用nginx进行静态文件的布局和负载均衡的陈设
(1) 在多态主机上配置多个一样的django项目【同一台主机上配置八个项目开展效仿】设置几个只怕三个Django项目运行配置消息如下
mysite/uwsgi.ini

[uwsgi]
#配置项目访问地址
http=localhost:8000
#配置项目根路径
chdir=/home/worker/django_pro/mysite
#相对路径指定当前项目中wsgi.py
#设置启动的进程数量
 processes=4
#设置每个进程启动的线程数量
thread=2
#设置主进程
master=True
#指定保存主进程编号文件
pidfile=uwsgi.pid
#指定守护进程的日志存储
demonize=uwsgi.log

(2)配置nginx静态服务器映射和负载均衡

# 使用默认的轮询分发配置多个分布的服务主机
upstream myweb {
            server 127.0.0.1:8000;
            server 127.0.0.1:9000;
        }

        server {
            listen 80;
            server_name 192.168.10.120;

            # 配置分布式负载转发
            location / {
                proxy_pass http://myweb;
            }
            # 配置静态文件服务器
            location /static {
                alias /home/worker/django_pro_1_11/myweb/static_file/;
            }
        .. ..

(3)测量试验访问项目
TEST

示范源码:猛击下载

项目布局

代码打算

1、在/home/web目录中,实行命令克隆项目
git clone https://github.com/voidking/djsite.git

2、安装django
pip install django==1.11.7

3、安装pymysql
pip install pymysql

基本功开辟情状计划

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

2. Tornado web project deployment

下一场将源码上传至服务器钦赐目录,如:/data/ ,然后实践命令来运转:

代码希图

1、克隆项目到服务器
git clone https://github.com/voidking/djsite.git

2、安装django
pip install django

3、安装pymysql
pip install pymysql

数据库筹算

1、制造数据库

# mysql -uroot -p
mysql> create database `djsite` default character set utf8 collate utf8_general_ci; 

2、修改mysql的binlog格式为混合方式:

mysql> set global binlog_format=mixed;
mysql> exit;

3、修改djsite/djsite/settings.py中的数据库配置
vim djsite/djsite/settings.py

4、创立表结构

python manage.py makemigrations
python manage.py migrate

超前设置好python3条件

https://www.cnblogs.com/pyyu/p/7402145.html

2.1门类企图

参考Django1.1部分

注: 上传命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/

数据库筹算

1、制造数据库

# mysql -uroot -p
mysql> create database `djsite` default character set utf8 collate utf8_general_ci; 
mysql> exit;

2、修改djsite/djsite/settings.py中的数据库配置
vim djsite/djsite/settings.py

3、制造表结构

python manage.py makemigrations
python manage.py migrate

报错:

django.db.utils.InternalError: (1665, 'Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.')

修改mysql的binlog格式为混合格局:

# mysql -uroot -p
mysql> set global binlog_format=mixed;

删去数据库djsite中的全数表,然后再度实践:

python manage.py migrate

启航项目

1、运营命令
python manage.py runserver

2、服务器测验访谈
curl localhost:8000/blog/index

3、本地质衡量试访问
利用浏览器查看 http://ip:8000/blog/index ,不可能访谈。
运营命令改为:python manage.py runserver 0.0.0.0:8000,此时就能够在浏览器看见铺排好的类型。

借使照旧不可能访谈,尝试先关闭防火墙:systemctl stop firewalld

virtualenv

请确保你的虚拟环境正常工作
https://www.cnblogs.com/pyyu/p/9015317.html

2.2档期的顺序常规配置【使用自带服务器直接操作】

直接通过配备文件命令大概命令行钦点端口运维程序,就能够使用tornado自带的web服务器运维web项目并提供正规的web服务了

但是这么的操作办法并非长项的,命令行需求管理让运行的次序后台运转,並且只要布署多进度项目以来,多少个经过一向没有进行统管的操作,特别不便中华民族解放先锋前时期的珍重操作

直接运转【阻塞格局】

>>>python demo.py --port=8000

后台运转【非阻塞方式】

>>>python demo.py --port=8000

解压,步入目录并实行以下命令:

启航项目

nginx配置

1、首先,在万英特网配置域名解析,增加A记录,解析到Ali云服务器IP。若是深入分析好的域名叫django.voidking.com。

2、在nginx的vhost中,添加django.voidking.com.conf,内容为:

server {
    listen 80;
    server_name django.voidking.com;
    charset utf-8;
    location /{
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        client_max_body_size       1024m;
        client_body_buffer_size    128k;
        client_body_temp_path      data/client_body_temp;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
        proxy_temp_path            data/proxy_temp;

        proxy_pass http://127.0.0.1:8000;
    }
}

3、重启nginx,./nginx -s reload

4、测量试验访问
服务器:curl django.voidking.com/blog/index
地面浏览器:http://django.voidking.com/blog/index

到现在,django项目现已安插成功,未有用到uwsgi。假使给django增加照应进程,那么大家的安排就类似完美了。那么,uwsgi又能干什么吗,我们一连切磋。

安装django1.11

pip3 install django==1.11
#创建django项目mysite
django-admin startproject mysite
#创建app01
python3 manage.py startapp app01

mysite/settings.py

#settings.py设置
ALLOWED_HOSTS = ['*']
install app01

mysite/urls.py

from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello_django/', views.hello),
]

app01/views.py

from django.shortcuts import render,HttpResponse

# Create your views here.
def hello(request):
    print('request is :',request)
    return HttpResponse('django is ok ')

2.3supervisor管理器

针对tornado多进程布署格局,第三方提供了各类进程管理模块用于开展tornado项目多少个经过的保险管理,项目中常用的如supervisor、circus等等

Django安插到线上,远程文件的布局。(1)ubuntu中安装supervisor

$sudo apt-get install supervisor

备考:能够利用pip install supervisor实行设置
安装到位后,生成supervisor配置文件

$cd /etc/supervisor
$echo_supervisor_conf > supervisord.conf

修改配置文件/etc/supervisor/supervisor.conf

··
[include]
files./conf.d/*.conf

(2)增多tornado管理配置文件/etc/supervisor/conf.d/tornadoes.conf

[group:td]
programs=tornado-8000, tornado-8001

[program:tornado-8000]
command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8000
directory=/home/worker/tornado_web/web1
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log
loglevel=debug

[program:tornado-8001]
command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8001
directory=/home/worker/tornado_web/web1
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log
loglevel=info

(3)进度处理
启航进程处理器

$ supervisor -c supervisord.conf

进程管理器蕴含进程情形管理

supervisorctl status       #查看管理的所有进程的状态
supervisorctl update       #重新启动配置文件修改的程序
supervisorctl stop td:*    #停止所有进程【可以指定进程】
supervisorctl start td:*   #启动所以进程【可以指定进程】
supervisorctl restart td:* #重启所有进程进程【可以指定进程】
python3 mange.py runserver 0.0.0.0:8000 

数据库难点

cd djsite
python manage.py runserver

报错:

File "/usr/local/python3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
    raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

化解办法:

vim /usr/local/python3/lib/python3.6/site-packages/django/db/backends/mysql/base.py

进去vim命令方式,输入/version,按N查找下二个,找到:

if version < (1, 3, 3):
    raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

表明掉它,难题一蹴而就。

uwsgi

安装uWSGI

进入虚拟环境venv,安装uwsgi
(venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
检查uwsgi版本
(venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
2.0.17.1
#检查uwsgi python版本
uwsgi --python-version

运转轻易的uWSGI

#启动一个python
uwsgi --http :8000 --wsgi-file test.py
  • http :8000: 使用http协议,端口8000
  • wsgi-file test.py: 加载钦赐的公文,test.py
#test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

Django安插到线上,远程文件的布局。uWsgi热加载python程序

在启动命令后面加上参数
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
#发布命令
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi

#此时修改django代码,uWSGI会自动加载django程序,页面生效

运行django程序

#mysite/wsgi.py  确保找到这个文件
uwsgi --http :8000 --module mysite.wsgi
  • module mysite.wsgi: 加载钦命的wsgi模块

uwsgi配置文件

澳门新浦京娱乐场网站 2澳门新浦京娱乐场网站 3

uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi_nginx.ini,添加如下配置:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /opt/mysite
# Django's wsgi file
module          = mysite.wsgi
# the virtualenv (full path)
home            = /opt/venv
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1
# the socket (use the full path to be safe
socket          = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

uwsgi.ini

2.4supervisor nginx 分布式陈设

效仿Django和Tornado的项目布署格局
参考http://docs.jinkan.org/docs/flask/deploying/index.html#deployment

 澳门新浦京娱乐场网站 4

url问题

cd djsite
python manage.py runserver

再也报错:

File "/root/djsite/djsite/urls.py", line 21, in <module>
    url(r'^blog/', include('blog.urls', namespace='blog')),
  File "/usr/local/python3/lib/python3.6/site-packages/django/urls/conf.py", line 39, in include
    'Specifying a namespace in include() without providing an app_name '
django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

消除办法:

vim /usr/local/python3/lib/python3.6/site-packages/django/urls/conf.py

找到:

if namespace and not app_name:
    raise ImproperlyConfigured(
        'Specifying a namespace in include() without providing an app_name '
        'is not supported. Set the app_name attribute in the included '
        'module, or pass a 2-tuple containing the list of patterns and '
        'app_name instead.',
    )

申明掉它,难题消除。

安装uwsgi

pip install uwsgi

编辑测量检验:

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

启航空衡量试:
uwsgi --http :8001 --wsgi-file test.py

访问 http://ip:8001 ,就能够知到Hello World 。

点名安顿文件运转命令

uwsgi --ini  /etc/uwsgi_nginx.ini

查阅效果

cd djsite
python manage.py runserver

早先成功,在服务器上测量检验访谈:
curl localhost:8000/blog/index

运用浏览器查看 http://ip:8000/blog/index ,却不可能访谈。那是因为在settings.py中,ALLOWED_HOSTS的布置为:

ALLOWED_HOSTS = []

官方文书档案说:

When DEBUG is True and ALLOWED_HOSTS is empty, the host is validated against ['localhost', '127.0.0.1', '[::1]'].

修改ALLOWED_HOSTS的布署为:

ALLOWED_HOSTS = ['*']

然后运转命令改为:python manage.py runserver 0.0.0.0:8000,此时就可以在浏览器见到陈设好的等级次序。

假诺还是不可能访谈,尝试先关闭防火墙:systemctl stop firewalld

相似运转

1、编写wsgi.py文件
编写django_wsgi.py文件,将其位于与公事manage.py同一个索引下。

#!/usr/bin/env python
# coding: utf-8

import os,django
from django.core.handlers.wsgi import WSGIHandler

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djsite.settings")
django.setup()
application = WSGIHandler()

2、运营项目
uwsgi --http :8000 --chdir /home/web/djsite/ --module django_wsgi

3、查看运维结果
lsof -i :8000ps aux | grep uwsgi

4、测验访谈
http://ip:8000/blog/index
此刻,页面是未有样式的,也正是说静态能源加载失利。

5、配置静态能源
uwsgi --http :8000 --chdir /home/web/djsite/ --module django_wsgi --static-map=/static=static
那时,页面样式就疑似常了。

配置nginx结合uWSGI

配置nginx.conf

worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    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  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
   #nginx反向代理uwsgi
    server {
        listen       80;
        server_name  192.168.11.64;
        location / {
         include  /opt/nginx1-12/conf/uwsgi_params;
         uwsgi_pass 0.0.0.0:8000;
            root   html;
            index  index.html index.htm;
        }
      #nginx处理静态页面资源
      location /static{
        alias /opt/nginx1-12/static;   
         }
     #nginx处理媒体资源
     location /media{
        alias /opt/nginx1-12/media;   

         }
        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }
    }
}

配备完运转nginx

 

二、uwsgi

Django框架运维信任wsgi(本质提供socket服务端),众多模块完成了wsgi标准,而django框架中暗中认可使用wsigiref模块来贯彻,他出于天性比比较低,所以用于地方开荒和测量检验,而线上计划时索要利用uwsgi来代表。

1、在服务器上安装uwsgi

pip3 install uwsgi

2、单文件使用uwsgi

在服务器上编制三个Python文件:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

在服务器上施行命令运维Web服务器:

uwsgi --http :9001 --wsgi-file app.py
# 或
uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4

拜候问调查看就能够:

澳门新浦京娱乐场网站 5

3、 django程序使用uwsgi

将支付好的django程序拷贝到服务器目录【同示例一】,即:/data/oldboy ,实施命令运营:

uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4

 

1. 创建配置文件 oldboy.ini

[uwsgi]
http = 0.0.0.0:9005
chdir = /data/oldboy/
wsgi-file = oldboy/wsgi.py
processes = 4
static-map = /static=/data/oldboy/allstatic

2. 根据配置文件启动uwsgi

uwsigi --ini  oldboy.ini

配置文件的形式启动uwsgi

PS: 如若有虚构景况能够加多上设想意况路线配置: virtualenv ``= /env````/oldboy``_venv

那时拜访时,晤面世找不到静态文件的错误。

想要uwsgi管理静态文件,要求先将django的静态文件采撷到拟订目录,然后再设置对应涉及。

  • 征集django静态文件

    • 在django的布局文件中拉长:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
    • 实施 python3 manage.py collectstatic 命令,至此django项目全部有关静态文件都会收罗到拟订目录。
  • 安装uwsgi静态文件对应涉及

    • uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic

访谈地址,就可以见到您的女对象们了....


nginx配置

1、首先,在万网络配置域名剖析,增多A记录,深入分析到Ali云服务器IP。借使解析好的域名称叫django.voidking.com。

2、在nginx的vhost中,添加django.voidking.com.conf,内容为:

server {
    listen 80;
    server_name django.voidking.com;
    charset utf-8;
    location /{
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        client_max_body_size       1024m;
        client_body_buffer_size    128k;
        client_body_temp_path      data/client_body_temp;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
        proxy_temp_path            data/proxy_temp;

        proxy_pass http://127.0.0.1:8000;
    }
}

3、重启nginx,./nginx -s reload

4、测验访谈
服务器:curl django.voidking.com/blog/index
地面浏览器:http://django.voidking.com/blog/index

至此,django项目曾经配备成功,未有用到uwsgi。假诺给django增加照看进度,那么大家的安顿就象是完美了。那么,uwsgi又能干什么吧,我们继续商讨。

高档运行

1、新建uwsgi.ini,与manage.py在同一级目录。

[uwsgi]
http = :8000
chdir = /home/web/djsite/
wsgi-file = django_wsgi.py
static-map = /static=static

2、启动uwsgi
uwsgi uwsgi.ini

3、测量检验访谈
http://ip:8000/blog/index

supervisor

supervisor 是依靠 python 的职责管理工具,用来机关运维各样后台职分,当然你也能平素运用 nohup 命令使义务自动后台运维,但假使要重启职责,每回都要好手动 kill 掉任务进程,这样很麻烦,况且一旦程序错误导致进度退出的话,系统也心余力绌活动重载任务。

这里邓超先生要布局基于virtualenv的supervisor

出于supervisor在python3下不可能运用,因而不得不用python2去下载!!!!!!

#注意此时已经退出虚拟环境了!!!!!
yum install python-setuptools
easy_install supervisor

经过命令生成supervisor的配支文件

echo_supervisord_conf > /etc/supervisord.conf

接下来再/etc/supervisord.conf末尾增加上如下代码!!!!!!

[program:my]
#command=/opt/venv/bin/uwsgi --ini  /etc/uwsgi_nginx.ini  #这里是结合virtualenv的命令 和supervisor的精髓!!!!
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#--home指的是虚拟环境目录  --module找到 mysite/wsgi.py

directory=/opt/mysite
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

最终运转supervisor,完结uWSGI运营django,nginx反向代理

supervisord -c /etc/supervisord.conf #启动supervisor
supervisorctl -c /etxc/supervisord.conf restart my  #重启my项目
supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

 重新加载supervisor

一、添加好配置文件后

二、更新新的配置到supervisord    

supervisorctl update
三、重新启动配置中的所有程序

supervisorctl reload
四、启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name
五、查看正在守候的进程

supervisorctl
六、停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name
七、重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name
八、停止全部进程

supervisorctl stop all
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

 

三、nginx

应用Nginx做反向代理、负载均衡以及管理静态文件。

1、安装Nginx

yum install nginx

2、配置nginx

澳门新浦京娱乐场网站 6澳门新浦京娱乐场网站 7

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 192.1.123.1; 
    }
    server {
        listen      80;

        charset     utf-8;

        # max upload size
        client_max_body_size 75M;

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

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

演示配置文件/etc/nginx/nginx.conf

保证nginx配置文件目录下有uwsgi_params文件(默认)

3、配置uwsgi

为了保证让抱有央浼均经过80端口来采访网址,将uwsgi的布局文件修改为:

[uwsgi]
socket = 127.0.0.1:9005
chdir = /data/oldboy/
wsgi-file = oldboy/wsgi.py
processes = 4
logto = /tmp/oldboy.log

4、启动uwsgi和nginx

uwsgi --ini /data/oldboy/oldboy.ini &

/etc/init.d/nginx start

uwsgi

supervisor

  django的静态文件与nginx配置

mysite/settings.py

STATIC_ROOT='/opt/nginx1-12/static'
STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"static"),
]

上述的参数STATIC_ROOT用在哪?

经过python3 manage.py collectstatic 收罗全部你使用的静态文件保留到STATIC_ROOT!

STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
# 把这些文件放到一起是为了用nginx等部署的时候更方便

 

 

参照文书档案:

 uwsgi热加载:

 

四、supervisor

supervisor是三个对经过管理的软件,能够援助大家运营uwsgi并保障(uwsgi进程关闭时,自动将其运转起来)。

1、安装

yum install supervisor

2、配置 vim /etc/supervisor.conf

澳门新浦京娱乐场网站 8澳门新浦京娱乐场网站 9

[supervisord]
http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
;http_port=127.0.0.1:9001  ; (alternately, ip_address:port specifies AF_INET)
;sockchmod=0700              ; AF_UNIX socketmode (AF_INET ignore, default 0700)
;sockchown=nobody.nogroup     ; AF_UNIX socket uid.gid owner (AF_INET ignores)
;umask=022                   ; (process file creation umask;default 022)
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (logging level;default info; others: debug,warn)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

;nocleanup=true              ; (don't clean up tempfiles at start;default false)
;http_username=user          ; (default is no username (open system))
;http_password=123           ; (default is no password (open system))
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
;user=chrism                 ; (default is current user, required if root)
;directory=/tmp              ; (default is not to cd during start)
;environment=KEY=value       ; (key value pairs to add to environment)

[supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as http_username if set
;password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")

; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

;[program:theprogramname]
;command=/bin/cat            ; the program (relative uses PATH, can take args)
;priority=999                ; the relative start priority (default 999)
;autostart=true              ; start at supervisord start (default: true)
;autorestart=true            ; retstart at unexpected quit (default: true)
;startsecs=10                ; number of secs prog must stay running (def. 10)
;startretries=3              ; max # of serial start failures (default 3)
;exitcodes=0,2               ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT             ; signal used to kill process (default TERM)
;stopwaitsecs=10             ; max num secs to wait before SIGKILL (default 10)
;user=chrism                 ; setuid to this UNIX account to run the program
;log_stdout=true             ; if true, log program stdout (default true)
;log_stderr=true             ; if true, log program stderr (def false)
;logfile=/var/log/cat.log    ; child log path, use NONE for none; default AUTO
;logfile_maxbytes=1MB        ; max # logfile bytes b4 rotation (default 50MB)
;logfile_backups=10          ; # of logfile backups (default 10)



[program:oldboy]
command=/usr/local/bin/uwsgi /data/oldboy/oldboy.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=chrism                 ; 设置启动该程序的用户
log_stdout=true             ; 如果为True,则记录程序日志
log_stderr=false            ; 如果为True,则记录程序错误日志
logfile=/var/log/cat.log    ; 程序日志路径
logfile_maxbytes=1MB        ; 日志文件最大大小
logfile_backups=10          ; 日志文件最大数量

布署详细

3、启动

supervisord /etc/supervisor.conf
或
/etc/init.d/supervisor start

 

相似运行

1、编写wsgi.py文件
编写django_wsgi.py文件,将其位于与公事manage.py同一个目录下。

#!/usr/bin/env python
# coding: utf-8

import os,django
from django.core.handlers.wsgi import WSGIHandler

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djsite.settings")
django.setup()
application = WSGIHandler()

2、运维项目
uwsgi --http :8000 --chdir ~/djsite/ --module django_wsgi

3、查看运转结果
lsof -i :8000ps aux | grep uwsgi

4、测量试验访谈
http://ip:8000/blog/index
此刻,页面是从未有过样式的,相当于说静态能源加载失利。

5、配置静态能源
uwsgi --http :8000 --chdir ~/djsite/ --module django_wsgi --static-map=/static=static
那儿,页面样式就符合规律了。

配置supervisor

1、开机运行
systemctl enable supervisord

2、生成配置文件

mkdir -p /etc/supervisor/
echo_supervisord_conf > /etc/supervisord.conf

3、修改配置文件
vim /etc/supervisord.conf,添加:

[include]
files = /etc/supervisor/*.conf

4、运行
supervisord -c /etc/supervisord.conf

高端运转

1、新建uwsgi.ini,与manage.py在同一级目录。

[uwsgi]
http = :8000
chdir = /root/djsite/
wsgi-file = django_wsgi.py
static-map = '/static=static'

2、启动uwsgi
uwsgi uwsgi.ini

3、测验访谈
http://ip:8000/blog/index

守护uwsgi

1、在/etc/supervisor中新建djsite.conf文件:

[program:djsite]
command=/root/.pyenv/versions/3.6.1/bin/uwsgi --http :8000 --chdir /home/web/djsite/ --module django_wsgi --static-map=/static=static
directory=/home/web/djsite/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

2、重启supervisor

ps aux | grep supervisord
systemctl stop supervisord
systemctl start supervisord

附:重启djsite命令

supervisorctl -c /etc/supervisord.conf restart djsite

3、测验访谈
http://ip:8000/blog/index
页面展现不奇怪,至此守护进度配置成功。

4、djsite.conf能够轻便修改为:

[program:djsite]
command=/root/.pyenv/versions/3.6.1/bin/uwsgi --ini uwsgi.ini
directory=/home/web/djsite/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

supervisor

闭馆shell后,uwsgi服务就异常的快关闭了。为了让它后台运营,供给让它成为守护进程。

静态能源难题(可忽略)

假设,uwsgi.ini为:

[uwsgi]
http = :8000
chdir = /home/web/djsite/
wsgi-file = django_wsgi.py

静态能源就无法访问了。在不加多static-map的意况下,要求修改七个文件:
(1)修改djsite/djsite/settings.py文件,添加:

STATIC_ROOT = '/home/web/djsite/static/'

(2)修改djsite/djsite/settings.py文件为:

from django.conf.urls import url,include
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls', namespace='blog')),
]   static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

安装supervisor

pip install supervisor

报错,因为supervisor不支持python3:
Supervisor requires Python 2.4 or later but does not work on any version of Python 3. You are using version 3.6.1 (default, Dec 6 2017, 12:03:59)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]. Please install using a supported version.
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-y9wv4fmm/supervisor/

admin静态财富难点

如果以python manage.py runserver起步django,那么静态财富未有毛病。

假设以uwsgi运维django,静态财富看起来未有毛病,不过,假若访谈 http://ip:8000/admin ,就能够发觉那么些页面包车型大巴静态能源不能取得。

四个Django应用,日常有两类静态文件。一是运用内的静态文件,二是Django自带的静态文件。应用内的静态文件在djsite/static目录下。另外,在INSTALLED_应用软件S中配备了django.contrib.admin, 则还有其余一组静态文件,在Django安装地方里。

举个例子,一个root在Python 3.6本子安装的Django,admin的静态文件在: /usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/。

最终,在STATIC_U中华VL里,会有两类静态文件, /static/*/static/admin/*

刺探原理,原因就很引人瞩目了。python manage.py runserver清楚静态文件的岗位,而uWSGI不领悟静态文件在什么样岗位。

化解办法如下:
(1)修改djsite/djsite/settings.py文件:

SITE_ROOT = os.path.dirname(os.path.abspath(__file__))
SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../'))
STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')

(2)收罗全数静态文件到collectedstatic目录
python manage.py collectstatic

(3)修改uwsgi.ini配置

[uwsgi]
http = :8000
chdir = /home/web/djsite/
wsgi-file = django_wsgi.py
static-map = /static=collectedstatic

安装pyenv

为了利用supervisor,大家必要python2.7的遇到。而多版本python的管理,推荐使用pyenv。

1、安装pyenv套装
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
内容除了包含 pyenv 以外,还带有如下插件:

  • pyenv-doctor
  • pyenv-installer
  • pyenv-update
  • pyenv-virtualenv
  • pyenv-which-ext

2、路线加多
vim ~/.bash_profile,添加:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

3、使配置立即生效
source ~/.bash_profile

4、查看安装意况
pyenv -v

5、常用命令

  • 翻看可设置的python版本列表:pyenv install -l
  • 设置钦命版本的python:pyenv install 2.7.3
  • 翻看已设置的python:pyenv versions
  • 翻看当前设为默许的python版本:pyenv version

nginx uwsgi

上述,大家的djsite项目早已通过uwsgi格局运营起来,况兼能够保险后台运行。nginx配置不更换的状态下,大家得以健康访谈 http://django.voidking.com/blog/index 。此时,nginx作为反向代理,和uwsgi间通过http交互。

接下去,就布局下nginx和uwsgi通过socket结合的不二等秘书技。原理:客商发送http央浼到nginx,nginx通过socket把必要提交uwsgi,uwsgi获得django的管理结果,通过socket返还给nginx,nginx通过http重返结果给顾客。

1、因为nginx和uwsgi通过socket格局相互,大家要求修改uwsgi.ini的布署为:

[uwsgi]
socket = :8000
chdir = /home/web/djsite/
wsgi-file = django_wsgi.py
static-map = /static=collectedstatic
master = true
processes = 2
enable-threads = true
daemonize = /home/web/djsite/uwsgi.log

2、重启supervisor
systemctl stop supervisord
systemctl start supervisord

3、修改nginx配置djsite.voidking.com.conf:

server {
    listen      80;
    server_name djsite.voidking.com;
    charset     utf-8;

    location / {
        uwsgi_pass     127.0.0.1:8000;
        include        uwsgi_params;
    }
}

5、重启nginx
./nginx -s reload

6、测量检验访谈
此时,访问 http://ip:8000/blog/index 失败,访问 http://django.voidking.com/blog/index 平常。因为九千端口不再提供http服务,而是二个和nginx连接的socket。

安装python2.7环境

1、配置pyenv下载源为地面目录(可选操作,不做的话下载速度会非常的慢)

mkdir /root/python/ && cd /root/python/

# 设置变量
export PYTHON_BUILD_CACHE_PATH=/root/python

# 设置变量
export PYTHON_BUILD_MIRROR_URL=/root/python

# 查看变量设置
env | grep PYTHON_BUILD_MIRROR_URL

wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz

2、安装python2.7.13
pyenv install 2.7.13

3、改换全局版本
pyenv global 2.7.13python -V

附:改换回原版本
pyenv global systempython -V

4、刷新数据库
python rehash

增长速度静态能源

1、修改nginx配置djsite.voidking.com.conf:

server {
    listen      80;
    server_name djsite.voidking.com;
    charset     utf-8;

    location / {
        uwsgi_pass     127.0.0.1:8000;
        include        uwsgi_params;
    }

    location /static {
        alias /root/djsite/collectedstatic;
    }
}

2、修改nginx.conf

user root;

3、重启nginx
./nginx -s reload

安装虚构情状

1、新建supervisor设想蒙受
pyenv virtualenv 2.7.13 supervisor

2、激活虚构景况
source /root/.pyenv/versions/2.7.13/envs/supervisor/bin/activate supervisor
或者source activate supervisor

3、安装supervisor
yum install supervisor
pip install supervisor

4、生成配置文件

mkdir -p /etc/supervisor/
echo_supervisord_conf > /etc/supervisord.conf

5、修改配置文件
vim /etc/supervisord.conf,添加:

[include]
files = /etc/supervisor/*.conf

6、运行
/root/.pyenv/versions/2.7.13/envs/supervisor/bin/supervisord -c /etc/supervisord.conf

7、编辑supervisord.service
vi /usr/lib/systemd/system/supervisord.service,修改为:

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target

[Service]
Type=forking
ExecStart=/root/.pyenv/versions/2.7.13/envs/supervisor/bin/supervisord -c /etc/supervisord.conf  
ExecReload=/root/.pyenv/versions/2.7.13/envs/supervisor/bin/supervisorctl reload       
ExecStop=/root/.pyenv/versions/2.7.13/envs/supervisor/bin/supervisorctl shutdown      

[Install]
WantedBy=multi-user.target

8、重启supervisor

ps aux | grep supervisord
systemctl stop supervisord
systemctl start supervisord

9、开机运转
systemctl enable supervisord

小结

现今,django布置实现,大家达成了二种配备方法:

  • nginx django(http方式)
  • nginx uwsgi(http方式)
  • nginx uwsgi(socket方式)

守护uwsgi

1、在/etc/supervisor中新建djsite.conf文件:

[program:djsite]
command=/usr/local/python3/bin/uwsgi --http :8000 --chdir /root/djsite/ --module django_wsgi --static-map=/static=static
directory=/root/djsite/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

2、重启supervisor

systemctl stop supervisord
systemctl start supervisord

附:重启djsite命令

supervisorctl -c /etc/supervisord.conf restart djsite

3、测验访谈
http://ip:8000/blog/index
页面显示符合规律,至此守护进度配置成功。

4、退出supervisor环境
source deactivate,守护进程并不曾遭逢震慑。

书签

利用uWSGI提供静态文件 (更新至1.9)

化解uWSGI里的Django静态文件错失

nginx uwsgi

如上,大家的djsite项目曾经由此uwsgi格局运维起来,而且可以维持后台运转。nginx配置不改造的图景下,大家能够平常访谈 http://django.voidking.com/blog/index 。此时,nginx作为反向代理,和uwsgi间透过http交互。

接下去,就陈设下nginx和uwsgi通过socket结合的措施。原理:顾客发送http诉求到nginx,nginx通过socket把央浼提交uwsgi,uwsgi获得django的处理结果,通过socket返还给nginx,nginx通过http再次来到结果给客户。

1、因为nginx和uwsgi通过socket情势相互,大家要求修改uwsgi.ini的配置为:

[uwsgi]
socket = :8000
chdir = /root/djsite/
wsgi-file = django_wsgi.py
static-map = '/static=static'
master = true
processes = 2
enable-threads = true
# daemonize = /root/djsite/uwsgi.log

2、/etc/supervisor/djsite.conf,修改为

[program:djsite]command=/usr/local/python3/bin/uwsgi uwsgi.ini
directory=/root/djsite/
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

3、重启supervisor
systemctl stop supervisord
systemctl start supervisord

澳门新浦京娱乐场网站,4、修改nginx配置djsite.voidking.com.conf:

server {
    listen      80;
    server_name djsite.voidking.com;
    charset     utf-8;

    location / {
        uwsgi_pass     127.0.0.1:8000;
        include        uwsgi_params;
    }

    location /static {
        alias /root/djsite/static;
    }
}

5、重启nginx
./nginx -s reload

6、测量试验访谈
此时,访问 http://ip:8000/blog/index 失败,访问 http://django.voidking.com/blog/index 寻常。因为8000端口不再提供http服务,而是三个和nginx连接的socket。

7、static
请问,此时的静态能源,是通过uwsgi获取的?依旧经过nginx间接得到的?做二个测量检验就可以,修改uwsgi为:

[uwsgi]
socket = :8000
chdir = /root/djsite/
wsgi-file = django_wsgi.py
# static-map = '/static=static'
master = true
processes = 2
enable-threads = true
# daemonize = /root/djsite/uwsgi.log

这会儿,uwsgi不再提供静态财富。重启supervisor,页面样式平常,可见,静态财富是通过nginx获取的。之所以得以收获到,是因为我们前边在djsite/settings.py中布署了:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

小结

由来,django安插完结,大家兑现了二种配备方法:

  • nginx django(http方式)
  • nginx uwsgi(http方式)
  • nginx uwsgi(socket方式)

在此进度中,消除了一些出人意料的bug,学习了进级python的点子,学习了应用pyenv安装多版本python的秘籍(类似的还恐怕有anaconda),学习了给django或许uwsgi加多守护进程的措施,满载而归。

书签

Python Web布署方式计算

Python网络框架——Web服务器

Django在生育条件中的计划

Django 部署(Nginx)

使用Supervisor管理SpiderKeeper和Scrapyd

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:Django安插到线上,远程文件的布局