Files
project/docs/server-setup.md
T

7.1 KiB
Raw Blame History

Сервер 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.

Добавить нового человека:

  1. Он ставит WireGuard, создаёт пустой туннель, присылает свой публичный ключ
  2. На сервере:
wg set wg0 peer '<публичный ключ клиента>' allowed-ips 10.10.0.N/32
wg-quick save wg0
  1. Ему в конфиг:
[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. Что дальше

  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