Files
project/docs/server-setup.md

172 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сервер 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` |