Files
local-dns/README.md
Mikan 71ffcc89bf fix
2026-02-13 21:58:35 +03:00

117 lines
4.1 KiB
Markdown
Raw Permalink 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.
# Локальная сеть с доменами `.mikan` и HTTPS
Система для запуска сервисов в Docker с автоматическим HTTPS, локальными доменами (`service.mikan`, `service.local`) и возможностью расширения (Tailscale, публичные домены).
## Требования
- Docker + Docker Compose
- `mkcert` — [инструкция по установке](https://github.com/FiloSottile/mkcert#installation)
- `bash`, `coreutils`
## Быстрый старт
1. **Клонируй репозиторий**
```bash
git clone ... && cd local-dns
```
2. **Настрой домен (опционально)**
```bash
echo "LOCAL_DOMAIN=mikan" > .env
```
Замени `mikan` на желаемый суффикс (например, `home`).
3. **Инициализируй CA и базовый сертификат**
```bash
./scripts/01-init-ca.sh
```
- Создаст доверенный корневой сертификат (`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. **Запусти инфраструктуру**
```bash
docker compose up -d
```
6. **Добавь сервис**
```bash
./scripts/add-service.sh gitea
```
Сервис будет доступен по:
- `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 # обязательно для резолвинга доменов из контейнеров
```
## Важные замечания
### 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
```
### Публичный домен
1. Купи домен (например, `example.com`)
2. В `.env` добавь:
```env
PUBLIC_DOMAIN=example.com
```
3. В сервисах укажи:
```yaml
environment:
- VIRTUAL_HOST=gitea.mikan,gitea.local,gitea.example.com
- LETSENCRYPT_HOST=gitea.example.com
```
Сертификат для `example.com` получит `acme-companion`.
---
Готово. Теперь все сервисы работают по HTTPS с валидными сертификатами.