首页 > 其他分享 >crm--纯后端部署

crm--纯后端部署

时间:2023-09-07 12:45:37浏览次数:42  
标签:纯后 -- uwsgi s25 tf root localhost crm

博客地址:https://www.cnblogs.com/zylyehuo/

技术栈:supervisor + nginx + uwsgi + django + virtualenv + mariadb

基本流程

crm 纯后端部署是通过模板语言进行和前端通信的,前端代码写在后端中

<!--模板语言-->
{{static.el}}

配置后端,uwsgi+crm进行项目运行

环境变量

[root@localhost ~]# vim /etc/profile
PATH="/opt/tngx232/sbin:/opt/python369/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $PATH
/opt/tngx232/sbin:/opt/python369/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:

1.先创建虚拟环境,用于运行crm

[root@localhost ~]# mkdir /s25crm
[root@localhost ~]# cd /s25crm/
[root@localhost s25crm]# ls
[root@localhost s25crm]# pwd
/s25crm
[root@localhost s25crm]# virtualenv --python=python3 s25_crm
created virtual environment CPython3.6.9.final.0-64 in 138ms
  creator CPython3Posix(dest=/s25crm/s25_crm, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: pip==21.3.1, setuptools==59.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
[root@localhost s25crm]# ls
s25_crm
[root@localhost s25crm]# source s25_crm/bin/activate
(s25_crm) [root@localhost s25crm]#

2.上传代码到linux中,调试项目是否能够运行

(s25_crm) [root@localhost s25crm]# git clone https://github.com/zylyehuo/tf_crm.git
Cloning into 'tf_crm'...
remote: Enumerating objects: 153, done.
remote: Counting objects: 100% (153/153), done.
remote: Compressing objects: 100% (133/133), done.
remote: Total 153 (delta 20), reused 150 (delta 17), pack-reused 0
Receiving objects: 100% (153/153), 1.17 MiB | 0 bytes/s, done.
Resolving deltas: 100% (20/20), done.
(s25_crm) [root@localhost s25crm]# ls
s25_crm  tf_crm
(s25_crm) [root@localhost s25crm]# ls tf_crm/
app01  manage.py  static  templates  tf_crm
(s25_crm) [root@localhost s25crm]# cd tf_crm/
(s25_crm) [root@localhost tf_crm]# 
(s25_crm) [root@localhost tf_crm]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.25
(s25_crm) [root@localhost tf_crm]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql
(s25_crm) [root@localhost tf_crm]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-multiselectfield
(s25_crm) [root@localhost tf_crm]# yum install mariadb-server  mariadb -y
(s25_crm) [root@localhost tf_crm]# systemctl start mariadb
(s25_crm) [root@localhost tf_crm]# netstat -tunlp | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      106346/mysqld
(s25_crm) [root@localhost tf_crm]# python3 manage.py runserver
# 出现 ValueError: Incorrect timezone setting: Asia/shanghai
(s25_crm) [root@localhost tf_crm]# vim tf_crm/settings.py
#TIME_ZONE = 'Asia/shanghai'  # 注释掉,临时解决
(s25_crm) [root@localhost tf_crm]# python3 manage.py runserver
# 出现 django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
(s25_crm) [root@localhost tf_crm]# vim /s25crm/tf_crm/tf_crm/local_settings.py
# 修改以下内容
DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'tf_crm',
        'HOST': '127.0.0.1',
        'POST': 3306,
        'USER': 'root',
        'PASSWORD': '',
    }
} 
(s25_crm) [root@localhost tf_crm]# vim /opt/s25crm/tf_crm/tf_crm/settings.py
# 修改以下内容
ALLOWED_HOSTS = ["*"]
(s25_crm) [root@localhost tf_crm]# pwd
/s25crm/tf_crm
(s25_crm) [root@localhost tf_crm]# python3 manage.py runserver

3.调试好crm的模块依赖,以及mariadb数据库的安装,以及数据导入之后,crm调试可以正确运行了

浏览器访问 10.0.0.129:9090/login/

4.在线上,是使用uwsgi结合uwsgi.ini配置文件,启动crm的,启动方式如下

安装uwsgi

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

线上部署时,uwsgi.ini需要修改添加如下参数,关闭http参数

(s25_crm) [root@localhost tf_crm]# vim uwsgi.ini

注释版


[uwsgi]
# Django-related settings
# the base directory (full path)
# 填写crm项目的第一层绝对路径
chdir           = /s25crm/tf_crm/
# Django's wsgi file
# 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
module          = tf_crm.wsgi
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录 
home            = /s25crm/s25_crm
# process-related settings
# master
master          = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1
# 如果是单进程,十万个请求,都丢给一个进程去处理
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
# 查看几核
# [root@localhost ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
# cpu cores	: 4
processes       = 9
 
# the socket (use the full path to be safe
# 使用此协议运行后台,就无法通过浏览器访问了,协议不一样
socket          = 0.0.0.0:8000
#  线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
#http =  0.0.0.0:8000
 
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

无注释版


[uwsgi]
chdir           = /s25crm/tf_crm/
module          = tf_crm.wsgi
home            = /s25crm/s25_crm
master          = true
processes       = 9
socket          = 0.0.0.0:8000
vacuum          = true

配置supervisor启动uwsgi进程

5.使用supervisor启动uwsgi进程,需要修改supervisord.conf配置文件,看好文件的名字

(s25_crm) [root@localhost tf_crm]# which uwsgi 
/s25crm/s25_crm/bin/uwsgi

(s25_crm) [root@localhost tf_crm]# ls
app01  manage.py  static  templates  tf_crm  uwsgi.ini
(s25_crm) [root@localhost tf_crm]# pwd
/s25crm/tf_crm
vim /etc/supervisord.conf #修改如下参数

注释版

[program:s25crm]
command=/s25crm/s25_crm/bin/uwsgi --ini /s25crm/tf_crm/uwsgi.ini
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程

无注释版

[program:s25crm]
command=/s25crm/s25_crm/bin/uwsgi --ini /s25crm/tf_crm/uwsgi.ini
autostart=true
startsecs=10
autorestart=true
stopasgroup=true
killasgroup=true

6.检查后台的状态,并启动supervisor

# 【supervisor无法正常启动,立即去检查 supervisord.conf里面定义的任务参数是否正确】
(s25_crm) [root@localhost tf_crm]# supervisord -c /etc/supervisord.conf
Unlinking stale socket /tmp/supervisor.sock
(s25_crm) [root@localhost tf_crm]# supervisorctl -c /etc/supervisord.conf
s25crm                           RUNNING   pid 107727, uptime 0:00:52
supervisor> status
s25crm                           RUNNING   pid 107727, uptime 0:01:16

此时浏览器访问 10.0.0.129:8000

由于协议不通,故出现如下页面

7.此时配置好nginx.conf就完事了,修改如下,配置nginx,请求转发给后台即可

(s25_crm) [root@localhost tf_crm]# vim /opt/tngx232/conf/nginx.conf

注释版

    server {
        listen       80;
        server_name  localhost;
        # 这是一个局部的变量,只对当前这个server{}代码块生效,编码设置为utf-8
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton路径匹配,如果你写的是root参数,就是一个web站点功能
        # 基于uwsgi协议的一个高性能的反向代理转发,新的参数
        location / {
            # 当请求发送给  10.0.0.129:80的时候
            # 通过uwsgi_pass把请求转发给后端的uwsgi服务器
            uwsgi_pass   0.0.0.0:8000;
            # 这个参数,是固定的,是添加一些转发请求头内容
            include uwsgi_params;
        }
    }

无注释版

    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        location / {
            uwsgi_pass   0.0.0.0:8000;
            include uwsgi_params;
        }
    }

8.重启nginx

(s25_crm) [root@localhost tf_crm]# nginx -t
nginx: the configuration file /opt/tngx232//conf/nginx.conf syntax is ok
nginx: configuration file /opt/tngx232//conf/nginx.conf test is successful
(s25_crm) [root@localhost tf_crm]# nginx -s reload

浏览器访问 10.0.0.129/login/

此时发现静态文件丢失,例如如下的静态文件

http://10.0.0.129/static/js/common.js
http://10.0.0.129/static/css/style.css
http://10.0.0.129/static/js/jquery.validate.min.js

配置静态文件

9.还得配置nginx接收所有的django静态文件,修改命令如下

第一步:修改django的配置文件,收集所有的静态文件,放入一个统一管理的目录

(s25_crm) [root@localhost tf_crm]# vim /s25crm/tf_crm/tf_crm/settings.py  # 添加如下内容

STATIC_ROOT='/s25static/'   # 作用是定义一个统一管理的目录,收集所有crm的静态文件

第二步:用命令收集静态文件

cd /s25crm/tf_crm
(s25_crm) [root@localhost tf_crm]# python3 manage.py collectstatic
(s25_crm) [root@localhost tf_crm]# cd /s25static/
(s25_crm) [root@localhost s25static]# ls
admin  css  imgs  js  plugins

10.通过nginx去找到如下的静态文件即可

nginx找到crm的静态文件原理图

(s25_crm) [root@localhost s25static]# vim /opt/tngx232/conf/nginx.conf

注释版

    server {
        listen       80;
        server_name  localhost;
        # 这是一个局部的变量,只对当前这个server{}代码块生效,编码设置为utf-8
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton路径匹配,如果你写的是root参数,就是一个web站点功能
        # 基于uwsgi协议的一个高性能的反向代理转发,新的参数
        location / {
            # 当请求发送给  10.0.0.129:80的时候
            # 通过uwsgi_pass把请求转发给后端的uwsgi服务器
            uwsgi_pass   0.0.0.0:8000;
            # 这个参数,是固定的,是添加一些转发请求头内容
            include uwsgi_params;
        }
        # nginx的location{}代码块用于匹配nginx的url,对于静态文件的匹配,可以按如下配置
        # 当请求url是 10.0.0.129:80/static/js
        #            10.0.0.129:80/static/css
        #            10.0.0.129:80/static/admin/admin.js
        #            ......
        #            如此之类以 /static 开头的url,都告诉nginx去Linux的 /s25static 目录下寻找资料,也就找到所有的 js、css了
        location /static {
            alias /s25static;
        }
    }

无注释版

    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        location / {
            uwsgi_pass   0.0.0.0:8000;
            include uwsgi_params;
        }
        location /static {
            alias /s25static;
        }
    }

11.重启nginx

(s25_crm) [root@localhost tf_crm]# nginx -t
nginx: the configuration file /opt/tngx232//conf/nginx.conf syntax is ok
nginx: configuration file /opt/tngx232//conf/nginx.conf test is successful
(s25_crm) [root@localhost tf_crm]# nginx -s reload

浏览器访问 10.0.0.129/login/

标签:纯后,--,uwsgi,s25,tf,root,localhost,crm
From: https://www.cnblogs.com/zylyehuo/p/17684304.html

相关文章

  • 工程概论开篇
    工程概论开篇|这个作业属于哪个课程|计算21级||-----------------|---------------||这个作业要求在哪里|第一次作业||这个作业的目标|熟悉本门课程所使用的工具及对课程的初步理解与思考|个人介绍我是刘雅妮,来自福建泉州,就读于集美大学计算机工程学院计算2112......
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo
    前言  在之前的博文中已经搭建好了一个比较完善的ubuntu宿主机,都很完善了但是发现没有Qt交叉编译开发环境,所以还需要搭建一套Qt交叉编译开发环境。 补充说明  本篇是基于《RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、......
  • 计科幼幼班
    今天的分享可以(粗浅)解答以下几个问题:如何制作一台计算机苹果的Rosetta是怎么把x86的程序运行在arm上的SteamDeck是怎么把Windows的游戏运行在Linux上的如何制作一台计算机制作教程1制作教程2正经的制作教程逻辑门是什么?是数字逻辑电路中的基本单元,可......
  • 拓展kmp
    Smiling&Weeping----我从不觉得暗恋是苦涩的,对一个人的喜欢藏在眼睛里,透过它,世界都变得更好看了。题目:P5410......
  • linux 格式化U盘并挂载
    一、查看磁盘情况sudofdisk-l可以看到有一个/dev/sdb1的磁盘就是我们插入的u盘了 大小28.9G,FAT32文件系统sudoblkid/dev/sdb1/dev/sdb1:LABEL="KINGSTON"UUID="59DB-5684"TYPE="vfat"PARTUUID="077ddb84-01"二、格式化之后直接挂载sudomount/dev/sdb1./mn......
  • 一开发登录功能
    1、登录功能流程图 2、如何使用网上的漂亮组件1、去网上下载到本地,并且重命名未个人标记_作用_文件夹2、在django项目的app文件下下,创建static、templates文件夹3、将下载的文件夹移动到项目的app文件下的static文件夹下4、检查网上的第三方资源是否是自己要用的(index.htm......
  • Windows完全删除node.js
    目录Windows完全删除node.js附:node.js重新安装总结Windows完全删除node.js1、输入cmd命令:npmcacheclean--force (如果还没开始删除的话)2、从“控制面板”的“卸载程序”界面中卸载node程序。3、重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程)。4、寻找这些文件夹......
  • 5G时代下,如何解决视频业务应用之间视频能力的融合问题?
    5G时代下,如何解决视频业务应用之间视频能力的融合问题?5G时代下,5G网络的低延迟、高速率和广覆盖性加快了各行业领域的智能化速度,同时促进了“万物互联”生态系统的建设,而视频信息也成为各领域智能化发展的可视化载体与管理途径。面向复杂而互联的多领域市场,视频业务呈现出行业化、场......
  • 轻松实现Linux多网卡多网关同时工作
    实验目的由于Linux系统中只会生效一条默认网关,当同一台设备为多个网卡配置网关后只有一个网卡可以正常通讯。要使多个网关同时生效就需要配置路由策略才能使其生效。1.要求服务器的双网卡IP不同段,且都能被业务部访问到。2.AR1作为业务部的网关设备,负责连通业务部与服务器端的网络通......
  • 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-星际争霸
    (文章目录)前言1.awkawk是一种文本处理工具,可以用于对文本数据进行各种操作,例如分割、过滤、搜索、替换等。主要用途包括数据分析、文本搜索、日志处理等。awk命令的基本语法为:awk[选项参数]'模式1{操作1}模式2{操作2}...'文件名其中,模式用于匹配文件中的数据,操作则......