установка Nginx Proxy Manager (Full Setup)

**полная пошаговая инструкция** по установке Nginx Proxy Manager в **Full Setup** конфигурации с MariaDB, с самого начала:

---

## 🚀 **Полная инструкция по установке Nginx Proxy Manager (Full Setup)**

### **Шаг 1: Подготовка виртуальной машины**
1. **Создайте виртуалку в Proxmox:**
   - ОС: Ubuntu 22.04 LTS (минимальная установка)
   - RAM: 2GB (минимум для Full Setup)
   - Диск: 20GB
   - Сеть: Bridge mode (та же сеть, что и у других виртуалок)
   - **Статический IP**: Назначьте статический IP в локальной сети (например, `192.168.1.200`)

2. **Обновите систему:**
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git
```

3. **Установите Docker и Docker Compose:**
```bash
# Установка Docker
sudo apt install -y docker.io

# Установка Docker Compose
sudo apt install -y docker-compose

# Запуск и включение в автозагрузку
sudo systemctl enable --now docker
```

### **Шаг 2: Создание директории для проекта**
```bash
sudo mkdir -p /opt/nginx-proxy-manager
sudo chown -R $USER:$USER /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
```

### **Шаг 3: Создание docker-compose.yml (Full Setup)**
```bash
nano docker-compose.yml
```

**Вставьте эту конфигурацию (скопируйте полностью):**
```yaml
version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # Публичный HTTP порт
      - '443:443'  # Публичный HTTPS порт  
      - '81:81'    # Порт веб-интерфейса администратора
    environment:
      # Настройки подключения к базе данных
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "your_secure_password_123"  # ⚠️ ЗАМЕНИТЕ НА СВОЙ!
      DB_MYSQL_NAME: "npm"
      
      # Отключить IPv6 если не используется в вашей сети
      DISABLE_IPV6: 'true'
    volumes:
      - .//data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      db:
        condition: service_healthy
    networks:
      - npm_network

  db:
    image: 'mariadb:10.6'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "root_secure_password_456"  # ⚠️ ЗАМЕНИТЕ НА СВОЙ!
      MYSQL_DATABASE: "npm"
      MYSQL_USER: "npm"
      MYSQL_PASSWORD: "your_secure_password_123"  # ⚠️ ЗАМЕНИТЕ НА СВОЙ!
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - npm_network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-u", "npm", "-pyour_secure_password_123"]
      interval: 30s
      timeout: 10s
      retries: 3

networks:
  npm_network:
    driver: bridge
```

**⚠️ КРИТИЧЕСКИ ВАЖНО:**
1. **Замените все пароли** на свои надежные! Используйте генератор паролей.
2. **Все три пароля** должны совпадать: `DB_MYSQL_PASSWORD` и `MYSQL_PASSWORD`
3. **Пароль root** должен быть другим и очень сложным

### **Шаг 4: Генерация надежных паролей (рекомендуется)**
```bash
# Генерация паролей (выполните на хосте)
openssl rand -base64 32
# Пример результата: "x9G7!pL2@mK8#qR5$tY3^uI1&oP4(aS6"
```
Скопируйте сгенерированные пароли и замените их в `docker-compose.yml`

### **Шаг 5: Запуск контейнеров**
```bash
# Запуск в фоновом режиме
docker-compose up -d

# Проверка статуса (должны быть оба контейнера Up)
docker-compose ps
```

**Ожидайте 3-5 минут** для полной инициализации (генерация ключей, создание БД)

### **Шаг 6: Проверка логов (если есть проблемы)**
```bash
# Проверить логи основного приложения
docker-compose logs -f app

# Проверить логи базы данных  
docker-compose logs -f db

# Для выхода из просмотра логов: Ctrl+C
```

### **Шаг 7: Доступ к веб-интерфейсу**
Откройте в браузере:
```
http://192.168.1.200:81
```

**Данные для входа по умолчанию:**
- **Email**: `Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.`
- **Пароль**: `changeme`

**⚠️ ВАЖНО:** Сразу после входа система **обязательно** попросит вас изменить email и пароль!

---

## 🔧 **Настройка для работы с NAT и DNS (ваш сценарий Proxmox)**

### **Шаг 8: Настройка на роутере (NAT)**
На вашем роутере настройте проброс портов:
```
Внешний порт 80  → 192.168.1.200:80
Внешний порт 443 → 192.168.1.200:443
```
**Порт 81 НЕ пробрасывайте наружу!** Это порт только для локального доступа к админке.

### **Шаг 9: Настройка DNS записей**
В DNS панели вашего регистратора создайте A-записи:
```
site1.ru        → ваш_белый_IP
nextcloud.ru    → ваш_белый_IP
windows1.ru     → ваш_белый_IP
proxmox.ru      → ваш_белый_IP
```

### **Шаг 10: Настройка первого прокси-хоста (пример для AAPanel)**
1. В веб-интерфейсе NPM: **Hosts** → **Proxy Hosts** → **Add Proxy Host**
2. **Основные настройки:**
   - **Domain Names**: `site1.ru, www.site1.ru`
   - **Scheme**: `http`
   - **Forward Hostname/IP**: `192.168.1.101` (IP вашей AAPanel VM)
   - **Forward Port**: `80`
3. **Вкладка SSL:**
   - **SSL Certificate**: `Request a new SSL Certificate`
   - **Email**: ваш@email.ru
   - **Force SSL**: ✅ Включить
   - **HTTP/2 Support**: ✅ Включить
   - **HSTS Enabled**: ✅ Включить
   - **Поставьте галочку** "I Agree" внизу
4. Нажмите **Save**

### **Шаг 11: Проверка работы**
Откройте в браузере:
```
https://site1.ru
```
Вы должны увидеть ваш сайт с AAPanel с зеленым замком (HTTPS).

---

## ⚙️ **Настройка для других сервисов**

### **Для Nextcloud:**
При создании прокси-хоста в разделе **Advanced** добавьте:
```nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
client_max_body_size 10G;
```

### **Для Proxmox web UI:**
- **Domain Names**: `proxmox.ru`
- **Scheme**: `https`
- **Forward Hostname/IP**: `192.168.1.10` (IP вашего Proxmox)
- **Forward Port**: `8006`
- **Block Common Exploits**: ✅ Включить
- **SSL**: Запросить новый сертификат

### **Для Windows RDP (прямой доступ, не через web):**
**Не используйте reverse proxy для RDP!** Настройте проброс портов на роутере:
```
Внешний порт 33891 → 192.168.1.151:3389 (Windows VM 1)
Внешний порт 33892 → 192.168.1.152:3389 (Windows VM 2)
```
Подключайтесь через RDP клиент: `ваш_белый_IP:33891`

---

## 🔒 **Безопасность и обслуживание**

### **1. Настройка файервола на виртуалке**
```bash
sudo apt install -y ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 192.168.1.0/24 to any port 81  # Только из локальной сети
sudo ufw deny 3306                              # Запретить доступ к MySQL извне
sudo ufw enable
```

### **2. Регулярное обновление**
```bash
cd /opt/nginx-proxy-manager
sudo docker-compose pull
sudo docker-compose up -d --force-recreate
```

### **3. Резервное копирование**
```bash
# Бэкап всей конфигурации
sudo tar -czf npm_backup_$(date +%Y%m%d).tar.gz /opt/nginx-proxy-manager

# Восстановление из бэкапа
sudo tar -xzf npm_backup_20251219.tar.gz -C /
```

### **4. Мониторинг состояния**
```bash
# Проверить статус контейнеров
docker-compose ps

# Проверить использование ресурсов
docker stats
```

---

## 🚨 **Что делать если что-то не работает**

### **Проблема: Не открывается веб-интерфейс (порт 81)**
```bash
# Проверить, слушает ли порт
sudo netstat -tlnp | grep ':81'

# Перезапустить контейнеры
docker-compose restart
```

### **Проблема: SSL сертификат не создается**
- Проверьте, что домен указывает на ваш белый IP
- Проверьте проброс портов 80/443 на роутере
- Проверьте, что Let's Encrypt не заблокирован вашим провайдером

### **Проблема: Ошибка подключения к базе данных**
```bash
# Проверить логи БД
docker-compose logs db

# Проверить сетевое подключение между контейнерами
docker-compose exec app ping db
```

---

## ✅ **Итоговый чек-лист**

✅ Виртуалка создана с Ubuntu 22.04 и статическим IP  
✅ Docker и Docker Compose установлены  
✅ `docker-compose.yml` создан с Full Setup конфигом  
✅ Все пароли заменены на надежные  
✅ Контейнеры запущены (`docker-compose up -d`)  
✅ Веб-интерфейс доступен по `http://локальный_IP:81`  
✅ Данные администратора изменены после первого входа  
✅ Порты 80/443 проброшены на роутере на эту виртуалку  
✅ DNS записи указывают на белый IP  
✅ Создан первый прокси-хост с SSL сертификатом  
✅ Фаервол настроен для безопасности  

**Поздравляю!** У вас установлен полноценный, надежный reverse proxy сервер в продакшен-конфигурации. Теперь все ваши виртуалки будут доступны по красивым доменным именам с автоматическим HTTPS!

Нужна помощь с настройкой конкретного сервиса (Nextcloud, Proxmox, Windows RDP) или с дополнительными функциями?