diff --git a/public/templates/minio.png b/public/templates/minio.png new file mode 100644 index 000000000..38f6ff9f0 Binary files /dev/null and b/public/templates/minio.png differ diff --git a/templates/minio/docker-compose.yml b/templates/minio/docker-compose.yml new file mode 100644 index 000000000..25701ea89 --- /dev/null +++ b/templates/minio/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.8' +services: + minio: + image: minio/minio + ports: + - ${MINIO_API_PORT} + - ${MINIO_DASHBOARD_PORT} + volumes: + - minio-data:/data + environment: + - MINIO_ROOT_USER=minioadmin + - MINIO_ROOT_PASSWORD=minioadmin123 + command: server /data --console-address ":9001" + networks: + - dokploy-network + labels: + - traefik.enable=true + - traefik.http.routers.${HASH}.service=${HASH} + - traefik.http.routers.${HASH}.rule=Host(`${MINIO_DASHBOARD_HOST}`) + - traefik.http.services.${HASH}.loadbalancer.server.port=${MINIO_DASHBOARD_PORT} + # API router and service + - traefik.http.routers.${HASH}-api.service=${HASH}-api + - traefik.http.routers.${HASH}-api.rule=Host(`${MINIO_API_HOST}`) + - traefik.http.services.${HASH}-api.loadbalancer.server.port=${MINIO_API_PORT} + +volumes: + minio-data: + +networks: + dokploy-network: + external: true diff --git a/templates/minio/index.ts b/templates/minio/index.ts new file mode 100644 index 000000000..aa45c6696 --- /dev/null +++ b/templates/minio/index.ts @@ -0,0 +1,23 @@ +import { + generateHash, + generateRandomDomain, + type Template, + type Schema, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainServiceHash = generateHash(schema.projectName); + const randomDomain = generateRandomDomain(schema); + const apiDomain = generateRandomDomain(schema); + const envs = [ + `MINIO_DASHBOARD_HOST=${randomDomain}`, + "MINIO_DASHBOARD_PORT=9001", + `MINIO_API_HOST=${apiDomain}`, + "MINIO_API_PORT=9000", + `HASH=${mainServiceHash}`, + ]; + + return { + envs, + }; +} diff --git a/templates/templates.ts b/templates/templates.ts index e94bf994a..128f394dd 100644 --- a/templates/templates.ts +++ b/templates/templates.ts @@ -274,4 +274,19 @@ export const templates: TemplateData[] = [ tags: ["chat"], load: () => import("./rocketchat/index").then((m) => m.generate), }, + { + id: "minio", + name: "Minio", + description: + "Minio is an open source object storage server compatible with Amazon S3 cloud storage service.", + logo: "minio.png", + version: "latest", + links: { + github: "https://github.com/minio/minio", + website: "https://minio.io/", + docs: "https://docs.minio.io/", + }, + tags: ["storage"], + load: () => import("./minio/index").then((m) => m.generate), + }, ];