# Добавить проверки healthcheck в docker-compose.yml 
# Симптомы

Как мне добавить проверки healthcheck и зависимости в docker-compose.yml, чтобы работоспособность контейнеров проверялась автоматически средствами Docker?

# Решение

Для систем, установленных после 1 июля 2026 года эти проверки добавляются автоматически, в момент установки Swarmica.

Для систем, установленных ранее, необходимо выполнить следующие действия:

1.  Войдите на сервер Swarmica с правами `root`
2.  Зайдите в папку установки Swarmica, обычно `/root/swarmica/`:
    ```shell
    cd /root/swarmica
    ```
3.  Создайте резервную копию `.env`:
    ```shell
    cp .env{,.backup}
    ```
4.  Убедитесь, что есть следующие параметры в `.env`. Если их нет, то добавьте:
    ```shell
    DJANGO_ALLOWED_HOSTS=...,django
    INSECURE_HTTP_SERVER=1
    ```
5.  Создайте резервную копию `docker-compose.yml`:
    ```shell
    cp docker-compose.yml{,.backup}
    ```
6.  Отредактируйте сервис `postgres`, добавив `healthcheck`:
    ```yaml
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    ```
    Таким образом, вся секция `postgres` будет выглядеть примерно так:
    ```yaml
    postgres:
      image: postgres:14.2-bullseye
      restart: always
      container_name: swarmica-postgres
      shm_size: 1gb
      command: postgres -N 400 -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c track_activity_query_size=16384 -c wal_keep_size=512MB
      healthcheck:
        test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
        interval: 10s
        timeout: 5s
        retries: 5
        start_period: 10s
      volumes:
        - swarmica_postgres_data:/var/lib/postgresql/data:Z
        - swarmica_postgres_data_backups:/backups:z
        - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
      env_file:
        - .env
    ```
7.  Отредактируйте сервис `redis`, добавив `healthcheck`:
    ```yaml
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 5s
    ```
    Таким образом, вся секция должна выглядеть так:
    ```yaml
    redis:
      image: redis:6-bullseye
      restart: always
      container_name: swarmica-redis
      command: redis-server --save 20 1 --loglevel warning --timeout 86400 --maxclients 100000
      healthcheck:
        test: ["CMD", "redis-cli", "ping"]
        interval: 10s
        timeout: 5s
        retries: 5
        start_period: 5s
    ```
8.  Отредактируйте секцию сервиса `django`, изменив разделы `depends_on` и добавив `healthcheck` вот так:
    ```yaml
    django:
      ...rest of your config...
      depends_on:
        postgres:
          condition: service_healthy
        redis:
          condition: service_healthy
      healthcheck:
        test: ["CMD", "python", "-c", "import urllib.request; req = urllib.request.Request('http://127.0.0.1:5000/api/instance', headers={'Host': 'django'}); resp = urllib.request.urlopen(req, timeout=5); exit(0 if 200 <= resp.status < 400 else 1)"]
        interval: 15s
        timeout: 5s
        retries: 10
        start_period: 40s
      ...rest of your config...
    ```
9.  Далее, в сервисах `frontend`, `helpcenter`, `celeryworker`, `celerybeat`, `django-websocket`, `postfix`,`mcp`, `telegram`, `whatsapp_green`, `vk`, `max` (в тех, которые есть у вас в `docker-compose.yml` - в зависимости от настроек системы, у вас могут быть не все из них) измените секцию `depends_on` вот так:
    ```yaml
    depends_on:
      django:
        condition: service_healthy
    healthcheck:
          disable: true
    ```
10. Перезапустите сервисы:
    ```shell
    docker compose down && docker compose up -d
    ```