Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:server:http-reverzni-proxy-server [2023/12/30 12:30] – Petr Nosek | it:server:http-reverzni-proxy-server [2025/04/10 16:42] (aktuální) – Petr Nosek | ||
|---|---|---|---|
| Řádek 75: | Řádek 75: | ||
| - | ==== problém ==== | + | ==== problém |
| Problém byl, že u Node REDu apache nefungoval jak má. Po chvíli Node RED vypisoval hlášení: "Lost connection.." | Problém byl, že u Node REDu apache nefungoval jak má. Po chvíli Node RED vypisoval hlášení: "Lost connection.." | ||
| Řádek 145: | Řádek 145: | ||
| **Bohužel jsem zjistil, že konfigurace nebyla dostačující.** Webové rozhraní fungovalo, ale když jsem se snažil použít klienta na automatickou synchronizaci, | **Bohužel jsem zjistil, že konfigurace nebyla dostačující.** Webové rozhraní fungovalo, ale když jsem se snažil použít klienta na automatickou synchronizaci, | ||
| + | |||
| + | |||
| ==== PiHole ==== | ==== PiHole ==== | ||
| Řádek 232: | Řádek 234: | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||
| + | |||
| + | |||
| + | ==== Redmine ==== | ||
| + | |||
| + | Potřeboval jsem nasadit Redmine pomocí Dockeru. Databáze MySQL běží na hostitelském počítači také v Dockeru, ale naslouchá pouze na `127.0.0.1`. Aby se Redmine mohl připojit k databázi, použil jsem nástroj `socat`, který přeposílá porty. Apache běží také jako kontejner a slouží jako reverzní proxy. | ||
| + | |||
| + | === Konfigurace Redmine kontejneru === | ||
| + | |||
| + | Vytvořil jsem následující `docker-compose.yml`: | ||
| + | |||
| + | <code yaml> | ||
| + | redmine: | ||
| + | container_name: | ||
| + | image: redmine | ||
| + | restart: always | ||
| + | ports: | ||
| + | - ' | ||
| + | environment: | ||
| + | REDMINE_DB_MYSQL: | ||
| + | REDMINE_DB_PORT: | ||
| + | REDMINE_DB_USERNAME: | ||
| + | REDMINE_DB_PASSWORD: | ||
| + | REDMINE_DB_DATABASE: | ||
| + | REDMINE_SECRET_KEY_BASE: | ||
| + | volumes: | ||
| + | - ' | ||
| + | </ | ||
| + | |||
| + | Redmine se připojuje na IP `172.17.0.1`, | ||
| + | |||
| + | === Socat pro přesměrování TCP portu === | ||
| + | |||
| + | Použil jsem službu `systemd`, která při startu systému spustí `socat`: | ||
| + | |||
| + | <code ini> | ||
| + | / | ||
| + | |||
| + | [Unit] | ||
| + | Description=MySQL TCP forwarder for Docker | ||
| + | After=network-online.target docker.service | ||
| + | Wants=network-online.target docker.service | ||
| + | |||
| + | [Service] | ||
| + | ExecStartPre=/ | ||
| + | ExecStart=/ | ||
| + | Restart=on-failure | ||
| + | RestartSec=3 | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | Tento skript vytvoří forward: všechny požadavky na `172.17.0.1: | ||
| + | |||
| + | * `socat` slouží jako jednoduchý TCP forwarder. | ||
| + | * Využívá `fork`, takže zvládne více spojení najednou. | ||
| + | * Před spuštěním hlavního příkazu čeká, než bude možné IP `172.17.0.1` bindnout. | ||
| + | |||
| + | === MySQL uživatel a přístup === | ||
| + | |||
| + | Při vytváření uživatele v MySQL jsem musel explicitně uvést IP adresu `127.0.0.1`. Pokud bych použil `localhost`, | ||
| + | |||
| + | Například: | ||
| + | |||
| + | <code sql> | ||
| + | CREATE USER ' | ||
| + | GRANT ALL PRIVILEGES ON db-name.* TO ' | ||
| + | </ | ||
| + | |||
| + | === Nastavení firewallu === | ||
| + | |||
| + | Redmine běží v jiné Docker síti a má vlastní IP adresu. V mém případě to byla `172.19.0.2`. Aby se kontejner mohl připojit na port 33060, bylo třeba povolit tento provoz ve firewallu: | ||
| + | |||
| + | <code bash> | ||
| + | ufw allow from 172.19.0.2/ | ||
| + | </ | ||
| + | |||
| + | IP adresu kontejneru lze zjistit příkazem: | ||
| + | |||
| + | <code bash> | ||
| + | docker inspect -f ' | ||
| + | </ | ||
| + | |||
| + | Tímto jsem zajistil funkční připojení Redmine k databázi běžící na hostitelském systému. | ||
| + | |||
| + | |||
| + | === Nastavení Apache === | ||
| + | |||
| + | Jelikož Redmine běží v Dockeru na portu `127.0.0.1: | ||
| + | |||
| + | Použil jsem následující konfiguraci virtuálních hostů v Apache: | ||
| + | |||
| + | <code apache> | ||
| + | < | ||
| + | ServerName redmine.example.com | ||
| + | ServerAlias redmine.example.com | ||
| + | |||
| + | ServerAdmin info@example.com | ||
| + | Redirect permanent "/" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | |||
| + | ServerName redmine.example.com | ||
| + | ServerAlias redmine.example.com | ||
| + | ServerAdmin info@example.com | ||
| + | |||
| + | Protocols h2 http/1.1 | ||
| + | |||
| + | # Reverse proxy konfigurace | ||
| + | ProxyPreserveHost On | ||
| + | ProxyPass / http:// | ||
| + | ProxyPassReverse / http:// | ||
| + | |||
| + | # SSL konfigurace | ||
| + | SSLEngine on | ||
| + | |||
| + | SSLCertificateFile | ||
| + | SSLCertificateKeyFile | ||
| + | SSLCertificateChainFile / | ||
| + | SSLCACertificateFile | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Tato konfigurace: | ||
| + | |||
| + | * Přesměrovává HTTP požadavky na HTTPS. | ||
| + | * Používá SSL certifikáty vystavené nástrojem [dehydrated](https:// | ||
| + | * Pomocí `ProxyPass` a `ProxyPassReverse` přesměrovává provoz na Redmine běžící na `localhost: | ||
| + | * `ProxyPreserveHost On` zajišťuje, | ||
| + | |||
| + | Tímto způsobem lze přistupovat k Redmine z prohlížeče pomocí domény `https:// | ||
| + | |||
| + | |||
| + | |||
| ===== Nginx ===== | ===== Nginx ===== | ||