- localization-svc: defaultLocale ru, resolveLocale only by geo - web-svc: DEFAULT_LOCALE ru, layout lang=ru, embeddedTranslations fallback ru - countryToLocale: default ru when no country or unknown country Co-authored-by: Cursor <cursoragent@cursor.com>
188 lines
5.9 KiB
Markdown
188 lines
5.9 KiB
Markdown
# SSL-сертификат для gooseek.ru
|
||
|
||
Инструкция по получению сертификата, бэкапу и подключению к K3s.
|
||
|
||
---
|
||
|
||
## 1. Получение сертификата (Let's Encrypt)
|
||
|
||
### Вариант A: certbot на сервере (рекомендуется)
|
||
|
||
```bash
|
||
# Установка certbot (Ubuntu/Debian)
|
||
sudo apt update && sudo apt install -y certbot
|
||
|
||
# Получение сертификата (standalone — порт 80 должен быть свободен)
|
||
sudo certbot certonly --standalone -d gooseek.ru -d www.gooseek.ru \
|
||
--email admin@gooseek.ru \
|
||
--agree-tos \
|
||
--no-eff-email
|
||
|
||
# Файлы появятся в:
|
||
# /etc/letsencrypt/live/gooseek.ru/fullchain.pem
|
||
# /etc/letsencrypt/live/gooseek.ru/privkey.pem
|
||
```
|
||
|
||
### Вариант B: certbot с webroot (если nginx уже слушает 80)
|
||
|
||
```bash
|
||
sudo certbot certonly --webroot -w /var/www/html \
|
||
-d gooseek.ru -d www.gooseek.ru \
|
||
--email admin@gooseek.ru \
|
||
--agree-tos \
|
||
--no-eff-email
|
||
```
|
||
|
||
### Вариант C: DNS challenge (если порт 80 недоступен)
|
||
|
||
```bash
|
||
sudo certbot certonly --manual --preferred-challenges dns \
|
||
-d gooseek.ru -d www.gooseek.ru \
|
||
--email admin@gooseek.ru \
|
||
--agree-tos
|
||
# Certbot попросит добавить TXT-запись в DNS
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Бэкап сертификата
|
||
|
||
Создайте папку бэкапа и скопируйте туда сертификаты:
|
||
|
||
```bash
|
||
# Из корня репозитория
|
||
mkdir -p deploy/k3s/ssl/backup
|
||
|
||
# Копирование с сервера (после certbot)
|
||
sudo cp /etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/
|
||
sudo cp /etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/
|
||
|
||
# Или через scp с production-сервера:
|
||
# scp user@gooseek.ru:/etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/
|
||
# scp user@gooseek.ru:/etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/
|
||
```
|
||
|
||
**Важно:** Папка `backup/` в `.gitignore` — сертификаты не попадут в git.
|
||
|
||
---
|
||
|
||
## 3. Создание Kubernetes Secret из бэкапа
|
||
|
||
```bash
|
||
# Из корня репозитория
|
||
kubectl create secret tls gooseek-tls \
|
||
--namespace=gooseek \
|
||
--cert=deploy/k3s/ssl/backup/fullchain.pem \
|
||
--key=deploy/k3s/ssl/backup/privkey.pem \
|
||
--dry-run=client -o yaml | kubectl apply -f -
|
||
```
|
||
|
||
Или обновить существующий:
|
||
|
||
```bash
|
||
kubectl delete secret gooseek-tls -n gooseek 2>/dev/null || true
|
||
kubectl create secret tls gooseek-tls \
|
||
--namespace=gooseek \
|
||
--cert=deploy/k3s/ssl/backup/fullchain.pem \
|
||
--key=deploy/k3s/ssl/backup/privkey.pem
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Применение Ingress с TLS
|
||
|
||
При ручных сертах (из backup/):
|
||
```bash
|
||
./deploy/k3s/ssl/apply-secret.sh
|
||
kubectl apply -f deploy/k3s/ingress-production-manual.yaml
|
||
```
|
||
|
||
При cert-manager:
|
||
```bash
|
||
kubectl apply -f deploy/k3s/ingress-production.yaml
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Автообновление (certbot)
|
||
|
||
Let's Encrypt выдаёт сертификаты на 90 дней. Настройте автообновление:
|
||
|
||
```bash
|
||
# Проверка таймера
|
||
sudo systemctl status certbot.timer
|
||
|
||
# Ручное обновление
|
||
sudo certbot renew --dry-run
|
||
|
||
# После обновления — пересоздать Secret и перезапустить ingress
|
||
sudo cp /etc/letsencrypt/live/gooseek.ru/fullchain.pem deploy/k3s/ssl/backup/
|
||
sudo cp /etc/letsencrypt/live/gooseek.ru/privkey.pem deploy/k3s/ssl/backup/
|
||
kubectl create secret tls gooseek-tls -n gooseek \
|
||
--cert=deploy/k3s/ssl/backup/fullchain.pem \
|
||
--key=deploy/k3s/ssl/backup/privkey.pem \
|
||
--dry-run=client -o yaml | kubectl apply -f -
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Альтернатива: cert-manager (автоматически)
|
||
|
||
Если не хотите вручную обновлять — установите cert-manager:
|
||
|
||
```bash
|
||
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
|
||
|
||
# Создать ClusterIssuer для Let's Encrypt
|
||
kubectl apply -f deploy/k3s/ssl/cert-manager-issuer.yaml
|
||
```
|
||
|
||
Тогда Secret `gooseek-tls` создаётся автоматически, бэкап не нужен (но можно экспортировать для переноса).
|
||
|
||
---
|
||
|
||
---
|
||
|
||
## 7. Настройка в Kubernetes
|
||
|
||
### Автоматически при деплое (рекомендуется)
|
||
|
||
В `deploy.config.yaml` установите `ssl.auto: true`. При запуске `./deploy/k3s/deploy.sh` cert-manager и SSL настраиваются автоматически.
|
||
|
||
**Требования для HTTP-01 (Let's Encrypt):**
|
||
- DNS: gooseek.ru и www.gooseek.ru → публичный IP ingress-nginx (LoadBalancer или NodePort)
|
||
- Порт 80 доступен из интернета (firewall, Security Groups)
|
||
|
||
### Вручную
|
||
|
||
```bash
|
||
# Из корня репозитория
|
||
|
||
# Вариант A: cert-manager — автоматические сертификаты
|
||
./deploy/k3s/ssl/setup-kubernetes.sh cert-manager
|
||
|
||
# Вариант B: ручные сертификаты (certbot уже выполнен, файлы в backup/)
|
||
./deploy/k3s/ssl/setup-kubernetes.sh manual
|
||
```
|
||
|
||
**Требования:**
|
||
- Namespace `gooseek` создан
|
||
- Ingress-nginx установлен (порт 80 и 443)
|
||
- Домен gooseek.ru указывает на IP кластера
|
||
|
||
---
|
||
|
||
## Структура папки
|
||
|
||
```
|
||
deploy/k3s/ssl/
|
||
├── README.md # эта инструкция
|
||
├── setup-kubernetes.sh # настройка SSL в K8s (cert-manager или manual)
|
||
├── obtain-cert.sh # получение сертификата на сервере (certbot)
|
||
├── apply-secret.sh # создание Secret из backup/
|
||
├── backup/ # сертификаты (в .gitignore)
|
||
│ ├── fullchain.pem
|
||
│ └── privkey.pem
|
||
└── cert-manager-issuer.yaml
|
||
```
|