Files
local-dns/README.md

117 lines
4.1 KiB
Markdown
Raw Normal View History

2026-02-13 21:58:35 +03:00
# Локальная сеть с доменами `.mikan` и HTTPS
2025-11-21 11:44:20 +00:00
2026-02-13 21:58:35 +03:00
Система для запуска сервисов в Docker с автоматическим HTTPS, локальными доменами (`service.mikan`, `service.local`) и возможностью расширения (Tailscale, публичные домены).
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
## Требования
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
- Docker + Docker Compose
- `mkcert` — [инструкция по установке](https://github.com/FiloSottile/mkcert#installation)
- `bash`, `coreutils`
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
## Быстрый старт
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
1. **Клонируй репозиторий**
2026-02-13 01:47:50 +03:00
```bash
2026-02-13 21:58:35 +03:00
git clone ... && cd local-dns
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
2. **Настрой домен (опционально)**
2026-02-13 01:47:50 +03:00
```bash
2026-02-13 21:58:35 +03:00
echo "LOCAL_DOMAIN=mikan" > .env
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
Замени `mikan` на желаемый суффикс (например, `home`).
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
3. **Инициализируй CA и базовый сертификат**
2026-02-13 01:47:50 +03:00
```bash
2026-02-13 21:58:35 +03:00
./scripts/01-init-ca.sh
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
- Создаст доверенный корневой сертификат (`ca/rootCA.pem`)
- Сгенерирует `default.crt` для nginx-proxy
4. **Установи корневой сертификат в систему**
Импортируй файл `ca/rootCA.pem` в хранилище **доверенных корневых центров сертификации**:
- **Linux**:
```bash
sudo cp ca/rootCA.pem /usr/local/share/ca-certificates/mkcert-local.crt
sudo update-ca-certificates
```
- **Windows/macOS**: двойной клик по файлу → «Доверять всегда» (macOS) или импорт в «Доверенные корневые центры» (Windows)
5. **Запусти инфраструктуру**
2026-02-13 01:47:50 +03:00
```bash
docker compose up -d
```
2026-02-13 21:58:35 +03:00
6. **Добавь сервис**
2026-02-13 01:47:50 +03:00
```bash
2026-02-13 21:58:35 +03:00
./scripts/add-service.sh gitea
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
Сервис будет доступен по:
- `https://gitea.mikan`
- `https://gitea.local`
\+ может пригодиться:
```bash
Add-Content -Path "C:\Windows\System32\drivers\etc\hosts" -Value "10.0.0.3 youtrack.mikan"
```
7. **Настрой сервис в Docker Compose**
Убедись, что в `docker-compose.yml` сервиса указано:
```yaml
services:
gitea:
environment:
- VIRTUAL_HOST=gitea.mikan,gitea.local
- VIRTUAL_PORT=3000 # порт внутри контейнера
networks:
- devnet
dns: 10.0.0.2 # обязательно для резолвинга доменов из контейнеров
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
## Важные замечания
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
### DNS из контейнеров
Контейнеры **не могут** резолвить `*.mikan` без явного указания DNS:
```yaml
dns: 10.0.0.2 # IP dnsmasq
```
Добавляй эту строку во все сервисы, которым нужен доступ к другим по домену.
### Обновление сертификатов
При добавлении сервиса через `add-service.sh`:
- Автоматически обновляется `domains.txt`
- Генерируется новый `default.crt`
- Перезагружается `nginx-proxy`
### Пути
- Сертификаты: `nginx/certs/default.crt`
- Домены: `domains.txt`
- Корневой CA: `ca/rootCA.pem`
## Расширение
### Tailscale
Добавь в `docker-compose.yml` сервис `tailscale` и объявляй дополнительные домены:
```yaml
environment:
- VIRTUAL_HOST=gitea.mikan,gitea.local,gitea.yourname.ts.net
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
### Публичный домен
1. Купи домен (например, `example.com`)
2. В `.env` добавь:
```env
PUBLIC_DOMAIN=example.com
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
3. В сервисах укажи:
```yaml
environment:
- VIRTUAL_HOST=gitea.mikan,gitea.local,gitea.example.com
- LETSENCRYPT_HOST=gitea.example.com
2026-02-13 01:47:50 +03:00
```
2026-02-13 21:58:35 +03:00
Сертификат для `example.com` получит `acme-companion`.
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
---
2026-02-13 01:47:50 +03:00
2026-02-13 21:58:35 +03:00
Готово. Теперь все сервисы работают по HTTPS с валидными сертификатами.