Skip to content

Commit

Permalink
Merge pull request #57 from kongying-tavern/feat/img-host-alist
Browse files Browse the repository at this point in the history
feat: 添加本地图床 Docker 服务
  • Loading branch information
boxsnake authored Dec 27, 2023
2 parents 4380682 + 1ffc017 commit 5c13f53
Show file tree
Hide file tree
Showing 39 changed files with 1,334 additions and 35 deletions.
35 changes: 35 additions & 0 deletions docker/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,41 @@ NACOS_PORT_GRPC_SERVER=9849
NACOS_USER=nacos
NACOS_PASS=nacos

MINIO_PORT_API=9000
MINIO_PORT_CONSOLE=9001
MINIO_PORT_PROXY=9010
# Notes:
# - MinIO password should be more than 8 characters
# - Root password is password to login console
# - Non-root password is for foreign API access
MINIO_ROOT_USER=admin
MINIO_ROOT_PASS=pw12345678
MINIO_BUCKET_IMAGE=images
# Note: Access key length should be between 3 and 20
MINIO_KEY=KYJG_UPLOAD_KEY
MINIO_SECRET=KYJG_UPLOAD_SECRET

MINIO_IMG2WEBP_TZ=Asia/Shanghai
MINIO_IMG2WEBP_QUALITY=80
# MINIO_IMG2WEBP_MODE valid values:
# 0: Upload .webp to minio
# 1: Replace origin image with webp content
# 2: Upload .webp to minio and delete origin image
MINIO_IMG2WEBP_MODE=0

ALIST_PUID=0
ALIST_PGID=0
ALIST_UMASK=022
ALIST_PORT=5244
ALIST_ROOT_PASSWORD=12345678
ALIST_USERNAME=upload
ALIST_PASSWORD=87654321
ALIST_MOUNT_PATH=/upload_imgs
# Cache expiration in minutes
ALIST_CACHE_EXPIRE=30

REDIS_PORT=6379

PGSQL_PORT=5432
PGSQL_USER=genshin_map
PGSQL_PASS=genshin_map
Expand Down
61 changes: 48 additions & 13 deletions docker/Makefile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,13 @@ docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dataenv.yml
'''

# dev: development environment
[tasks.dev-build] # !! build dev api
[tasks.dev] # !! build & daemon dev api
dependencies = [
{ name = "dev-build" },
{ name = "dev-api" }
]

[tasks.dev-build] # >!! build dev api
script = '''
#!@duckscript
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
Expand All @@ -29,14 +35,14 @@ ENV_FILE = get_env ENV_FILE
PROJECT_NAME = get_env PROJECT_NAME
# Generate datasource YAML
yaml_ds_tpl = readfile ./config/application-datasource-tpl.yml
yaml_ds_tpl = readfile ./config/api/application-datasource-tpl.yml
yaml_ds_slots = json_parse --collection "[\"PGSQL_USER\", \"PGSQL_PASS\", \"PGSQL_DB\", \"PGSQL_SCHEMA\"]"
yaml_ds_content = replace_env_value ${yaml_ds_tpl} ${yaml_ds_slots}
release ${yaml_ds_slots}
writefile ./cache/application-datasource.yml "${yaml_ds_content}"
# Generate nacos YAML
yaml_nacos_tpl = readfile ./config/application-nacos-tpl.yml
yaml_nacos_tpl = readfile ./config/api/application-nacos-tpl.yml
yaml_nacos_slots = json_parse --collection "[\"NACOS_USER\", \"NACOS_PASS\"]"
yaml_nacos_content = replace_env_value ${yaml_nacos_tpl} ${yaml_nacos_slots}
release ${yaml_nacos_slots}
Expand All @@ -45,7 +51,7 @@ writefile ./cache/application-nacos.yml "${yaml_nacos_content}"
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.dev-build.yml"
'''

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

[tasks.dev] # !! build & daemon dev api
# img-local: image local host
[tasks.img-local] # !! build & run image local host
dependencies = [
{ name = "dev-build" },
{ name = "dev-api" }
{ name = "img-local-build" },
{ name = "img-local-run" }
]

# img-local: image local host
[tasks.img-local-build] # !! build image local host
[tasks.img-local-build] # >!! build image local host
script = '''
#!@duckscript
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
Expand All @@ -79,7 +85,7 @@ PROJECT_NAME = get_env PROJECT_NAME
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-local-build.yml"
'''

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

[tasks.img-local] # !! build & run image local host
# img-alist: image alist host
[tasks.img-alist] # !! build & run image alist host
dependencies = [
{ name = "img-local-build" },
{ name = "img-local-run" }
{ name = "img-alist-build" },
{ name = "img-alist-run" }
]

[tasks.img-alist-build] # >!! build image alist host
script = '''
#!@duckscript
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
prepare_envvars
check_env
ENV_FILE = get_env ENV_FILE
PROJECT_NAME = get_env PROJECT_NAME
docker_build "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-build.yml"
'''

[tasks.img-alist-run] # >!! run image alist host
script = '''
#!@duckscript
!include_files ./makefile/util.env.ds ./makefile/util.docker.ds
prepare_envvars
check_env
ENV_FILE = get_env ENV_FILE
PROJECT_NAME = get_env PROJECT_NAME
docker_down "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-run.yml"
docker_up "${ENV_FILE}" "${PROJECT_NAME}" "./composer/docker-compose.img-alist-run.yml"
'''

# help
[tasks.help]
script = '''
Expand All @@ -119,6 +153,7 @@ println -c magenta " ${env_file}"
echo Available commands:
print_help_commands ${cmds}
release ${cmds}
echo What do you want? >>>
cmd_name = read
Expand Down
6 changes: 3 additions & 3 deletions docker/composer/docker-compose.dataenv.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ services:
aliases:
- pgsql.local
environment:
- POSTGRES_USER=${PGSQL_USER}
- POSTGRES_PASSWORD=${PGSQL_PASS}
POSTGRES_USER: ${PGSQL_USER}
POSTGRES_PASSWORD: ${PGSQL_PASS}
volumes:
- ${DATA_DIR}/postgresql:/var/lib/postgresql/data
ports:
Expand All @@ -34,7 +34,7 @@ services:
aliases:
- nacos.local
environment:
- MODE=standalone
MODE: standalone
ports:
- ${NACOS_PORT_HTTP:-8848}:8848
- ${NACOS_PORT_GRPC_CLIENT:-9848}:9848
Expand Down
15 changes: 8 additions & 7 deletions docker/composer/docker-compose.dev-build.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ ADD genshin-map-generator genshin-map-generator
ADD genshin-map-ability genshin-map-ability
ADD genshin-map-api genshin-map-api
ADD pom.xml pom.xml
ADD docker/config docker/config
ADD docker/config/apt/debian-bookworm.list /etc/apt/sources.list
ADD docker/config/maven docker/config
ADD docker/cache docker/cache

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

WORKDIR /data
COPY --from=builder /data/dist .
ADD docker/config/apt.list /etc/apt/sources.list
ADD docker/config/startup.sh startup.sh
ADD docker/config/api-gateway.service /etc/systemd/system/genshin-map-ability-gateway.service
ADD docker/config/api-core.service /etc/systemd/system/genshin-map-api-core.service
ADD docker/config/apt/debian-bookworm.list /etc/apt/sources.list
ADD docker/config/api/startup.sh startup.sh
ADD docker/config/api/api-gateway.service /etc/systemd/system/genshin-map-ability-gateway.service
ADD docker/config/api/api-core.service /etc/systemd/system/genshin-map-api-core.service

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

VOLUME ["/data/logs"]
EXPOSE 8101
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM mcr.microsoft.com/powershell

WORKDIR /data
ADD docker/config/img-alist-builder/alist-init .

RUN chmod -R +x /data/*.ps1

VOLUME ["/data/record"]
ENTRYPOINT ["pwsh", "/data/init.ps1"]
10 changes: 10 additions & 0 deletions docker/composer/docker-compose.img-alist-build.alist.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM xhofe/alist

WORKDIR /alist
ADD docker/config/img-alist-builder/alist .

RUN chmod -R +x /alist/*.sh

VOLUME ["/alist/data"]
EXPOSE 5244
ENTRYPOINT ["bash", "/alist/startup.sh"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Builder
FROM golang:1.21-bookworm AS builder

WORKDIR /data
ADD docker/config/img-alist-builder/minio-image-to-webp .

RUN go env -w GOPROXY=https://goproxy.io,direct && \
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w"

# Runner
FROM amd64/debian:bookworm AS runner
WORKDIR /data
COPY --from=builder /data/minio-image-to-webp ./minio-image-to-webp
ENTRYPOINT ["/data/minio-image-to-webp"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM minio/mc:latest

WORKDIR /data
ADD docker/config/img-alist-builder/minio-init .

RUN chmod +x /data/init.sh

VOLUME ["/data/record"]
ENTRYPOINT ["bash", "/data/init.sh"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM nginx:1.25-alpine

WORKDIR /data
ADD docker/config/img-alist-builder/minio-proxy /etc/nginx

RUN mkdir -p ./log && \
mkdir -p ./cache/proxy_temp_dir && \
mkdir -p ./cache/proxy_cache_dir && \
chown -R nginx:nginx .

VOLUME ["/data/cache", "/data/log"]
EXPOSE 80
13 changes: 13 additions & 0 deletions docker/composer/docker-compose.img-alist-build.minio.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM minio/minio

WORKDIR /minio
ADD docker/config/img-alist-builder/minio .

RUN chmod -R +x /minio/*.sh

VOLUME ["/data", "/root/.minio"]

EXPOSE 9000
EXPOSE 9999

ENTRYPOINT ["bash", "/minio/startup.sh"]
34 changes: 34 additions & 0 deletions docker/composer/docker-compose.img-alist-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
services:
# Main services
minio:
image: gsapi/minio
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.minio.Dockerfile
minio-proxy:
image: gsapi/minio-proxy
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.minio-proxy.Dockerfile
minio-img2webp:
image: gsapi/minio-img2webp
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.minio-img2webp.Dockerfile
alist:
image: gsapi/alist
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.alist.Dockerfile

# Initialization services
minio-init:
image: gsapi/minio-init
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.minio-init.Dockerfile
alist-init:
image: gsapi/alist-init
build:
context: ${PROJECT_BASE}
dockerfile: docker/composer/docker-compose.img-alist-build.alist-init.Dockerfile
Loading

0 comments on commit 5c13f53

Please sign in to comment.