1.在linux系统下,安装virtualenv

命令:pip install virtualenv

2.项目部署前的准备

1. Django web project deployment

1.1. 项目准备

准备打包好项目组开发的web项目,通过FTP上传到指定的linux/unix服务器

案例项目:mysite/

1.2. 生产环境准备

Django生产环境服务器,常规情况下使用Linux/Unix平台作为服务器平台,需要准备如下运行环境

l 环境:python2.x / python3.x

l 软件:mysql-server、mysql-client

l 模块:pymysql、pillow、django、uwsgi

1.3. 项目部署【UWSGI部署】

在指定的文件夹中上传项目文件

使用FTP连接linux系统,一般情况下建议使用非root账号和密码进行连接。

上传文件之前可以使用pip freeze  > 文件名,在原来的项目环境中进入项目搜集第三方模块,并保存在自定义文件中,将该文件创建于项目内部,一起上传如linux系统。

(1) 在生产环境打开mysql-client命令行,执行项目sql脚本语句,初始化数据库

(2) 在项目根目录中,添加uwsgi.ini配置文件,添加如下内容

[uwsgi]

# 指定服务器部署IP地址和端口

http=192.168.10.120:8000

# 配置项目在当前服务器中的绝对路径

chdir=/home/worker/django_pro_1_11/mysite

# 相对路径指定当前项目中wsgi.py

wsgi-file=mysite/wsgi.py

# 设置启动的进程数量

processes=4

# 设置每个进程启动的线程数量

threads=2

# 设置主进程

master=True

# 指定保存主进程编号的文件

pidfile=uwsgi.pid

# 指定守护进程的日志存储

daemonize=uwsgi.log

(3) 项目运行

启动项目,当前路径中,直接运行命令启动项目

uwsgi --ini uwsgi.ini

停止项目,通过包含主进程编号的文件设置停止项目

uwsgi --stop uwsgi.pid

重启项目

uwsgi --reload uwsgi.pid

1.4. 项目部署【UWSGI + NGINX】

通过UWSGI服务器部署Django项目,通过nginx进行反向代理

(1) 项目根目录创建uwsgi.ini配置文件

[uwsgi]

# 配置和nginx反向代理之间的连接地址

socket=localhost:8000

# 配置项目根路径

chdir=/home/worker/django_pro_1_11/mysite

# 相对路径指定当前项目中wsgi.py

wsgi-file=mysite/wsgi.py

# 设置启动的进程数量

processes=4

# 设置每个进程启动的线程数量

threads=2

# 设置主进程

master=True

# 指定保存主进程编号的文件

pidfile=uwsgi.pid

# 指定守护进程的日志存储

daemonize=uwsgi.log

(2) 编辑nginx.conf配置文件,设置反向代理

nginx和uwsgi进行配合使用时,nginx主要有两个作用,使用nginx作为静态文件服务器和反向代理服务器

l 设置静态文件

打开django项目的配置文件,添加STATIC_ROOT配置

编辑mysite/mysite/settings.py

..

STATIC_ROOT=/home/worker/django_pro_1_11/myweb/static_file/

..

进入Django项目根目录执行命令收集静态文件

>>> python manage.py collectstatic

l 反向代理配置

编辑/etc/nginx/nginx.conf配置文件,编辑server配置选项

核心配置反向代理server服务器和静态文件别名

..

events {

...

}

..

http {

..

server {

listen 80;

server_name 192.168.10.120;

# 反向代理配置

location / {

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

}

# 静态文件路径配置

location /static {

alias /home/worker/django_pro_1_11/myweb/static_file/;

}

}

..

}

(3) 启动项目进行测试

l 首先进入项目目录,启动Django项目

>>> uwsgi --ini uwsgi.ini

l 启动nginx服务器

>>> nginx

l 检查进程启动情况

>>> ps -ef|grep wsgi

..

>>> ps -ef|grep nginx

..

l 测试访问项目

TEST

1.5. 项目分布式部署【UWSGI + NGINX】

使用UWSGI配置Django项目的多进程部署,使用nginx进行静态文件的部署和负载均衡的配置

(1) 在多台主机上部署多个相同的django项目【同一台主机上部署多个项目进行模拟】

设置两个或者多个Django项目的启动配置信息如下

mysite/uwsgi.ini

[uwsgi]

# 配置项目访问地址

http=localhost:8000

# 配置项目根路径

chdir=/home/worker/django_pro_1_11/mysite

# 相对路径指定当前项目中wsgi.py

wsgi-file=mysite/wsgi.py

# 设置启动的进程数量

processes=4

# 设置每个进程启动的线程数量

threads=2

# 设置主进程

master=True

# 指定保存主进程编号的文件

pidfile=uwsgi.pid

# 指定守护进程的日志存储

daemonize=uwsgi.log

mysite2/uwsgi.ini

[uwsgi]

# 配置项目访问地址

http=localhost:9000

# 配置项目根路径

chdir=/home/worker/django_pro_1_11/mysite2

# 相对路径指定当前项目中wsgi.py

wsgi-file=mysite/wsgi.py

# 设置启动的进程数量

processes=4

# 设置每个进程启动的线程数量

threads=2

# 设置主进程

master=True

# 指定保存主进程编号的文件

pidfile=uwsgi.pid

# 指定守护进程的日志存储

daemonize=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

2. Tornado web project deployment

2.1. 项目准备

参考Django 1.1部分

2.2. 项目常规部署【使用自带服务器直接操作】

直接通过配置文件或者命令行指定端口运行程序,就可以使用torando自带的web服务器启动web项目并提供正常的web服务了

但是这样的操作方式并不是可取的,命令行需要处理让启动的程序后台运行,并且如果部署多进程项目的话,多个进程之间没有进行统一管理的操作,很不方便后期的维护操作

直接运行【阻塞方式】

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

后台运行【非阻塞方式】

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

2.3. supervisor管理进程

针对tornado多进程部署方式,第三方提供了各种进程管理模块用于进行tornado项目多个进程的维护管理,项目中常用的如supervisor、circus等等

(1) ubuntu中安装supervisor

$ sudo apt-get install supervisor

备注:可以使用pip install supervisor安装

安装完成后,生成supervisor配置文件

$ cd /etc/supervisor

$ echo_supervisord_conf > supervisord.conf

修改配置文件/etc/supervisor/supervisord.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) 进程管理

启动进程管理器

$ supervisord -c supervisord.conf

进程管理器包含进程状态管理

supervisorctl status   # 查看管理的所有进程的状态

supervisorctl update   # 重新启动配置文件修改的程序

supervisorctl stop td:* # 停止所有进程[可以指定进程]

supervisorctl start td:* # 启用所有进程[可以指定进程]

supervisorctl restart td:* # 重启所有进程进程[可以指定进程]

2.4. supervisor+nginx分布式部署

参考Django项目部署1.5章节nginx部署部分

3. Flask web project deployment

模仿Django和Tornado的项目部署方式

参考

http://docs.jinkan.org/docs/flask/deploying/index.html#deployment

3.在指定的文件夹中上传项目文件

使用FTP连接linux系统,一般情况下建议使用非root账号和密码进行连接。

上传文件之前可以使用pip freeze  > 文件名,在原来的项目环境中进入项目搜集第三方模块,并保存在自定义文件中,将该文件创建于项目内部,一起上传如linux系统。

Django项目在linux系统中虚拟环境部署的更多相关文章

  1. 使用URLOS在linux系统中极速部署NFS共享存储服务

    如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...

  2. windows系统下的maven项目放到linux系统中运行时报org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnection这种异常的解决办法

    这个错误的解决办法其实很简单你把连接mysql数据库的那个jar包换成linux版本的就行了: linux版本的连接mysql数据库的jar包链接:http://files.cnblogs.com/f ...

  3. 在Linux系统中部署NodeJS项目

    在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...

  4. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  5. Linux系统中ElasticSearch搜索引擎安装配置Head插件

    近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...

  6. Linux系统中tomcat的安装及优化

    Linux系统中Tomcat 8 安装 Tomcat 8 安装 官网:http://tomcat.apache.org/ Tomcat 8 官网下载:http://tomcat.apache.org/ ...

  7. Django项目之打分系统

    打分系统 关注公众号"轻松学编程"了解更多. 项目GitHub地址:https://github.com/liangdongchang/VoteSys.git 1.开发需求 a. ...

  8. 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令

    安装Docker 文章目录 安装Docker Docker虚拟机架构 在Linux系统中安装Docker虚拟机 管理Docker虚拟机 参考资料 Docker虚拟机架构 Docker创建的所有虚拟实例 ...

  9. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

随机推荐

  1. 一小时学会 C# 6.0

    一.字符串插值 (String Interpolation) C# 6之前我们拼接字符串时需要这样 var Name = "Jack"; var results = "H ...

  2. Hadoop EC 踩坑 :data block 缺失导致的 HDFS 传输速率下降

    环境:hadoop-3.0.2 + 11 机集群 + RS-6-3-1024K 的EC策略 状况:某天,往 HDFS 上日常 put 业务数据时,发现传输速率严重下降 分析: 检查集群发现,在之前的传 ...

  3. 路由表flags的U值引起的能ping通网关,ping不通其它网段的案例

    故障的: 正常的: 初步分析: 看路由表的flags ,之前故障时是U.现在正常的是UG查了下说明,应该是这个原因.U — 路由是活动的G — 路由指向网关

  4. hdoj5769后缀自动机版本

    网上的题解都是后缀数组,我来个后缀自动机题解. 建好后缀自动机后由于后缀自动机是单向的,那么dfs一遍记录各节点的size,要保证一个节点只经过一次才是O(n),否则是O(n^2).表示这个节点及后面 ...

  5. axios和promise

    什么是axios axios is a promise based HTTP client for the browser and node.js Features: Make XMLHttpRequ ...

  6. CKEditor富文本编辑器

    CKEditor 富文本即具备丰富样式格式的文本.在运营后台,运营人员需要录入课程的相关描述,可以是包含了HTML语法格式的字符串.为了快速简单的让用户能够在页面中编辑带格式的文本,我们引入富文本编辑 ...

  7. dilated convolutions:扩张卷积

    最近在阅读<Context Encoding for Semantic Segmentation>中看到应用了dilated convolutions. 扩张卷积与普通的卷积相比,除了卷积 ...

  8. git提交代码到码云详解

    一.为什么不用github而使用码云? 私有——免费,速度快 二.怎么用? 1.下载安装好git. 2.去码云官网注册个账号.官网:https://git.oschina.net/ 3.创建项目.项目 ...

  9. Python---高级函数map, filter, zip, enumerate等的用法

    今天看自然语言处理这本书的时候,被这里的高级函数的概念吸引了,因为我觉得所有的函数都只是函数而已,是为了实现特定功能而实现的,不应该有高级,低级之分啊!不过了解之后,发现这几个函数确实是有点高级,非常 ...

  10. quartz.net的使用

    Quartz.NET简介 Quartz.NET作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本. Quartz.NET是一个开源的作业调度 ...