Mam kilka aplikacji działających lokalnie za pośrednictwem. docker do programowania. 2 dni temu działały dobrze, ale wczoraj pojawił się błąd. Używam curl do pobierania danych z API obsługiwanego na zdalnym hoście, a to wczoraj przestało działać i nadal nie działa. Polecenie curl do pobierania danych to

$ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, getenv('DATABASE_URL'));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_VERBOSE, 0);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($ch, CURLOPT_AUTOREFERER, true);
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
      curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '', '&'));  
      $output = curl_exec($ch)
      curl_close($ch);
      return $output;

Co teraz zwraca błąd informujący, że nie mam uprawnień do korzystania z interfejsu API. To oczywiście nie mówi ci wiele, więc pozwól, że przejdę do szczegółów na temat aplikacji.

Są to aplikacje drupal 8 obsługiwane przez docker (i docker-compose). Sprawdziłem, czy mają dostęp do internetu (więcej o tym później), a połączenie aplikacji z lokalnym serwerem mysql działa poprawnie. Próbowałem zrestartować dockera, odbudować kontenery i takie standardowe hacki, ale wydaje się, że nic tego nie naprawia. Mam aplikację laravel obsługiwaną lokalnie za pomocą Dockera, używając tego samego interfejsu API, a ta aplikacja może pobierać i publikować dane z interfejsu API, więc problem wydaje się być związany z kodem drupal. Chociaż może to nie być prawdą, ponieważ próbowałem użyć starszych wersji, zanim to się zaczęło, a ten sam błąd nadal się pojawia. To prowadzi mnie do wniosku, że może to być również błąd certyfikatu ssl, ale nie znalazłem sposobu, aby to przetestować.

Zauważyłem kilka dziwnych rzeczy:

  • Wersja produkcyjna aplikacji drupal (z identycznym kodem) serwowana na zdalnym serwerze, który kontrolujemy, działa i korzysta z tego samego API (Ubuntu działa zarówno lokalnie, jak i na zdalnym serwerze).
  • Kiedy włączam komputer, aplikacje (zarówno laravel, jak i druppal) nie mają internetu i muszę je zatrzymać i uruchomić (z docker-compose w dół i w górę), aby uzyskać dostęp do Internetu.

Wiem, że to wcale nie wystarczy, aby dowiedzieć się dokładnie, co jest nie tak, ale mam nadzieję, że ktoś mógł wcześniej zobaczyć niektóre z tych problemów i dać wskazówkę, jak coś naprawić.

Jak zawsze, jeśli potrzebujesz konkretnego kodu lub wyjaśnienia aplikacji, po prostu zapytaj, a ja z przyjemnością je dostarczę.

Aktualizacja: zapomniałem dodać, że aplikacja jest obsługiwana za pomocą tego proxy, które od jakiegoś czasu działa. Kiedy go uruchamiam, aplikacja „letsencrypt_ser” działa na moim komputerze, a nie w kontenerze docker, i zajmuje więcej niż 100% procesora (4 rdzenie, czyli więcej niż jeden rdzeń). Ta aplikacja nie jest uruchamiana na zdalnym serwerze z taką samą konfiguracją, więc uważam, że coś jest nie tak z moim kontenerem.

Ponadto, w pliku docker-compose dla mojego dodatku drupal, mamy kod

networks:
  default:
    external:
      name: webproxy

W końcu, aby połączyć kontener z proxy.

3
Richard Jensen 2 wrzesień 2020, 14:46

2 odpowiedzi

Najlepsza odpowiedź

Najpierw chciałbym podziękować wszystkim, którzy się włączyli. W taki czy inny sposób pomogliście mi dostać się tam, gdzie jestem teraz, gdzie to działa.

Rozwiązanie? Całkowicie sformatuj ubuntu, wyczyść dysk i uaktualnij do ubuntu 20 z 16.

-1
Richard Jensen 10 wrzesień 2020, 07:39

Powinieneś użyć \Drupal::httpClient(); zamiast curl w drupal 8 (ale curl też powinien działać).

Co znajduje się w twoim docker-compose.yml?

Czy masz coś takiego do swoich usług?

    services:
      api:
        extra_hosts:
          - "my_api_hostname.local:0.0.0.0"
        networks:
          defaults:
            aliases:
              - my_api_hostname.local
      
      front:
        depends_on:
          - api
        extra_hosts:
          - "my_front_hostname.local:0.0.0.0"
        networks:
          defaults:
            aliases:
              - my_front_hostname.local
1
MacSim 8 wrzesień 2020, 02:53