From 9f3b61d2f7fc6742bdbbc49f67c41753f6981c00 Mon Sep 17 00:00:00 2001 From: Denis Khristolyubov Date: Sun, 13 Sep 2026 00:39:47 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=20EX44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/server-setup.md | 171 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 docs/server-setup.md diff --git a/docs/server-setup.md b/docs/server-setup.md new file mode 100644 index 0000000..e6319b6 --- /dev/null +++ b/docs/server-setup.md @@ -0,0 +1,171 @@ +# Сервер EX44 — настройка и шпаргалка + +Дата настройки: 12–13 сентября 2026 + +--- + +## 1. Железо и доступ + +| Параметр | Значение | +|---|---| +| Сервер | Hetzner EX44-1-LTD #3027839, FSN1-DC11 | +| IP | 148.251.86.143 | +| IPv6 | 2a01:4f8:202:619e::/64 | +| CPU / RAM | i5-13500 (20 потоков) / 64 ГБ non-ECC | +| Диски | 2 × 512 ГБ NVMe, softraid1 | +| Hostname | recada | + +Вход только по SSH-ключу `denis-laptop` (ed25519, `C:\Users\Lenovo\.ssh\id_ed25519`). +Пароль root отключён, вход по паролю запрещён. + +``` +ssh root@10.10.0.1 # через туннель +ssh recada@10.10.0.1 # рабочий пользователь, sudo без пароля +ssh root@148.251.86.143 # напрямую, если туннель не поднят +``` + +--- + +## 2. ОС и разметка + +Debian 13 (trixie), установлен через `installimage` из rescue. + +Команда установки (на случай переустановки): + +```bash +installimage -a -n recada \ + -r yes -l 1 \ + -i /root/images/Debian-1305-trixie-amd64-base.tar.zst \ + -p /boot/efi:esp:256M,/boot:ext3:1024M,lvm:vg0:all \ + -v vg0:root:/:ext4:60G,vg0:swap:swap:swap:8G,vg0:srv:/srv:ext4:300G +``` + +| Том | Размер | Назначение | +|---|---|---| +| /boot/efi (md0) | 256 МБ | загрузчик | +| /boot (md1) | 1 ГБ | ядра | +| vg0-root | 60 ГБ | система | +| vg0-swap | 8 ГБ | swap | +| vg0-srv | 300 ГБ | Gitea, LFS, библиотека, данные | +| свободно в vg0 | ~106 ГБ | запас, снапшоты | + +Всё зеркалируется RAID1, полезная ёмкость 476 ГБ. +Состояние зеркала: `cat /proc/mdstat` + +--- + +## 3. Защита + +- **nftables** — политика `input drop`; наружу открыты только `22/tcp` и `51820/udp`, всё остальное доступно только через интерфейс `wg0`. Конфиг `/etc/nftables.conf` +- **fail2ban** на sshd: 5 попыток, бан 1 час +- **unattended-upgrades** включены +- Часовой пояс Europe/Berlin + +Посмотреть правила: `nft list ruleset` + +--- + +## 4. WireGuard + +| | | +|---|---| +| Сеть | 10.10.0.0/24 | +| Сервер | 10.10.0.1, порт 51820 | +| Ноутбук Дениса | 10.10.0.2, туннель `recada` в WireGuard for Windows | + +Конфиг сервера: `/etc/wireguard/wg0.conf`, ключи в `/etc/wireguard/server.key` и `server.pub`. + +**Добавить нового человека:** + +1. Он ставит WireGuard, создаёт пустой туннель, присылает свой публичный ключ +2. На сервере: +```bash +wg set wg0 peer '<публичный ключ клиента>' allowed-ips 10.10.0.N/32 +wg-quick save wg0 +``` +3. Ему в конфиг: +``` +[Interface] +PrivateKey = <его приватный, остаётся у него> +Address = 10.10.0.N/24 + +[Peer] +PublicKey = VS3t539TeMEtjN1ZAG0Rv9N64JtUbi0KE0Rx7a0ht3Y= +Endpoint = 148.251.86.143:51820 +AllowedIPs = 10.10.0.0/24 +PersistentKeepalive = 25 +``` + +Проверка: `wg show` на сервере, `ping 10.10.0.1` с клиента. + +--- + +## 5. Gitea + +| | | +|---|---| +| Версия | 1.27.3 | +| Бинарник | `/usr/local/bin/gitea` | +| Конфиг | `/etc/gitea/app.ini` (владелец `git`, права 660) | +| Данные | `/srv/gitea` | +| База | SQLite | +| LFS | включён, `/srv/gitea/data/lfs` | +| Веб | http://10.10.0.1:3000 — **только в туннеле** | +| systemd | `/etc/systemd/system/gitea.service` | + +Регистрация закрыта. Админ: `denis`, dk@recada.de. +SSH для git идёт через системный sshd под пользователем `git` (`START_SSH_SERVER = false`), ключи — в `/home/git/.ssh/authorized_keys`, управляет ими сама Gitea. + +Полезное: +```bash +systemctl status gitea +journalctl -u gitea -n 30 --no-pager +systemctl restart gitea +``` + +### Репозиторий + +`recada/project` — приватный, залит из `C:\CAD COWORK` 13.09.2026. +Первый коммит: 38 файлов, 13 объектов в LFS (5.7 МБ — STEP и PDF). + +Подключение с нового компьютера: +``` +git lfs install +git clone git@10.10.0.1:recada/project.git +``` + +LFS настроен через `.gitattributes` проекта: `*.step, *.stp, *.stl, *.glb, *.pdf`. +`*.FCStd` помечен фильтром `zippey` — сам фильтр ещё не установлен, .FCStd в репозитории пока нет. + +--- + +## 6. Что дальше + +1. **Бэкапы** на Hetzner Storage Box (restic по расписанию) + проверка восстановления — сейчас на сервере единственная копия репозитория, RAID1 от `rm -rf` не спасает +2. **Python-ядро**: venv, OCP 7.9.3, build123d, recada.py под systemd, доступ только в туннеле +3. **CI** «params → STEP+GLB» и ночная регрессия по `library/` +4. **Сетевая папка** — Samba в туннеле, работа с файлами из проводника +5. **zippey** для читаемых диффов .FCStd +6. **Kasm CE** и egress-файрвол — когда дойдёт до удалённых инженеров + +--- + +## 7. Грабли, на которые уже наступили + +- Большие пасты конфигов через PowerShell/SSH рвутся — heredoc склеивается, файл получается битым. Лучше короткие куски или редактор на сервере. +- Gitea падает при старте, если не может дописать в `app.ini` свои секреты (JWT для oauth2 и для LFS). Решение: владелец файла `git`, права 660. +- `[server].LFS_CONTENT_PATH` устарел — правильно `[lfs] PATH`. +- Ключ в Gitea сохраняется только после нажатия кнопки «Добавить ключ». Пустой `/home/git/.ssh/authorized_keys` = ключ не добавлен. +- Host key меняется трижды: rescue → установленная система → доступ по адресу туннеля. Каждый раз `ssh-keygen -R <адрес>`; отпечаток rescue сверяется в Robot, вкладка Rescue → «Show data of last activation». +- `git init` выполняется в текущей папке — сначала `cd /d "C:\CAD COWORK"`, потом всё остальное. + +--- + +## 8. Что где выполнять + +| Приглашение | Где ты | Какие команды | +|---|---|---| +| `C:\...>` | Windows, cmd | `cd /d`, `rmdir /S /Q`, git | +| `PS C:\...>` | Windows, PowerShell | `Set-Location`, `Remove-Item`, git, ssh | +| `root@recada ~ #` | сервер, root | всё Linux | +| `recada@recada:~$` | сервер, рабочий пользователь | Linux, через `sudo` |