Skip to content

Commit 6198898

Browse files
authored
fix(docker): 加固 Compose 默认配置 (#783)
* fix(docker): 加固 Compose 默认配置 生产环境不发布 PostgreSQL 与 Redis 端口,统一使用 SCRAM 认证。保留可启动的演示密码并支持通过环境变量覆盖,同时同步部署说明与默认配置。 * fix(docker): 保留 Compose 默认凭据兼容性
1 parent 8e3ce3d commit 6198898

8 files changed

Lines changed: 56 additions & 20 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ docker/data
3030
application-local.yml
3131
dev/
3232
.DS_Store
33-
.java-version
33+
.java-version
34+
docker/dev-env/.env
35+
docker/run-all/.env

README.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,22 @@ TCP/UDP/MQTT/HTTP、TLS/DTLS、不同厂商、不同设备、不同报文、统
9999
------|----simulator # 设备模拟器
100100
```
101101

102+
## Docker 部署说明
103+
104+
生产环境请使用 `docker/run-all`,可直接启动;如用于生产,请先复制 `docker/run-all/.env.example``.env` 并覆盖为随机强密码:
105+
106+
```bash
107+
cd docker/run-all
108+
cp .env.example .env
109+
docker compose up -d
110+
```
111+
112+
生产 Compose 仅发布 JetLinks 对外服务端口,PostgreSQL 和 Redis 不映射到宿主机,平台通过 Compose 内部的 `postgres:5432``redis:6379` 访问。未配置密码时 Compose 会沿用原有默认值并可直接启动,便于已有部署升级;生产环境建议通过 `.env` 或环境变量覆盖数据库、Redis 以及 admin 初始密码,`.env` 不要提交到代码仓库。
113+
114+
`docker/dev-env` 仅用于本机开发调试,会保留 PostgreSQL `5432` 和 Redis `6379` 端口映射;PostgreSQL 未配置密码时沿用原有默认值,Redis 默认不设置密码。生产环境不要使用该 Compose 配置,并应填写 `docker/dev-env/.env.example` 覆盖 PostgreSQL 密码。
115+
116+
已有 PostgreSQL 数据目录不会因为修改 `POSTGRES_PASSWORD` 环境变量自动修改数据库密码;迁移已有部署时,请使用数据库管理工具显式执行 `ALTER ROLE postgres WITH PASSWORD '新密码';`,并同步更新 `.env`。admin 初始密码同样只在首次初始化时生效。
117+
102118
## 服务支持
103119

104120
我们提供了各种服务方式帮助您深入了解物联网平台和代码,通过产品文档、技术交流群、付费教学等方式,你将获得如下服务:
@@ -127,4 +143,3 @@ TCP/UDP/MQTT/HTTP、TLS/DTLS、不同厂商、不同设备、不同报文、统
127143
[开发文档](https://hanta.yuque.com/px7kg1/nn1gdr)
128144

129145
[![Stargazers over time](https://starchart.cc/jetlinks/jetlinks-community.svg?variant=adaptive)](https://starchart.cc/jetlinks/jetlinks-community)
130-

docker/dev-env/.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# 可直接启动;留空时沿用原有默认值。
2+
# 生产环境建议填写随机强密码,.env 不要提交到代码仓库。
3+
# 可使用密码管理器或 openssl rand -base64 32 生成密码。
4+
POSTGRES_PASSWORD=

docker/dev-env/docker-compose.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,26 @@ services:
33
redis:
44
image: redis:6
55
container_name: jetlinks-ce-redis
6+
# 仅供本地开发调试,生产环境不得发布 Redis 端口。
67
ports:
78
- "6379:6379"
89
volumes:
910
- "./data/redis:/data"
11+
# 本地开发默认不设置 Redis 密码,生产环境请使用 docker/run-all 并配置密码。
1012
command: redis-server --appendonly yes
1113
environment:
1214
- TZ=Asia/Shanghai
1315
postgres:
1416
image: timescale/timescaledb:latest-pg16
1517
container_name: jetlinks-postgres-16
18+
# 仅供本地开发调试,生产环境不得发布 PostgreSQL 端口。
1619
ports:
1720
- "5432:5432"
1821
volumes:
1922
- "./data/postgres:/var/lib/postgresql/data"
2023
environment:
21-
POSTGRES_PASSWORD: jetlinks
24+
# 未设置 POSTGRES_PASSWORD 时沿用原有默认值,生产环境建议覆盖。
25+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-jetlinks}
2226
POSTGRES_DB: jetlinks
23-
POSTGRES_HOST_AUTH_METHOD: trust
24-
TZ: Asia/Shanghai
27+
POSTGRES_HOST_AUTH_METHOD: scram-sha-256
28+
TZ: Asia/Shanghai

docker/run-all/.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# 可直接启动;留空时沿用原有默认值。
2+
# 生产环境建议填写随机强密码,.env 不要提交到代码仓库。
3+
# 可使用密码管理器或 openssl rand -base64 32 生成密码。
4+
POSTGRES_PASSWORD=
5+
REDIS_PASSWORD=
6+
ADMIN_USER_PASSWORD=

docker/run-all/docker-compose.yml

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,35 @@ services:
33
redis:
44
image: redis:6
55
container_name: jetlinks-ce-redis
6-
# ports:
7-
# - "6379:6379" # 仅供jetlinks-ce访问
86
volumes:
97
- "./data/redis:/data"
10-
command: redis-server --appendonly yes --requirepass "JetLinks@redis"
8+
# 不发布 Redis 端口,仅允许 Compose 内部服务通过 redis:6379 访问。
9+
# 未设置 REDIS_PASSWORD 时沿用原有默认值,生产环境建议覆盖。
10+
command:
11+
- redis-server
12+
- --appendonly
13+
- "yes"
14+
- --requirepass
15+
- "${REDIS_PASSWORD:-JetLinks@redis}"
1116
environment:
12-
- TZ=Asia/Shanghai
17+
REDIS_PASSWORD: ${REDIS_PASSWORD:-JetLinks@redis}
18+
TZ: Asia/Shanghai
1319
healthcheck:
14-
test: [ "CMD", "redis-cli", "-h", "localhost", "-p", "6379", "-a", "JetLinks@redis", "ping" ]
20+
test: [ "CMD-SHELL", "redis-cli -h localhost -p 6379 -a \"$${REDIS_PASSWORD}\" ping" ]
1521
interval: 10s
1622
timeout: 5s
1723
retries: 3
1824
postgres:
1925
image: timescale/timescaledb:latest-pg16
2026
container_name: jetlinks-ce-postgres
21-
# ports:
22-
# - "5432:5432" # 仅供jetlinks-ce访问
2327
volumes:
2428
- "./data/postgres:/var/lib/postgresql/data"
2529
environment:
26-
POSTGRES_PASSWORD: JetLinks@postgres
30+
# 不发布 PostgreSQL 端口,仅允许 JetLinks 通过 postgres:5432 访问。
31+
# 未设置 POSTGRES_PASSWORD 时沿用原有默认值,生产环境建议覆盖。
32+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-JetLinks@postgres}
2733
POSTGRES_DB: jetlinks
28-
POSTGRES_HOST_AUTH_METHOD: trust
34+
POSTGRES_HOST_AUTH_METHOD: scram-sha-256
2935
TZ: Asia/Shanghai
3036
healthcheck:
3137
test: [ "CMD", "pg_isready", "-U", "postgres" ]
@@ -47,14 +53,14 @@ services:
4753
- "TZ=Asia/Shanghai"
4854
- "EXTERNAL_HOST=local-host.cn" # 对外提供访问的域名或者ip地址
4955
- "EXTERNAL_PORT=8848" # 对外提供访问的端口,修改了端口映射同时也需要修改这里.
50-
- "ADMIN_USER_PASSWORD=JetLinks.C0mmVn1ty" # admin用户的初始密码
56+
- "ADMIN_USER_PASSWORD=${ADMIN_USER_PASSWORD:-JetLinks.C0mmVn1ty}" # 未设置时沿用原有默认值,生产环境建议覆盖
5157
- "spring.r2dbc.url=r2dbc:postgresql://postgres:5432/jetlinks" #数据库连接地址
5258
- "spring.r2dbc.username=postgres"
53-
- "spring.r2dbc.password=JetLinks@postgres"
59+
- "spring.r2dbc.password=${POSTGRES_PASSWORD:-JetLinks@postgres}"
5460
- "spring.data.redis.host=redis"
5561
- "spring.data.redis.port=6379"
5662
- "file.manager.storage-base-path=/application/data/files"
57-
- "spring.data.redis.password=JetLinks@redis"
63+
- "spring.data.redis.password=${REDIS_PASSWORD:-JetLinks@redis}"
5864
- "logging.level.io.r2dbc=warn"
5965
- "logging.level.org.springframework.data=warn"
6066
- "logging.level.org.springframework=warn"
@@ -89,4 +95,3 @@ services:
8995
# environment:
9096
# API_BASE_PATH: "http://jetlinks:8848/"
9197
# TZ: Asia/Shanghai
92-

jetlinks-standalone/src/main/resources/application-default.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ TIMESCALEDB_FUNCTION_SCHEMA: public # 时序数据所用到相关函数所在的
2222
# elasticsearch相关配置
2323
ES_URIS: 127.0.0.1:9200
2424
ES_USERNAME: "" # elasticsearch 用户名
25-
ES_PASSWORD: "" # elasticsearch 密码
25+
ES_PASSWORD: "" # elasticsearch 密码

jetlinks-standalone/src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,4 +315,4 @@ trace:
315315
- "/device/*/decode"
316316
- "/java/TimeSeriesMessageWriterConnector/writeDeviceMessageToTs"
317317
- "/java/DeviceStatusMeasurementProvider/incrementOnline"
318-
- "/java/DeviceMessageMeasurementProvider/incrementMessage"
318+
- "/java/DeviceMessageMeasurementProvider/incrementMessage"

0 commit comments

Comments
 (0)