Files
phpipam-outline-sync/docker-compose.portainer.yml
T
2026-07-24 08:38:04 +00:00

49 lines
2.0 KiB
YAML

services:
phpipam-outline-sync:
image: python:3.12-slim
container_name: phpipam-outline-sync
restart: unless-stopped
working_dir: /code
command: sh -c "pip install --no-cache-dir -r requirements.txt && uvicorn app.main:app --host 0.0.0.0 --port 8000"
volumes:
# Hier landet der Projektordner (app/ + requirements.txt), den du im
# nächsten Schritt auf den Server überträgst. Pfad bei Bedarf anpassen
# oder als Portainer-Stack-Variable APP_DIR überschreiben.
- ${APP_DIR:-/opt/stacks/phpipam-outline-sync}:/code
# Cache, damit pip die Pakete nicht bei jedem Neustart neu herunterlädt
- pip_cache:/root/.cache/pip
ports:
- "8000:8000"
environment:
PHPIPAM_BASE_URL: ${PHPIPAM_BASE_URL}
PHPIPAM_APP_ID: ${PHPIPAM_APP_ID}
PHPIPAM_APP_TOKEN: ${PHPIPAM_APP_TOKEN:-}
PHPIPAM_USERNAME: ${PHPIPAM_USERNAME:-}
PHPIPAM_PASSWORD: ${PHPIPAM_PASSWORD:-}
PHPIPAM_VERIFY_SSL: ${PHPIPAM_VERIFY_SSL:-true}
OUTLINE_BASE_URL: ${OUTLINE_BASE_URL}
OUTLINE_API_TOKEN: ${OUTLINE_API_TOKEN}
OUTLINE_COLLECTION_ID: ${OUTLINE_COLLECTION_ID}
OUTLINE_PARENT_DOCUMENT_ID: ${OUTLINE_PARENT_DOCUMENT_ID:-}
OUTLINE_VERIFY_SSL: ${OUTLINE_VERIFY_SSL:-true}
SYNC_DRY_RUN: ${SYNC_DRY_RUN:-false}
SYNC_SCHEDULE_ENABLED: ${SYNC_SCHEDULE_ENABLED:-true}
SYNC_SCHEDULE_CRON: ${SYNC_SCHEDULE_CRON:-0 * * * *}
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=3)"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
# Alternative statt Bind-Mount oben, falls du keinen direkten
# Dateisystemzugriff auf den Docker-Host hast und Dateien stattdessen
# über Portainers Volume-Browser hochladen willst:
# volumes:
# - app_code:/code
# - pip_cache:/root/.cache/pip
volumes:
pip_cache:
# app_code: # nur nötig für die Named-Volume-Alternative oben