Запуск iTop через Traefik с Docker Compose

iTop — ITSM и CMDB в духе ITIL: инциденты, запросы, изменения, проблемы, известные ошибки, конфигурационные единицы. Ниже — свой образ Apache + PHP 8.3, MariaDB и доступ по HTTPS через Traefik.

Нужны рабочий Traefik и сеть traefik_network (в compose ниже — как traefik_default, если у вас так называется сеть Traefik, подставьте своё имя).

1. Каталог и .env

Код iTop кладётся в ./web (клон/распаковка дистрибутива). Данные — в ./data.

mkdir -p itop/data/{conf,extensions,mysql}
cd itop
# web/ — исходники iTop
cat > .env <<'EOF'
DOMAIN=(yourdomain)
ITOP_DB_PWD=(youpassword)
EOF

Хост сервиса: itop.(yourdomain) → в labels Host(\itop.${DOMAIN}`)`.

2. Образ

Минимальный Dockerfile (Apache + PHP 8.3 и расширения iTop: mysqli, gd, soap, zip, ldap, apcu; graphviz для схем):

FROM php:8.3-apache
COPY --from=mlocati/php-extension-installer:latest /usr/bin/install-php-extensions /usr/local/bin/
RUN apt-get update \
    && apt-get install -y --no-install-recommends graphviz unzip mariadb-client \
    && install-php-extensions apcu gd ldap mysqli soap zip \
    && apt-get clean && rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite headers \
    && mkdir -p /var/lib/php/sessions \
    && chown www-data:www-data /var/lib/php/sessions \
    && echo "session.save_path = /var/lib/php/sessions" > /usr/local/etc/php/conf.d/session.ini
WORKDIR /var/www/html
EXPOSE 80
CMD ["apache2-foreground"]

Код монтируется томом — образ без вшитого iTop, удобно обновлять web/.

3. docker-compose.yml

services:
  itop:
    build: .
    container_name: itop-web
    image: itop:local
    restart: unless-stopped
    volumes:
      - ./web:/var/www/html
      - ./data/conf:/var/www/html/conf
      - ./data/extensions:/var/www/html/extensions
    depends_on:
      mariadb:
        condition: service_healthy
    # ports:   # только для локального запуска без Traefik
    #   - "8000:80"
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.itop_https.redirectscheme.scheme=https
      - traefik.http.routers.itop.entrypoints=web
      - traefik.http.routers.itop.middlewares=itop_https@docker
      - traefik.http.routers.itop.rule=Host(`itop.(yourdomain)`)
      - traefik.http.routers.itop_https.entrypoints=websecure
      - traefik.http.routers.itop_https.rule=Host(`itop.(yourdomain)`)
      - traefik.http.routers.itop_https.tls=true
      - traefik.http.routers.itop_https.tls.certresolver=le
      - traefik.http.services.itop.loadbalancer.server.port=80
    networks:
      - traefik_network
      - internal

  mariadb:
    image: mariadb:lts
    container_name: itop-mariadb
    restart: unless-stopped
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: itop
      MYSQL_USER: itop
      MYSQL_PASSWORD: ${ITOP_DB_PWD:-itop}
      MARIADB_RANDOM_ROOT_PASSWORD: "1"
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - internal

networks:
  traefik_network:
    external: true
  internal:
    driver: bridge

⚠️ Замените (yourdomain) / пароль БД. Если labels берут ${DOMAIN} из .env, запускайте compose из каталога с этим файлом: docker compose --env-file .env up -d.

4. Запуск и мастер

docker compose build
docker compose up -d

Откройте https://itop.(yourdomain)/setup и пройдите мастер:

  • сервер БД: mariadb (имя сервиса);
  • база / пользователь: itop;
  • пароль: из .env.

После установки вход: https://itop.(yourdomain). Чтобы убрать предупреждение о правах на конфиг:

docker compose exec itop chmod 440 /var/www/html/conf/production/config-itop.php

5. Замечания

  • Бэкапьте ./data/mysql, ./data/conf и при необходимости ./data/extensions.
  • Для SSO (например Keycloak) в образе часто нужен отдельный Apache conf на callback-путь расширения — см. документацию вашего модуля аутентификации.
  • Локально без Traefik: раскомментируйте ports: "8000:80", уберите labels/сеть Traefik.
  • Не публикуйте MariaDB наружу.

Итог: iTop на своём PHP-образе + MariaDB за HTTPS, готовый к заявкам и CMDB на домашнем или офисном стенде.