源码地址:
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