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
# Tools and services for development work
# Service Access URLs:
# - GitLab: https://gitlab.${DOMAIN}
# - pgAdmin: https://pgadmin.${DOMAIN}
# - Jupyter: https://jupyter.${DOMAIN}
services:
# 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)
gitlab:
image: gitlab/gitlab-ce:16.7.0-ce.0
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: unless-stopped
networks:
- homelab-network
ports:
- "8929:80" # Web UI
- "2222:22" # SSH
- traefik-network
volumes:
- ./config/gitlab/config:/etc/gitlab
- gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://${SERVER_IP}:8929'
external_url 'https://gitlab.${DOMAIN}'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
gitlab_rails['time_zone'] = '${TZ:-America/New_York}'
shm_size: '256m'
@@ -33,6 +36,12 @@ services:
labels:
- "homelab.category=development"
- "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
# Access at: localhost:5432 from other containers
@@ -77,16 +86,15 @@ services:
- "homelab.description=Redis in-memory data store"
# pgAdmin - PostgreSQL management UI
# Access at: http://server-ip:5050
# Access at: https://pgadmin.${DOMAIN}
pgadmin:
image: dpage/pgadmin4:8.2
image: dpage/pgadmin4:latest
container_name: pgadmin
restart: unless-stopped
networks:
- database-network
- homelab-network
ports:
- "5050:80"
- traefik-network
volumes:
- pgadmin-data:/var/lib/pgadmin
environment:
@@ -98,18 +106,23 @@ services:
labels:
- "homelab.category=development"
- "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
# Access at: http://server-ip:8888
# Access at: https://jupyter.${DOMAIN}
# Token displayed in logs on first start
jupyter:
image: jupyter/scipy-notebook:2023-12-25
image: jupyter/scipy-notebook:latest
container_name: jupyter
restart: unless-stopped
networks:
- homelab-network
ports:
- "8888:8888"
- traefik-network
volumes:
- ./config/jupyter:/home/jovyan/work
environment:
@@ -128,6 +141,12 @@ services:
labels:
- "homelab.category=development"
- "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:
gitlab-logs:
@@ -146,3 +165,5 @@ networks:
driver: bridge
homelab-network:
external: true
traefik-network:
external: true