Skip to content

Commit 5c13f53

Browse files
authored
Merge pull request #57 from kongying-tavern/feat/img-host-alist
feat: 添加本地图床 Docker 服务
2 parents 4380682 + 1ffc017 commit 5c13f53

39 files changed

+1334
-35
lines changed

docker/.env.example

+35
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,41 @@ NACOS_PORT_GRPC_SERVER=9849
44
NACOS_USER=nacos
55
NACOS_PASS=nacos
66

7+
MINIO_PORT_API=9000
8+
MINIO_PORT_CONSOLE=9001
9+
MINIO_PORT_PROXY=9010
10+
# Notes:
11+
# - MinIO password should be more than 8 characters
12+
# - Root password is password to login console
13+
# - Non-root password is for foreign API access
14+
MINIO_ROOT_USER=admin
15+
MINIO_ROOT_PASS=pw12345678
16+
MINIO_BUCKET_IMAGE=images
17+
# Note: Access key length should be between 3 and 20
18+
MINIO_KEY=KYJG_UPLOAD_KEY
19+
MINIO_SECRET=KYJG_UPLOAD_SECRET
20+
21+
MINIO_IMG2WEBP_TZ=Asia/Shanghai
22+
MINIO_IMG2WEBP_QUALITY=80
23+
# MINIO_IMG2WEBP_MODE valid values:
24+
# 0: Upload .webp to minio
25+
# 1: Replace origin image with webp content
26+
# 2: Upload .webp to minio and delete origin image
27+
MINIO_IMG2WEBP_MODE=0
28+
29+
ALIST_PUID=0
30+
ALIST_PGID=0
31+
ALIST_UMASK=022
32+
ALIST_PORT=5244
33+
ALIST_ROOT_PASSWORD=12345678
34+
ALIST_USERNAME=upload
35+
ALIST_PASSWORD=87654321
36+
ALIST_MOUNT_PATH=/upload_imgs
37+
# Cache expiration in minutes
38+
ALIST_CACHE_EXPIRE=30
39+
40+
REDIS_PORT=6379
41+
742
PGSQL_PORT=5432
843
PGSQL_USER=genshin_map
944
PGSQL_PASS=genshin_map

docker/Makefile.toml

+48-13
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@ docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dataenv.yml
1818
'''
1919

2020
# dev: development environment
21-
[tasks.dev-build] # !! build dev api
21+
[tasks.dev] # !! build & daemon dev api
22+
dependencies = [
23+
{ name = "dev-build" },
24+
{ name = "dev-api" }
25+
]
26+
27+
[tasks.dev-build] # >!! build dev api
2228
script = '''
2329
#!@duckscript
2430
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
@@ -29,14 +35,14 @@ ENV_FILE = get_env ENV_FILE
2935
PROJECT_NAME = get_env PROJECT_NAME
3036
3137
# Generate datasource YAML
32-
yaml_ds_tpl = readfile ./config/application-datasource-tpl.yml
38+
yaml_ds_tpl = readfile ./config/api/application-datasource-tpl.yml
3339
yaml_ds_slots = json_parse --collection "[\"PGSQL_USER\", \"PGSQL_PASS\", \"PGSQL_DB\", \"PGSQL_SCHEMA\"]"
3440
yaml_ds_content = replace_env_value ${yaml_ds_tpl} ${yaml_ds_slots}
3541
release ${yaml_ds_slots}
3642
writefile ./cache/application-datasource.yml "${yaml_ds_content}"
3743
3844
# Generate nacos YAML
39-
yaml_nacos_tpl = readfile ./config/application-nacos-tpl.yml
45+
yaml_nacos_tpl = readfile ./config/api/application-nacos-tpl.yml
4046
yaml_nacos_slots = json_parse --collection "[\"NACOS_USER\", \"NACOS_PASS\"]"
4147
yaml_nacos_content = replace_env_value ${yaml_nacos_tpl} ${yaml_nacos_slots}
4248
release ${yaml_nacos_slots}
@@ -45,7 +51,7 @@ writefile ./cache/application-nacos.yml "${yaml_nacos_content}"
4551
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dev-build.yml"
4652
'''
4753

48-
[tasks.dev-api] # !! start dev api
54+
[tasks.dev-api] # >!! start dev api
4955
script = '''
5056
#!@duckscript
5157
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
@@ -59,14 +65,14 @@ docker_down "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dev-api.y
5965
docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dev-api.yml"
6066
'''
6167

62-
[tasks.dev] # !! build & daemon dev api
68+
# img-local: image local host
69+
[tasks.img-local] # !! build & run image local host
6370
dependencies = [
64-
{ name = "dev-build" },
65-
{ name = "dev-api" }
71+
{ name = "img-local-build" },
72+
{ name = "img-local-run" }
6673
]
6774

68-
# img-local: image local host
69-
[tasks.img-local-build] # !! build image local host
75+
[tasks.img-local-build] # >!! build image local host
7076
script = '''
7177
#!@duckscript
7278
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
@@ -79,7 +85,7 @@ PROJECT_NAME = get_env PROJECT_NAME
7985
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-local-build.yml"
8086
'''
8187

82-
[tasks.img-local-run] # !! run image local host
88+
[tasks.img-local-run] # >!! run image local host
8389
script = '''
8490
#!@duckscript
8591
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
@@ -93,12 +99,40 @@ docker_down "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-local
9399
docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-local-run.yml"
94100
'''
95101

96-
[tasks.img-local] # !! build & run image local host
102+
# img-alist: image alist host
103+
[tasks.img-alist] # !! build & run image alist host
97104
dependencies = [
98-
{ name = "img-local-build" },
99-
{ name = "img-local-run" }
105+
{ name = "img-alist-build" },
106+
{ name = "img-alist-run" }
100107
]
101108

109+
[tasks.img-alist-build] # >!! build image alist host
110+
script = '''
111+
#!@duckscript
112+
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
113+
prepare_envvars
114+
check_env
115+
116+
ENV_FILE = get_env ENV_FILE
117+
PROJECT_NAME = get_env PROJECT_NAME
118+
119+
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-build.yml"
120+
'''
121+
122+
[tasks.img-alist-run] # >!! run image alist host
123+
script = '''
124+
#!@duckscript
125+
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
126+
prepare_envvars
127+
check_env
128+
129+
ENV_FILE = get_env ENV_FILE
130+
PROJECT_NAME = get_env PROJECT_NAME
131+
132+
docker_down "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-run.yml"
133+
docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-run.yml"
134+
'''
135+
102136
# help
103137
[tasks.help]
104138
script = '''
@@ -119,6 +153,7 @@ println -c magenta " ${env_file}"
119153
120154
echo Available commands:
121155
print_help_commands ${cmds}
156+
release ${cmds}
122157
123158
echo What do you want? >>>
124159
cmd_name = read

docker/composer/docker-compose.dataenv.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ services:
1111
aliases:
1212
- pgsql.local
1313
environment:
14-
- POSTGRES_USER=${PGSQL_USER}
15-
- POSTGRES_PASSWORD=${PGSQL_PASS}
14+
POSTGRES_USER: ${PGSQL_USER}
15+
POSTGRES_PASSWORD: ${PGSQL_PASS}
1616
volumes:
1717
- ${DATA_DIR}/postgresql:/var/lib/postgresql/data
1818
ports:
@@ -34,7 +34,7 @@ services:
3434
aliases:
3535
- nacos.local
3636
environment:
37-
- MODE=standalone
37+
MODE: standalone
3838
ports:
3939
- ${NACOS_PORT_HTTP:-8848}:8848
4040
- ${NACOS_PORT_GRPC_CLIENT:-9848}:9848

docker/composer/docker-compose.dev-build.Dockerfile

+8-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ ADD genshin-map-generator genshin-map-generator
1010
ADD genshin-map-ability genshin-map-ability
1111
ADD genshin-map-api genshin-map-api
1212
ADD pom.xml pom.xml
13-
ADD docker/config docker/config
13+
ADD docker/config/apt/debian-bookworm.list /etc/apt/sources.list
14+
ADD docker/config/maven docker/config
1415
ADD docker/cache docker/cache
1516

1617
RUN --mount=type=cache,target=/root/.m2,rw \
@@ -27,17 +28,17 @@ FROM openjdk:11 AS api
2728

2829
WORKDIR /data
2930
COPY --from=builder /data/dist .
30-
ADD docker/config/apt.list /etc/apt/sources.list
31-
ADD docker/config/startup.sh startup.sh
32-
ADD docker/config/api-gateway.service /etc/systemd/system/genshin-map-ability-gateway.service
33-
ADD docker/config/api-core.service /etc/systemd/system/genshin-map-api-core.service
31+
ADD docker/config/apt/debian-bookworm.list /etc/apt/sources.list
32+
ADD docker/config/api/startup.sh startup.sh
33+
ADD docker/config/api/api-gateway.service /etc/systemd/system/genshin-map-ability-gateway.service
34+
ADD docker/config/api/api-core.service /etc/systemd/system/genshin-map-api-core.service
3435

3536
RUN ln -s /usr/local/openjdk-11/bin/java /bin/java && \
3637
chmod +x /data/startup.sh && \
3738
chmod +x /etc/systemd/system/genshin-map-ability-gateway.service && \
3839
chmod +x /etc/systemd/system/genshin-map-api-core.service && \
39-
apt update && \
40-
apt install -y systemctl
40+
apt-get update && \
41+
apt-get install -y systemctl
4142

4243
VOLUME ["/data/logs"]
4344
EXPOSE 8101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM mcr.microsoft.com/powershell
2+
3+
WORKDIR /data
4+
ADD docker/config/img-alist-builder/alist-init .
5+
6+
RUN chmod -R +x /data/*.ps1
7+
8+
VOLUME ["/data/record"]
9+
ENTRYPOINT ["pwsh", "/data/init.ps1"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM xhofe/alist
2+
3+
WORKDIR /alist
4+
ADD docker/config/img-alist-builder/alist .
5+
6+
RUN chmod -R +x /alist/*.sh
7+
8+
VOLUME ["/alist/data"]
9+
EXPOSE 5244
10+
ENTRYPOINT ["bash", "/alist/startup.sh"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Builder
2+
FROM golang:1.21-bookworm AS builder
3+
4+
WORKDIR /data
5+
ADD docker/config/img-alist-builder/minio-image-to-webp .
6+
7+
RUN go env -w GOPROXY=https://goproxy.io,direct && \
8+
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w"
9+
10+
# Runner
11+
FROM amd64/debian:bookworm AS runner
12+
WORKDIR /data
13+
COPY --from=builder /data/minio-image-to-webp ./minio-image-to-webp
14+
ENTRYPOINT ["/data/minio-image-to-webp"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM minio/mc:latest
2+
3+
WORKDIR /data
4+
ADD docker/config/img-alist-builder/minio-init .
5+
6+
RUN chmod +x /data/init.sh
7+
8+
VOLUME ["/data/record"]
9+
ENTRYPOINT ["bash", "/data/init.sh"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
FROM nginx:1.25-alpine
2+
3+
WORKDIR /data
4+
ADD docker/config/img-alist-builder/minio-proxy /etc/nginx
5+
6+
RUN mkdir -p ./log && \
7+
mkdir -p ./cache/proxy_temp_dir && \
8+
mkdir -p ./cache/proxy_cache_dir && \
9+
chown -R nginx:nginx .
10+
11+
VOLUME ["/data/cache", "/data/log"]
12+
EXPOSE 80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM minio/minio
2+
3+
WORKDIR /minio
4+
ADD docker/config/img-alist-builder/minio .
5+
6+
RUN chmod -R +x /minio/*.sh
7+
8+
VOLUME ["/data", "/root/.minio"]
9+
10+
EXPOSE 9000
11+
EXPOSE 9999
12+
13+
ENTRYPOINT ["bash", "/minio/startup.sh"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
services:
2+
# Main services
3+
minio:
4+
image: gsapi/minio
5+
build:
6+
context: ${PROJECT_BASE}
7+
dockerfile: docker/composer/docker-compose.img-alist-build.minio.Dockerfile
8+
minio-proxy:
9+
image: gsapi/minio-proxy
10+
build:
11+
context: ${PROJECT_BASE}
12+
dockerfile: docker/composer/docker-compose.img-alist-build.minio-proxy.Dockerfile
13+
minio-img2webp:
14+
image: gsapi/minio-img2webp
15+
build:
16+
context: ${PROJECT_BASE}
17+
dockerfile: docker/composer/docker-compose.img-alist-build.minio-img2webp.Dockerfile
18+
alist:
19+
image: gsapi/alist
20+
build:
21+
context: ${PROJECT_BASE}
22+
dockerfile: docker/composer/docker-compose.img-alist-build.alist.Dockerfile
23+
24+
# Initialization services
25+
minio-init:
26+
image: gsapi/minio-init
27+
build:
28+
context: ${PROJECT_BASE}
29+
dockerfile: docker/composer/docker-compose.img-alist-build.minio-init.Dockerfile
30+
alist-init:
31+
image: gsapi/alist-init
32+
build:
33+
context: ${PROJECT_BASE}
34+
dockerfile: docker/composer/docker-compose.img-alist-build.alist-init.Dockerfile

0 commit comments

Comments
 (0)