adminslog/dokus/webserver/nginx-proxy-manager-setup.md

159 lines
3.2 KiB
Markdown

# NGINX Proxy Manager als Reverse Proxy für Node.js-Apps
>**Letzte Änderung:** 27.06.2025
---
- [NGINX Proxy Manager als Reverse Proxy für Node.js-Apps](#nginx-proxy-manager-als-reverse-proxy-für-nodejs-apps)
- [Ziel](#ziel)
- [Voraussetzungen](#voraussetzungen)
- [Verzeichnisstruktur](#verzeichnisstruktur)
- [docker-compose.yml](#docker-composeyml)
- [Starten](#starten)
- [Zugriff auf Web-GUI](#zugriff-auf-web-gui)
- [Proxy-Host anlegen](#proxy-host-anlegen)
- [Ergebnis](#ergebnis)
- [Hinweise](#hinweise)
- [Optional: Node.js-Apps als systemd-Service verwalten](#optional-nodejs-apps-als-systemd-service-verwalten)
- [Fertig](#fertig)
---
## Ziel
- Node.js-Apps im LAN per HTTPS erreichbar machen
- Let's Encrypt Zertifikate automatisch verwalten
- Einfaches Management über Web-GUI
- Kein manuelles Bearbeiten von NGINX-Konfigurationen
---
## Voraussetzungen
- Server mit Debian 12 oder kompatibel
- Docker und Docker Compose installiert
- Ports 80/443 sind frei
- Fritzbox leitet Ports 80/443 auf den Server weiter
- Domain zeigt per A-Record auf die öffentliche IP
---
## Verzeichnisstruktur
Empfohlenes Setup unter `/opt/nginx-proxy-manager/`:
```plaintext
/opt/nginx-proxy-manager/
├── docker-compose.yml
├── data/ # Konfigurationsdaten von NGINX Proxy Manager
└── letsencrypt/ # SSL-Zertifikate
```
---
## docker-compose.yml
```yaml
version: '3'
services:
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin UI
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- TZ=Europe/Berlin
```
---
## Starten
```bash
cd /opt/nginx-proxy-manager
docker compose up -d
```
---
## Zugriff auf Web-GUI
- URL: `http://<SERVER-IP>:81`
- Standard-Zugang:
- Benutzer: `admin@example.com`
- Passwort: `changeme`
- Zugangsdaten nach erstem Login ändern.
---
## Proxy-Host anlegen
1. „Proxy Hosts“ → „Add Proxy Host“
2. Domain Name: `app1.domain.de`
3. Scheme: `http`
4. Forward Hostname/IP: `192.168.178.11`
5. Forward Port: `3000`
6. SSL aktivieren → „Request a new SSL Certificate“ → Let's Encrypt
---
## Ergebnis
- Externe Anfragen an `app1.domain.de` werden via HTTPS von NGINX Proxy Manager entgegengenommen.
- Intern wird die Anfrage an `192.168.178.11:3000` (Node.js-App) weitergeleitet.
- Zertifikate werden automatisch verwaltet.
---
## Hinweise
✅ Kein systemweiter NGINX mehr erforderlich.
✅ Ports 80/443 werden vollständig vom Container belegt.
✅ Einfach skalierbar für mehrere Domains und Apps.
✅ Wartbar über die Weboberfläche, keine manuelle Konfigurationsarbeit.
---
## Optional: Node.js-Apps als systemd-Service verwalten
Beispiel für eine Datei `/etc/systemd/system/myapp.service`:
```ini
[Unit]
Description=Meine Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/myapp/index.js
Restart=on-failure
User=www-data
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
```
Aktivieren und starten:
```bash
systemctl enable myapp
systemctl start myapp
```
---
## Fertig
Dein Setup ist jetzt produktionsbereit.