
# 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.
