跳到主要内容

Docker 安装与部署

本指南适用于 LCP4 单机 Docker 部署。前端、Nginx 和 Java 引擎已合并为统一应用服务 app,由 Docker Compose 管理应用和中间件。旧版 V3 的安装脚本、独立 web / engine 容器和默认登录密码不适用于全新安装。

1. 部署前准备​

  • 推荐 Ubuntu 24.04 LTS、8 核 CPU、16 GB 内存、200 GB 可用磁盘。
  • 安装 Docker Engine 和 Docker Compose v2;以下命令使用 docker compose。
  • 在线部署需能访问代码仓库、应用镜像仓库和中间件镜像源,私有仓库需具备读取权限;离线部署按第 10 节提前准备安装包、部署文件和全部镜像。
  • 默认网站端口为 90,确认未占用,并在防火墙或云安全组放行实际网站端口。
  • Compose 固定子网为 172.66.3.0/24,确认不与现有网络冲突。

CentOS 在线安装 Docker​

以下为使用 yum 和 Docker CE CentOS 软件源的安装方式。CentOS 7、CentOS Linux 8 已停止维护,旧系统的软件源和可安装版本可能受限;已有环境应选择与系统版本兼容的 Docker Engine 和 Compose v2 软件包。

sudo yum install -y yum-utils ca-certificates curl git openssl
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

软件源访问异常时参考 yum 镜像无法访问,并检查网络、DNS 和系统版本。源中缺少 Compose v2 插件时使用第 10 节的独立插件安装方式;旧版 docker-compose v1 不能替代本指南使用的 Compose v2。

Ubuntu 在线安装 Docker​

使用 Docker 官方 Ubuntu 软件源安装:

sudo apt-get update
sudo apt-get install -y ca-certificates curl git openssl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME:-$VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

华为欧拉(openEuler)​

按实际 openEuler 版本和 CPU 架构选择兼容的 Docker Engine 软件包,不直接套用 Ubuntu 的 apt 命令或 CentOS 软件源。保留原文档的 openEuler 安装参考,安装后执行 docker version 和 docker compose version 核对。参考资料中的旧 Compose 命令需改为本指南的 Compose v2;离线部署准备该系统兼容的 RPM 包及依赖。

后续命令以具有 Docker 操作权限的账号执行。

配置镜像仓库​

默认应用镜像为 125.75.152.167:5001/lcp4:latest,仓库使用 HTTP。编辑 /etc/docker/daemon.json,将以下内容合并到已有配置:

{
"insecure-registries": ["125.75.152.167:5001"],
"log-driver": "json-file",
"log-opts": {"max-size": "500m", "max-file": "3"}
}

新服务器如需指定存储位置,可在同一个 JSON 对象中增加 "data-root": "/data2/docker"。已有服务器需先迁移原 Docker 数据,不能仅修改路径。

sudo systemctl restart docker

重启会影响服务器上的容器,请安排维护时间。仓库要求认证时,执行 docker login 125.75.152.167:5001。

2. 获取部署文件​

从 LCP4 仓库检出 deploy/,无需在服务器编译前后端:

git clone --depth 1 --filter=blob:none --sparse --branch main http://git.zhoujusoft.com/products/lcp4.git lcp4
cd lcp4
git sparse-checkout set deploy
chmod +x deploy/install deploy/scripts/lcp-deploy.sh

服务器无法访问仓库时,由维护人员提供同一版本的完整 deploy/ 部署包,包括隐藏文件 .env.example、脚本、Nginx 配置、配置模板和数据库初始化文件。

3. 初始化并填写配置​

填写环境:运行 Docker 的 Linux 部署服务器(宿主机)。 通过 SSH 登录该服务器,在下载或解压的 lcp4/ 目录中执行以下命令,编辑服务器上的 lcp4/deploy/.env 文件。不是在本地 Windows 环境变量、容器内部或平台页面中填写。

例如项目放在 /data/lcp4,配置文件的完整路径就是 /data/lcp4/deploy/.env:

cd /data/lcp4  # 替换为服务器上的实际项目路径
./deploy/scripts/lcp-deploy.sh init
chmod 600 deploy/.env
vi deploy/.env

全新安装初始化会创建配置和数据目录,不覆盖已有 .env 或配置文件。

在 .env 中找到对应配置项,将值填写在等号后并保存。以下仅展示填写格式,文字占位值必须替换为实际密码、独立生成的密钥和部署标识:

LCP_INITIAL_USER_PASSWORD=你设置的管理员密码
LCP_JWT_SECRET=生成的JWT密钥
LCP_AES_SECRET=生成的AES密钥
LCP_SM3_KEY=生成的SM3密钥
LCP_SM2_PRIVATE_KEY=生成的单行Base64私钥
LCP_LICENSE_DEVICE_CODE=稳定的部署标识

后文的 openssl 命令也在该 Linux 服务器终端执行,将生成结果填入此文件。首次配置保存后,再按第 4 节运行 ./install;Docker Compose 会读取 .env,将配置传入相应容器。已有服务修改 .env 后需重新创建相应容器,仅执行 docker compose restart 不会加载新的环境变量。

首次安装必填项​

配置项说明
LCP_INITIAL_USER_PASSWORD首次创建管理员的密码,没有内置默认密码
LCP_JWT_SECRET独立的签名密钥,至少 32 个随机字节
LCP_AES_SECRET持久保存的加密密钥
LCP_SM3_KEY持久保存的主 SM3 密钥
LCP_SM2_PRIVATE_KEYSM2 私钥,PKCS#8 DER 格式的单行 Base64
LCP_LICENSE_DEVICE_CODE授权申请前设置稳定部署标识,容器重建时保持一致

新安装可分别执行 openssl rand -hex 32 生成 JWT、AES、SM3 的随机值,每项使用独立值。支持 SM2 的 OpenSSL 可生成参数加密私钥:

umask 077
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:SM2 -out lcp-sm2.pem
openssl pkcs8 -topk8 -nocrypt -in lcp-sm2.pem -outform DER | openssl base64 -A

将输出的单行 Base64 填入 LCP_SM2_PRIVATE_KEY,妥善保存私钥与 .env。升级保留原有密钥;读取旧密文时保留原部署的 LCP_LEGACY_DES_KEY 和实际使用的 LCP_SM3_BAK_KEY。不要在升级、重建或重启时重新生成密钥。

常用配置​

配置项默认值 / 用途
LCP_IMAGE125.75.152.167:5001/lcp4:latest;可固定已发布标签
LCP_COMPOSE_PROJECT新安装为 lcp;升级填写原 Compose 项目名
WEB_PORT90,宿主机网站端口
LCP_TENANT_TYPEsingle;多租户用 multiple 并设置 LCP_DOMAIN_NAME
LCP_PUBLIC_API_URL/
LCP_HTTP_PROXY_PROJECTSweb,mobile,manage
LCP_STORAGE_TYPEmongo,可选 minio
USE_YAML_TENANT_DATABASE生产部署保持 false

启用 HTTP 代理时,LCP_PUBLIC_API_URL 必须为 /,不能改为 /api,否则会拼接为 /api/api/proxy。config/engine/application-local.yml 中的 db.proxyAddress 保持 http://127.0.0.1:8080/,不改为宿主机地址,也不追加 /api。

中间件账号和连接项以 .env.example 为准。新安装修改 MySQL 密码时同步修改 MYSQL_ROOT_PASSWORD 和对应 LCP_DB_*_PASSWORD;RabbitMQ 同步修改 RABBITMQ_DEFAULT_PASS 与 LCP_MQ_PASSWORD;Redis 同步修改 config/redis/redis.conf 与 LCP_REDIS_PASSWORD。已有数据库修改 .env 不会自动修改库内密码。

已有租户使用主库保存的中间件配置,生产修改数据库、Mongo、MQ、Redis 连接应通过平台配置后重启应用,不要开启开发隔离开关 USE_YAML_TENANT_DATABASE。

4. 安装并访问​

配置完成后执行:

cd deploy
./install
./install status
./install log

安装入口执行幂等初始化,从应用镜像补齐缺失的前端运行资源,并启动服务。首次启动时 MySQL 初始化三个数据库;单机离线模式下,引擎发现没有默认租户时自动创建 00000000 租户、业务表、管理员和内置菜单,无需手工导入初始数据库包。

容器运行且应用日志无启动错误后访问:

  • 平台入口:http://服务器IP:90/
  • 管理后台:http://服务器IP:90/backstage/
  • 移动端:http://服务器IP:90/mobile/

实际端口以 WEB_PORT 为准。首次管理员为 administrator,密码为自行填写的 LCP_INITIAL_USER_PASSWORD。已有部署升级继续使用原账号密码,修改该变量不会重置已有用户。

验证登录、后台页面和接口正常后,按平台提示配置授权。容器运行状态不代表应用已完成初始化,需结合日志和实际页面验证。

5. 网络与数据目录​

服务固定容器地址默认宿主机端口
app172.66.3.22,别名 web、engine90 → 容器 8080
mongo172.66.3.450007 → 容器 27017
mq172.66.3.55672、管理端 15672
redis172.66.3.66379
mysql172.66.3.73306
minio(可选)172.66.3.89000、控制台 9001

应用通过服务名连接中间件。容器内 Nginx 将 /api/ 转发到同容器引擎 127.0.0.1:5000,无需额外发布引擎端口。中间件端口按运维需要限制访问,不必全部对公网开放。

以下路径均相对于 deploy/:

路径内容
.env部署变量、账号和持久密钥
config/engine/引擎配置
config/redis/redis.confRedis 配置
config/mysql/MySQL 首次初始化脚本
config/logs/engine/引擎日志
config/drivers/、config/fonts/扩展驱动、字体
config/imgs/config/、config/languages/前端运行时配置和语言资源
data/db/MySQL 数据
data/mongo/、data/mongo-config/Mongo 数据与配置数据
data/minio/可选 MinIO 文件数据

备份数据库、文件存储、配置和密钥,并验证可恢复性。不要挂载旧 config/nginx-web 覆盖统一应用的 Nginx 配置。

6. 修改端口与日常升级​

在 deploy/ 编辑 .env 的 WEB_PORT,然后重建应用:

docker compose up -d --no-deps app

日常镜像升级:

./install upgrade
./install status
./install log

upgrade 只拉取并重建 app,不会重启 MySQL、MQ、Redis、Mongo。它使用 --remove-orphans,会删除同一 Compose 项目中不再定义的旧容器,执行前确认项目名正确。升级前备份,升级后验证登录、接口、后台和文件读写。

指定版本时,将 LCP_IMAGE 改为已发布标签,再执行 ./install upgrade。涉及数据库结构变更的回退需评估数据兼容性,不能仅切换镜像。

7. 从 3.0 迁移到 4.0​

迁移采用重新安装 4.0 服务,再迁移或备份还原历史数据的方式。应用及其他服务按本指南重新安装;必须保留的数据分为两部分:MySQL 平台及业务数据库,以及 Mongo 或 MinIO 中的文件数据。文件存储按 3.0 实际使用的类型迁移;两种存储均有历史数据时,两者都要迁移。

7.1 停写与备份准备​

  1. 记录 3.0 使用的 MySQL 版本、全部平台数据库与租户数据库、文件存储类型、Mongo 数据库或 MinIO Bucket,以及连接账号和地址。
  2. 安排维护窗口,停止旧应用及其他写入任务,保留旧 MySQL、Mongo / MinIO 运行以完成备份。数据库与文件数据应在同一停写窗口备份,避免附件记录与实际文件不一致。
  3. 另行保存原配置、加密密钥和授权信息,用于恢复连接与读取历史密文;不要直接用旧配置覆盖 4.0 配置模板。
  4. 保留原服务和数据供回退,迁移验收前不要删除旧数据。

7.2 重新安装 4.0 的基础服务​

按第 2、3 节获取部署文件并初始化配置。新服务使用新的部署目录;同机迁移需先停止冲突的旧服务,或调整端口及网络,避免 172.66.3.0/24 和固定地址冲突。

先启动新中间件并恢复数据,再启动应用,不要让应用对空库创建新的平台数据。在新 lcp4/deploy/ 目录执行:

docker compose up -d mysql mq redis mongo
# 原部署使用 MinIO 时,先在 .env 设置 LCP_STORAGE_TYPE=minio 和 MinIO 密码,再执行:
docker compose --profile minio up -d --wait minio

7.3 MySQL 数据迁移或备份还原​

推荐逻辑备份还原,将 3.0 的平台主库、全部租户业务库、日志库及其他实际使用的业务数据库完整恢复到新 MySQL。不能只迁移默认租户,也不要把旧 mysql 系统库直接覆盖到新服务。

使用与源 MySQL 版本匹配的客户端备份;以下示例的数据库名需替换或补齐为实际清单。密码使用交互输入:

# 在能连接旧 MySQL 的服务器上执行
mysqldump -h OLD_MYSQL_HOST -P 3306 -u root -p \
--single-transaction --routines --triggers --events --hex-blob \
--databases lcpmaster_java lcp_00000000 lcplog_00000000 \
--result-file=lcp3-mysql.sql

# 将备份文件传到新服务器,再恢复到新 MySQL
mysql -h NEW_MYSQL_HOST -P 3306 -u root -p -e 'source /backup/lcp3-mysql.sql'

/backup/lcp3-mysql.sql 是运行 MySQL 客户端的机器上的备份路径。恢复前确认备份命令成功、文件完整,恢复后检查数据库、关键表与记录数量。非事务表需在停写状态下采用适合的锁表或备份方案。

新服务重新创建应用所需的数据库账号和授权,并同步 .env 中连接密码。主库保存的租户数据库地址、Mongo / MinIO 连接配置也需按新服务地址核对,不能继续指向已停用的旧服务。

也可以迁移 MySQL 数据目录到 deploy/data/db/,但仅用于已确认版本及数据格式兼容的物理迁移:先正常停止源和目标 MySQL,完整复制数据目录并保留权限,再启动目标。不要复制运行中的数据目录,也不要把不同版本的数据文件直接混用;版本不确定时使用备份还原。

7.4 Mongo 文件数据迁移或备份还原​

3.0 使用 Mongo 文件存储时,备份所有实际使用的租户文件数据库,包含 GridFS 的文件信息和分块集合,不要只导出文件记录。可使用 MongoDB Database Tools,以下示例每个实际数据库执行一次:

mongodump --host OLD_MONGO_HOST --port 27017 \
--db lcp_00000000 --archive=lcp3-mongo-00000000.archive --gzip

mongorestore --host NEW_MONGO_HOST --port 50007 \
--archive=lcp3-mongo-00000000.archive --gzip

源端口按旧部署实际值填写;新服务从宿主机连接默认使用 50007,容器网络内为 27017。启用认证时补充用户名、认证数据库并交互输入密码。目标使用空的对应数据库,逐一核对工具与源、目标 Mongo 版本兼容性。

恢复后核对集合、文件数量及实际附件下载。也可在正常停止源、目标 Mongo 后,完整迁移数据目录到 deploy/data/mongo/ 和对应 deploy/data/mongo-config/,保留权限;物理迁移必须确认 Mongo 版本兼容。

7.5 MinIO 文件数据迁移或备份还原​

3.0 使用 MinIO 时,将 .env 中 LCP_STORAGE_TYPE 设置为 minio。安装 MinIO Client(mc),配置旧、新服务别名后,按原名称创建目标 Bucket,并逐一迁移对象:

# 将地址、账号和密钥替换为实际值,在可信终端执行
mc alias set old http://OLD_MINIO_HOST:9000 OLD_ACCESS_KEY OLD_SECRET_KEY
mc alias set new http://NEW_MINIO_HOST:9000 NEW_ACCESS_KEY NEW_SECRET_KEY
mc mb --ignore-existing new/BUCKET_NAME
mc mirror --preserve old/BUCKET_NAME new/BUCKET_NAME
mc diff old/BUCKET_NAME new/BUCKET_NAME

保留 Bucket 名称和对象路径,所有业务 Bucket 都要迁移。也可从已有的对象备份恢复到新 Bucket。普通对象镜像迁移不等于完整恢复版本历史、删除标记、Bucket 策略、生命周期和用户权限;原环境使用这些功能时需另行迁移配置及历史版本,并核对结果。

不要把正在运行的 MinIO 数据目录直接复制到新服务。物理数据迁移需停写、停止源和目标服务,并确认 MinIO 版本与磁盘布局兼容;通常优先使用对象迁移或备份恢复。

7.6 启动应用并验收​

确认 MySQL 和原存储类型的数据已恢复后,核对新服务连接配置。保留读取历史数据所需的原加密密钥;已有租户的存储配置需指向恢复后的 Mongo 或 MinIO,修改 .env 不会自动覆盖主库中已保存的租户配置。

在 lcp4/deploy/ 执行:

./install
./install status
./install log

使用原管理员账号密码登录,检查租户、用户、业务表单和历史数据,并验证历史附件、图片可预览下载及新文件可上传。验收通过后切换访问入口,再停用旧环境;失败时停止新应用、恢复旧入口,在恢复业务写入前确认数据一致性。

8. 可选 MinIO 存储​

默认使用 Mongo,无需 MinIO。新安装使用内置 MinIO 时设置:

LCP_STORAGE_TYPE=minio
MINIO_ROOT_USER=lcpminio
MINIO_ROOT_PASSWORD=请替换为独立安全密码

不能保留 change-me-minio。在 deploy/ 执行 ./install,脚本启用 MinIO profile,等待 MinIO 健康后启动应用并注入连接信息。外部 MinIO 使用 LCP_MINIO_ENDPOINT、LCP_MINIO_ACCESS_KEY、LCP_MINIO_SECRET_KEY;当前脚本在 minio 模式仍启用内置 MinIO 服务,需按实际方案调整编排。

已有租户更换存储需通过平台配置并迁移历史文件,修改 .env 不会自动迁移 Mongo 文件或覆盖已有租户存储配置。

9. 常用命令与排障​

在 deploy/ 目录执行:

./install status          # 查看容器状态
./install log # 跟踪应用日志,Ctrl+C 退出
./install log mysql # 查看 MySQL 日志
./install upgrade # 拉取并重建应用
./install restart # 重启编排服务,包括中间件
./install down # 删除编排容器和网络,保留绑定的数据目录

仅重启应用使用 docker compose restart app。不要删除 data/ 解决启动错误。./install config 输出展开的配置,包含敏感信息,不要公开。

现象检查方向
镜像仓库 HTTPS / HTTP 不匹配检查 insecure-registries 是否包含仓库地址,并确认已重启 Docker
提示缺少 JWT、AES 或 SM3 密钥检查 .env 必填值,升级时恢复原密钥
登录参数加密失败检查 SM2 私钥是否为正确的单行 PKCS#8 DER Base64
网站无法访问检查应用日志、WEB_PORT、端口占用、防火墙与安全组
/api/api/proxy 或代理异常检查 API 根路径、引擎回环代理地址与统一 Nginx 配置
数据库连接失败或出现空平台检查密码、原项目名、数据挂载和主库租户连接配置
创建网络失败检查 172.66.3.0/24 是否冲突,调整时同步全部固定地址

本指南依据 LCP4 的 deploy/README.md、.env.example、docker-compose.yml、install 和 scripts/lcp-deploy.sh 更新,交付版本变化时需同步核对。

10. 离线部署​

离线部署适用于目标服务器无法访问互联网或镜像仓库的环境。准备工作在联网机器完成,安装和配置在离线 Linux 服务器执行。离线部署同样使用统一应用镜像,不需要在目标服务器编译前后端。

10.1 离线服务器安装 Docker 并导入镜像​

先使用离线安装包安装 Docker 和 Compose v2。以下为 Ubuntu 示例,目录须包含全部依赖:

sudo dpkg -i /media/offline/docker-packages/*.deb
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

CentOS 使用与目标系统版本和架构匹配的 RPM 包,提前准备 Docker Engine、CLI、containerd、Compose 插件及全部依赖,然后在离线服务器执行:

sudo yum --disablerepo='*' localinstall -y /media/offline/docker-packages/*.rpm
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

软件包路径按实际位置替换。Ubuntu 或 CentOS 提示缺少依赖时,在联网环境补齐对应安装包再安装,不要跳过依赖检查。openEuler 同样准备本地 RPM,但必须使用该系统兼容的软件包。

如果已安装 Docker Engine,只缺 Compose v2,可在联网机器从 Compose 官方发布页 下载指定 v2.x 版本的 Linux 插件。Compose v2 是 2.x 版本,与 Engine 版本不同;x86_64 下载 docker-compose-linux-x86_64,ARM64 下载 docker-compose-linux-aarch64。将文件及官方校验信息传入离线服务器,校验后安装,以下为 x86_64 示例:

sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo install -m 0755 /media/offline/docker-compose-linux-x86_64 \
/usr/local/lib/docker/cli-plugins/docker-compose
docker compose version

此方式适用于兼容的 CentOS、Ubuntu 等 Linux 环境,仅安装 Compose 插件,不包含 Engine。所选版本须与当前 Engine 兼容,并支持本指南使用的 --wait、--pull never 选项。

导入app及各中间件离线镜像包。

确认导入镜像的名称、标签与 .env 中所有镜像变量完全一致。

10.2 离线配置与首次启动​

在离线服务器执行第 3 节的初始化和配置:

cd /data/lcp4
chmod +x deploy/install deploy/scripts/lcp-deploy.sh
./deploy/scripts/lcp-deploy.sh init
chmod 600 deploy/.env
vi deploy/.env

填写密码、持久密钥和部署标识;LCP_IMAGE 及全部中间件镜像变量应指向已导入的准确标签。需要 MinIO 时设置 LCP_STORAGE_TYPE=minio 与独立密码,并确认 MinIO 镜像已导入。

全新安装配置完成后执行:

cd deploy
./install
./install status
./install log

./install 在应用镜像本地存在时可直接从该镜像补齐运行资源;默认 Compose 没有强制始终拉取的策略,本地镜像齐全时可离线启动。出现尝试连接镜像仓库的错误时,检查是否漏导入镜像或镜像名称、标签不一致。

3.0 迁移不要直接启动空库上的应用:先按第 7 节启动新中间件并恢复 MySQL 和 Mongo / MinIO 数据,再执行 ./install。备份恢复使用已交付的本地工具。

按第 4 节通过内网地址访问,验证登录、接口和文件读写。邮件、第三方接口、云模型及在线授权等依赖外部网络的功能,需要单独配置内网可达服务或办理对应离线授权。

10.3 离线升级​

在联网机器准备新版本应用镜像归档及匹配的部署文件,校验并传入离线服务器。备份数据、配置与密钥,按交付说明更新部署文件,保留现有 .env、config/ 和 data/,然后执行:

vi .env  # 将 LCP_IMAGE 设置为本次导入的新版本标签
docker compose up -d app
./install status
./install log

新版本继续使用 latest 标签时,也需导入新的镜像并使用 --force-recreate 重建应用。此命令只更新应用,不重启中间件;若交付版本要求更新中间件,需额外交付相应镜像并按该版本迁移说明操作。

升级后验证历史数据、附件和新文件上传。不要通过重新生成密钥或清空数据目录处理升级问题。