linux项目部署(非前后端分离crm)
参考博客2---部署过程
导论:看参考博客1
WSGI是Web服务器网关接口。它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)
一.crm项目部署(非前后端分离项目)
1.项目部署技术栈
nginx + uwsgi + django + 虚拟环境 + supervisor + mysql
2.面试题1
django的启动方式 python3 manage.py runserver 为什么不能在生产环境用? django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
是借助python内置的wsgi框架 wsgiref框架实现的
wsgi是一个单机模块,单进程模块,性能很低,用wsgi来启动一个多线程、多进程的项目是不合适的 因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django
uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
3.面试题2
为什么要用nginx 和uwsgi?
nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等 为什么要用uwsgi
因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件 我们以后会收集所有的django项目静态文件,丢给nginx去处理
4.准备crm代码
5.进入第一层路径,查看wsgi.py文件
vim wsgi.py 从这个文件可以看出是调用django的wsgi,获取函数get_wsgi_application
然后通过调用这个函数生成一个application对象 在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的
如果你报错提示 找不到application ,就是因为uwsgi 找不到wsgi.py
6.创建虚拟环境
准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境
virtualenvwrapper工具的命令
1.创建新的虚拟环境
mkvirtualenv mycrm 2.切换多个虚拟环境
workon 虚拟环境的名字 3.列出所有的虚拟环境目录
lsvirtualenv 4.进入当前激活的虚拟环境的目录
cdvirtualenv
1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
在windows本地 通过cmd窗口输入 pip3 freeze > requirements.txt #就能将python3解释器中所有的模块导出到requirements.txt这个文件中 2.将这个 requirements.txt 文件传输到服务器上,虚拟环境下进行安装,就可以自动解决所有模块问题
pip3 install -r requirements.txt
7.虚拟环境下安装uwsgi
确保进入虚拟环境,然后安装uwsgi
workon nginx_crm 下载uwsgi
pip3 install uwsgi
8.使用uwsgi命令启动django项目以及热加载
uwsgi支持热加载的启动方式命令如下
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1 uwsgi启动django项目的命令如下:
uwsgi --http :8088 --module Crm_Project.wsgi
--http指定http协议启动在 8088端口
--module 找到项目第二层的目录,里面的wsgi.py文件 如果你想启动一个http页面,提供测试访问,就用--http参数 如果你结合了nginx反向代理,必须用--socket参数
uwsgi --socket :8000 --module Crm_Project.wsgi
9.uwsgi.ini配置文件的引入
由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini 这个文件放在项目的第一层路径下 启动crm的配置文件如下 uwsgi.ini内容如下
[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/nginx_crm # process-related settings
# master
master = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化
processes = 4
# the socket (use the full path to be safe #如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
socket = 0.0.0.0:8000 #如果你没用nginx,想直接通过浏览器测试后端,使用http
#http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
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
uwsgi.ini
10.此时通过uwsgi --ini uwsgi.ini方式启动代码
11.django的静态文件与nginx配置
虚拟环境下
编辑项目的settings.py 写入如下参数
STATIC_ROOT= '/opt/crmstatic'
12.执行命令,收集crm所有的静态文件
命令如下
python3 manage.py collectstatic
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
13.配置nginx,一是支持反向代理,二是支持静态文件加载
配置nginx,一是支持反向代理,二是支持静态文件加载
修改nginx.conf 代码如下
#当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
location / {
uwsgi_pass 0.0.0.0:8000; #8000为django运行的端口
include uwsgi_params; #固定写法
} #这个location是解决crm的静态文件的问题的
location /static {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic; #这里的crmstatic就是STATIC_ROOT= '/opt/crmstatic'这个
}
14.重启nginx,由于有热加载,项目已经启动
15.批量管理软件的启停supervisor
supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,
而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。
16.安装supervisor
在非虚拟环境下安装supervisor supervisor只能用python2来安装,不能用python3来安装
1.安装easy_install
pip3是python3的软件包管理工具
easy_install 是python2的软件包管理工具
yum install python-setuptools 2.安装supervisor
easy_install supervisor
17.supervisor的配置文件
1.创建supervisor的配置文件,在项目第一层路径下面输入下面代码 echo_supervisord_conf > /etc/supervisor.conf 2.修改supervisor的配置文件,添加启动uwsgi的命令 supervisor其实就是帮咱们执行了,需要手动执行的命令而已
vim /etc/supervisor.conf
写入如下内容,在最底部写
[program:s18crm]
command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true
18.测试用supervisor启动uwsgi
测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出 虚拟环境下,输入下面两条命令
supervisord -c /etc/supervisor.conf #这是启动supervisor服务端命令 supervisorctl -c /etc/supervisor.conf #这是supervisor客户端管理命令 学习supervisor的命令 status s18crm #查看状态 #s18crm来自[program:s18crm]
start s18crm #启动任务
stop s18crm #停止任务 start all
stop all #启停所有的任务
1.crm部署 nginx + uwsgi + django + mysql crm是一个单体的应用,前端代码和后端代码,融合在了一起 linux默认终端有7个
按住ctrl + alt 从 f1-f7是7个终端 f1是图形化终端,f2-f7是黑屏
我们用的是xshell远程连接,连接到linux,可以有N个终端 1.先去启动后端,uwsgi + django
2.先准备项目 xftp lrzsz
3.先准备虚拟环境
4.安装uwsgi
5.用uwsgi启动crm项目
-一是命令 + 参数 (不建议使用,请用配置文件 uwsgi.ini)
uwsgi --http :8000 --module crm.wsgi
解释:--http 就是直接可以通过浏览器访问,不通过nginx
uwsgi --socket :8000 --module crm.wsgi
解释: --socket 是必须用nginx去反向代理,才能找到,浏览器直接访问找不到 正确的方式:
二,用配置文件uwsgi.ini
[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/nginx_crm # process-related settings
# master
master = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化
processes = 4
# the socket (use the full path to be safe #如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
socket = 0.0.0.0:8000 #如果你没用nginx,想直接通过浏览器测试后端,使用http
#http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true 三,通过配置文件,启动crm,启动后端!!!!找到项目里的uwsgi.ini后再输入命令
uwsgi --ini uwsgi.ini 四。关闭防火强
iptables -F #清空规则
systemctl stop firewalld #关闭防火墙服务
systemctl disable firewalld #禁止开机自启 五,收集crm的静态文件
修改settings.py 写入
STATIC_ROOT= '/opt/crmstatic' 六:用命令收集静态文件,在虚拟环境中做这个操作
python3 manage.py collectstatic 2.准备数据库,启动
#保证mariadb已经安装了
yum install mariadb-server mariadb -y systemctl start mariadb #启动数据库 3.准备nginx,进行反向代理
1.安装nginx
2.修改nginx的配置文件 nginx.conf
3.修改代码如下,截取的片段代码如下,参照着修改 upstream mycrm {
server 0.0.0.0:8000;
}
#nginx的虚拟主机参数
server {
#第一个虚拟主机,监听的80端口
listen 80;
#填写的是你自定义的域名 或者服务器的ip地址,或者写locathost
server_name 192.168.226.128; #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
location / {
uwsgi_pass http://mycrm;
include uwsgi_params;
} #这个location是解决crm的静态文件的问题的
#只要请求url是192.168.226.128/static/admin/admin.css
location /static {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic;
} 4.还差一个supervisor
1.下载安装
2.修改supervisor的配置文件
写入任务
3.这里有个坑,坑是必须关闭nginx才能开启supervisor 我们用supervisor,其实就是帮咱们执行了一下启动uwsgi的命令而已 4.注意后台不能启动过uwsgi
crm项目部署总结
linux项目部署(非前后端分离crm)的更多相关文章
- SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现
在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多 ...
- 前后端分离java、jwt项目进行CORS跨域、解决非简单请求跨域问题、兼容性问题
情况描述: 最近在部署一个前后端分离的项目出现了跨域问题*, 项目使用jwt进行鉴权,需要前端请求发起携带TOKEN的请求*,请求所带的token无法成功发送给后端, 使用跨域后出现了兼容性问题:Ch ...
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- 八个开源的 Spring Boot 前后端分离项目,一定要收藏!
八个开源的 Spring Boot 前后端分离项目 最近前后端分离已经在慢慢走进各公司的技术栈,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,我们也非常建议大家学习一下前 ...
- 如何在开发时部署和运行前后端分离的JavaWeb项目
在开发中大型的JavaEE项目时,前后端分离的框架逐渐成为业界的主流,传统的单机部署前后端在同一个项目中的工程项目越来越少.这类JavaWeb项目的后端通常都采用微服务的架构,后端会被分解为诸多个小项 ...
- 七个开源的 Spring Boot 前后端分离项目,一定要收藏!
前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年 ...
- springboot+apache前后端分离部署https
目录 1. 引言 2. 了解https.证书.openssl及keytool 2.1 https 2.1.1 什么是https 2.1.2 https解决什么问题 2.2 证书 2.2.1 证书内容 ...
- 基于Vue的前后端分离项目实践
一.为什么需要前后端分离 1.1什么是前后端分离 前后端分离这个词刚在毕业(15年)那会就听说过,但是直到17年前都没有接触过前后端分离的项目.怎么理解前后端分离?直观的感觉就是前后端分开去做,即功 ...
- 前后端分离之 跨域和JWT
书接上回:https://www.cnblogs.com/yangyuanhu/p/12081525.html 前后端分离案例 现在把自己当成是前端,要开发一个前后分离的简单页面,用于展示学生信息列表 ...
随机推荐
- 解释 MySQL 外连接、内连接与自连接的区别 ?
先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配. 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条 ...
- C++ - main()和_tmain(int argc, _TCHAR* argv[]) 的详细区别
一些程序中会发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream>而是<stdafx.h>. 首先,这个_tmain()是为了支 ...
- 动态规划 洛谷P1616 疯狂的采药
动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...
- Numpy常用random随机函数汇总
Numpy常用random下的随机函数汇总 官方文档地址:https://docs.scipy.org/doc/numpy-1.14.0/reference/routines.random.html ...
- 外部晶振的使用原因与内部RC振荡器的使用方法
原因一 早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了.这个问题主要还是实用性和成本决定的. 原因二 芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是 ...
- 动态添加HTML时onclick函数参数传递
onclick函数动态传参 1.参数为数值类型时: var tmp = 123; var strHTML = "<div onclick=func(" + tmp + &qu ...
- CVE-2022-22947 SpringCloud GateWay SpEL RCE
CVE-2022-22947 SpringCloud GateWay SpEL RCE 目录 CVE-2022-22947 SpringCloud GateWay SpEL RCE 写在前面 环境准备 ...
- JavaEE期末复习知识点总结
JavaEE期末复习知识点总结 Java企业应用开发环境 Maven的基础概念 Maven是一个项目管理工具,可以对 Java 项目进行构建.依赖管理 Maven仓库 Maven 仓库是项目中依赖的第 ...
- 【Oracle】EXPDP和IMPDP数据泵进行导出导入的方法
一.expdp/impdp和exp/imp 客户端工具 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 服务端工具 2.expdp和impdp是服务端的工具程序,他们 ...
- java获取登录ip和地址
//获取HttpServletRequest对象 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestCon ...