crmeb商城部署(踩坑及解决方法)

news2024/9/21 19:01:19

源码地址:
https://gitee.com/ZhongBangKeJi/CRMEB

原版是PHP版,我也不懂PHP,但看到功能很全,而且有docker-compose的脚本可以部署,并且教程也很完善,就拿来部署试下。

所以也适用于和我一样,不懂PHP,从Java过来的同学,直接部署使用。

代码结构

在这里插入图片描述
各组件分别对应了他们的docker初始配置,映射的容器外文件夹即时这里。需要把外部整个文件夹上传到服务器上,然后进入该文件夹执行docker-compose的指令。

部署步骤

1、修改docker-compose配置:docker-compose.yml文件:Mysql镜像改为通用的,Nginx容器配置8011改为80

2、直接把整个包放服务器上:

docker-compose up -d

出了个报错,说是无法识别app_net,查了下是docker-compose版本太低,手动升级了下服务器里docker-compose的版本,再次启动,成功。

在浏览器访问域名地址点击下一步安装:http://localhost(Nginx配置的服务器域名)

安装时提示权限不够,进入php的docker 容器,解决目录权限问题:

docker exec crmeb_php chmod 777 -R /var/www

查看权限各字段意义如下:
在这里插入图片描述
要改成其他组对该文件的权限也可读可写。

设置mysql和redis配置:

Mysql数据库信息:
Host:192.168.10.1 
Post:3306 
user:root 
pwd:123456 

Redis信息:
Host:192.168.10.10
Post:6379
db:0
pwd:123456

3、修改PHP长链接,定时任务,队列:

进入容器:docker exec -it crmeb_php /bin/bash
进入到项目目录:cd /var/www
定时任务命令:php think timer start --d
长连接命令:php think workerman start --d
队列命令:php think queue:listen --queue

4、访问项目:
http://localhost/admin(Nginx配置的服务器域名)

issue里看到的踩坑:

不要使用低版本操作系统,会出现MySQL起不来的情况。Ubuntu18.04,正常。centos:不正常,phpfpm失败

排查3306、6379、80端口是否被使用,被占用的话先关掉

修改docker-compose.yml文件:Mysql镜像改为通用的,8011改为80

进入宿主机docker-compose.yml所在目录,执行chmod 777 -R .

启动所有服务:docker-compose up -d

宿主机执行docker exec crmeb_php chmod 777 -R /var/www,解决目录权限问题

访问ip,完成安装,MYSQL和REDIS的服务器地址分别填写固定的192.168.10.1和192.168.10.10,密码都是123456

前台:http://IP/static/html/pc.html

后台:http://IP/admin/login

docker-compose的配置:

version: "3.3"
services:
  # mysql 容器
  mysql:
    container_name: crmeb_mysql #指定容器名
    image: daocloud.io/library/mysql:5.7.5-m15 #M1芯片可以采用这个镜像
    # image: mysql:5.7 #一般电脑可以用这个镜像
    ports:
      - 3306:3306
    # 环境变量
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_USER: 'crmeb'
      MYSQL_PASS: '123456'
      MYSQL_DATABASE: 'crmeb'
    privileged: true
    command:
       --character-set-server=utf8mb4
       --collation-server=utf8mb4_general_ci
       --explicit_defaults_for_timestamp=true
       --lower_case_table_names=1
       --max_allowed_packet=128M
       --default-authentication-plugin=mysql_native_password
       --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    working_dir: /var/lib/mysql
    volumes:
      - ./mysql/my.cnf:/etc/mysql/my.cnf
      - ./mysql/data:/var/lib/mysql #挂载数据目录到本地
      - ./mysql/log:/var/log/mysql
    networks:
      app_net:
        # 固定子网ip,网段必须在子网络192.168.*.*
        ipv4_address: 192.168.10.1
  # redis 容器
  redis:
    container_name: crmeb_redis
    image: 'redis:alpine'
    # image: daocloud.io/library/redis:6.0.5-alpine
    # image: redis:5.0
    ports:
      - "6379:6379"
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      # - ./redis/data:/data #挂载数据目录到本地
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
    networks:
      app_net:
        ipv4_address: 192.168.10.10
  # php 容器
  phpfpm:
    container_name: crmeb_php #指定容器名
    # image: phpfpm-image #指定镜像名
    image: crmeb_php #指定镜像名
    build:
      context: ./php #dockerfile文件路径
      dockerfile: Dockerfile #制定dockerfile文件名称
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - 9000:9000
      - 20002:20002
      - 20003:20003
    tmpfs: /var/temp #上传临时文件夹
    working_dir: /var/www
    volumes:
      - ../crmeb:/var/www #程序运行目录
      - ../crmeb/runtime:/var/www/temp #程序缓存目录
      - ./php/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini
    networks:
      app_net:
        ipv4_address: 192.168.10.90
#    command: /bin/bash -c "php -v"
  # nginx 容器
  nginx:
    container_name: crmeb_nginx
    image: 'nginx:alpine'
    # image: daocloud.io/library/nginx:1.19.1-alpine
    restart: always
    ports:
      - 8011:80
      # - 443:443
    # 依赖关系 先跑php
    depends_on:
      - phpfpm
    environment:
      TZ: Asia/Shanghai
    working_dir: /var/www
    volumes_from:
      - phpfpm #继承phpfpm挂载目录
    volumes:
      - ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/log:/etc/nginx/log
    networks:
      app_net:
        ipv4_address: 192.168.10.80
networks: #网络配置
  app_net: #网络名称
    driver: bridge
    ipam: #网络配置
      config:
        - subnet: 192.168.0.0/16 #IP区间
          gateway: 192.168.10.100


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NodeJs】NodeJs专题之理解企业BFF框架原理

BFF—服务于前端的后端 一、什么是BFF框架 BFF框架指的是一种逻辑分成,而非一种新技术即 Backend For Frontend(服务于前端的后端),也就是服务器设计 API 时会考虑前端的使用,并在服务端直接进行业务逻辑的处理,又称…

每日记录自己的Android项目(一)

Jetpack之Navigation今天新创建一个项目,选的是这个。首先映入眼帘的是一个这样的界面。由ViewBinding绑定好XML布局和根布局和标题栏。这个应该是Navigationg里面的内容还有个字段private AppBarConfiguration appBarConfiguration;Overrideprotected void onCreat…

C# 序列化时“检测到循环引用”错误的彻底解决方案

目录 一&#xff0c;问题表现 二、没有技术含量的解决方案 三、本人彻底的解决方案 简要说明 贴代码 思路解析 思路 一&#xff0c;问题表现 示例代码如下&#xff1a; [Serializable] public class NodeTest {public NodeTest (){new List<NodeTest> ();}p…

SpringBoot之@ConfigurationProperties、@EnableConfigurationProperties

ConfigurationProperties 这个注解不仅可以为yml某个类注入还可以为第三方bean绑定属性 为yml某个类注入 只要将对应的yml类对象声明实体pojo并交给spring容器管理&#xff0c;再在类上使用ConfigurationProperties绑定对应的类名即可 涉及到两个知识点&#xff0c;这个类对…

C语言中的数据储存规则

写在开头 关于复习的相关内容其实从一开始就列出了大纲&#xff0c;但是迟迟没有开始复习&#xff0c;一方面是因为学校学业却是繁忙&#xff0c;另一方面还是内心对旧知识掌握不熟练需要再学一遍的畏惧和懒惰&#xff0c;但如今&#xff0c;复习必须开始了。今天我从C语言的最…

Linux/MacOS 生成双击可执行文件

双击可执行文件包含两种&#xff1a;终端shell脚本 Unix可执行文件 1.终端shell脚本 随意新建一个文件&#xff08;可使用command键N&#xff0c;前提是有已打开的文件&#xff09;&#xff0c;输入shell格式的测试代码&#xff0c;比如&#xff1a; #! /bin/sh echo “h…

双喜临门|炼石荣获2023年中国网络和数据安全高峰论坛双奖项

2023年2月23日-24日&#xff0c;工业和信息化部、四川省人民政府联合主办以“新征程 新思路 高质量发展”为主题的“2023年中国网络和数据安全产业高峰论坛”在成都隆重召开。工信安全中心第一届网络安全高成长性企业“勇攀之星”正式揭晓&#xff0c;炼石以高成长性、高创新性…

【vue】iframe相关问题

一、刷新iframe页面iframe的地址没有改变的话&#xff0c;每打开一次iframe页面&#xff0c;都不会主动更新页面的。以下有几种方法&#xff0c;都可以实现&#xff0c;每打开一次页面&#xff0c;就刷新一下给iframe添加key<template><div id"Iframe">&…

一名IC验证工程师的成长路径是怎么样的?来听听工程师的见解

IC验证这个岗位对于非科班的学生是比较友好的&#xff0c;因为验证需要具备的技能UVM&#xff0c;SV&#xff0c;C等&#xff0c;非科班和科班的差距不会拉开太大。因其岗位需求量巨大而格外受到了大家的青睐&#xff0c;甚至成为不少学生的转行首选。 验证对于IC的重要性 IC…

汽车 12V 和 24V 电池输入保护推荐

简介汽车电池电源线路在运行系统时容易出现瞬变。所需的典型保护包括过压、过载、反极性和跨接启动。在汽车 的生命周期中&#xff0c;交流发电机可能会被更换为非OEM 部件。售后市场上的交流发电机可能具有不同的负载突降&#xff08;LOAD DUMP&#xff09;保护或没有负载突降…

论文阅读-Attention Bottlenecks for Multimodal Fusion(多模态特征融合)

一、论文信息 论文题目&#xff1a;Attention Bottlenecks for Multimodal Fusion paperwithcode&#xff1a;https://paperswithcode.com/paper/attention-bottlenecks-for-multimodal-fusion Github&#xff1a;https://github.com/google-research/scenic/tree/main/scen…

产品故事:语雀两度生死局

语雀是一款文档和知识库产品&#xff0c;2016 年从一个技术团队支付宝体验技术部生长出来&#xff0c;2021 年蚂蚁成立了智能协同事业部&#xff0c;重点产品即为语雀&#xff0c;以独立 BU 运作&#xff0c;算是完成了“成人礼”。我们和玉伯聊了聊语雀的成长故事。 极客时间&…

C++基础知识【3】控制语句

目录 前言 一、条件语句 1.1、if 语句 1.2、if-else 语句 1.3、switch 语句 二、循环语句 2.1、while 循环 2.2、do-while 循环 2.3、for 循环 三、跳转语句 3.1、break语句 3.2、continue语句 3.3、goto语句 四、一些新特性 4.1、if 语句和 switch 语句…

【数据结构与算法】图遍历算法 ( 深度优先搜索代码示例 )

文章目录一、深度优先搜索算法二、完整代码示例完整代码示例执行结果一、深度优先搜索算法 深度优先搜索算法步骤 : 将 深度优先搜索 算法步骤 转为代码 ; ① 访问初始结点 : 访问 初始结点 v , 并将该 初始结点 v 标记为 " 已访问 " ; 设置一个 访问标记 数组 , 数…

《C++ Primer》 第九章 顺序容器

《C Primer》 第九章 顺序容器 9.1 顺序容器概述 容器&#xff1a;特定类型对象的集合 顺序容器类型 vector 可变大小数组&#xff0c;支持快速随机访问&#xff0c;在尾部之外的位置插入或删除元素可能很慢deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快…

【2022-09-14】米哈游秋招笔试三道编程题

第一题&#xff1a;最短子串 题目描述 米小游拿到了一个字符串&#xff0c;她想截取一个连续子串&#xff0c;使得该子串中包含至少k个连续的“mihoyo”。 你可以帮米小游求出最短的子串长度&#xff0c;以及对应的子串位置吗&#xff1f; 输入描述 第一行输入两个正整数n…

产品父子流程技术方案设计

产品父子流程技术方案设计 一、整体设计 根据业务需求分析&#xff0c;产品涉及法人代表及实控人风控决策流程调用&#xff0c;旨在降低风险&#xff0c;提高行内线上贷款业务风险决策的能力。 二、业务流程 1.业务流程图 2.交易流程 在授信交易切面入口处对法人代表及实控…

Spark性能优化三 checkpoint

&#xff08;一&#xff09;checkpoint介绍 checkpoint&#xff0c;是Spark提供的一个比较高级的功能。有时候&#xff0c;我们的Spark任务&#xff0c;比较复杂&#xff0c;从初始化RDD开始&#xff0c;到最后整个任务完成&#xff0c;有比较多的步骤&#xff0c;比如超过10个…

关于flex盒子padding-right/margin-right不生效

错误代码实例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

论文投稿指南——中文核心期刊推荐(科学、科学研究)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…