# Локальная сеть с доменами `.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 с валидными сертификатами.