如何使用 Docker 部署 LinkWeChat
特别说明:
- 前端项目可能会因为 Node 版本或网络环境无法打包,请多尝试几次;
- Mysql 启动后需要手动导入 SQL 文件;
- 要确认 Redis 是否启动正常:实测 Centos7.9 可以正常启动;
1、服务器信息:
组件 | 类型 |
操作系统 | CentOS 7.9 |
CPU | 4核 |
内存 | 16G |
带宽 | 5M |
硬盘 | 100G |
2、环境准备:
软件名 | 版本 |
JDK | 1.8 |
Maven | 3.8.8 |
Node | 14.18.3 |
Docker | 最新版 |
Docker-Compose | 最新版 |
3、安装配置步骤
a 安装git和JDK;
b 安装Maven;
c 安装Node;
d 安装Docker;
e 安装Docker-Compose;
f 克隆项目代码;
g 后端配置;
h 前端配置;
i 转项目docker目录,修改配置文件,执行部署脚本;
4、项目结构
4.1 后端结构
├── linkwe-api // 系统业务接口模块
├── linkwe-auth // 角色权限部门用户认证等模块
├── linkwe-common // 公共组件模块
├── linkwe-fileservice // 文件服务模块
├── linkwe-framework // 框架配置
├── linkwe-gateway // 网关服务
├── linkwe-scheduler // 定时任务相关模块
├── linkwe-service // 系统service层抽取,与数据库相关交互
├── linkwe-wecome // 企微接口实现
├── linkwe-wx-api // 系统中设计微信公众号相关接口模块
4.2 前端结构
├── vue3-lw-pc // 后台项目
├── linkwe-mobile // 移动端项目包含移动工作台、任务宝、群裂变等H5 备注:移动端不开源
├── linkwe-uniapp // uniapp短链小程序项目
5、安装环境
后端:https://gitee.com/LinkWeChat/link-wechat
前端:https://gitee.com/LinkWeChat/link-we-chat-front
项目 Docker 目录:https://gitee.com/LinkWeChat_admin/linkwechat-docker
5.1 SQL文件:
config.sql // nacos配置文件
lw-cloud.sql
tables_xxl_job.sql
5.2 安装 OpenJDK 1.8
#CentOS7.9没有默认安装git支持,后面安装步骤需用到git命令
yum install -y git
#升级GLIBC库为最新版
查看系统GLIBC库
strings /lib64/libc.so.6 |grep GLIBC_
更新到glibc-2.27版以上,否则在配置完前端进行打包时会出错,下面更新到最新的glibc-2.38
wget http://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz
tar -xzvf glibc-2.38.tar.gz
cd glibc-2.38
mkdir build
cd build
../configure --prefix=./
#注意:如果出现如下错误信息:
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
解决方法:
安装GCC套件:yum install gcc
安装C++编译器:yum install gcc gcc-c++
之后再编译就能成功了
make && make install
# 卸载自带的jdk
rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj
rpm -qa | grep java | xargs rpm -e --nodeps
# 安装openjdk
yum install java-1.8.0-openjdk* -y
5.3 安装 Maven
Maven下载地址:https://maven.apache.org/download.cgi
下载>=3.8的版本
将软件压缩包上传到服务器,本文选择/data
目录:
#使用SecureCRT登录后的默认当前目录是/root,因此创建直接执行mkdir data创建的目录实际上是/root/data/,如需在根目录中执行,应使用mkdir /data,下文中所有的目录路径均基于为/data。
mkdir /data
cd /data
wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
tar -zxvf apache-maven-3.9.5-bin.tar.gz
mv apache-maven-3.9.5 maven3.9
# 新建仓库目录
mkdir ../data/maven3.9/repository
更换阿里云镜像并设置maven仓库位置:
vim /data/maven3.9/conf/settings.xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<localRepository>/root/data/maven3.9/repository</localRepository>
配置环境变量:
vim /etc/profile
export MAVEN_HOME=/root/data/maven3.9
export PATH=$PATH:$MAVEN_HOME/bin
刷新配置文件查看版本信息:
source /etc/profile
mvn -v
5.4 安装 NodeJS
wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz
tar -xvf node-v14.15.4-linux-x64.tar.xz
mkdir -p /usr/local/nodejs
mv node-v14.15.4-linux-x64/* /usr/local/nodejs/
# 建立node软链接
ln -s /usr/local/nodejs/bin/node /usr/local/bin
# 建立npm 软链接
ln -s /usr/local/nodejs/bin/npm /usr/local/bin
配置环境变量:
vim /etc/profile
export MAVEN_HOME=/root/data/maven3.9
export NODE_HOME=/usr/local/nodejs
export PATH=$PATH:$MAVEN_HOME/bin:$NODE_HOME/bin
刷新配置文件查看版本信息:
source /etc/profile
node -v
安装node版本管理工具:
npm install n -g
# 查看所有node版本
# npm view node versions
# 指定安装版本
# n 14.18.3
# 升级到最新的稳定版本
# n stable
# 查看npm当前镜像源
npm config get registry
# 国内源
npm config set registry https://registry.npmmirror.com/
# 设置npm镜像源为淘宝镜像
npm config set registry https://registry.npm.taobao.org/
5.5 安装 Docker
卸载Docker旧版本:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装 yum-utils 软件包:
yum install -y yum-utils
设置 Docker 仓库:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版本的 Docker:
yum install -y docker-ce docker-ce-cli containerd.io
启动 Docker:
systemctl enable docker --now
docker version
5.6 安装 Docker-Compose
网络不好的话,可以提前下载好上传到/usr/local/bin
目录:
wget https://github.com/docker/compose/releases/download/1.24.0/docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
6、克隆项目
mkdir /root/data/service cd /root/data/service
mkdir link-wechat && cd link-wechat
git clone https://gitee.com/LinkWeChat/link-wechat
git clone https://gitee.com/LinkWeChat/link-we-chat-front
git clone https://gitee.com/LinkWeChat_admin/linkwechat-docker
6.1 后端配置
修改后端配置文件:
# 进入后端目录(/root/data/service/link-wechat/link-wechat)
cd link-wechat
vim pom.xml
第一个是项目根目录下的pom.xml
文件,需要找到org.springframework.cloud
,添加版本信息:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>
第二个是./config/run/
目录下的bootstrap.yml
文件,使用linkwechat-docker/config
目录下的bootstrap.yml
文件替换:
cd /root/data/service/link-wechat/link-wechat/config/run
cp ../../../linkwechat-docker/config/bootstrap.yml ./
代码打包:
cd /root/data/service/link-wechat/link-wechat/
mvn clean package
6.2 前端配置
修改前端配置文件:
# 进入前端目录
cd /root/data/service/link-wechat/link-we-chat-front
cd vue3-lw-pc/
修改env.js
文件:127.0.0.1 修改成对应的服务器 ip 或域名,其余不变:
/**
* * 环境变量
* * 以下划线 '_' 开头的字段表示只在build命令打包时有效,勿在项目中使用
* */
const envs = {
production: {
DOMAIN: 'http://127.0.0.1', // <---这里
BASE_URL: './', // 路由基础路径
BASE_API: 'http://127.0.0.1/api', // <---这里
SYSTEM_API: '/api',
_ISGZIP: true, // 是否开启gzip压缩
_ISCDN: true, // 是否开启cdn加速
},
}
const env = Object.assign(
{ SYSTEM_NAME_ALL: 'LinkWeChat -- 全链路私域数字化营销增长解决方案' },
envs[process.env.VUE_APP_ENV || process.env.NODE_ENV],
)
module.exports = env
代码打包:
npm i --registry=https://registry.npmmirror.com
npm run build
这里是最容易出错的地方,可能会因为node版本或网络环境,无法下载依赖,或无法打包,需要多试几次;
最直接的方法是在网络环境好的地方打好包,会生成一个PC目录,然后上传到前端项目根目录。
6.3 项目 Docker 目录配置
修改配置文件:
# 进入项目docker目录
cd /root/data/service/link-wechat/linkwechat-docker
修改copy.sh
文件:将前端目录修改成实际的目录,注释掉对linkwe-mobile
目录的操作(移动端不开源):
cp -r ../link-we-chat-front/vue3-lw-pc/pc/** ./nginx/html/pc
# cp -r ../link-we-chat-front/linkwe-mobile/h5/** ./nginx/html/mobile
修改config/pc/
目录下的env.js
文件:127.0.0.1 修改成对应的服务器 ip 或域名,其余不变:
cd config/pc/
修改config/mobile/
目录下的env.js
文件:127.0.0.1 修改成对应的服务器 ip 或域名,并修改成企业微信对应的 CorpID 和应用 ID:
cd /data/service/link-wechat/linkwechat-docker/config/mobile
vim env.js
const envs = {
production: {
BASE_URL: '/mobile/', // 路由基础路径
BASE_API: 'http://127.0.0.1/api', // <---这里
APPID: '这里填充自己的企业微信CorpID', // <---这里
AGENTID: '这里填充自己的应用ID', // <---这里
},
}
let env = envs[process.env.VUE_APP_ENV]
module.exports = env
回到项目 Docker 根目录:
cd /root/data/service/link-wechat/linkwechat-docker
执行Copy
脚本:
# 拷贝指定文件到对应目录
sh copy.sh
启动Mysql
:
docker-compose up -d lw-mysql
检查Mysql
状态:
docker exec -it lw-mysql bash
cd /docker-entrypoint-initdb.d/
ls
若发现初始化目录为空,连接mysql,查看数据库创建情况:
手动导入sql文件:
导入后:
启动 Nacos:
docker-compose up -d lw-nacos
检查 Nacos 状态:
docker ps -a
访问服务器 IP:8848/nacos:
auth模块 的 nacos yaml文件末尾请添加如下内容:
rsa:
privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==
启动 Redis:
docker-compose up -d lw-redis
docker ps -a
启动 Rabbitmq 、xxl-job:
docker-compose up -d lw-rabbitmq lw-xxl-job
启动项目模块:
sh deploy.sh modules
项目模块清单:
lw-nginx
lw-gateway
lw-auth
lw-modules-api
lw-modules-file
lw-modules-scheduler
lw-modules-wecom
lw-modules-wx
检查项目模块启动状态:
访问服务器IP。
结束。