Udzielamy pomocy Nginx Proxy Manager + Nextcloud

Discussion in 'Kontenery Docker i LXC' started by goruss, Nov 19, 2020.

Loading...
  1. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Znalazłem świetny poradnik jak zainstalować na docekrze Nginx Proxy Manager
    https://www.8px.pl/nginx-proxy-manager-jako-kontener-na-qnap-nas/ - działa wyśmienicie.
    Mój obraz dockera wygląda następująco
    Code (Text):
    1. version: '3'
    2. services:
    3.   app:
    4.     image: 'jc21/nginx-proxy-manager:latest'
    5.     ports:
    6.       - '980:80'
    7.       - '981:81'
    8.       - '9443:443'
    9.     volumes:
    10.       - /share/nginx/config.json:/app/config/production.json
    11.       - /share/nginx/data:/data
    12.       - /share/nginx/letsencrypt:/etc/letsencrypt
    13.     depends_on:
    14.       - db
    15.   db:
    16.     image: webhippie/mariadb:latest
    17.     restart: always
    18.     environment:
    19.       MARIADB_ROOT_PASSWORD: rootpass
    20.       MARIADB_DATABASE: 'npm'
    21.       MARIADB_USERNAME: 'npm'
    22.       MARIADB_PASSWORD: userpass
    23.     volumes:
    24.       - /share/nginx/data/baza_npm/mysql:/var/lib/mysql
    jest to rozwiązanie na prawdę godne polecenia dla odwrotnego proxy gdyż wszystkie ustawienia można wyklikać i co najważniejsze po restarcie wszytko działa.
    Testowałem na różnych usługach typu GUI itp. i to działa ale nie działa dla najważniejszej aplikacji tj. dla Nextcloud, który jest również w kontenerze z oficjalny docker zainstalowanych przez containerstation.
    Jak odpowiednio skonfiguruję domenę w nginx proxy manager to w przeglądarce pojawia się 504 Gateway Timeout
    Wiem, że to wina configu nextcloud gdyż nie ma problemu z analogicznymi przekierowaniami odwrotnego proxy dla innych usług.
    Czy mógłbym liczyć na pomoc?
    Poniżej zamieszczam config.php z nextcloud
    Code (Text):
    1. <?php
    2. $CONFIG = array (
    3.   'htaccess.RewriteBase' => '/',
    4.   'memcache.local' => '\\OC\\Memcache\\APCu',
    5.   'apps_paths' =>
    6.   array (
    7.     0 =>
    8.     array (
    9.       'path' => '/var/www/html/apps',
    10.       'url' => '/apps',
    11.       'writable' => false,
    12.     ),
    13.     1 =>
    14.     array (
    15.       'path' => '/var/www/html/custom_apps',
    16.       'url' => '/custom_apps',
    17.       'writable' => true,
    18.     ),
    19.   ),
    20.   'instanceid' => 'ocosaop9fsj8',
    21.   'passwordsalt' => '1gwCz9emJ12qa29buRxwadAK/mxEbT',
    22.   'secret' => 'i8vqYJ4nq50x0ADFV428Ochxi7IDlJYZMR3xXxTHMYKExL+W',
    23.   'trusted_domains' =>
    24.   array (
    25.     0 => '192.168.10.10:1080',
    26.     0 => 'moja.domena.net',
    27.   ),
    28.   'datadirectory' => '/var/www/html/data',
    29.   'dbtype' => 'mysql',
    30.   'version' => '20.0.1.1',
    31.   'overwrite.cli.url' => 'http://192.168.10.10:1080',
    32.   'dbname' => 'nextcloud',
    33.   'dbhost' => 'localhost',
    34.   'dbport' => '',
    35.   'dbtableprefix' => 'oc_',
    36.   'dbuser' => 'oc_admin',
    37.   'dbpassword' => passdb,
    38.   'installed' => true,
    39. );
    40.  
    w katalogu config znajduje się jeszcze plik reverse-proxy.config.php więc być może tu coś trzeba ustawić - poniżej jego zawartość:
    Code (Text):
    1. <?php
    2. $overwriteHost = getenv('OVERWRITEHOST');
    3. if ($overwriteHost) {
    4.   $CONFIG['overwritehost'] = $overwriteHost;
    5. }
    6.  
    7. $overwriteProtocol = getenv('OVERWRITEPROTOCOL');
    8. if ($overwriteProtocol) {
    9.   $CONFIG['overwriteprotocol'] = $overwriteProtocol;
    10. }
    11.  
    12. $overwriteWebRoot = getenv('OVERWRITEWEBROOT');
    13. if ($overwriteWebRoot) {
    14.   $CONFIG['overwritewebroot'] = $overwriteWebRoot;
    15. }
    16.  
    17. $overwriteCondAddr = getenv('OVERWRITECONDADDR');
    18. if ($overwriteCondAddr) {
    19.   $CONFIG['overwritecondaddr'] = $overwriteCondAddr;
    20. }
    21.  
    22. $trustedProxies = getenv('TRUSTED_PROXIES');
    23. if ($trustedProxies) {
    24.   $CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
    25. }
    --- Połączono posty, Nov 19, 2020, Data oryginalnego postu: Nov 19, 2020 ---
    Dobra, jestem już sporo dalej - nie jest to jednak wina nextcloud.
    Zainstalowałem wordpress poprzez containterstation i było to samo, ale jak zmieniłem w opcjach sieci kontenera z NAT na BRIDGE to przekierowanie odwrotne proxy działa. W nextcloud to samo.
    Być może chodzi tu o komunikację pomiędzy kontenerami - w dobrym kierunku myslę?
     
  2. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    w bridge dostaniesz adres IP z serwera DHCP/routera - gdzie przeważnie ten adres jest zmienny
    podczas gdy NAT ukrywa ci to i trzeba działać za pomocą adresu IP QNAP + port
     
  3. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Na ruterze określam static DHCP więc IP się nie zmienia, a ponadto w container station można określić IP "na sztywno".
    Zastanawia mnie tylko dlaczego w przypadku BRIDGE przekierowanie z aplikacji nginx proxy manager działa, a w przypadku NAT i portu na aplikację coś blokuje komunikację
    Code (Text):
    1. 502 Bad Gateway
    monit z przeglądarki.
     
  4. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    błąd 502 - to błąd kominikacji
    na pewno dobrze masz zdefiniowane proxy ? odnosi się do właściwych portów na NAT ?
     
  5. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Wydaje się, że tak...
    Aplikacja w kontenerze (dajmy na to ten nieszczęsny nextcloud) działa na porcie 9090 i w sieci lokalnej bez problemu jest dostęp natomiast przekierowanie poprzez aplikację jak w załączniku nie działa. proxy.
    Natomiast jak tylko zmienię przekierowanie na port 8080 dla GUI - momentalnie jest połączenie po ssl.
    Wychodzi na to, że to coś z komunikacją pomiędzy kontenerami.
     
  6. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    brak informacji jak jest zdefiniowany kontener NextCloud'a
     
  7. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    jak poniżej
    Code (Text):
    1. version: '3'
    2. volumes:
    3.   nextcloud:
    4.   db:
    5.  
    6. services:
    7.   db:
    8.     image: webhippie/mariadb:latest
    9.     restart: always
    10.     environment:
    11.       MARIADB_ROOT_PASSWORD: 'rootpass'
    12.       MARIADB_DATABASE: 'nextcloud'
    13.       MARIADB_USERNAME: 'nextcloud'
    14.       MARIADB_PASSWORD: 'userpass'
    15.     volumes:
    16.       - /share/nextcloud/mysql:/var/lib/mysql
    17.  
    18.   app:
    19.     image: nextcloud
    20.     ports:
    21.       - 9090:80
    22.     links:
    23.       - db
    24.     volumes:
    25.       - /share/nextcloud:/var/www/html
    26.     restart: always
     
  8. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    wygląda dobrze

    zakładając sytuację NAT (maskowanie):
    1. nextcloud gada po porcie 9090 (nie jestem pewien czy ten port jest wolny na qnapie) w protokole http (patrząc na definicje jego kontenera) na adresie IP QNAPa
    2. nginx-manager gada po porcie 8443 i 980 , więc trzeba się do niego dobijać za pomocą adresu IP qnapa i portu 980
    3. przekierowanie powinno być na adres IP QNAPa i port WWW nextclouda w nginx

    a jaki adres uzywasz do testów ? bo jak zwykle schowałeś to co potrzebne! i skąd puszczasz ten test ?
     
  9. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Moja sieć domowa to 192.168.4.0/24
    Adres qnap to 192.168.4.20
    Nextcloud w kontenerze NAT na porcie 9090 więc przekierowanie takie jak z obrazka teoretycznie powinno działać, a to co zamazane na obrazku to tylko subdomena.
    Analogicznie testowałem na innych portach min. 1080 i było to samo.
    --- Połączono posty, Nov 19, 2020, Data oryginalnego postu: Nov 19, 2020 ---
    Przed chwilą dokończyłem konfigurację testowego nextcloud w kontenerze BRIDGE z IP 192.168.4.27 ... - jeden klik w nginx proxy manager i śmiga po ssl aż miło także ewidentnie chodzi o ten NAT.
    --- Połączono posty, Dec 2, 2020 at 10:18 AM ---
    Wygląda na to, że jest jakiś problem z mapowaniem portów na qnap ponieważ nie działa odwrotne proxy z nginx na kontenerze NAT.
    Jako, że bardzo mi zależy na dostępie do kilku aplikacji z zewnątrz postanowiłem darować sobie nginx proxy manager i skonfigurować odwrotne proxy za pomocą kontenera z tradycyjnym nginx.

    Code (Text):
    1. version: "3"
    2. services:
    3.   nginx:
    4.     image: linuxserver/nginx
    5.     container_name: nginx
    6.     environment:
    7.       - TZ=Europe/Warsaw
    8.     ports:
    9.       - 444:443
    10.       - 82:80
    11.     restart: unless-stopped
    Porty na routerze oczywiście odpowiednio przekierowane, ale reverse proxy nie działa jak w przypadku nginx proxy manager.

    Jak tylko zmienię konfigurację kontenera z nginx na bridge z własnym adresem IP przy identycznej konfiguracji nginx - reverse proxy działa.

    Code (Text):
    1. server {
    2.     listen 80;
    3. }
    4.  
    5. server {
    6.  
    7.     listen 443;
    8.     server_name moja.domena.net;
    9.     ssl_certificate /config/keys/certyfikat.crt;
    10.     ssl_certificate_key /config/keys/klucz.key;
    11.  
    12.     ssl on;
    13.     ssl_session_cache  builtin:1000  shared:SSL:10m;
    14.     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    15.     ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    16.     ssl_prefer_server_ciphers on;
    17.  
    18.     access_log            /var/log/nginx/mylog.log;
    19.  
    20.     location / {
    21.  
    22.       proxy_set_header        Host $host;
    23.       proxy_set_header        X-Real-IP $remote_addr;
    24.       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    25.       proxy_set_header        X-Forwarded-Proto $scheme;
    26.  
    27.       # Fix the “It appears that your reverse proxy set up is broken" error.
    28.       proxy_pass          http://192.168.4.20:9090;
    29.       proxy_read_timeout  90;
    30.  
    31.       proxy_redirect      http://192.168.4.20:9090 https://moja.domena.net;
    32.     }
    33.   }
    a przecież sama konfiguracja nginx jest identyczna.
    Czy w przypadku kontenera NAT konfiguracja reverse proxy powinna być inna?
     
  10. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    mam dziwne wrażenie że coś jest nie tak z tym dockerem ...
     
  11. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Chodzi Ci o moją konfigurację, czy też w ogóle o qnapowy docker?
     
  12. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    aa - mam na myśli instalacje dockera - sam kontener wygląda OKej
     
  13. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Pisałeś kiedyś, że nie korzystasz z container station qnap tylko z innego rozwiązania - może to by pomogło.
     
  14. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    korzystam tylko z CLI i portainera, GUI QNAPa dla dockerów jest dla mnie nieczytelne!
     
  15. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Próbowałem zainstalować na moim 131K, ale w logach info, że niekompatybilna wersja, a próbowałem kilka stąd
    Qnapclub Store: Portainer
    Mniejsza z tym - pozostanę przy tym co jest do docker nginx bridge, bo już jestem blisko dopracowania konfiguracji.
    Nie będę już wałkował tego tematu, ale mam ostatnie pytanie w związku z tym reverse proxy...
    W nginx.conf mam taki wpis
    Code (Text):
    1. include /config/nginx/site-confs/*;
    Oczywiście we wskazanym katalogu znajduje się plik z ustawieniami reverse proxy jak powyżej, ale docelowo będę korzystał z jeszcze kilku subdomen dla innych usług.
    Konfiguruję kolejne revers proxy dla kolejnej subdomeny analogicznie jak dla tej pierwszej, ale niestety przeglądarka i tak kieruje na tą samą usługę jak dla tej pierwszej subdomeny.
    Czy mógłbym prosić o podpowiedź jak ustawić reverse proxy dla kilku subdomen (każda dla innej aplikacji działającej na innym porcie)?
    Dodam, że sprawdziłem już nie jeden config z google, ale bez skutku.
     
  16. pigers
    Offline

    pigers zapytaj Silasa Administrator

    Joined:
    Jul 26, 2013
    Messages:
    10,649
    Local Time:
    5:34 AM
    Ratings:
    +1,607 / 38 / -20
    Followers:
    7
    QNAP:
    TS-653D
    Ethernet:
    1 GbE
    TS-653D 1 GbE
    @grzenio@grzenio - możesz podpowiedziec coś koledze, mistrzu NGINX'a ? :p
     
  17. goruss
    Offline

    goruss Entry Technician Q Associate

    Joined:
    Oct 20, 2020
    Messages:
    42
    Local Time:
    5:34 AM
    Ratings:
    +2 / 0 / -0
    Followers:
    0
    QNAP:
    null
    Ethernet:
    null
    null null
    Widocznie w swoich configach miałem coś nie tak - poniższe ustawienia działają dla różnych domen/subodmen z configami w różnych plikach.

    Code (Text):
    1. server {
    2. listen 80;
    3. server_name domain.tld www.domain.tld; # Edit this to your domain name
    4. rewrite ^ https://$host$request_uri permanent;
    5. }
    6.  
    7. ###
    8. # This is all the configuration declarations that help SSL Function.
    9. ###
    10.  
    11. server {
    12. listen 443 ssl;
    13.  
    14. server_name domain.tld;
    15. # Edit this to your domain name
    16.  
    17. ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;      
    18. # If you use Lets Encrypt, you should just need to change the domain.
    19.  
    20. ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;    
    21. # If you use Let's Encrypt, you should just need to change the domain.
    22.  
    23. ssl_session_cache builtin:1000 shared:SSL:10m;                      
    24. # Defining option to share SSL Connection with Passed Proxy
    25.  
    26. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;                                
    27. # Defining used protocol versions.
    28.  
    29. ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    30. # Defining ciphers to use.
    31.  
    32. ssl_prefer_server_ciphers on;                                        
    33. # Enabling ciphers
    34.  
    35. access_log /var/log/nginx/access.log;                                
    36. # Log Location. Can be anywhere. Make sure the nginx user defined in /etc/nginx/nginx.conf has r/w permissions
    37.  
    38. ###
    39. # This is the juicey part of the config file, handing off relevant data to
    40. # our back-end app running on port 3000
    41. # Nothing should need to be changed here, unless port 3000 is not the port
    42. # you're using.
    43. # Furthermore, if you're using a socket to serve your app (PHP comes to
    44. # mind), you can define a unix:.sock location here as well
    45. ###
    46.    
    47. location / {
    48. proxy_set_header Host $host;
    49. proxy_set_header X-Real-IP $remote_addr;
    50. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    51. proxy_set_header X-Forwarded-Proto $scheme;
    52. proxy_pass http://localhost:3000;
    53. proxy_read_timeout 90;
    54. }
    55. }