7.1 KiB
Сервер 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.
Команда установки (на случай переустановки):
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.
Добавить нового человека:
- Он ставит WireGuard, создаёт пустой туннель, присылает свой публичный ключ
- На сервере:
wg set wg0 peer '<публичный ключ клиента>' allowed-ips 10.10.0.N/32
wg-quick save wg0
- Ему в конфиг:
[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.
Полезное:
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. Что дальше
- Бэкапы на Hetzner Storage Box (restic по расписанию) + проверка восстановления — сейчас на сервере единственная копия репозитория, RAID1 от
rm -rfне спасает - Python-ядро: venv, OCP 7.9.3, build123d, recada.py под systemd, доступ только в туннеле
- CI «params → STEP+GLB» и ночная регрессия по
library/ - Сетевая папка — Samba в туннеле, работа с файлами из проводника
- zippey для читаемых диффов .FCStd
- 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 |