From f017f8890161dd42b15e169529bee291c4fe40d7 Mon Sep 17 00:00:00 2001 From: j4n Date: Mon, 16 Feb 2026 20:13:45 +0100 Subject: [PATCH] docker: docs: replace outdated Russian Docker docs with redirect to EN --- docs/DOCKER_INSTALLATION_RU.md | 175 +++------------------------------ 1 file changed, 16 insertions(+), 159 deletions(-) diff --git a/docs/DOCKER_INSTALLATION_RU.md b/docs/DOCKER_INSTALLATION_RU.md index fef0c29b..bf60bc0c 100644 --- a/docs/DOCKER_INSTALLATION_RU.md +++ b/docs/DOCKER_INSTALLATION_RU.md @@ -1,174 +1,31 @@ -# Известные проблемы и ограничения -- Chatmail будет переустановлен при каждом запуске контейнера (при первом - долго, при последующих быстрее). Так устроен изначальный установщик, потому что он не был заточен под docker. В конце документации [представлено](#фиксирование-версии-chatmail) возможное решение -- Требуется настроенный в системе cgroups v2. Работа с cgroups v1 не тестировалась. -- Да, понятно дело что systemd использовать в контейнере костыль и надо это всё разнести на несколько сервисов, но это MVP и в первом приближении оказалось сделать проще так, чем переписывать всю систему развертывания. -- docker образ подходит только для amd64, если нужно запустить на другой архитектуре, попробуйте изменить dockerfile (конкретно ту часть что ответсвенна за установку dovecot) +# Docker Installation (Русский) -# Docker installation -Здесь представлена инструкция по установке chatmail с помощью docker-compose. +> **Этот документ устарел.** Актуальная документация по установке Docker доступна в +> [DOCKER_INSTALLATION_EN.md](DOCKER_INSTALLATION_EN.md). +> +> This document is outdated. See [DOCKER_INSTALLATION_EN.md](DOCKER_INSTALLATION_EN.md) for current Docker installation instructions. -## Предварительная настройка -We use `chat.example.org` as the chatmail domain in the following steps. -Please substitute it with your own domain. +## Краткая инструкция -1. Настройте начальные записи DNS.Ниже приведен пример в привычном формате файла зоны BIND сTTL 1 час (3600 секунд). - Замените домен и IP-адреса на свои. +1. Установите Docker Compose v2 (`docker compose`, не `docker-compose`). - ``` - chat.example.com. 3600 IN A 198.51.100.5 - chat.example.com. 3600 IN AAAA 2001:db8::5 - www.chat.example.com. 3600 IN CNAME chat.example.com. - mta-sts.chat.example.com. 3600 IN CNAME chat.example.com. - ``` - -2. Склонируйте репозиторий на свой сервер. - - ```shell - git clone https://github.com/chatmail/relay - cd relay - ``` - -## Installation - -1. Настроить параметры ядра, потому что внутри контейнера их нельзя изменить, а конкретно `fs.inotify.max_user_instances` и `fs.inotify.max_user_watches`. Для этого выполнить следующее: -```shell -echo "fs.inotify.max_user_instances=65536" | sudo tee -a /etc/sysctl.d/99-inotify.conf -echo "fs.inotify.max_user_watches=65536" | sudo tee -a /etc/sysctl.d/99-inotify.conf -sudo sysctl --system -``` - -2. Скопировать `./docker/example.env` и переименовать в `.env`. Здесь хранятся переменные, которые используются в `docker-compose.yaml`. -```shell -cp ./docker/example.env .env -``` - -3. Настроить переменные окружения в `.env` файле. Эти переменные используются в `docker-compose.yaml` файле, чтобы передавать повторяющиеся значения. - Ниже перечислен список переменных учавствующих при развертывании: - -- `MAIL_DOMAIN` - Доменное имя будущего сервера. (required) -- `DEBUG_COMMANDS_ENABLED` - Выполнить debug команды перед установкой. (default: `false`) -- `FORCE_REINIT_INI_FILE` - Пересоздавать ini файл конфигурации при запуске. (default: `false`) -- `USE_FOREIGN_CERT_MANAGER` - Использовать сторонний менеджер сертификатов. (default: `false`) -- `RECREATE_VENV` - Пересоздать виртуальное окружение (venv). Если выставлено `true`, то окружение будет пересоздано при запуске контейнера, из-за чего включение сервиса займет больше времени, но поможет избежать ряда ошибок. (default: `false`) -- `INI_FILE` - путь к ini файлу конфигурации. (default: `./chatmail.ini`) -- `PATH_TO_SSL` - Путь где располагаются сертификаты. (default: `/var/lib/acme/live/${MAIL_DOMAIN}`) -- `ENABLE_CERTS_MONITORING` - Включить мониторинг сертификатов, если `USE_FOREIGN_CERT_MANAGER=true`. Если сертфикаты изменятся сервисы будут автоматически перезапущены. (default: `false`) -- `CERTS_MONITORING_TIMEOUT` - Раз во сколько секунд проверять что изменились сертификаты. (default: `'60'`) - -Также могут быть использованы все переменные из [ini файла конфигурации](https://github.com/chatmail/relay/blob/main/chatmaild/src/chatmaild/ini/chatmail.ini.f), они обязаны быть в uppercase формате. - -4. Собрать docker образ +2. Клонируйте репозиторий и соберите образ: ```shell +git clone https://github.com/chatmail/relay +cd relay docker compose build chatmail ``` -5. Запустить docker compose и дождаться завершения установки +3. Скопируйте `docker/example.env` в `.env` и укажите `MAIL_DOMAIN`: ```shell -docker compose up -d # запуск сервиса -docker compose logs -f chatmail # просмотр логов контейнера. Для выхода нажать CTRL+C +cp docker/example.env .env +# отредактируйте .env — установите MAIL_DOMAIN ``` -6. По окончанию установки можно открыть в браузер `https://` - -## Использование кастомных файлов -При использовании docker есть возможность использовать измененые файлы конфигурации, чтобы сделать установку более персонализированной. Обычно это требуется для секции `www/src`, чтобы ознакомительная страница Chatmail была сделана на ваш вкус. Но также это можно использовать и для любых других случаев. - -Для того чтобы корректно выполнить подмену файлов необходимо -1. создать каталог `./custom`, он находится в `.gitignore`, поэтому при обновлении не вызовет конфликтов. +4. Запустите: ```shell -mkdir -p ./custom -``` - -2. Изменить нужный файл. Для примера возьмем `index.md` -```shell -mkdir -p ./custom/www/src -nano ./custom/www/src/index.md -``` - -3. В `docker-compose.yaml` добавить монтирование файла с помощью секции `volumes` -```yaml -services: - chatmail: - volumes: - ... - ## custom resources - - ./custom/www/src/index.md:/opt/chatmail/www/src/index.md -``` - -4. Перезапустить сервис -```shell -docker compose down docker compose up -d +docker compose logs -f chatmail ``` -## Фиксирование версии Chatmail -> [!note] -> Это опциональные шаги, их делать требуется только если вас не устраивает что сервис устанавливается каждый раз при запуске - -Поскольку в текущей версии docker chatmail сервис устанавливается каждый раз запуске контейнера, чтобы этого не происходило можно зафиксировать версию контейнера после установки. Делается это следующим образом: - -1. Зафиксировать текущее состояние сконфигурированного контейнера -```shell -docker container commit chatmail configured-chatmail:$(date +'%Y-%m-%d') -docker image ls | grep configured-chatmail -``` - -2. Изменить entrypoint для контейнера в `docker-compose.yaml` на -```yaml -services: - chatmail: - image: - volumes: - ... - ## custom resources - - ./custom/setup_chatmail_docker.sh:/setup_chatmail_docker.sh -``` - -3. Создать файл `./custom/setup_chatmail_docker.sh` с новым файлом конфигурации -```shell -mkdir -p ./custom -cat > ./custom/setup_chatmail_docker.sh << 'EOF' -#!/bin/bash - -set -eo pipefail - -export ENABLE_CERTS_MONITORING="${ENABLE_CERTS_MONITORING:-true}" -export CERTS_MONITORING_TIMEOUT="${CERTS_MONITORING_TIMEOUT:-60}" -export PATH_TO_SSL="${PATH_TO_SSL:-/var/lib/acme/live/${MAIL_DOMAIN}}" - -calculate_hash() { - find "$PATH_TO_SSL" -type f -exec sha1sum {} \; | sort | sha1sum | awk '{print $1}' -} - -monitor_certificates() { - if [ "$ENABLE_CERTS_MONITORING" != "true" ]; then - echo "Certs monitoring disabled." - exit 0 - fi - - current_hash=$(calculate_hash) - previous_hash=$current_hash - - while true; do - current_hash=$(calculate_hash) - if [[ "$current_hash" != "$previous_hash" ]]; then - # TODO: add an option to restart at a specific time interval - echo "[INFO] Certificate's folder hash was changed, reloading nginx, dovecot and postfix services." - systemctl reload nginx.service - systemctl reload dovecot.service - systemctl reload postfix.service - previous_hash=$current_hash - fi - sleep $CERTS_MONITORING_TIMEOUT - done -} - -monitor_certificates & -EOF -``` - -4. Перезапустить сервис -```shell -docker compose down -docker compose up -d -``` +Подробности: [DOCKER_INSTALLATION_EN.md](DOCKER_INSTALLATION_EN.md)