168 lines
5.5 KiB
Markdown
168 lines
5.5 KiB
Markdown
# Infra
|
||
|
||
Ansible + Docker инфраструктура для команды. Все сервисы доступны через HTTPS — трафик принимается напрямую на портах 80/443, TLS-сертификаты выдаются автоматически через Let's Encrypt.
|
||
|
||
**Сервисы:**
|
||
- `vault.csrx.ru` — Vaultwarden (менеджер паролей)
|
||
- `git.csrx.ru` — Forgejo (Git)
|
||
- `plane.csrx.ru` — Plane (управление проектами)
|
||
- `sync.csrx.ru` — Syncthing (синхронизация Obsidian)
|
||
- `traefik.csrx.ru` — Traefik dashboard
|
||
|
||
---
|
||
|
||
## Что нужно перед запуском
|
||
|
||
### 1. На машине оператора
|
||
|
||
```bash
|
||
# Ansible
|
||
pip install ansible
|
||
|
||
# Коллекции
|
||
ansible-galaxy collection install community.general community.docker ansible.posix
|
||
|
||
# SSH-ключ (если нет)
|
||
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
|
||
```
|
||
|
||
---
|
||
|
||
## Шаг 1 — DNS
|
||
|
||
Добавить A-записи у DNS-провайдера: каждый субдомен → `87.249.49.32`.
|
||
|
||
Или wildcard (если провайдер поддерживает): `*` → `87.249.49.32`.
|
||
|
||
| Запись | Значение |
|
||
|--------|----------|
|
||
| `vault.csrx.ru` | `87.249.49.32` |
|
||
| `git.csrx.ru` | `87.249.49.32` |
|
||
| `plane.csrx.ru` | `87.249.49.32` |
|
||
| `sync.csrx.ru` | `87.249.49.32` |
|
||
| `traefik.csrx.ru` | `87.249.49.32` |
|
||
|
||
---
|
||
|
||
## Шаг 2 — Заполнить секреты
|
||
|
||
Отредактировать `inventory/group_vars/all.vault.yml`:
|
||
|
||
```yaml
|
||
vault_acme_email: "you@example.com" # email для Let's Encrypt уведомлений
|
||
|
||
vault_vaultwarden_admin_token: "..." # придумать длинный пароль
|
||
|
||
vault_forgejo_db_password: "..." # придумать пароль для PostgreSQL
|
||
vault_plane_db_password: "..." # придумать пароль для PostgreSQL
|
||
vault_plane_secret_key: "..." # сгенерировать: openssl rand -hex 32
|
||
vault_plane_minio_password: "..." # придумать пароль для MinIO
|
||
|
||
# Генерировать командой: htpasswd -nb admin 'yourpassword'
|
||
# Знак $ нужно удваивать: $apr1$ → $$apr1$
|
||
vault_traefik_dashboard_htpasswd: "admin:$$apr1$$..."
|
||
vault_syncthing_basic_auth_htpasswd: "admin:$$apr1$$..."
|
||
```
|
||
|
||
Сгенерировать нужные значения:
|
||
|
||
```bash
|
||
# plane_secret_key
|
||
openssl rand -hex 32
|
||
|
||
# htpasswd (нужен apache2-utils или httpd-tools)
|
||
htpasswd -nb admin 'yourpassword'
|
||
# macOS без установки:
|
||
python3 -c "import crypt; print('admin:' + crypt.crypt('yourpassword', crypt.mksalt(crypt.METHOD_MD5)))"
|
||
```
|
||
|
||
Затем зашифровать файл:
|
||
|
||
```bash
|
||
# Создать файл с паролем vault
|
||
echo "придумать-пароль-для-vault" > ~/.vault-password-file
|
||
chmod 600 ~/.vault-password-file
|
||
|
||
# Зашифровать
|
||
ansible-vault encrypt inventory/group_vars/all.vault.yml
|
||
```
|
||
|
||
> `~/.vault-password-file` — только на машине оператора, никогда не коммитить.
|
||
|
||
---
|
||
|
||
## Шаг 3 — Указать домен
|
||
|
||
В `inventory/group_vars/all.yml` установить:
|
||
|
||
```yaml
|
||
domain_base: "csrx.ru" # уже стоит, изменить если нужно
|
||
```
|
||
|
||
---
|
||
|
||
## Шаг 4 — Первый запуск (от root)
|
||
|
||
```bash
|
||
# Создаёт пользователя deploy, устанавливает sudo
|
||
ansible-playbook playbooks/bootstrap.yml -u root
|
||
```
|
||
|
||
---
|
||
|
||
## Шаг 5 — Деплой
|
||
|
||
```bash
|
||
ansible-playbook playbooks/deploy.yml
|
||
```
|
||
|
||
Устанавливает Docker, настраивает UFW/fail2ban (открывает 22, 80, 443), поднимает все контейнеры.
|
||
Traefik автоматически получит TLS-сертификаты при первом обращении к каждому домену.
|
||
|
||
---
|
||
|
||
## Проверка
|
||
|
||
```bash
|
||
# На сервере
|
||
ssh deploy@87.249.49.32
|
||
docker compose -f /opt/services/docker-compose.yml ps
|
||
```
|
||
|
||
Все сервисы должны быть в статусе `Up`. Затем открыть в браузере:
|
||
|
||
- `https://vault.csrx.ru` — Vaultwarden
|
||
- `https://git.csrx.ru` — Forgejo (первичная настройка через веб)
|
||
- `https://plane.csrx.ru` — Plane
|
||
- `https://sync.csrx.ru` — Syncthing (логин/пароль из `syncthing_basic_auth_htpasswd`)
|
||
- `https://traefik.csrx.ru` — Traefik dashboard (логин/пароль из `traefik_dashboard_htpasswd`)
|
||
|
||
---
|
||
|
||
## Первичная настройка сервисов
|
||
|
||
### Vaultwarden
|
||
- Открыть `https://vault.csrx.ru/admin` → ввести `vault_vaultwarden_admin_token`
|
||
- Создать пользователей через admin-панель (регистрация отключена)
|
||
|
||
### Forgejo
|
||
- Открыть `https://git.csrx.ru` → пройти wizard установки
|
||
- Первый зарегистрированный пользователь становится администратором
|
||
|
||
### Plane
|
||
- Открыть `https://plane.csrx.ru` → создать workspace
|
||
|
||
### Syncthing
|
||
- Открыть `https://sync.csrx.ru`
|
||
- Скопировать Device ID сервера
|
||
- На каждом устройстве команды: добавить сервер как remote device, расшарить папку Obsidian vault
|
||
|
||
---
|
||
|
||
## Обновление
|
||
|
||
```bash
|
||
ansible-playbook playbooks/deploy.yml
|
||
```
|
||
|
||
Идемпотентно — можно запускать сколько угодно раз.
|