mirror of
https://github.com/chatmail/relay.git
synced 2026-05-19 20:38:05 +00:00
docker: docs: replace outdated Russian Docker docs with redirect to EN
This commit is contained in:
@@ -1,174 +1,31 @@
|
|||||||
# Известные проблемы и ограничения
|
# Docker Installation (Русский)
|
||||||
- Chatmail будет переустановлен при каждом запуске контейнера (при первом - долго, при последующих быстрее). Так устроен изначальный установщик, потому что он не был заточен под docker. В конце документации [представлено](#фиксирование-версии-chatmail) возможное решение
|
|
||||||
- Требуется настроенный в системе cgroups v2. Работа с cgroups v1 не тестировалась.
|
|
||||||
- Да, понятно дело что systemd использовать в контейнере костыль и надо это всё разнести на несколько сервисов, но это MVP и в первом приближении оказалось сделать проще так, чем переписывать всю систему развертывания.
|
|
||||||
- docker образ подходит только для amd64, если нужно запустить на другой архитектуре, попробуйте изменить dockerfile (конкретно ту часть что ответсвенна за установку dovecot)
|
|
||||||
|
|
||||||
# Docker installation
|
> **Этот документ устарел.** Актуальная документация по установке Docker доступна в
|
||||||
Здесь представлена инструкция по установке chatmail с помощью docker-compose.
|
> [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 секунд).
|
1. Установите Docker Compose v2 (`docker compose`, не `docker-compose`).
|
||||||
Замените домен и IP-адреса на свои.
|
|
||||||
|
|
||||||
```
|
2. Клонируйте репозиторий и соберите образ:
|
||||||
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 образ
|
|
||||||
```shell
|
```shell
|
||||||
|
git clone https://github.com/chatmail/relay
|
||||||
|
cd relay
|
||||||
docker compose build chatmail
|
docker compose build chatmail
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Запустить docker compose и дождаться завершения установки
|
3. Скопируйте `docker/example.env` в `.env` и укажите `MAIL_DOMAIN`:
|
||||||
```shell
|
```shell
|
||||||
docker compose up -d # запуск сервиса
|
cp docker/example.env .env
|
||||||
docker compose logs -f chatmail # просмотр логов контейнера. Для выхода нажать CTRL+C
|
# отредактируйте .env — установите MAIL_DOMAIN
|
||||||
```
|
```
|
||||||
|
|
||||||
6. По окончанию установки можно открыть в браузер `https://<your_domain_name>`
|
4. Запустите:
|
||||||
|
|
||||||
## Использование кастомных файлов
|
|
||||||
При использовании docker есть возможность использовать измененые файлы конфигурации, чтобы сделать установку более персонализированной. Обычно это требуется для секции `www/src`, чтобы ознакомительная страница Chatmail была сделана на ваш вкус. Но также это можно использовать и для любых других случаев.
|
|
||||||
|
|
||||||
Для того чтобы корректно выполнить подмену файлов необходимо
|
|
||||||
1. создать каталог `./custom`, он находится в `.gitignore`, поэтому при обновлении не вызовет конфликтов.
|
|
||||||
```shell
|
```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 up -d
|
||||||
|
docker compose logs -f chatmail
|
||||||
```
|
```
|
||||||
|
|
||||||
## Фиксирование версии Chatmail
|
Подробности: [DOCKER_INSTALLATION_EN.md](DOCKER_INSTALLATION_EN.md)
|
||||||
> [!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: <image name from step 1>
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|||||||
Reference in New Issue
Block a user