172 lines
7.1 KiB
Markdown
172 lines
7.1 KiB
Markdown
# Сервер 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` |
|