发布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脚本来控制。

项目部署

上传knight项目到linux服务器

使用xftp工具,进项上传文件夹,将knight代码,传到linux服务器当中

完成python3解释器的安装

完成virtualenvwrapper工具的配置,解决虚拟环境问题

vim ~/.bashrc
最下面添加如下内容
WORKON_HOME=~/Envs #设置virtualenv的统一管理目录,以后自动下载的虚拟环境,全都放这了
VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3 #指定python解释器的本体
#必须要有这个参数,才会在每次登陆linux的时候,加载这个虚拟环境脚本工具
source /opt/python36/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
.新建一个knight虚拟环境用于运行  crm项目
cd /opt/knight
mkvirtualenv knight

完成centos7下安装配置mariadb数据库,且创建数据库数据,迁移导入knight数据

#centos7底下,mariadb就是mysql数据库,只是包名的不同
yum install mariadb-server mariadb -y
#启动mariadb服务端
systemctl start mariadb
#使用客户端去链接mysql服务端
.mysql -uroot -p
#注意,linux的数据库,需要对root用户设置远程链接的权限,
#授权所有的权限,在所有库,所有表 对 root用户在所有的主机上, 设置权限密码是 redhat
grant all privileges on *.* to root@'%' identified by 'redhat';
#刷新授权表
flush privileges; 注意2,linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝 在linux服务端,mysql,导入knight的数据
.mysql数据的导出,与导入
这个命令是在linux/windows中敲的
mysqldump -u root -p --all-databases > knight.dump .上传这个数据文件到linux系统的/opt/目录中 .在linux的mysql,导入这个数据文件
mysql -uroot -p < /opt/knight.dump
#会出现这个报错,是兼容问题,不影响
ERROR (HY000) at line : Unknown option 'STATS_PERSISTENT'

测试使用linux的python解释器去运行项目(注意要解决解释器的模块问题,才能正常运转项目)

pip3 install django==1.11.
pip3 install pymysql
pip3 install -i htttps://pypi.douban.com/simple django-multiselectield(注意安装的是django-multiselectield,错误提示的是缺少的是multiselectield)
改setings里面的数据库配置ip
还有ALLOWED_HOSTS = ['*']
python3 manage.py runserver 0.0.0.0:

安装uwsgi

.安装uwsgi
pip3 install uwsgi
.使用学习uwsgi命令,如何启动python应用
通过uwsgi运行一个python web文件
.通过命令去启动python web应用
uwsgi --http : --wsgi-file test.py
--http 指定http协议
--wsgi-file 指定一个支持python wsgi协议的文件 .通过uwsgi启动django项目(注意这里要进入knight项目目录)
uwsgi --http : --module knight.wsgi

5.uwsgi自动重启python程序
uwsgi --http :8000 --module knight.wsgi --py-autoreload=1

在生产中,您可以监视文件/目录更改以触发重新加载(touch-reload,fs-reload ...)。

在开发过程中,可以方便地使用所有已加载/使用的python模块的监视器。但请仅在开发期间使用它

检查由一个以指定频率扫描模块列表的线程完成:

[uwsgi]
...
py-autoreload = 2
将每2秒检查python模块更改并最终重新启动实例。

使用uwsgi.ini配置文件去启动项目,这个文件自己去创建即可,放哪都可以

[uwsgi]
# Django-related settings
# the base directory (full path)
#写上项目的绝对路径
chdir = /opt/knight
# Django's wsgi file #填写找到django的wsgi文件,填写相对路径,以chdir参数为相对路径
module = knight.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/knight/
# process-related settings
# master
#启动uwsgi主进程
master = true
# maximum number of worker processes
processes = #如果你使用了nginx,做反向代理,必须填写socket链接,而不是http参数
# the socket (use the full path to be safe
#socket = 0.0.0.0: #如果你不用nginx,直接使用uwsgi,运行一个http服务端,就用这个http参数
http = 0.0.0.0: # ... with appropriate permissions - may be needed
# chmod-socket =
# clear environment on exit
vacuum = true

指定配置文件(注意文件位置)去启动uwsgi

uwsgi --ini  uwsgi.ini (注意写清配置文件位置) 

使用ngixn处理django的静态文件

.设置django的静态文件目录,收集一下
修改knight/settings.py ,写入如下参数
STATIC_ROOT= '/opt/static'
.使用命令收集django的静态文件
python3 manage.py collectstatic
.查看django的静态文件收集目录
ls /opt/static .配置nginx,反向代理,找到uwsgi项目,且配置nginx处理uwsgi的静态文件
nginx.conf 修改配置如下 server {
listen ;
server_name qishijd.com;
#只要用户访问qishijd.com:/ 就走这个location匹配>,反向代理给uwsgi:
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:;
}
#当用户请求是qishijd.com/static/的时候
#就会进入这个location匹配
#通过alias参数进行路径别名,让nginx去/opt/static底下去找静>态资源
location /static {
alias /opt/static;
}
}

访问域名或者ip,查看项目

qishijd.com/login  查看静态页面是否正常

supervisor

本来我们是用命令启动管理项目,
现在讲这些命令,写入到supervisor,通过superviosr去启动管理这些命令

使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境

安装supervisor
yum install python-setuptools
#安装
easy_install supervisor #进入虚拟环境执行下面步骤:
.使用supervisor命令,生成配置文件
echo_supervisord_conf > /etc/supervisor.conf .在这个配置文件中,写入我们想要管理的任务
vim /etc/supervisor.conf
在最底行写入如下配置
#定义一个任务,名字自定义
#commnad=参数,定义我们启动项目的命令
[program:crm_knight]
command=/root/Envs/knight/bin/uwsgi /opt/knight/uwsgi.ini
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 .通过配置文件启动supervisor服务
supervisord -c /etc/supervisor.conf .启动了supervisor服务端后,管理任务
supervisorctl -c /etc/supervisor.conf 任务管理命令如下:有两种,一个是交互式,一个是参数形式
#参数形式 supervisorctl -c /etc/supervisor.conf stop/start/restart all
supervisorctl -c /etc/supervisor.conf start crm_knight #交互式形式
supervisorctl -c /etc/supervisor.conf start 项目名
stop 项目名

部署knight项目的更多相关文章

  1. MyEclipse部署web项目到Tomcat出现An internal error occurred during: "Launching on Tomcat 7.x"的问题

    如果出现了上述的错误按照如下的3个步骤解决:1.首先关闭MyEclipse工作空间.2.然后删除工作空间下的文件."MyEclipse10\workspace.metadata.plugin ...

  2. Tomcat部署web项目,如何直接通过域名访问,不加项目名称

    问题:下面的问题是互联网上问得比较多的,但是显然都是同一个问题. JavaWeb项目部署到tomcat服务之后设置不需要输入项目名称即可访问? Tomcat部署web项目,如何直接通过域名访问,不加项 ...

  3. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

  4. 在IIS下部署Thinkphp项目,验证码不能显示的解决办法

    由于公司租用的是虚拟空间,而且用的是IIS服务器,所以部署PHP的时候就出现很多问题:比如昨天就碰到这个问题:在IIS下部署Thinkphp项目,验证码不能显示 这是生成验证码的方法: // 制作专门 ...

  5. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  6. eclipse部署web项目至本地的tomcat但在webapps中找不到

    一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...

  7. maven部署tomcat项目,403错误解决

    maven部署tomcat项目时403错误的解决方法 web模块的pom文件 pom.xml <plugin> <groupId>org.apache.tomcat.maven ...

  8. Intellij IDEA IDE部署Servlet项目

    1.设置Project Structure 2.修改Modules中的Web项目文件默认class编译之后输出位置 3.给Modules中的Web项目添加Web模块 4.修改Web项目Web.xml文 ...

  9. 使用JspStudy集成环境快速部署jsp项目

    1. 安装jdk 本人网盘资源:https://yunpan.cn/ckZLNbqxkDYYe (提取码:b5e8) 去jdk官网下载最新的jdk: http://www.oracle.com/tec ...

随机推荐

  1. 使用burpsuite来扫描漏洞

    一张图说明全文.

  2. linux 驱动cc1101

    cc110x.h /*  * File:   cc110x.h * Author: elinux * * Created on 2015年4月7日, 上午10:32 */ #ifndef CC110X ...

  3. Web项目的WEB-INF目录使用说明以及重定向与转发

    写这篇文章的原因是看到了Tomcat下面的Webapps下面的,就想看一下. 总结一下这篇文章的内容: WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问.什么是客户端级别?什么是 ...

  4. Service层事务不能回滚的解决方式

    1.在service方法里面如果对异常进行了捕获的话,该事务是不会进行回滚的        默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚.          spr ...

  5. 【BZOJ】2555: SubString(后缀自动机)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2555 学到了如何快速维护right值orz (不过这仍然是暴力维护,可以卡到O(n) 首先我们在加一 ...

  6. CONTEST23 2014xmoi邀请赛(被pj虐哭)

    http://www.luogu.org/contest/show?tid=23 表示被普及的虐瞎了T_T_T_T_T_T_T_TT_T_T_T_T_T_T_T_T 33名100多分滚粗 各种贪心神题 ...

  7. 小结:trie

    复杂度: 查找O(n),维护O(n),空间O(sum(len[i])) 概要: 就是每个节点对应一个字母,然后儿子有26个,查找和维护时进入对应儿子即可. 应用:在字符串匹配中多模匹配做基础结构:可以 ...

  8. Oracle Data Provider for .NET的使用(三)-ORACLE与.NET类型对应关系

    想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误: 1.错误的sql语句:末尾多了分号,少了部分关键字 2.sql中的参数与parame ...

  9. 用公式编辑器编辑n元乘积的方法

    在数学中经常会出现很多个元素进行求和或者是乘积的情况,但是在整个数学过程中,不可能将所有的元素都写出来,这样很费时费力同时过程也很赘余,不能很好地理解其中的过程,因此数学中对于这一类的多元相加或者相乘 ...

  10. IOS 7 自定义的UIAlertView不能在iOS7上正常显示

    本文转载至 http://blog.csdn.net/hanbing861210/article/details/13614405 众所周知,当伟大的iOS7系统发布后,表扬的一堆.谩骂的也一片,而对 ...