linux项目部署(非前后端分离crm)
阅读原文时间:2023年07月08日阅读:5

参考博客

参考博客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项目部署总结