部署你的CRM程序
教你发布CRM
发布CRM你将使用以下软件
- nginx
- uWSGI
- CentOS7
- CRM项目文件
- virtualenv
- supervisor
WSGI、uWSGI
python web服务器开发使用WSGI协议(Web Server Gateway Interface)
python web项目默认会生成一个wsgi.py文件,确定好应用模块。
生产环境中使用的是uWSGI,实现了WSGI所有接口,C语言编写,效率很高的web服务器。
uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
Nginx
使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署。
CentOS
1.打包项目CRM文件夹,压缩文件
2.通过xftp、scp、lrzsz等上传文件至Centos服务器
Linux使用技巧
1.通过xshell或者iTerm等软件,多终端操作你的linxu,这样对uwsgi、nginx、项目代码调试的时候,避免来回切换目录,提供工作效率。
2.注意修改了linux软件的配置文件,都要重启服务才能生效。
Virtualenv
构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。
Supervisor
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
项目部署
激活虚拟python环境
#创建基于python3的虚拟解释器环境venv
virtualenv --no-site-packages --python=python3 venv
#激活python3虚拟环境
[root@yugo /data ::]#source venv/bin/activate
(venv) [root@yugo /data ::]#
安装uwsgi
(venv) [root@yugo /data ::]#pip3 install uwsgi
配置启动uwsgi.ini,启动uwsgi时候,用这个配置文件启动

(venv) [root@yugo /data ::]#cat uwsgi.ini
[uwsgi]
#使用nginx连接时使用
socket=0.0.0.0:
#不用nginx直接当做web服务器使用
#http=0.0.0.0:
#项目目录绝对路径
chdir=/data/Ace_crm
#wsgi文件路径,在项目底下
wsgi-file=Ace_crm/wsgi.py
#指定解释器目录
home=/data/venv
processes=
threads=
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

配置nginx
配置nginx.conf,通过nginx反向代理将请求丢给django处理

(venv) [root@yugo /data ::]#cat /opt/nginx1-/conf/nginx.conf
worker_processes ;
events {
worker_connections ;
}
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 ;
#定义负载均衡池,名字叫做django,池子中写入uwsgi发布django的socket地址
upstream django {
server 0.0.0.0:;
}
server {
listen ;
server_name pythonav.cn;
#访问nginx的根路径时,转发请求给uwsgi的8000端口,这里要和uwsgi.ini写的一致
location / {
include /opt/nginx1-/conf/uwsgi_params;
#请求转发给upstream地址池里的uwsgi程序
uwsgi_pass django;
}
location /static/ {
alias /opt/nginx1-/html/static/;
} }
}

热加载nginx服务,读取nginx.conf内容
(venv) [root@yugo /data ::]#/opt/nginx1-/sbin/nginx -t
nginx: the configuration file /opt/nginx1-/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx1-/conf/nginx.conf test is successful
(venv) [root@yugo /data ::]#/opt/nginx1-/sbin/nginx -s reload
启动uwsgi,启动django

(venv) [root@yugo /data ::]#uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
(venv) [root@yugo /data ::]#ps -ef|grep uwsgi
root : ? :: uwsgi uwsgi.ini
root : ? :: uwsgi uwsgi.ini
root : ? :: uwsgi uwsgi.ini
root : ? :: uwsgi uwsgi.ini
root : ? :: uwsgi uwsgi.ini
root : pts/ :: grep --color=auto uwsgi #如果需要停止uwsgi可以使用ps -ef|grep uwsgi,找到pid杀掉
#更好的一个杀掉uwsgi的方式
killall -9 uwsgi

访问nginx的80端口,查看是否请求转发给django
http://pythonav.cn/login/
或者10.0.0./login
配置nginx的静态资源

为什么要配置静态资源?
配置静态资源目录是因为让静态资源通过nginx可以直接返回,不需要通过uwsgi,也就是让uwsgi只处理后端逻辑,不处理静态资源,优化性能
配置静态资源,django和nginx
#创建静态资源存放目录
[root@yugo /opt/nginx1-/html ::]#mkdir -vp /opt/nginx1-/html/static
mkdir: created directory ‘/opt/nginx1-/html/static’
#给目录添加权限
[root@yugo /opt/nginx1-12/html 11:40:57]#chmod 755 /opt/nginx1-12/html/static/
配置django的settings.py

DEBUG = False
ALLOWED_HOSTS = ['*']
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/'
STATIC_ROOT= '/opt/nginx1-12/html/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]


分割线--

收集django静态文件
python3 manage.py collectstatic
这一句话就会把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中 然后请求静态资源就会去nginx配置的 location /static {alias /opt/nginx1-12/html/static/ } 寻找
以上步骤完成后,访问服务器主机地址和端口,如果nginx.conf中配置的为80端口,则地址栏不需要输入端口,因为浏览器请求端口也是默认为80端口,非80端口的需要自己在ip后面添加
完毕
部署你的CRM程序的更多相关文章
- 【转】Tomcat中部署java web应用程序
http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...
- 在Tomcat中部署Java Web应用程序
在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部 ...
- 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序
原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim ...
- Tomcat部署发布JSP应用程序的三种方法 (转)
Tomcat部署发布JSP应用程序的三种方法 1.直接放到Webapps目录下 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应 ...
- .Net Core 在Linux服务器下部署程序--(3). 部署.net core 后端程序
确认第二步中的软件已安装完成 lrzsz文件上传下载软件 zip与unzip压缩包软件 net core 相关软件 确认上述软件安装完成之后,开始部署程序 创建部署文件夹 我的习惯是在usr文件夹下新 ...
- Python-Django Win7上使用Apache24和mod_wsgi部署Django1.11应用程序
Win7上使用Apache24和mod_wsgi部署Django1.11应用程序 by:授客 QQ:1033553122 测试环境 win7 64 Django-1.11.4.tar.gz 下载地址: ...
- Docker Compose 一键部署多节点爬虫程序
Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...
- 一步一步部署WPF浏览器应用程序
WPF浏览器应用程序与Silverlight,Asp.net相比,同是发布到服务器,在IE中运行.WPF浏览器应用程序部署起来却相对困难. 相信很多朋友在第一次部署WPF浏览器应用程序时,都遇到&qu ...
- Tomcat中部署Java Web应用程序的方式
Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...
随机推荐
- Hibernate的Cascade——级联操作
在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当 前实体时,针对当前实体的操作会影响到相应配置的关联实体.比如针对当前实体进行保存操作 ...
- 二分优化lis和STL函数
LIS:最长上升子序列: 这个题我们很显然会想到使用dp, 状态设计:dp[i]代表以a[i]结尾的LIS的长度 状态转移:dp[i]=max(dp[i], dp[j]+1) (0<=j< ...
- java中的循环方法(附带本人遇到的坑)
java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: 1.while 循环 2.do...while 循环 3.fo ...
- 关于matplotlib绘制直方图偏移的问题
在使用pyplot绘制直方图的时候我发现了一个问题,在给函数.hist()传参的时候,如果传入的组数不是刚刚好(就是说这个组数如果是使用(最大值-最小值)/组距计算出来,而这个数字不是整除得来而是取整 ...
- Lintcode93-Balanced Binary Tree-Easy
93. Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...
- 动态 DP 学习笔记
不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子 ...
- Linux环境——MySQL安装及配置(8.0版本)
虚拟机环境是Linux Red Hat Enterprlse Linux (64位),本次安装的是Mysql 8.0版本. 由于有经验了,所以又弄了台虚拟机练手,承接上一篇博客(https://ww ...
- y
switch(update_state) { : switch(num){ : window.progressn=num $('#h_progress_bar .ui-progress').anima ...
- Kotlin 泛型
泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上. 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 声明一个泛型类: cla ...
- 关于虹软人脸识别SDK的接入
背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...