Files
ForbiddenStarsApp/deploy/vps/README.md
T

101 lines
5.2 KiB
Markdown
Raw 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.
# VPS (186.246.51.17) — реверс-прокси Caddy + точка входа SSH-туннелей
Единственная публичная точка. На VPS: Caddy терминирует HTTPS твоими сертификатами
для двух доменов и проксирует трафик в SSH reverse-туннели от Pi (прод) и ПК (dev/test).
```
forbiddenstars.ru → 127.0.0.1:9000 ← Pi (autossh, постоянно) PROD
forbidden-stars.ru → 127.0.0.1:9001 ← ПК (по требованию) DEV/TEST
```
> Туннель `ssh -R` по умолчанию слушает на loopback VPS (127.0.0.1) — ровно туда смотрит
> Caddy. `GatewayPorts` включать НЕ нужно. Снаружи порты 9000/9001 недоступны.
## 0. DNS
A-записи обоих доменов → `186.246.51.17`:
```
forbiddenstars.ru A 186.246.51.17
forbidden-stars.ru A 186.246.51.17
```
Проверка: `dig +short forbiddenstars.ru` (и второго) должны вернуть этот IP.
## 1. Зайти на VPS
```bash
ssh root@186.246.51.17 # пароль введёшь сам
```
## 2. Обновление + файрвол
```bash
apt update && apt -y upgrade
apt -y install ufw curl gnupg
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
```
## 3. Установить Caddy (официальный репозиторий)
```bash
apt -y install debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt -y install caddy
```
## 4. Пользователь под туннели
```bash
useradd -m -s /bin/bash tunnel
install -d -m 700 -o tunnel -g tunnel /home/tunnel/.ssh
install -m 600 -o tunnel -g tunnel /dev/null /home/tunnel/.ssh/authorized_keys
```
Публичные ключи Pi и ПК добавишь в `/home/tunnel/.ssh/authorized_keys` на шагах настройки
Pi (`deploy/pi/README.md`) и ПК (через `ssh-copy-id`).
## 5. Сертификаты
Caddy читает **PEM** (текст с `-----BEGIN CERTIFICATE-----`). Расширение неважно — `.crt`
от GlobalSign обычно УЖЕ PEM. Проверь первой строкой: `head -1 файл.crt`.
- если `-----BEGIN CERTIFICATE-----` → это PEM, конвертировать НЕ нужно;
- если бинарь/абракадабра → это DER, сконвертируй: `openssl x509 -inform DER -in файл.crt -out файл.pem`.
На каждый домен нужны два файла:
- `fullchain.pem` = твой сертификат (leaf) **+** промежуточный(е) GlobalSign, в одном файле,
именно в таком порядке (сначала leaf, потом промежуточный).
- `privkey.pem` = приватный ключ (`-----BEGIN PRIVATE KEY-----`, без пароля; обычно это `.key`).
Удобно собрать прямо на VPS — залей свои файлы и склей:
```bash
mkdir -p /etc/caddy/certs/forbidden-stars.ru /root/certs-tmp
# с локальной машины (пример для домена forbidden-stars.ru):
scp forbidden-stars.crt intermediate.crt forbidden-stars.key root@186.246.51.17:/root/certs-tmp/
# на VPS — собрать fullchain (leaf + промежуточный) и положить ключ:
cat /root/certs-tmp/www_forbidden_stars_ru_2026_12_31.crt /root/certs-tmp/intermediate_pem_globalsign_ssl_dv_free_1.crt \
> /etc/caddy/certs/forbidden-stars.ru/fullchain.pem
cp /root/certs-tmp/forbidden-stars.key /etc/caddy/certs/forbidden-stars.ru/privkey.pem
# то же для forbiddenstars.ru (свои crt/intermediate/key), затем права
# (папкам нужен x-бит → 750, файлам 640; иначе пользователь caddy не прочитает):
chown -R caddy:caddy /etc/caddy/certs
find /etc/caddy/certs -type d -exec chmod 750 {} \;
find /etc/caddy/certs -type f -exec chmod 640 {} \;
rm -rf /root/certs-tmp
```
> Если GlobalSign дал не отдельный промежуточный, а готовый bundle/chain — используй его
> как «промежуточную» часть. Если дал один файл, где leaf и chain уже вместе, — это и есть
> `fullchain.pem` (склейка не нужна).
## 6. Caddyfile
Скопируй `deploy/vps/Caddyfile` из репозитория в `/etc/caddy/Caddyfile`, затем:
```bash
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
```
## 7. Проверка
1. Подними туннель прода на Pi (см. `deploy/pi/README.md`) и/или dev/test на ПК (`run.ps1` при `LOCAL_PUBLIC=vps`).
2. Открой `https://forbiddenstars.ru` и `https://forbidden-stars.ru`.
3. Пока соответствующий туннель не поднят — Caddy отдаёт `502`, это ожидаемо.
Логи Caddy: `journalctl -u caddy -f`.