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