# Docker 部署

注意:如果你想部署到heroku,请查看 部署到Heroku

# 目标读者

本文档的目标读者为:本系统的开发和实施人员,希望在本地尝试我们服务的开发者

# 先决条件

注意

如果您没有权限访问我们的 repo,下述的命令不会执行成功的

# 安装

执行以下命令安装一体化平台:

curl -s https://www.muyan.io/muyan.sh | bash
1

一体化安装器包括以下组件和工具:

你可以查看脚本内容以了解其所做的操作。

以下是安装过程的基本概述:

  1. 克隆平台仓库到./platform文件夹
  2. 运行 Docker Compose 启动所有容器

# 系统更新

# 更新前后端的版本

# 在 docker-compose.yml 文件所在目录直接运行如下命令
docker-compose down && docker-compose pull && docker-compose up -d
1
2

# 更新工作区

# 在 docker-compose.yml 文件所在目录直接运行如下命令
# 如果本地文件有更改,请先备份该目录,以避免工作成果被覆盖
git stash && git pull && git stash apply
1
2
3

# 安装及更新参考视频

如下是在 wsl2 下的安装和升级过程的视频示意,供您参考,Linux 及 MacOS 上的安装过 程与此类似。

视频中输入的命令可以参考下面代码

# 确认 docker 和 docker compose 命令可以正常执行
docker --version
docker compose --version

# 安装平台前后端及依赖服务的 docker image 并启动
# 依据网络连接和计算机硬件配置不同,可能需要 10 分钟甚至更久
curl -s https://www.muyan.io/muyan.sh | bash

# 更新前后端的版本
# 默认会安装到 platform 目录
cd platform
# 拉取最新的前后段 Docker 镜像并重新启动所有服务
# 依据网络连接速度,可能需要 10 分钟甚至更久
docker compose pull;docker compose down;docker compose up -d
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 访问

# 本机访问

请通过 http://localhost:3000 (opens new window)访问前端。它将自动连接到运行在 http://localhost:8080 (opens new window) 的后端。

# 局域网访问

系统默认开启局域网访问,你可以通过局域网的IP地址访问系统,例如:http://192.168.0.2:3000,无需额外配置。

# 开发

# 前端

我们的低代码平台使用统一的前端,无需你自己开发。

对于任何新的前端组件需求,请在这里 (opens new window)提交功能请求。

# 后端

关于后端开发的详细指南,请参考中文文档

开发文档目前正在翻译成英文。

# 开始开发

恭喜您成功安装了平台!以下是开始开发并充分利用您的新设置的方法。

# 导航至项目目录

打开终端并运行: cd platform

# 探索项目结构

花点时间熟悉项目目录和文件的布局,整体开发环境的目录结构及其解释如下所示

.
├── db-seed-data                                       # 数据库种子数据目录
│   └── initdb                                         # 数据库初始化脚本
│       ├── restore-dump.sh                            # 恢复数据库转储的Shell脚本
│       └── seed-data.dump                             # 用于种子初始数据的数据库转储文件
├── docker-compose.yml                                 # Docker Compose配置文件,用于容器化
├── muyan.sh                                           # 平台的一键安装脚本
├── runtime                                            # 运行时相关的目录和文件
│   ├── attachments                                    # 用户上传附件的存储位置,docker 内映射到 /app/attachments
│   ├── database                                       # 数据库相关文件和目录
│   │   ├── data                                       # PostgreSQL 数据库数据文件
│   │   └── pgadmin                                    # PostgreSQL管理工具配置(来自模板仓库)
│   │       ├── config                                 # PgAdmin配置文件
│   │       │   └── servers.json                       # PgAdmin服务器配置
│   │       └── pgpass                                 # PgAdmin的PostgreSQL密码配置
│   └── pgadmin                                        # 运行时生成的PgAdmin配置(不在git仓库中)
│       ├── config                                     # 运行时PgAdmin配置
│       ├── data                                       # 运行时PgAdmin数据存储
│       │   ├── azurecredentialcache                   # Azure凭证缓存,用于云部署
│       │   ├── pgadmin4.db                            # PgAdmin数据库文件
│       │   ├── sessions                               # 会话数据存储
│       │   └── storage                                # PgAdmin的通用存储
│       │       └── db_muyan.cloud                     # 特定数据库存储
│       │           └── pgpass                         # PgAdmin的PostgreSQL密码配置
│       ├── log                                        # PgAdmin日志文件
│       └── pgpass                                     # 另一个PgAdmin的PostgreSQL密码配置
├── server                                             # 服务器端应用程序代码,在 docker 内映射到 /app/plugin
│   ├── build.gradle                                   # 服务器的Gradle构建配置
│   ├── data                                           # 运行时种子数据文件夹,在Docker内映射到 /app/plugin/data
│   │   ├── attachments                                # 服务器特定的附件文件
│   │   ├── css                                        # CSS样式文件
│   │   ├── groovy                                     # Groovy脚本(可能用于服务器端逻辑)
│   │   └── production                                 # 生产数据和配置
│   │       ├── muyan                                  # 默认租户名称
│   │       │   └── [各种CSV文件]                      # 用于不同领域模型和配置的CSV文件
│   │       └── Organization.csv                       # 租户定义的根组织配置
│   ├── gradle                                         # Gradle包装器文件
│   │   └── wrapper
│   │       ├── gradle-wrapper.jar                     # Gradle包装器JAR
│   │       └── gradle-wrapper.properties              # Gradle包装器属性
│   ├── gradlew                                        # Unix类系统的Gradle包装器脚本
│   ├── gradlew.bat                                    # Windows的Gradle包装器脚本
│   ├── plugin                                         # 插件相关的文件和目录
│   │   ├── build.gradle                               # 插件的Gradle构建配置
│   │   └── src                                        # 插件源代码
│   │       └── main
│   │           └── java
│   │               └── tech
│   │                   └── muyan
│   │                       └── plugin
│   │                           └── PluginExample.java # 插件实现示例
│   └── settings.gradle                                # 服务器项目的Gradle设置
└── token.txt                                          # 包含访问Docker镜像的令牌的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

# 开始编码

万事俱备,只欠应用,请赶快开始开发您的应用吧! 以下是一些简易的文档章节

# 管理您的应用程序

要管理应用程序的生命周期,请在 platform 目录内使用以下命令:

# 启动应用程序
docker compose up -d

# 停止应用程序
docker compose down
1
2
3
4
5

# 升级到新版本

当牧言低代码平台发布了新版本后,只需要在您的工作区(包含 docker-compse.yml 文件的 目录下), 执行如下的命令即可将您的本地工作区中的平台版本升级。

# 从 docker hub 拉取最新的镜像
docker compose pull

# 重新启动运行中的后端容器
docker compose up -d
1
2
3
4
5

升级后,可以参考下图,确认当前运行中的前端和后端的版本

# 相关配置

# 更改默认租户

租户是系统中的一个重要配置。它主要有两个用途:

  1. 它作为数据库中 DomainClass 对应数据表的前缀。
  2. 它用作保存在数据库中的所有记录的租户列 (tenant) 列的值。

要更改默认租户,请按以下步骤操作:

# 1. 更新配置

更改 TENANT_ID 环境变量或修改 docker-compose.yml 配置文件(不推荐):

  • 设置 TENANT_ID 环境变量:

    • 对于类 Unix 系统(Linux,macOS):
      export TENANT_ID=your_new_tenant_id
      
      1
    • 对于 Windows:
      set TENANT_ID=your_new_tenant_id
      
      1
  • 或直接修改 docker-compose.yml 文件(不推荐):

    - TENANT_ID=${TENANT_ID:your_new_tenant_id}
    
    
    1
    2

# 2. 更新文件结构

重命名特定租户的数据目录:

mv server/data/production/muyan server/data/production/your_new_tenant_id

# 3. 修改引导组织

编辑 server/data/production/Organization.csv 文件。将 tenantsubDomain 字段更改为与新租户 ID 匹配。例如:

原始内容:

name,parent.name,customiseEnable,tenant,subDomain(*)
muyan,NULL,Y,muyan,muyan
1
2

修改后的内容:

name,parent.name,customiseEnable,tenant,subDomain(*)
your_organization_name,NULL,Y,your_new_tenant_id,your_new_tenant_id
1
2

# 4. 重启系统

在进行这些更改后,请重启您的系统。这将触发使用新的租户ID重新导入所有种子数据的过 程。

# 重要注意事项

更改默认租户将影响所有新的数据库操作和现有数据。

请记住在进行这些更改后重启您的应用程序,以确保新的配置生效并启动种子数据重新导入 过程。

# 启用 OpenAI 接口

如果你想启用AI功能,请参考下面的截图了解如何设置 OpenAI 令牌

如下是启用 OpenAI 接口,以启用智能助手与 LLM_ENGINE 的逻辑引擎的说明

# 启用 anthropic API 接口

如果你希望使用 anthropic 而不是 OpenAI 的 API 作为智能助手和 LLM_ENGINE 动态逻辑引擎,请参考下面的相关设置

  1. Set ai.provider DynamicConfig to claude
  1. Set API 相关设置如下

# 启用 SMTP 发送邮件

SMTP 发送邮件的相关配置在系统动态配置的

邮件配置 -> SMTP 相关配置 下,包括 SMTP 的服务器地址、端口、用户名、密码、是 否启用 SSL/TLS 等。

此外,在 邮件配置 -> HTML模板 下,可以更新默认的邮件模板,邮件模板是作为附件 保存在该配置中。

# 附加说明

# 端口列表

以下是每个组件的端口列表:

组件 端口 连接方法
前端 3000 http://localhost:3000 (opens new window)
后端 8080 http://localhost:8080 (opens new window) (通过前端访问)
后端调试端口 5050 在IDEA内连接到localhost的5050端口
Redis 6379 redis-cli
PostgreSQL 5432 psql -d application -h localhost -p 5432 -U postgres
PGAdmin 5433 http://localhost:5433 (opens new window)

# 默认用户名及密码

以下是每个组件或系统用户的默认用户名和密码列表:

组件 用户名 密码
PG Admin [email protected] secret
Postgres postgres password
后端管理员用户 [email protected] password
后端开发者用户 [email protected] password

以下是数据库连接信息:

用户名 密码 数据库
postgres password application

# Docker数据卷

以下是每个组件的Docker 数据卷路径列表:

组件 Docker内的路径 主机上的路径 描述
PostgreSQL /var/lib/postgresql/data ./runtime/database/data PostgreSQL数据文件夹
PGAdmin /var/lib/pgadmin ./runtime/pgadmin/data PGAdmin数据文件夹
PGAdmin /pgadmin4/config ./runtime/pgadmin/config PGAdmin配置文件夹
PGAdmin /var/log/pgadmin ./runtime/pgadmin/log PGAdmin日志文件夹
PGAdmin /var/lib/pgadmin/storage/db_muyan.cloud/pgpass ./runtime/pgadmin/pgpass PGAdmin pgpass文件
后端 /root/workspace ./server 后端代码工作区
后端 /root/attachments ./runtime/attachments 上传的附件保存文件夹

# 进一步阅读

要获取更详细的文档、故障排除提示和社区支持,请访问:

我们很期待看到您构建的内容!

Last Updated: 2024/12/4 13:00:56