Update development stack with proper images and Traefik configuration

- Update GitLab to latest image and configure for HTTPS via Traefik
- Update pgAdmin to latest image and add Traefik routing
- Update Jupyter to latest image and add Traefik routing
- Add traefik-network to all web-accessible services
- Configure unique hostnames: gitlab, pgadmin, jupyter
- Remove direct port exposure in favor of Traefik reverse proxy
- Update service descriptions and access URLs
This commit is contained in:
2026-01-15 22:29:32 -05:00
parent c7675dcf06
commit 0c9d7e1457

View File

@@ -1,26 +1,29 @@
# Development Services # Development Services
# Tools and services for development work # Tools and services for development work
# Service Access URLs:
# - GitLab: https://gitlab.${DOMAIN}
# - pgAdmin: https://pgadmin.${DOMAIN}
# - Jupyter: https://jupyter.${DOMAIN}
services: services:
# GitLab CE - Self-hosted Git repository manager # GitLab CE - Self-hosted Git repository manager
# Access at: http://server-ip:8929 # Access at: https://gitlab.${DOMAIN}
# Note: Requires significant resources (4GB+ RAM recommended) # Note: Requires significant resources (4GB+ RAM recommended)
gitlab: gitlab:
image: gitlab/gitlab-ce:16.7.0-ce.0 image: gitlab/gitlab-ce:latest
container_name: gitlab container_name: gitlab
restart: unless-stopped restart: unless-stopped
networks: networks:
- homelab-network - homelab-network
ports: - traefik-network
- "8929:80" # Web UI
- "2222:22" # SSH
volumes: volumes:
- ./config/gitlab/config:/etc/gitlab - ./config/gitlab/config:/etc/gitlab
- gitlab-logs:/var/log/gitlab - gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab - gitlab-data:/var/opt/gitlab
environment: environment:
GITLAB_OMNIBUS_CONFIG: | GITLAB_OMNIBUS_CONFIG: |
external_url 'http://${SERVER_IP}:8929' external_url 'https://gitlab.${DOMAIN}'
gitlab_rails['gitlab_shell_ssh_port'] = 2222 gitlab_rails['gitlab_shell_ssh_port'] = 2222
gitlab_rails['time_zone'] = '${TZ:-America/New_York}' gitlab_rails['time_zone'] = '${TZ:-America/New_York}'
shm_size: '256m' shm_size: '256m'
@@ -33,6 +36,12 @@ services:
labels: labels:
- "homelab.category=development" - "homelab.category=development"
- "homelab.description=Self-hosted Git repository manager" - "homelab.description=Self-hosted Git repository manager"
- "traefik.enable=true"
- "traefik.http.routers.gitlab.rule=Host(`gitlab.${DOMAIN}`)"
- "traefik.http.routers.gitlab.entrypoints=websecure"
- "traefik.http.routers.gitlab.tls.certresolver=letsencrypt"
- "traefik.http.routers.gitlab.middlewares=authelia@docker"
- "traefik.http.services.gitlab.loadbalancer.server.port=80"
# PostgreSQL - Database for development # PostgreSQL - Database for development
# Access at: localhost:5432 from other containers # Access at: localhost:5432 from other containers
@@ -77,16 +86,15 @@ services:
- "homelab.description=Redis in-memory data store" - "homelab.description=Redis in-memory data store"
# pgAdmin - PostgreSQL management UI # pgAdmin - PostgreSQL management UI
# Access at: http://server-ip:5050 # Access at: https://pgadmin.${DOMAIN}
pgadmin: pgadmin:
image: dpage/pgadmin4:8.2 image: dpage/pgadmin4:latest
container_name: pgadmin container_name: pgadmin
restart: unless-stopped restart: unless-stopped
networks: networks:
- database-network - database-network
- homelab-network - homelab-network
ports: - traefik-network
- "5050:80"
volumes: volumes:
- pgadmin-data:/var/lib/pgadmin - pgadmin-data:/var/lib/pgadmin
environment: environment:
@@ -98,18 +106,23 @@ services:
labels: labels:
- "homelab.category=development" - "homelab.category=development"
- "homelab.description=PostgreSQL administration UI" - "homelab.description=PostgreSQL administration UI"
- "traefik.enable=true"
- "traefik.http.routers.pgadmin.rule=Host(`pgadmin.${DOMAIN}`)"
- "traefik.http.routers.pgadmin.entrypoints=websecure"
- "traefik.http.routers.pgadmin.tls.certresolver=letsencrypt"
- "traefik.http.routers.pgadmin.middlewares=authelia@docker"
- "traefik.http.services.pgadmin.loadbalancer.server.port=80"
# Jupyter Lab - Interactive computing notebooks # Jupyter Lab - Interactive computing notebooks
# Access at: http://server-ip:8888 # Access at: https://jupyter.${DOMAIN}
# Token displayed in logs on first start # Token displayed in logs on first start
jupyter: jupyter:
image: jupyter/scipy-notebook:2023-12-25 image: jupyter/scipy-notebook:latest
container_name: jupyter container_name: jupyter
restart: unless-stopped restart: unless-stopped
networks: networks:
- homelab-network - homelab-network
ports: - traefik-network
- "8888:8888"
volumes: volumes:
- ./config/jupyter:/home/jovyan/work - ./config/jupyter:/home/jovyan/work
environment: environment:
@@ -128,6 +141,12 @@ services:
labels: labels:
- "homelab.category=development" - "homelab.category=development"
- "homelab.description=Jupyter Lab for data science and ML" - "homelab.description=Jupyter Lab for data science and ML"
- "traefik.enable=true"
- "traefik.http.routers.jupyter.rule=Host(`jupyter.${DOMAIN}`)"
- "traefik.http.routers.jupyter.entrypoints=websecure"
- "traefik.http.routers.jupyter.tls.certresolver=letsencrypt"
- "traefik.http.routers.jupyter.middlewares=authelia@docker"
- "traefik.http.services.jupyter.loadbalancer.server.port=8888"
volumes: volumes:
gitlab-logs: gitlab-logs:
@@ -146,3 +165,5 @@ networks:
driver: bridge driver: bridge
homelab-network: homelab-network:
external: true external: true
traefik-network:
external: true