diff --git a/Dockerfile b/Dockerfile index bc0dbe0..da3b5fa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,6 @@ VOLUME ["/app/volume"] # Port freigeben EXPOSE 8080 -# Standardbefehl (z. B. Start der App über bind mount) +# Standardbefehl CMD ["node", "volume/server.js"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..0179299 --- /dev/null +++ b/README.md @@ -0,0 +1,135 @@ + +# Node WebSocket-Server (HTTP + WS) mit Docker + +Dieses Projekt bietet einen einfachen HTTP- und WebSocket-Server in Node.js, der über Docker betrieben wird. Ziel ist es, eine lauffähige, leicht erweiterbare Entwicklungsumgebung bereitzustellen – +z.B. für WebSocket-basierte Anwendungen. + +Der Docker-Container ist so konfiguriert, dass er statische Dateien ausliefert und WebSocket-Verbindungen unterstützt. +Es wird ein Reverse-Proxy (Apache) verwendet, um den Container über HTTPS erreichbar zu machen. +Dabei wird der Pfad `/node` verwendet, um den Container zu erreichen. + + +## 🔧 Projektstruktur + +``` +. +├── Dockerfile +├── package.json +├── volume/ +│ ├── server.js # Hauptserver +│ ├── public/ # Statische Dateien +│ │ ├── index.html +│ │ └── script.js +``` + +## 🚀 Starten der Anwendung + +### 1. Build des Docker-Images + +Erfordert Admin-Rechte auf dem Host-System. + +```bash +docker build -t node-ws-server . +``` + +### 2. Starten des Containers mit Volume-Bindung + +Erfordert Admin-Rechte auf dem Host-System. + +```bash +docker run -v "$PWD/volume":/app/volume node-ws-server +``` + +Über den Apache-Reverse-Proxy ist der Server unter + +``` +https://medinf.efi.th-nuernberg.de/node +``` + +erreichbar gemacht. + +--- + +## 🧠 Hinweise zum Reverse Proxy + +Der Apache-Webserver leitet Anfragen über `/node` an den internen Node.js-Server weiter. Damit der Reverse-Proxy funktioniert: + +- Statische Dateien wie `script.js` müssen in `index.html` mit relativem Pfad eingebunden werden (z.B. `./script.js`), **nicht** mit `/node/script.js`. +- WebSocket-Verbindungen müssen den vollen Proxy-Pfad verwenden, z.B.: + +```js +const ws = new WebSocket('wss://medinf.efi.th-nuernberg.de/node/ws'); +``` + +Apache kümmert sich darum, `/node` zu entfernen und an den Container weiterzuleiten. + +--- + +## 🧠 Funktionsweise von `server.js` + +### 1. Statische Datei-Auslieferung + +```js +const server = http.createServer((req, res) => { ... }); +``` + +- Liefert Dateien aus dem Verzeichnis `volume/public/`. +- Wenn eine Anfrage ein Verzeichnis ist, wird automatisch `index.html` geladen. +- HTTP 404 wird zurückgegeben, wenn eine Datei nicht existiert. + +--- + +### 🔌 2. WebSocket-Unterstützung + +```js +const wss = new WebSocketServer({ noServer: true }); +``` + +- WebSocket wird auf `/ws` unterstützt. +- Die `upgrade`-Verbindung wird manuell gehandhabt. +- Nur WebSocket-Verbindungen auf `/ws` werden akzeptiert; alles andere wird verworfen. + +--- + + +## 📁 Beispiel: `index.html` und `script.js` + +### `volume/public/index.html` + +```html + + +
+