148 lines
4.1 KiB
Markdown
148 lines
4.1 KiB
Markdown
## Предварительные требования
|
||
|
||
### Системные требования
|
||
- Ubuntu/Debian сервер с минимум 2GB RAM
|
||
- Docker и Docker Compose установлены
|
||
- Открыты порты: 80, 443, 2222, 8080
|
||
- Настроены DNS записи для поддоменов
|
||
|
||
### Подготовка DNS
|
||
|
||
Создайте A-записи для всех поддоменов:
|
||
```dns
|
||
traefik.aepif.ru IN A YOUR_SERVER_IP
|
||
auth.aepif.ru IN A YOUR_SERVER_IP
|
||
notes.aepif.ru IN A YOUR_SERVER_IP
|
||
git.aepif.ru IN A YOUR_SERVER_IP
|
||
webhook.aepif.ru IN A YOUR_SERVER_IP
|
||
```
|
||
|
||
## Порядок развертывания
|
||
|
||
⚠️ **Важно**: Инфраструктурные сервисы должны быть развернуты **первыми**, так как все остальные приложения зависят от них.
|
||
|
||
### Последовательность установки:
|
||
1. **Traefik Reverse Proxy** (сначала)
|
||
2. **Authelia Authentication** (после Traefik)
|
||
3. **Second Mind** (после обеих частей инфраструктуры)
|
||
|
||
## 1. Развертывание Traefik
|
||
|
||
### Подготовка директорий
|
||
|
||
```bash
|
||
# Создание директории проекта
|
||
mkdir -p /DOCKER/reverse-proxy
|
||
cd /DOCKER/reverse-proxy
|
||
|
||
# Создание volume для данных Traefik
|
||
docker volume create traefik_data
|
||
```
|
||
|
||
### Создание .env файла
|
||
|
||
```bash
|
||
cat > .env << 'EOF'
|
||
DOMAIN=aepif.ru
|
||
ADMIN_EMAIL=epifantsev1aa@gmail.com
|
||
EOF
|
||
```
|
||
|
||
### Создание docker-compose.yml
|
||
|
||
```bash
|
||
cat > docker-compose.yml << 'EOF'
|
||
version: '3.8'
|
||
services:
|
||
traefik:
|
||
image: traefik:v3.0
|
||
container_name: traefik
|
||
command:
|
||
- --api.dashboard=true
|
||
- --providers.docker=true
|
||
- --providers.docker.exposedbydefault=false
|
||
- --providers.docker.network=proxy
|
||
- --entrypoints.web.address=:80
|
||
- --entrypoints.websecure.address=:443
|
||
- --entrypoints.ssh.address=:2222
|
||
- --certificatesresolvers.letsencrypt.acme.email=epifantsev1aa@gmail.com
|
||
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||
- --providers.docker.exposedByDefault=false
|
||
- --api.insecure=true
|
||
ports:
|
||
- "80:80"
|
||
- "443:443"
|
||
- "8080:8080"
|
||
- "2222:2222"
|
||
volumes:
|
||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||
- traefik_data:/data
|
||
networks:
|
||
- proxy
|
||
labels:
|
||
- traefik.enable=true
|
||
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||
- traefik.http.routers.traefik.service=api@internal
|
||
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
|
||
- traefik.http.routers.http-catchall.entrypoints=web
|
||
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
|
||
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||
restart: unless-stopped
|
||
|
||
volumes:
|
||
traefik_data:
|
||
|
||
networks:
|
||
proxy:
|
||
name: proxy
|
||
driver: bridge
|
||
EOF
|
||
```
|
||
|
||
### Создание сети и запуск
|
||
|
||
```bash
|
||
# Создание внешней сети proxy
|
||
docker network create proxy
|
||
|
||
# Запуск Traefik
|
||
docker-compose up -d
|
||
|
||
# Проверка статуса
|
||
docker-compose ps
|
||
docker-compose logs -f
|
||
```
|
||
|
||
### Проверка работы Traefik
|
||
|
||
```bash
|
||
# Проверка HTTP → HTTPS редиректа
|
||
curl -I http://traefik.aepif.ru
|
||
|
||
# Проверка HTTPS
|
||
curl -I https://traefik.aepif.ru
|
||
|
||
# Проверка dashboard (должен быть доступен)
|
||
curl -I https://traefik.aepif.ru/dashboard/
|
||
```
|
||
|
||
## 2. Развертывание Authelia
|
||
|
||
### Подготовка директорий
|
||
|
||
```bash
|
||
# Создание директории проекта
|
||
mkdir -p /DOCKER/auth/authelia
|
||
cd /DOCKER/auth
|
||
```
|
||
|
||
### Генерация секретов
|
||
|
||
```bash
|
||
# Генерация всех необходимых секретов
|
||
JWT_SECRET=$(openssl rand -base64 48)
|
||
SESSION_SECRET=$(openssl rand -base64 48)
|
||
STORAGE_KEY=$(openssl rand -base64 24)
|
||
REDIS_PASSWORD=$( |