Często zadawane pytania — Azure App Service dla systemu Linux

Podsumowanie

Ten artykuł zawiera odpowiedzi na często zadawane pytania dotyczące App Service dla systemu Linux.

Wbudowane obrazy

Jakie są oczekiwane wartości sekcji Plik startowy podczas konfigurowania stosu środowiska uruchomieniowego?

W poniższej tabeli wymieniono oczekiwane wartości dla każdego stosu:

Stack Oczekiwana wartość
Java Platform, Standard Edition (Java SE) Polecenie uruchamiania aplikacji JAR (na przykład java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat Lokalizacja skryptu do wykonywania niezbędnych konfiguracji (na przykład /home/site/deployments/tools/startup_script.sh)
Node.js Plik konfiguracji menedżera procesów 2 (PM2) lub plik skryptu
.NET Core Skompilowana nazwa biblioteki DLL jako dotnet <myapp>.dll
PHP Opcjonalne uruchamianie niestandardowe
Python Opcjonalny skrypt uruchamiania
Ruby Skrypt języka Ruby, który inicjuje aplikację

Te polecenia lub skrypty są uruchamiane po uruchomieniu wbudowanego kontenera platformy Docker, ale przed uruchomieniem kodu aplikacji.

Zarządzanie

Co się stanie po wybraniu przycisku ponownego uruchomienia w portalu Azure?

Ta akcja jest taka sama jak ponowne uruchomienie platformy Docker.

Czy można używać protokołu Secure Shell (SSH) do nawiązywania połączenia z maszyną wirtualną kontenera aplikacji?

Tak, możesz połączyć się za pośrednictwem witryny Azure do zarządzania kodem źródłowym (SCM).

Note

Możesz również nawiązać połączenie z kontenerem aplikacji z komputera lokalnego przy użyciu protokołu SSH, protokołu SECURE File Transfer Protocol (SFTP) lub Visual Studio (VS).

Jak utworzyć plan usługi App Service systemu Linux za pomocą zestawu SDK lub szablonu Azure Resource Manager (ARM)?

Ustaw pole reserved usługi App Service na true.

Ciągła integracja i wdrażanie

Moja aplikacja internetowa nadal używa starego obrazu kontenera platformy Docker po zaktualizowaniu go w Docker Hub. Czy obsługujesz ciągłą integrację i ciągłe wdrażanie (CI/CD) kontenerów niestandardowych?

Tak, CI/CD jest wspierane. Aby uzyskać więcej informacji, zobacz Continuous Deployment with Web App for Containers (Ciągłe wdrażanie za pomocą usługi Web App for Containers).

Czy obsługujesz środowiska testowe?

Tak.

Czy mogę użyć narzędzia WebDeploy/MSDeploy?

Tak, ustaw WEBSITE_WEBDEPLOY_USE_SCM ustawienie na false.

Wdrażanie usługi Git kończy się niepowodzeniem przy użyciu aplikacji internetowych systemu Linux. Jak mogę obejść ten problem?

Użyj jednej z następujących opcji:

  • Korzystaj z usługi ciągłego dostarczania Azure z Azure DevOps lub GitHub.
  • Użyj interfejsu zipdeploy API i uruchom następujące polecenie z komputera lokalnego:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy

Obsługa języków

Chcę używać gniazd internetowych w mojej aplikacji Node.js. Czy istnieją jakieś specjalne ustawienia lub konfiguracje do ustawienia?

Tak, wyłącz perMessageDeflate w kodzie Node.js po stronie serwera. Jeśli na przykład używasz socket.io, użyj następującego kodu:

const io = require('socket.io')(server,{
  perMessageDeflate: false
});

Czy obsługujesz niekompilowane aplikacje platformy .NET Core?

Tak.

Czy obsługujesz program Composer jako menedżer zależności dla aplikacji PHP?

Tak. Podczas wdrażania usługi Git usługa Kudu powinna wykryć, że wdrażasz aplikację PHP (ze względu na obecność composer.lock pliku). Kudu następnie wyzwala instalację kompozytora.

Kontenery niestandardowe

Czy mogę używać tożsamości zarządzanych podczas ściągania obrazów z Azure Container Registry?

Tak. Użyj interfejsu wiersza polecenia platformy Azure (a nie witryny Azure Portal). Można użyć tożsamości przypisanych przez system lub użytkownika.

Używam własnego kontenera niestandardowego. Chcę, aby platforma zainstalować udział bloku komunikatów serwera (SMB) w /home/ katalogu. Czy jest to możliwe?

Jeśli ustawienie WEBSITES_ENABLE_APP_SERVICE_STORAGE nie jest określone lub ma wartość false, katalog /home/ nie będzie współdzielony między instancjami skalowania, a zapisane w nim pliki nie przetrwają ponownych uruchomień. Jawne ustawienie WEBSITES_ENABLE_APP_SERVICE_STORAGE na true włącza montowanie. Po ustawieniu tej wartości na true, aby wyłączyć montowanie, musisz jawnie ustawić WEBSITES_ENABLE_APP_SERVICE_STORAGE na false.

Nie można uruchomić kontenera z komunikatem "brak miejsca pozostawionego na urządzeniu". Co oznacza ten błąd?

App Service dla systemu Linux używa dwóch różnych typów magazynu:

  • Magazyn systemu plików: magazyn systemu plików jest uwzględniony w ramach limitu przydziału planu usługi App Service. Jest używany, gdy pliki są zapisywane w magazynie trwałym, który jest zakorzeniony w /home katalogu.
  • Miejsce na dysku hosta: miejsce na dysku hosta jest używane do przechowywania obrazów kontenerów. Jest zarządzana przez platformę przez sterownik pamięci masowej Docker.

Miejsce na dysku hosta jest oddzielone od przydziału pamięci systemu plików. Nie można go rozwinąć i istnieje limit 15 GB dla każdego wystąpienia. Jest używany do przechowywania dowolnych obrazów niestandardowych na pracowniku. W zależności od dokładnej dostępności miejsca na dysku hosta może być możliwe użycie większych niż 15 GB, ale nie jest to gwarantowane.

Jeśli zapisywalna warstwa kontenera zapisuje dane poza /home katalogiem lub instalowaną ścieżką Azure Storage, używane jest również miejsce na dysku hosta. Platforma rutynowo czyści miejsce na dysku hosta, aby usunąć nieużywane kontenery. Jeśli kontener zapisuje dużą ilość danych poza katalogiem /home lub korzysta z własnego magazynu (BYOS), skutkuje to błędami uruchamiania lub wyjątkami w czasie wykonywania, gdy zostanie przekroczony limit miejsca na dysku hosta. Utrzymuj obrazy kontenerów jak najmniejsze i zapisuj dane w trwałej pamięci masowej lub w BYOS podczas działania w usłudze App Service dla systemu Linux. Jeśli nie jest to możliwe, podziel plan usługi App Service, ponieważ miejsce na dysku hosta jest stałe i współdzielone między wszystkimi kontenerami w planie usługi App Service.

Uruchamianie mojego kontenera niestandardowego trwa długo, a platforma ponownie uruchamia kontener, zanim zakończy uruchamianie się. Jak rozwiązać ten problem?

Możesz skonfigurować czas oczekiwania platformy przed ponownym uruchomieniem kontenera. W tym celu ustaw WEBSITES_CONTAINER_START_TIME_LIMIT ustawienie aplikacji na odpowiednią wartość. Wartość minimalna domyślna to 230 sekund, a maksymalna wartość to 1800 sekund.

Jaki jest format adresu URL prywatnego serwera rejestru?

Podaj pełny adres URL rejestru, w tym https://.

Jaki jest format nazwy obrazu w opcji rejestru prywatnego?

Dodaj pełną nazwę obrazu, w tym adres URL rejestru prywatnego (na przykład myacr.azurecr.io/dotnet:latest). Nie można wprowadzać nazw obrazów korzystających z portu niestandardowego za pośrednictwem portalu. Aby ustawić docker-custom-image-name, użyj narzędzia wiersza polecenia az.

Czy mogę uwidocznić więcej niż jeden port na obrazie kontenera niestandardowego?

To nie jest obsługiwane.

Czy mogę użyć własnego magazynu danych (BYOS)?

Tak. Usługa BYOS jest obecnie dostępna w wersji zapoznawczej.

Dlaczego nie mogę przeglądać systemu plików kontenera niestandardowego ani uruchamiać procesów z witryny SCM?

Witryna SCM działa w osobnym kontenerze. Nie można sprawdzić systemu plików ani uruchomionych procesów kontenera aplikacji.

Czy muszę zaimplementować protokół HTTPS w kontenerze niestandardowym?

Nie. Platforma obsługuje terminację HTTPS na współdzielonych front-endach.

Czy muszę używać WEBSITES_PORT dla kontenerów niestandardowych?

Tak. To ustawienie jest wymagane dla kontenerów niestandardowych. Aby ręcznie skonfigurować port niestandardowy, użyj instrukcji EXPOSE w pliku Dockerfile oraz ustawienia aplikacji WEBSITES_PORT z wartością portu do powiązania z kontenerem.

Czy mogę użyć ASPNETCORE_URLS w obrazie Docker?

Tak. Pamiętaj, aby nadpisać zmienną środowiskową przed uruchomieniem aplikacji .NET Core. Na przykład w init.sh skrypcie, użyj: export ASPNETCORE_URLS={Your value}.

Wiele kontenerów za pomocą narzędzia Docker Compose

Jak skonfigurować Azure Container Registry do użycia z wieloma kontenerami?

Aby użyć Azure Container Registry z wieloma kontenerami, hostuj wszystkie obrazy kontenerów na tym samym serwerze rejestru Azure Container Registry. Gdy obrazy znajdują się na tym samym serwerze rejestru, utwórz ustawienia aplikacji i zaktualizuj plik konfiguracji narzędzia Docker Compose, aby uwzględnić nazwę obrazu Azure Container Registry.

Utwórz następujące ustawienia aplikacji:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (Użyj pełnego adresu URL. Na przykład: https://<server-name>.azurecr.io.)
  • DOCKER_REGISTRY_SERVER_PASSWORD(Włącz dostęp administratora w ustawieniach Azure Container Registry).

W pliku konfiguracji odwołaj się do obrazu Azure Container Registry, jak w poniższym przykładzie:

image: <server-name>.azurecr.io/<image-name>:<tag>

Jak mogę wiedzieć, który kontener jest dostępny z Internetu?

  • W celu uzyskania dostępu można otworzyć tylko jeden kontener.
  • Dostępne są tylko porty 80 i 8080 (otwarte porty).

Poniżej przedstawiono reguły określania, który kontener jest dostępny (w kolejności pierwszeństwa):

  • Ustawienie aplikacji WEBSITES_WEB_CONTAINER_NAME przypisane do nazwy kontenera.
  • Pierwszy kontener do zdefiniowania portu 80 lub 8080.
  • Jeśli żadna z powyższych reguł nie jest prawdziwa, pierwszy kontener zdefiniowany w pliku jest dostępny (uwidoczniony).

Jak używać depends_on?

Usługa App Service nie obsługuje opcji depends_on i ignoruje ją. Podobnie jak zalecenie dotyczące uruchamiania i zamykania kontrolki z platformy Docker, aplikacje wielokontenerowe usługi App Service powinny sprawdzać zależności za pomocą kodu aplikacji, zarówno podczas uruchamiania, jak i rozłączania.

Poniższy przykładowy kod przedstawia sprawdzanie aplikacji w języku Python w celu sprawdzenia, czy kontener Redis jest uruchomiony:

          import time
          import redis
          from flask import Flask
          app = Flask(__name__)
          cache = redis.Redis(host='redis', port=6379)
          def get_hit_count():
              retries = 5
              while True:
                  try:
                      return cache.incr('hits')
                  except redis.exceptions.ConnectionError as exc:
                      if retries == 0:
                          raise exc
                      retries -= 1
                      time.sleep(0.5)
          @app.route('/')
          def hello():
              count = get_hit_count()
              return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
          if __name__ == "__main__":
              app.run(host="0.0.0.0", port=80, debug=True)

Czy protokół WebSocket jest obsługiwany?

WebSockety są obsługiwane w aplikacjach systemu Linux. Ustawienie webSocketsEnabled ARM nie dotyczy aplikacji Linux, ponieważ połączenia WebSocket są zawsze włączone w systemie Linux.

Ważne

WebSockety są teraz obsługiwane dla aplikacji systemu Linux w bezpłatnych planach usługi App Service. Można mieć maksymalnie pięć połączeń protokołu WebSocket. Przekroczenie tego limitu powoduje błąd HTTP 429 (zbyt wiele żądań).

Cennik i umowa licencyjna usługi (SLA)

Jakie są ceny teraz, gdy usługa jest ogólnie dostępna?

Ceny różnią się w zależności od jednostki SKU i regionu. Zobacz więcej szczegółów na naszej stronie cennika: Cennik usługi App Service.

Inne pytania

Jak działa żądanie rozgrzewania kontenera?

Gdy usługa App Service uruchamia kontener, żądanie rozgrzewające wysyła żądanie HTTP do punktu końcowego /robots933456.txt aplikacji. Ten punkt końcowy jest symbolem zastępczym, ale aplikacja musi odpowiedzieć, zwracając dowolny kod stanu (w tym 5xx). Jeśli logika aplikacji nie odpowiada, wysyłając kod stanu HTTP do nieistniejących punktów końcowych, żądanie rozgrzewki nie może odebrać odpowiedzi. W związku z tym nieustannie ponownie uruchamia kontener.

Aby zmienić to domyślne zachowanie, dostosuj ścieżkę punktu końcowego rozgrzewki i kody stanu, które uwzględniają rozgrzanie lokacji. Ustaw ustawienia aplikacji WEBSITE_WARMUP_PATH i WEBSITE_WARMUP_STATUSES .

Żądanie rozgrzewki może również zakończyć się niepowodzeniem z powodu błędnej konfiguracji portu.

Czy można zwiększyć limit czasu żądania rozgrzewania kontenera?

Żądanie rozgrzewania domyślnie kończy się niepowodzeniem po odczekaniu 240 sekund odpowiedzi z kontenera. Możesz zwiększyć limit czasu żądania rozgrzewania kontenera, dodając ustawienie WEBSITES_CONTAINER_START_TIME_LIMIT aplikacji z wartością z zakresu od 240 do 1800 sekund.

Jak określić port w kontenerze systemu Linux?

W poniższej tabeli opisano sposób określania portu w kontenerze systemu Linux:

Typ kontenera Description Jak ustawić lub użyć portu
Kontenery wbudowane Jeśli wybierzesz wersję języka/platformy dla aplikacji systemu Linux, zostanie wybrany wstępnie zdefiniowany kontener. Aby wskazać kod aplikacji do odpowiedniego portu, użyj zmiennej środowiskowej PORT .
Kontenery niestandardowe Masz pełną kontrolę nad kontenerem. Usługa App Service nie ma kontroli nad tym, na jakim porcie nasłuchuje twój kontener. Potrzebne jest wiedzieć, do którego portu należy przekazywać żądania. Jeśli kontener nasłuchuje portu 80 lub 8080, usługa App Service będzie mogła go automatycznie wykryć. Jeśli nasłuchuje innego portu, musisz ustawić WEBSITES_PORT ustawienie aplikacji na numer portu, a usługa App Service przekazuje żądania do tego portu w kontenerze. Ustawienie WEBSITES_PORT aplikacji nie ma żadnego wpływu w kontenerze i nie można uzyskać do niego dostępu jako zmiennej środowiskowej w kontenerze.

Czy mogę używać bazy danych opartej na plikach (na przykład SQLite) z moją aplikacją internetową systemu Linux?

System plików Twojej aplikacji to zamontowany udział sieciowy. Umożliwia to skalowanie horyzontalne w scenariuszach, w których kod musi być uruchamiany na wielu hostach. Blokuje to jednak użycie dostawców baz danych opartych na plikach, takich jak SQLite, ponieważ nie jest możliwe uzyskanie wyłącznych blokad w pliku bazy danych. Użyj usługi zarządzanej bazy danych, takiej jak Azure SQL, Azure Database for MySQL lub Azure Database for PostgreSQL.

Jakie są obsługiwane znaki w nazwach ustawień aplikacji?

W ustawieniach aplikacji można używać tylko liter (A-Z, a-z), cyfr (0–9) i znaku podkreślenia (_).

Gdzie mogę zażądać nowych funkcji?

Swój pomysł możesz przesłać na forum opinii usługi Web Apps. Dodaj ciąg "[Linux]" do tytułu swojego pomysłu.

References