Files
teletypegames/docker-compose.yml
T
2026-03-02 19:57:11 +01:00

182 lines
5.2 KiB
YAML

services:
traefik:
image: traefik:latest
container_name: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "${TRAEFIK_WEB_PORT}:80"
- "${TRAEFIK_API_PORT}:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- proxy
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
DISABLE_REGISTRATION: "true"
ROOT_URL: "https://${GITEA_DOMAIN}"
ports:
- "${GITEA_SSH_PORT}:22"
volumes:
- ./data/gitea:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.gitea.rule=Host(`${GITEA_DOMAIN}`)"
- "traefik.http.routers.gitea.rule=Host(`${GITEA_DOMAIN}`) || Host(`${GITEA_TECHNICAL_DOMAIN}`)"
- "traefik.http.routers.gitea.entrypoints=web"
- "traefik.http.services.gitea.loadbalancer.server.port=3000"
- "traefik.docker.network=proxy"
networks:
- proxy
woodpecker-server:
image: woodpeckerci/woodpecker-server:next-2a445a6663-alpine
container_name: woodpecker-server
environment:
WOODPECKER_HOST: "https://${WOODPECKER_DOMAIN}"
WOODPECKER_OPEN: "true"
WOODPECKER_GITEA: "true"
WOODPECKER_GITEA_URL: "https://${GITEA_DOMAIN}"
WOODPECKER_GITEA_CLIENT: "6de1c095-dd30-497b-811e-278759f71eba"
WOODPECKER_GITEA_SECRET: ${GITEA_CLIENT_SECRET}
WOODPECKER_SERVER_ADDR: ":8000"
WOODPECKER_AGENT_SECRET: ${WOODPECKER_AGENT_SECRET}
volumes:
- ./data/woodpecker:/var/lib/woodpecker
labels:
- "traefik.enable=true"
- "traefik.http.routers.woodpecker.rule=Host(`${WOODPECKER_DOMAIN}`) || Host(`${WOODPECKER_TECHNICAL_DOMAIN}`)"
- "traefik.http.routers.woodpecker.entrypoints=web"
- "traefik.http.services.woodpecker.loadbalancer.server.port=8000"
- "traefik.docker.network=proxy"
networks:
- proxy
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:next-2a445a6663-alpine
container_name: woodpecker-agent
environment:
WOODPECKER_SERVER: "woodpecker-server:9000"
WOODPECKER_AGENT_SECRET: ${WOODPECKER_AGENT_SECRET}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- softwares:/softwares
networks:
- proxy
mysql:
image: mysql:8
container_name: mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: softwares
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- proxy
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
environment:
PMA_HOST: mysql
depends_on:
mysql:
condition: service_healthy
labels:
- "traefik.enable=true"
- "traefik.http.routers.phpmyadmin.rule=Host(`${PHPMYADMIN_DOMAIN}`)"
- "traefik.http.routers.phpmyadmin.entrypoints=web"
- "traefik.http.services.phpmyadmin.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
volumes:
- ./pma-config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
networks:
- proxy
frontend:
build:
context: ./apps/frontend
dockerfile: Dockerfile.development
container_name: frontend
environment:
- NODE_ENV=development
ports:
- "3000:3000"
volumes:
- ./apps/frontend:/app
- /app/node_modules
labels:
- "traefik.enable=true"
- "traefik.http.routers.frontend.rule=Host(`${WEBAPP_DOMAIN}`) && PathPrefix(`/`) && PathPrefixStrip(`/api`)==false"
- "traefik.http.routers.frontend.entrypoints=web"
- "traefik.http.services.frontend.loadbalancer.server.port=3000"
- "traefik.docker.network=proxy"
networks:
- proxy
catalog:
build:
context: ./apps/catalog
dockerfile: Dockerfile.development
container_name: catalog
environment:
- DB_USER=root
- DB_PASSWORD=${DB_PASSWORD}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=softwares
- UPDATE_SECRET=${UPDATE_SECRET}
- FILE_CONTAINER_PATH=/softwares
depends_on:
mysql:
condition: service_healthy
volumes:
- ./data/softwares:/softwares
- ./:/app
labels:
- "traefik.enable=true"
- "traefik.http.routers.catalog.rule=Host(`${WEBAPP_DOMAIN}`) && PathPrefix(`/api`)"
- "traefik.http.routers.catalog.entrypoints=web"
- "traefik.http.routers.catalog.middlewares=catalog-stripprefix@docker"
- "traefik.http.services.catalog.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.middlewares.catalog-stripprefix.stripprefix.prefixes=/api"
networks:
- proxy
droparea:
image: linuxserver/openssh-server
container_name: droparea
environment:
PUID: 1
PGID: 1
TZ: Europe/Budapest
SUDO_ACCESS: "false"
PASSWORD_ACCESS: "true"
USER_NAME: drop
USER_PASSWORD: ${DROP_PASSWORD}
volumes:
- ./data/softwares:/home/drop
ports:
- "${DROPAREA_SSH_PORT}:2222"
networks:
- proxy
volumes:
gitea:
woodpecker:
mysql-data:
softwares:
networks:
proxy: