使用Docker版本的演示软件的方法
这篇文章是关于OSS的无代码/低代码开发工具“Prisanter”的圣诞节日历的第14篇文章。
首先
我想写一篇关于在公式的Docker镜像上操作的方法。
- implem/pleasanter – Docker Image | Docker Hub
本文将使用Docker Compose来进行操作步骤。
Docker Compose Overview | Docker Docs (英語)
事前准备
有两种场景来安装Docker Compose:一种是安装Docker Desktop,另一种是安装Compose插件。请参阅文档以了解详细信息并开始使用。
- Overview of installing Docker Compose | Docker Docs
配备图像
我们最终会将它配置成这样。
.
|-- docker-compose.yml
|
+-- app_data_parameters
| +-- ExtendedSqls
| | +-- Sample.json.txt
| |
| +-- Mail.json
| +-- Rds.json
|
+-- CodeDefiner
| +-- Dockerfile
|
+---Pleasanter
+-- Dockerfile
参数文件的布置
首先,将参数JSON和扩展SQL等放置在 App_Data/Parameters 目录下,并命名为 app_data_parameters。
以下是有关 app_data_parameters 文件夹的注意事项。
-
- 必须将 App_Data/Parameters 与同一目录结构相同
-
- Implem.Pleasanter/Implem.Pleasanter/App_Data/Parameters at main · Implem/Implem.Pleasanter
建议只将已更改或新增的文件放置其中
仅对文件进行编辑不会反映在执行图像中,所以请务必执行 docker compose build
设置环境变量
设置连接字符串和初始化PostgreSQL所需的环境变量。要设置的项目如下:
1. ConnectionString和PostgreSQL的初始化需要的环境变量将被配置。
2. 配置以下内容以设置所需的项。
-
- PostgreSQLのバージョン指定
-
- PostgreSQL初期化パラメータ
-
- PostgreSQL用データボリュームのマウント先パス
-
- プリザンターのバージョン指定
- デーダベース接続文字列(ConnectionString)
指定PostgreSQL的版本。
POSTGRES_VER: PostgreSQLのバージョン
postgres – Official Image
请指定要使用的在Docker Hub上公开的版本。
PostgreSQL初始化参数
将PostgreSQL的管理用户、密码和数据库的指定通过环境变量传递。
-
- POSTGRES_USER
-
- POSTGRES_PASSWORD
-
- POSTGRES_DB
-
- POSTGRES_HOST_AUTH_METHOD
- POSTGRES_INITDB_ARGS
你可以通过 POSTGRES_HOST_AUTH_METHOD 和 POSTGRES_INITDB_ARGS 明确指定认证方法。
请参考 PostgreSQL 的官方镜像文档以了解更多详细信息。
以一个例子来说明。
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256"
這個部落格可以作為參考。
- Postgres公式Dockerイメージのパスワードの扱いについて
PostgreSQL的数据卷挂载路径。
Docker的功能中有一种机制用于与容器分开存储数据,它使用数据卷来存储数据库的数据区域。
- PGDATA
请参考官方镜像文档,以完整路径指定用于存放数据库实体文件的容器内目录。
指定プレゼンテーション软件的版本。
这是用于指定预展示版本的环境变量。
PLEASANTER_VER: Pleasanterのバージョン
implem/pleasanter Tags | Docker Hub
这是一个重要的要点。(Zhè shì de .)
-
- 请指定公开的Docker Hub官方镜像版本。
- 如果没有此环境变量或者版本无效,则使用最新版本 “latest”,会在执行 “docker compose build” 时发布的最新版本。
数据库连接字符串(ConnectionString)
这是常用的数据库连接字符串,但需要将其作为环境变量名称。
-
- Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString
-
- Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString
- Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString
请参考过去的条目以了解原因。
- PleasanterをDockerで動かす – Qiita
这是关于数据库连接字符串的手册。
- パラメータ設定:Rds.json | Pleasanter
需要将PostgreSQL环境变量的内容与SaConnectionString中所写的内容合并。
SaConnectionString(数据库连接字符串)是用一行表示的用于以超级用户身份连接到PostgreSQL的设置。每个部分的含义如下。
Database: 環境変数の POSTGRES_DB と揃える
UID: 環境変数の POSTGRES_USER と揃える
PWD: 環境変数の POSTGRES_PASSWORD と揃える
以上内容均由 initdb 创建并初始化的 PostgreSQL 生成。
PostgreSQL的Docker官方镜像在容器初始化时会执行initdb命令。
它被实现为使用以POSTGRES_开头的环境变量来进行初始化。
postgres – Official Image | Docker Hub
docker-library/postgres: Docker Official Image packaging for Postgres
环境变量的示例
请根据需要适当修改,因为所有密码部分都已经掩盖为********。
PLEASANTER_VER=1.3.xx.y
POSTGRES_VER=15
Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString='Server=db;Database=postgres;UID=postgres;PWD=********'
Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString='Server=db;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=********'
Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString='Server=db;Database=#ServiceName#;UID=#ServiceName#_User;PWD=********'
POSTGRES_USER=postgres
POSTGRES_PASSWORD=********
POSTGRES_DB=postgres
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256 --encoding=UTF-8"
PGDATA=/var/lib/postgresql/data
每个定义文件的示例
请根据我之后提供的样本进行放置。
docker-compose.yml 的意思是 Docker Compose 配置文件。
version: '3.7'
services:
pleasanter:
build:
context: .
dockerfile: ./Pleasanter/Dockerfile
args:
- VERSION=${PLEASANTER_VER}
container_name: pleasanter_${PLEASANTER_VER}
environment:
Implem.Pleasanter_Rds_SaConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString}
Implem.Pleasanter_Rds_OwnerConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString}
Implem.Pleasanter_Rds_UserConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString}
depends_on:
- db
ports:
- '8881:80'
networks:
- default
codedefiner:
build:
context: .
dockerfile: ./CodeDefiner/Dockerfile
container_name: codedefiner
environment:
Implem.Pleasanter_Rds_SaConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString}
Implem.Pleasanter_Rds_OwnerConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString}
Implem.Pleasanter_Rds_UserConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString}
depends_on:
- db
networks:
- default
stdin_open: true
db:
container_name: postgres${POSTGRES_VER}
image: postgres:${POSTGRES_VER}
volumes:
- type: volume
source: pg_data
target: ${PGDATA}
networks:
- default
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_HOST_AUTH_METHOD
- POSTGRES_INITDB_ARGS
- PGDATA
user: postgres
dbbackup:
image: ubuntu
container_name: dbbackup
networks:
- default
volumes:
- type: volume
source: pg_data
target: /pg_data
- type: bind
source: .
target: /backup
volumes:
pg_data:
name: ${COMPOSE_PROJECT_NAME:-default}_pg_data_${POSTGRES_VER}
networks:
default:
name: pleasanter_prod_network
CodeDefiner/Dockerfile的释义是:
FROM implem/pleasanter:codedefiner
COPY app_data_parameters/ /app/Implem.Pleasanter/App_Data/Parameters/
ENTRYPOINT [ "dotnet", "Implem.CodeDefiner.dll" ]
愉快/ Docker文件
ARG VERSION=latest
FROM implem/pleasanter:${VERSION}
COPY app_data_parameters/ App_Data/Parameters/
ENTRYPOINT [ "dotnet", "Implem.Pleasanter.dll" ]
建立图像和初始化数据库
请在执行前意识到需要构建容器镜像的过程。(很容易忘记)
一旦将各个定义文件放置好后,我将尝试执行。
プリザンターのイメージ構築
docker compose build
DB初期化
docker compose run –rm codedefiner _rds
プリザンターのサービス用のコンテナを構築、作成、実行
docker compose up -d pleasanter
请使用浏览器访问 http://localhost:8881/ ,并确认启动情况。
第一次登录与往常一样。
请停止演示。
docker compose stop pleasanter
预赛主持人的容器将保持原样停止。
PostgreSQL的容器仍在运行中。
启动幻灯片呈现
如果停止的话,可以通过开始来重新执行。
docker compose start pleasanter
停用PostgreSQL。
停止 PostgreSQL 容器。容器保留不变。如果开始,将再次执行。
docker compose stop db
docker compose start db
容器日志
-
- 你可以查看每个服务容器的日志。
-
- 使用命令 docker compose logs [服务名] 可以检查日志。
如果使用 -f 选项,将持续输出日志,适合用于启动确认等情况。
使用命令 docker compose logs -f [服务名]。
删除容器和网络
然后容器将被删除,同时保持依赖关系。
docker compose down
[+] Running 3/3
✔ Container pleasanter_1.3.48.0 Removed
✔ Container postgres15 Removed
✔ Network pleasanter_prod_network Removed
-
- Prezentinator的容器
-
- PostgreSQL的容器
- 网络
运行该命令后,PostgreSQL的数据存储卷仍然保持不变。
如果想再次执行,请
docker compose up -d pleasanter
如果假设网络已经建立好,那么在创建后,会启动一个PostgreSQL的容器和一个Presenter的容器。
[+] Building 0.0s (0/0)
[+] Running 3/3
✔ Network pleasanter_prod_network Created
✔ Container postgres15 Started
✔ Container pleasanter_1.3.48.0 Started
升级的方法
您可以按照以下步骤进行 Presenter(プリザンター)的升级:
-
- 停止Präsentor
-
- 更改环境变量的版本
-
- 创建新版本的容器映像
-
- 更新CodeDefiner和重新定义数据库
- 运行Präsentor
停用 Prezenter 容器
docker compose stop pleasanter
更改环境变量的版本
在Docker Hub上查看版本标签,并修改环境变量PLEASANTER_VER。
查看Presenter的升级信息,如果参数有差异,则进行反映。
- プリザンターの直近のバージョンアップ情報 | Pleasanter
创建新版本的容器镜像。
docker compose build
对CodeDefiner进行更新和重新定义数据库
进行pull操作以更新CodeDefiner的镜像。
docker compose pull codedefiner
我們將執行對數據庫的重新定義。
docker compose run --rm codedefiner _rds
执行一份展示文稿
docker compose up -d pleasanter
[+] Building 0.0s (0/0)
[+] Running 3/3
✔ Container postgres15 Running
✔ Container pleasanter_1.3.48.0 Recreated
✔ Container pleasanter_1.3.49.0 Started
停止并重新创建之前版本的容器作为新版本容器后再开始。
数据库中的数据将被继承下来。
要查看集装箱内部,
接下来将写下确认容器内容的步骤和注意事项。
-
- 如果要检查容器镜像的情况,可以运行以下命令:
-
- docker compose run –rm –entrypoint /bin/bash pleasanter
如果要进入正在运行的pleasanter容器实例内部,则可以运行以下命令:
docker compose exec pleasanter /bin/bash
* 有效的命令必须满足以下条件:存在正在运行的容器或Compose项目。
– docker compose ls:存在正在运行的项目。
– docker ps:显示容器列表。
要备份数据卷的方法是什么?
可以通过挂载数据卷和主机备份目录,并使用tar命令对PostgreSQL的数据目录进行归档,从而进行备份。
创建一个名为 pgdata-backup.tar.gz 的文件,并将其保存在当前执行的目录中。
docker compose run --rm dbbackup tar czvf /backup/pgdata-backup.tar.gz -C /pg_data .
删除容器、网络和数据卷。
※注意※ : 删除数据卷意味着删除数据库数据目录(${PGDATA}),请注意。
docker compose down -v
就是这样了。