Update backup and logging documentation for Proxmox and containers. Adjust retention policies for Yandex Object Storage and enhance log rotation settings across various containers. Include detailed instructions for VPS backup processes and configurations for AmneziaVPN.
This commit is contained in:
50
docs/vps/amnezia-awg/Dockerfile
Normal file
50
docs/vps/amnezia-awg/Dockerfile
Normal file
@@ -0,0 +1,50 @@
|
||||
# Образ для AmneziaWG на VPS. Используется на 185.103.253.99 (Germany) и 147.45.124.117 (USA).
|
||||
# Сборка: docker build -t amnezia-awg .
|
||||
# Конфиг WireGuard/обфускация задаётся через приложение AmneziaVPN при установке протокола на сервер.
|
||||
|
||||
FROM amneziavpn/amnezia-wg:latest
|
||||
|
||||
LABEL maintainer="AmneziaVPN"
|
||||
|
||||
#Install required packages
|
||||
RUN apk add --no-cache bash curl dumb-init
|
||||
RUN apk --update upgrade --no-cache
|
||||
|
||||
RUN mkdir -p /opt/amnezia
|
||||
RUN echo -e "#!/bin/bash\ntail -f /dev/null" > /opt/amnezia/start.sh
|
||||
RUN chmod a+x /opt/amnezia/start.sh
|
||||
|
||||
# Tune network
|
||||
RUN echo -e " \n\
|
||||
fs.file-max = 51200 \n\
|
||||
\n\
|
||||
net.core.rmem_max = 67108864 \n\
|
||||
net.core.wmem_max = 67108864 \n\
|
||||
net.core.netdev_max_backlog = 250000 \n\
|
||||
net.core.somaxconn = 4096 \n\
|
||||
\n\
|
||||
net.ipv4.tcp_syncookies = 1 \n\
|
||||
net.ipv4.tcp_tw_reuse = 1 \n\
|
||||
net.ipv4.tcp_tw_recycle = 0 \n\
|
||||
net.ipv4.tcp_fin_timeout = 30 \n\
|
||||
net.ipv4.tcp_keepalive_time = 1200 \n\
|
||||
net.ipv4.ip_local_port_range = 10000 65000 \n\
|
||||
net.ipv4.tcp_max_syn_backlog = 8192 \n\
|
||||
net.ipv4.tcp_max_tw_buckets = 5000 \n\
|
||||
net.ipv4.tcp_fastopen = 3 \n\
|
||||
net.ipv4.tcp_mem = 25600 51200 102400 \n\
|
||||
net.ipv4.tcp_rmem = 4096 87380 67108864 \n\
|
||||
net.ipv4.tcp_wmem = 4096 65536 67108864 \n\
|
||||
net.ipv4.tcp_mtu_probing = 1 \n\
|
||||
net.ipv4.tcp_congestion_control = hybla \n\
|
||||
# for low-latency network, use cubic instead \n\
|
||||
# net.ipv4.tcp_congestion_control = cubic \n\
|
||||
" | sed -e 's/^\s\+//g' | tee -a /etc/sysctl.conf && \
|
||||
mkdir -p /etc/security && \
|
||||
echo -e " \n\
|
||||
* soft nofile 51200 \n\
|
||||
* hard nofile 51200 \n\
|
||||
" | sed -e 's/^\s\+//g' | tee -a /etc/security/limits.conf
|
||||
|
||||
ENTRYPOINT [ "dumb-init", "/opt/amnezia/start.sh" ]
|
||||
CMD [ "" ]
|
||||
@@ -58,3 +58,82 @@
|
||||
- Переключение: выбираешь активное подключение — либо одно, либо другое (или отключено). Маршруты/политики при необходимости те же для обоих (например, весь трафик в туннель или только часть по правилам).
|
||||
|
||||
Так можно в любой момент перейти с USA на новый VPS: добавляешь новый профиль с конфигом нового сервера и переключаешься на него.
|
||||
|
||||
---
|
||||
|
||||
## Конфиги для полного восстановления сервера
|
||||
|
||||
Все файлы, чтобы поднять новый VPS с нуля (тот же образ и параметры контейнера). Ключи и пиры WireGuard создаются приложением AmneziaVPN при установке протокола — их не копируем.
|
||||
|
||||
### Файлы в репозитории
|
||||
|
||||
| Назначение | Путь в репо |
|
||||
|------------|-------------|
|
||||
| Dockerfile AmneziaWG | `docs/vps/amnezia-awg/Dockerfile` |
|
||||
| Метрики для Homepage | `scripts/vps-metrics-api.py` |
|
||||
| Systemd-юнит метрик | `docs/vps/vps-metrics.service` |
|
||||
|
||||
### 1. Подготовка VPS
|
||||
|
||||
- ОС: Ubuntu (или [поддерживаемая Amnezia](https://docs.amnezia.org/ru/documentation/supported-linux-os-for-vps)).
|
||||
- Установить Docker, настроить SSH-доступ с твоего ключа (для AmneziaVPN).
|
||||
- На хосте: скопировать `docs/vps/amnezia-awg/Dockerfile` в каталог на VPS (например `/opt/amnezia/amnezia-awg/`), собрать образ:
|
||||
```bash
|
||||
cd /opt/amnezia/amnezia-awg
|
||||
docker build -t amnezia-awg .
|
||||
```
|
||||
|
||||
### 2. Запуск контейнера AmneziaWG
|
||||
|
||||
**Германия (или новый сервер с портом 33118):**
|
||||
|
||||
```bash
|
||||
docker run -d --name amnezia-awg --restart=always \
|
||||
-p 33118:33118/udp \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--cap-add=NET_ADMIN --cap-add=SYS_MODULE \
|
||||
--privileged \
|
||||
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
|
||||
--security-opt label=disable \
|
||||
amnezia-awg
|
||||
```
|
||||
|
||||
**США (или второй сервер с портом 37135):**
|
||||
|
||||
```bash
|
||||
docker run -d --name amnezia-awg2 --restart=always \
|
||||
-p 37135:37135/udp \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--cap-add=NET_ADMIN --cap-add=SYS_MODULE \
|
||||
--privileged \
|
||||
--sysctl net.ipv4.conf.all.src_valid_mark=1 \
|
||||
--security-opt label=disable \
|
||||
amnezia-awg
|
||||
```
|
||||
|
||||
Важно: внутри контейнера AmneziaWG слушает тот порт, который задаётся при установке протокола через приложение (на Germany — 33118, на USA — 37135). Если поднимаешь новый сервер с другим портом, в команде меняй оба: `-p ПОРТ:ПОРТ/udp` и при установке AmneziaWG в приложении укажи тот же порт.
|
||||
|
||||
### 3. Установка протокола через AmneziaVPN
|
||||
|
||||
1. В приложении AmneziaVPN добавь сервер по IP нового VPS (SSH по ключу).
|
||||
2. Установи протокол **AmneziaWG** на этот сервер (приложение подключится по SSH и настроит контейнер).
|
||||
3. В настройках протокола на сервере задай параметры обфускации из таблицы выше: **jc, jmin, jmax, s1, s2, h1–h4**.
|
||||
4. Сгенерируй гостевые конфиги / конфиг с полным доступом — в них будет Endpoint = IP:порт нового VPS.
|
||||
|
||||
### 4. Метрики для Homepage (опционально)
|
||||
|
||||
Чтобы виджет метрик на Homepage показывал данные с этого VPS:
|
||||
|
||||
```bash
|
||||
# Скопировать скрипт и юнит на VPS
|
||||
cp scripts/vps-metrics-api.py /usr/local/bin/
|
||||
chmod +x /usr/local/bin/vps-metrics-api.py
|
||||
cp docs/vps/vps-metrics.service /etc/systemd/system/
|
||||
systemctl daemon-reload && systemctl enable --now vps-metrics
|
||||
```
|
||||
|
||||
Порт **3497/tcp** должен быть доступен с хоста, где крутится Homepage (или открыт в файрволе VPS).
|
||||
|
||||
### 5. Файрвол
|
||||
|
||||
На текущем сервере в Германии UFW не включён, политика iptables по умолчанию ACCEPT. Достаточно убедиться, что хостинг не режет входящий **UDP на порт AmneziaWG** (33118 или 37135) и при необходимости SSH (22) и 3497 для метрик.
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
- Контейнер запущен с `--restart=always`, примонтирован `/lib/modules` (для ядерного модуля WireGuard). Сеть — bridge, проброс порта 33118/udp на хост.
|
||||
- Дополнительно: **vps-metrics** (systemd-сервис) — API метрик для виджета Homepage.
|
||||
|
||||
Каталог образа/скриптов на хосте: `/opt/amnezia/amnezia-awg/` (там лежит Dockerfile; сам сервер AmneziaWG настраивается через приложение AmneziaVPN при установке протокола на этот VPS).
|
||||
Каталог образа/скриптов на хосте: `/opt/amnezia/amnezia-awg/` (там лежит Dockerfile; сам сервер AmneziaWG настраивается через приложение AmneziaVPN при установке протокола на этот VPS). Копия Dockerfile и команды для полного развёртывания на новом VPS — в [перенос конфигурации](vpn-migrate-config.md#конфиги-для-полного-восстановления-сервера).
|
||||
|
||||
---
|
||||
|
||||
|
||||
16
docs/vps/vps-metrics.service
Normal file
16
docs/vps/vps-metrics.service
Normal file
@@ -0,0 +1,16 @@
|
||||
# Копировать на VPS: /etc/systemd/system/vps-metrics.service
|
||||
# Затем: systemctl daemon-reload && systemctl enable --now vps-metrics
|
||||
# Скрипт: scripts/vps-metrics-api.py → /usr/local/bin/vps-metrics-api.py
|
||||
|
||||
[Unit]
|
||||
Description=VPS metrics API for Homepage
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/python3 /usr/local/bin/vps-metrics-api.py
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -55,6 +55,8 @@ VPS в ЦОД Миран (Санкт-Петербург). Развёрнуты
|
||||
|
||||
В ботаx (переменные окружения prod) заданы `S3_ENDPOINT_URL=https://api.s3.miran.ru`, регион и креды для загрузки/выдачи контента. Для локальной разработки или других клиентов использовать те же endpoint и ключи.
|
||||
|
||||
**Бакет контента бота:** в S3 Miran используется бакет с именем `9829-telegram-helper-bot` (переменная `S3_BUCKET_NAME` в .env бота).
|
||||
|
||||
### 4. Остальное на хосте
|
||||
|
||||
- **nginx** — порты 80 и 443; по умолчанию отдаёт статику из `/var/www/html`.
|
||||
@@ -103,3 +105,26 @@ docker compose logs -f telegram-bot
|
||||
- **Homepage** (контейнер 100): виджет метрик может показывать данные с vps-metrics (185.147.80.190:3497).
|
||||
|
||||
Остальные узлы homelab (Proxmox, NPM и т.д.) описаны в [архитектуре](../architecture/architecture.md).
|
||||
|
||||
---
|
||||
|
||||
## Бэкап VPS (telegram-helper-bot)
|
||||
|
||||
Бэкап выполняется **с хоста Proxmox** скриптом `backup-vps-miran.sh` (cron 01:00). Копируются:
|
||||
|
||||
1. **БД:** `/home/prod/bots/telegram-helper-bot/database/tg-bot-database.db` → `/mnt/backup/vps/miran/db/` (с датой в имени, хранение 14 дней).
|
||||
2. **Голосовые сообщения:** `/home/prod/bots/telegram-helper-bot/voice_users/` → `/mnt/backup/vps/miran/voice_users/` (rsync).
|
||||
3. **S3 (Miran):** полная выгрузка бакета `9829-telegram-helper-bot` → `/mnt/backup/vps/miran/s3/` (через `aws s3 sync`).
|
||||
|
||||
**Что нужно на Proxmox:**
|
||||
|
||||
- **SSH:** с хоста (root) должен работать вход без пароля на `deploy@185.147.80.190 -p 15722` (добавить публичный ключ хоста в `~/.ssh/authorized_keys` пользователя deploy на VPS).
|
||||
- **S3:** установить `awscli` (`apt install awscli`) и создать файл `/root/.vps-miran-s3.env` с содержимым (подставить свои креды):
|
||||
```bash
|
||||
S3_ACCESS_KEY=j3tears100@gmail.com
|
||||
S3_SECRET_KEY=...
|
||||
S3_BUCKET_NAME=9829-telegram-helper-bot
|
||||
```
|
||||
Файл читается только root; в репозиторий не коммитить.
|
||||
|
||||
Подробности и восстановление — в [Бэкапы: как устроены и как восстанавливать](../backup/backup-howto.md).
|
||||
|
||||
Reference in New Issue
Block a user