作者:知乎用户
链接:https://www.zhihu.com/question/27295854/answer/36365005
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

django简易部署指南.md
----------------------------

首先 推荐使用virtualenv用于创建独立的Python环境 使多个python多个Python相互独立,互不影响 你比较高大上 用virtualenvwrapper 也没关系。。。

virtualenv --no-site-packages testcd testsource bin/activatepip install gunicorn djangodjango-admin.py startproject hellocd hello# to test the base setup workspython manage.py runserver 0.0.0.0:8000

Gunicorn

Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器 与django搭配 效果拔群

Testing Django with Gunicorn is as simple as:

我们先来个simple Example来运行django

gunicorn_django -b 0.0.0.0:8000

当然 正常的合理的运行方法是写个sh脚本来运行 like it

 #!/bin/bashset -eLOGFILE=/var/log/gunicorn/hello.logLOGDIR=$(dirname $LOGFILE)NUM_WORKERS=3# user/group to run asUSER=your_unix_userGROUP=your_unix_groupcd /path/to/test/hellosource ../bin/activatetest -d $LOGDIR || mkdir -p $LOGDIRexec ../bin/gunicorn_django -w $NUM_WORKERS --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE

看起来很麻烦? 这里在举一个实际中使用的脚本供参考

#!/bin/bash
set -e
LOGFILE=/var/log/blog.log
# log路径
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=1
#下面有解释
# user/group to run as
USER=root
GROUP=root
cd /home/www/blog/
#web的路径
test -d $LOGDIR || mkdir -p $LOGDIR
exec gunicorn -w $NUM_WORKERS -b 0.0.0.0:8000 lintcode.wsgi:application --user=$USER --group=$GROUP
#8000是端口 可随意修改

ps 1.这里要解释下NUM_WORKERS参数的设置 gunicorn只需要启用4–12个workers,就足以每秒钟处理几百甚至上千个请求了。 如果你的网站访问量较大,

我推荐的合理的worker数量是:

(2 x $num_cores)

2.可能你要提升下脚本权限 like

chmod ug+x script.sh

这里有两种选择来维护上面的脚本持续运行 一种是 利用 Supervisor

另一种是 Upstart

Upstart

Upstart是替换 /sbin/init 守护进程 这是一个例子 新建/etc/init/hello.conf

  description "Test Django instance"start on runlevel [2345]stop on runlevel [06]respawnrespawn limit 10 5exec /test/hello/script.sh#脚本路径为/test/hello/script.sh

运行下面指令 来试试吧

---ubuntu
service hello {start,status,stop}
#(as root).
---centos
start Hello
stop Hello

ps.(ubuntu)

如果上面指令没效果 可能是链接没做好 执行下面的指令

  sudo ln -s /lib/init/upstart-job /etc/init.d/hello

么么哒 django就这样安全的部署好喽

编辑于 2015-01-10

​赞同 22​​2 条评论

​分享

​收藏​喜欢收起​

小松鼠

死磕Python http://www.chenxm.cc/

9 人赞同了该回答

自己也是没有经验,根据网上的文章 折腾了好几天时间,终于折腾出结果。你可以点击下面网址看 也可以直接往下看,不过可能排版这么好

Liunx之Ubuntu下Django+gunicorn+nginx部署_Linux_陈新明

一、uWSGI

1. 安装

pip install uwsgi

2. 测试uWSGI是否安装成功

在终端中输入以下命令查看uwsgi的版本号,如果输出正常,说明uswgi已安装成功

$ uwsgi --version
2.0.15

3. 编写一个简单的wsgi应用测试uwsgi是否能正常使用

首先创建一个test.py文件(命令:vim test.py)

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

4.运行uwsgi:

uwsgi --http :8000 --wsgi-file test.py

参数解释:

http :8000表示使用http协议,端口号为8000,

wigi-file则表示要运行的wsgi应用程序文件。

uwsgi运行后打开浏览器,访问http://127.0.0.1:8000/ ,或者是相应服务器地址的8000端口,就可以看到hello world 页面了。

运行截图:

如果想要运行项目来测试

# uwsgi --http :8000 --chdir 项目路径 -w 项目.wsg --static-map=/static=staticuwsgi --http :8000 --chdir /home/teacher/ -w teacher.wsgi --static-map=/static=static

uWSGI常用命令:

uwsgi --chdir=/path/to/your/project \--module=mysite.wsgi:application \--env DJANGO_SETTINGS_MODULE=mysite.settings \--master --pidfile=/tmp/project-master.pid \--socket=127.0.0.1:49152 \      # 可以ip地址,也可以是文件 --processes=5 \                 # 进程数量--uid=1000 --gid=2000 \         # 如果是root用户,uwsgi可以有删除权限--harakiri=20 \                 # 一个请求超时时间--max-requests=5000 \           # 一个工作进程最大请求数--vacuum \                      # 退出时清楚环境--home=/path/to/virtual/env \   # virtualenv的路径-- static                       # 做一个映射,指定静态文件--http                          # 这个就和runserver一样指定IP 端口--daemonize=/var/log/uwsgi/yourproject.log      # 日志 

5. 创建uwsgi配置文件

在项目统计目录下创建文件夹script,(比如项目目录路径/home/project_teacher/teacher,那么scrip文件存放在/home/project/teacher/script)

$ pwd
/home/project_teacher$ mkdir script
$ vim uwsgi.ini

配置信息如下:

[uwsgi]
# 项目目录
chdir=/opt/project_teacher/teacher/
# 指定项目的application
module=teacher.wsgi:application
# 进程个数
workers=5
pidfile=/opt/project_teacher/script/uwsgi.pid
# 指定IP端口
http=192.168.31.123:8080
# 指定静态文件
static-map=/static=/opt/test_project/teacher/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/opt/project_teacher/script/uwsgi.log
# 指定sock的文件路径
socket=/opt/project_teacher/script/uwsgi.sock

6. 启动配置

$ uwsgi --ini uwsgi.ini   # 启动uwsgi配置
[uwsgi-static] added mapping for /static => /home/trunk/static    # 启动成功$ uwsgi --stop uwsgi.pid  # 关闭uwsgi
signal_pidfile()/kill(): Operation not permitted [core/uwsgi.c line 1659]

二、Nginx

1. 安装

$ sudo apt-get install nginx  #安装

2. 检查nginx是否安装成功

$ /etc/init.d/nginx start[ ok ] Starting nginx (via systemctl): nginx.service.

检查nginx是否启动成功

$ ps -ef |grep -i nginx
root       6961      1  0 03:56 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   6962   6961  0 03:56 ?        00:00:00 nginx: worker process
pala       6985   2090  0 03:57 pts/0    00:00:00 grep --color=auto -i nginx

然后打开浏览器,访问ip地址,出现如下页面即代表nginx安装完成且可以正常启动。

Nginx常用命令

$ /etc/init.d/nginx start  #启动
$ /etc/init.d/nginx stop  #关闭
$ /etc/init.d/nginx restart  #重启

修改Nginx信息

nginx.conf文件

vim /etc/nginx/nginx.conf

三、Django + uWSGI +Nginx

1. 创建一个xxx.conf配置文件(nginx的默认配置目录为/etc/nginx/conf.d)

server {   # 这个server标识我要配置了listen 80;  # 我要监听那个端口server_name 10.129.205.183 ;  # 你访问的路径前面的url名称access_log  /var/log/nginx/access.log  main;  # Nginx日志配置charset  utf-8; # Nginx编码gzip on;  # 启用压缩,这个的作用就是给用户一个网页,比如3M压缩后1M这样传输速度就会提高很多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;  # 支持压缩的类型error_page  404           /404.html;  # 错误页面error_page   500 502 503 504  /50x.html;  # 错误页面# 指定项目路径uwsgilocation / {        # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),include uwsgi_params;  # 导入一个Nginx模块他是用来和uWSGI进行通讯的uwsgi_connect_timeout 30;  # 设置连接uWSGI超时时间uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock;  # 指定uwsgi的sock文件所有动态请求就会直接丢给他}# 指定静态文件路径location /static/ {alias  /opt/project_teacher/teacher/static/;index  index.html index.htm;}

2. 重启nginx

$ /etc/init.d/nginx restart #重启

编辑于 2017-10-13

​赞同 9​​3 条评论

​分享

​收藏​喜欢收起​

廖子谦

26 人赞同了该回答

  1. 创建一个django项目

    django-admin.py startproject hello

    然后你的目录是这样的

    hello/
    ├── hello
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── manage.py
    
  2. 配置uwsgi.ini,不清楚的配置自行搜索
    [uwsgi]
    chdir=/home/liaoziqian/hello
    uid=nobody
    gid=nobody
    module=hello.wsgi:application
    socket=/home/liaoziqian/hello/uwsgi.sock
    master=true
    workers=5
    pidfile=/home/liaoziqian/hello/uwsgi.pid
    vacuum=true
    thunder-lock=true
    enable-threads=true
    harakiri=30
    post-buffering=4096
    daemonize=/home/liaoziqian/hello/uwsgi.log
    
  3. uwsgi相关命令
    启动uwsgi:uwsgi --ini uwsgi.ini
    停止uwsgi:uwsgi --stop uwsgi.pid
    重新加载配置:uwsgi --reload uwsgi.pid
  4. nginx配置
    server {listen 8080;location / {include uwsgi_params;uwsgi_connect_timeout 30;uwsgi_pass unix:/home/liaoziqian/hello/uwsgi.sock;}
    }
    
  5. 启动uwsgi,启动nginx,一个简单的nginx + uwsgi + django示例就完成了

编辑于 2015-01-14

​赞同 26​​6 条评论

​分享

​收藏​喜欢收起​

优酷App

广告​

不感兴趣知乎广告介绍

毫不夸张地说,今天优酷视频VIP这个活动,很有点“丧心病狂”!

原价198的优酷会员,现在只需要99元,低至8.25元/月,海量片库随意看,广告再见,福利来!查看详情

kan tmac

1 人赞同了该回答

Python Web部署篇 -- 简明现代魔法
我看到的一个简易的教程
目前我们公司是是采用命令行启动xml配置文件的方式启动uwsgi服务

发布于 2016-07-14

​赞同 1​​添加评论

​分享

​收藏​喜欢

知乎用户

6 人赞同了该回答

我的系统是ubuntu server,nginx+uwsgi+django/flask都成功部署。

建议使用virtualenv。

我的部署方案可以做到各个项目独立配置,互不影响(nginx,当然是从部署上的)。

以下是我写的文档:Ubuntu-Server-14.04-Nginx-uWSGI-Python-Django-Flask 虽然系统不一样,但是除了配置文件path,其他区别不大。仅供参考。

建议使用docker。。。

编辑于 2017-07-12

​赞同 6​​3 条评论

​分享

​收藏​喜欢

人间各种胸器

不会修电脑,再问弄死你信不信

2 人赞同了该回答

可以参考:

Nginx + uwsgi + django + websocket(dwebsocket)环境部署

发布于 2017-03-17

​赞同 2​​添加评论

​分享

​收藏​喜欢

路强

航天遥感/python/私有云/美食/羽毛球爱好者/投资

2 人赞同了该回答

最简单的方式,安装docker,直接去docker hub上去下载一个别人配置好的镜像,然后在本地以docker镜像的方式启动,一切都ok了。

docker pull dockerfiles/django-uwsgi-nginx

发布于 2015-03-19

​赞同 2​​2 条评论

​分享

​收藏​喜欢

liujt

IT 大叔

bitnami 的集成安装包

Install Django, Download Django

或虚拟机镜像

https://bitnami.com/stack/django/virtual-machine

编辑于 2018-02-27

​赞同​​添加评论

​分享

​收藏​喜欢

Coral

看戏的

1、升级Python以及安装PIP
使用脚本安装和升级pip,会自动安装setuptools ,前提是需要下载get-pip.py

2、安装Django、uwsgi
pip install django==1.8.15
pip install uwsgi

3、安装MySQL以及安装mysql-python
选择免安装版本
pip install mysql-python

Django同步数据库模型(注意Django版本,syncdb为<Django==1.7)
[root@db1 demosite]# python manage.py syncdb

>Django==1.7
[root@db1 demosite]# python manage.py makemigrations
Migrations for 'west':
0001_initial.py:
- Create model Character
[root@db1 demosite]# python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, west, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying sessions.0001_initial... OK
Applying west.0001_initial... OK
[root@db1 demosite]#

4、安装Nginx以及配置uwsgi
uwsgi支持ini、xml等多种配置方式,下述以ini为例,在/etc目录下创建uwsgi8090.ini,配置内容如下
[root@db1 ~]# cat /etc/uwsgi8090.ini
[uwsgi]
socket=127.0.0.1:8090
master=true
vhost=true
no-size=true
workers=2
reload-mercy=10
vacuum=true
max-requests=1000
limit-as=512
buffer-size=30000
pidfile=/var/run/uwsgi8090.pid
daemonize=/website/uwsgi8090.log
[root@db1 ~]#

Nginx配置,默认配置文件nginx.conf,修改并添加内容如下
location / {
#root html;
#index index.html index.htm;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8090;
uwsgi_param UWSGI_SCRIPT demosite.wsgi;
uwsgi_param UWSGI_CHDIR /django/demosite;
index index.html index.htm;
client_max_body_size 35m;
}
location /static {
#alias /django/demosite/static;
alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/; #注意是alias,而非root
}

5、Django admin页面缺少css样式

参考:解决Django Admin管理界面样式表(CSS Style)丢失问题
Nginx+Django Admin界面无样式问题
解决步骤:(网络上说有两种解决方式,我只是成功了一种)
1、进入Python找到django静态文件的目录
[root@db1 demosite]# python
Python 2.7.9 (default, Oct 9 2016, 23:39:53)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.__file__
'/usr/local/lib/python2.7/site-packages/django/__init__.pyc'
>>>

2、找出django静态文件的绝对路径,并修改项目工程下的settings.py
/usr/local/lib/python2.7/site-packages/django/contrib/admin/static

在settings.py增加如下内容
STATIC_ROOT='/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/'

3、修改nginx配置文件,重启uwsgi以及nginx
location /static {
#alias /django/demosite/static;
alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/;
}

root@db1 demosite]# /usr/local/nginx/sbin/nginx -s reload
[root@db1 demosite]# uwsgi --reload /var/run/uwsgi8090.pid

6、在服务器重启过后,因为是写入/etc/rc.local,Uwsgi以及Nginx进程不正常,需要完善开机自启动

编辑于 2016-10-09

​赞同​​添加评论

​分享

​收藏​喜欢收起​

吴明志

炒股大老板,秒入30亿

建议你换mez吧。。。一个fab就搞定了

发布于 2015-11-19

​赞同​​添加评论

​分享

​收藏​喜欢

leehark

我的方法是:nginx+apache(wsgi)+django+数据库(mongodb,memcached,redis,pg等)

发布于 2015-08-07

​赞同​​添加评论

​分享

​收藏​喜欢

Dreamcoin

我的网站部署​www.gaoblog.cn

我在我的网站上面写了部署的具体流程。

来源:https://www.zhihu.com/question/27295854?sort=created

如何配置nginx+uwsgi+django?(知乎上面的看着不错)相关推荐

  1. 微信抢票环境配置——nginx + uwsgi + django配置服务器

    微信抢票环境配置--nginx + uwsgi + django配置服务器 1 uwsgi配置 2 http协议(80端口)下的nginx配置 1 uwsgi配置 安装uwsgi pip3 insta ...

  2. Nginx+UWSGI+Django配置全过程

    Nginx + uwsgi + Django 安装配置 一.安装Nginx uwsgi Django 安装tengine yum install pcre-devel -y wget http://t ...

  3. Nginx +uwsgi+django配置

    Nginx+uwsgi+django配置 nginx配置 nginx.conf 一般位于linux系统的 /etx/nginx/ 目录下 upstream django {server unix:// ...

  4. Ubuntu Nginx uwsgi django 初试

    /*************************************************************************************** Ubuntu Ngin ...

  5. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  6. Centos 6.5部署nginx+uwsgi+django

    Centos 6.5部署nginx+uwsgi+django 一.安装python3,系统默认是python2.6 1.安装依赖软件 yum -y install sqlite-devel yum - ...

  7. nginx+uWSGI + django部署项目

    项目部署 nginx+uWSGI + django 1. WSGI WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器(返回静态资源的就是web服务器,Nginx)如何与Web应用程序( ...

  8. nginx+uwsgi+django环境部署部署

    首科常昊技术部 Django框架部署文档: 硬件环境:阿里云ecs服务器8核心.16GB.10Mbps 环境结构:nginx+uwsgi+django 所需软件:python-3.6.1.pip3.6 ...

  9. Docker部署Angular+Nginx+uwsgi+Django项目

    Docker部署Angular+Nginx+uwsgi+Django项目 0.前言 在开发部署时,容易遇到服务器环境不一致,多台服务重复部署操作过于繁杂的情况.这时可以采用Docker来提供一套统一的 ...

最新文章

  1. python 应声虫怎么做_职场人士如何处理好人际关系:要服从,但不要做毫无主见的应声虫...
  2. 读书笔记:线上性能问题初步排查方法
  3. HDU 6052 To my boyfriend(容斥+单调栈)
  4. Vue入门教程:node安装vue命令行工具及启动项目
  5. 用 pandas + matplotlib 绘制精美的K线图
  6. 推荐系统入门:作为Rank系统的推荐系统(协同过滤)
  7. C#基础知识之base、this、new、override、abstract梳理
  8. 十二、Python第十二课——函数
  9. swift开发:试玩 Apple 网站的 playground
  10. java定义整形输出_java程序命令行接受字符转换为整形并相加输出
  11. debug.keystore文件找不到
  12. 敏捷开发日常跟进系列之三:故事板,看板
  13. iOS 10 的 Speech 框架实现语音识别 (Swift)
  14. http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
  15. efs+pro+for+三星android设备,【极光ROM】-【三星S8/S8+ G9550/G9500】-【V30.0 Android-PIE-TL2】...
  16. Visio直角连接线增加直角拐弯
  17. 简单谈谈3D打印培训的发展和前景
  18. 复合型网络拓扑结构图_网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  19. 使用jQuery实现轮播图
  20. 不是所有数学命题都是可以被证明或证伪

热门文章

  1. java handler的用法_Handler和内部类的正确用法
  2. 「JupyterNotebook-bug」Jupyter Notebook卸载已安装的第三方库不能输入yes的问题
  3. Sqoop(二)常用命令及常数解析
  4. VMware虚拟机磁盘操作占用过高问题(转:http://blog.csdn.net/New_When/article/details/73731149)
  5. NDK开发环境安装,CDT安装,Cygwin安装
  6. mongodb 的使用场景和不适合使用的场景
  7. Gecko浏览器引擎
  8. CXF wsdl2Java
  9. xml解析:Sax,Dom,pull解析
  10. 表的插入、更新、删除、合并操作_17_按照条件删除表中记录