# Tools stack — generated by Ansible # Do not edit manually; re-run ansible-playbook playbooks/tools.yml networks: outline-internal: driver: bridge internal: true volumes: outline_db_data: outline_redis_data: services: # ── Outline wiki ──────────────────────────────────────────────────────────── outline: image: {{ outline_image }} container_name: outline restart: unless-stopped env_file: .env networks: - outline-internal ports: # Exposed only to main Traefik (access controlled by UFW) - "{{ ip_tools }}:3000:3000" depends_on: outline-db: condition: service_healthy outline-redis: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3000/_health"] interval: 30s timeout: 5s retries: 3 logging: driver: json-file options: max-size: "10m" max-file: "3" outline-db: image: {{ outline_db_image }} container_name: outline-db restart: unless-stopped environment: POSTGRES_DB: outline POSTGRES_USER: outline POSTGRES_PASSWORD: ${OUTLINE_DB_PASSWORD} networks: - outline-internal volumes: - outline_db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U outline"] interval: 10s timeout: 5s retries: 5 logging: driver: json-file options: max-size: "10m" max-file: "3" outline-redis: image: {{ outline_redis_image }} container_name: outline-redis restart: unless-stopped networks: - outline-internal volumes: - outline_redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 logging: driver: json-file options: max-size: "10m" max-file: "3"