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/06/04 22:46] – 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 211: | Řádek 213: | ||
- | Setkal jsem se s problémem, když jsem pihole nemohl nastartovat, | + | Setkal jsem se s problémem, když jsem pihole nemohl nastartovat, |
< | < | ||
Řá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 ===== |