Azure App Service on Linux FAQ (Usługa Azure App Service w systemie Linux — często zadawane pytania)

Uwaga 16.

Czy ten artykuł był pomocny? Twoje dane wejściowe są dla nas ważne. Użyj przycisku Opinie na tej stronie, aby poinformować nas, jak dobrze działa ten artykuł lub jak możemy go ulepszyć.

Wraz z wydaniem App Service dla systemu Linux pracujemy nad dodawaniem funkcji i wprowadzaniem ulepszeń naszej platformy. Ten artykuł zawiera odpowiedzi na pytania, które ostatnio zadają nam nasi klienci.

Jeśli masz pytanie, dodaj komentarz do tego artykułu.

Wbudowane obrazy

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

Stos Oczekiwana wartość
Java SE polecenie uruchamiania aplikacji JAR (na przykład java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat lokalizacja skryptu do wykonywania wszelkich niezbędnych konfiguracji (na przykład /home/site/deployments/tools/startup_script.sh)
Node.js plik konfiguracji 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, za pomocą którego chcesz zainicjować aplikację

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

Zarządzanie

Co się stanie po naciśnięciu przycisku ponownego uruchomienia w witrynie Azure Portal?

Ta akcja jest taka sama jak ponowne uruchomienie platformy Docker.

Czy mogę użyć protokołu Secure Shell (SSH) do nawiązania połączenia z maszyną wirtualną kontenera aplikacji?

Tak, można to zrobić za pośrednictwem lokacji zarządzania kontrolą źródła (SCM).

Uwaga 16.

Możesz również nawiązać połączenie z kontenerem aplikacji bezpośrednio z lokalnego komputera deweloperskiego przy użyciu protokołu SSH, SFTP lub programu Visual Studio Code (na potrzeby debugowania na żywo aplikacji Node.js). Aby uzyskać więcej informacji, zobacz Zdalne debugowanie i protokół SSH w usłudze App Service w systemie Linux.

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

Ustaw pole zarezerwowane usługi app service na wartość true.

Obsługa ciągłej integracji i ciągłego wdrażania

Moja aplikacja internetowa nadal używa starego obrazu kontenera platformy Docker po zaktualizowaniu obrazu w usłudze Docker Hub. Czy obsługujesz ciągłą integrację i wdrażanie kontenerów niestandardowych?

Tak, aby skonfigurować ciągłą integrację/ciągłe wdrażanie dla usługi Azure Container Registry lub DockerHub, postępując zgodnie z instrukcjami Ciągłe wdrażanie za pomocą usługi Web App for Containers. W przypadku rejestrów prywatnych można odświeżyć kontener, zatrzymując się, a następnie uruchamiając aplikację internetową. Możesz też zmienić lub dodać fikcyjne ustawienie aplikacji, aby wymusić odświeżenie kontenera.

Czy obsługujesz środowiska przejściowe?

Tak.

Czy mogę użyć polecenia "WebDeploy/MSDeploy", aby wdrożyć moją aplikację internetową?

Tak, należy ustawić ustawienie aplikacji o nazwie WEBSITE_WEBDEPLOY_USE_SCM false.

Wdrożenie usługi Git aplikacji kończy się niepowodzeniem podczas korzystania z aplikacji internetowej systemu Linux. Jak mogę obejść ten problem?

Jeśli wdrożenie usługi Git nie powiedzie się w aplikacji internetowej systemu Linux, wybierz jedną z następujących opcji, aby wdrożyć kod aplikacji:

Obsługa języków

Chcę używać gniazd internetowych w mojej aplikacji Node.js, wszelkich ustawień specjalnych lub konfiguracji 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 kudu powinien wykryć, że wdrażasz aplikację PHP (dzięki obecności pliku composer.lock), a kudu wyzwoli instalację kompozytora.

Kontenery niestandardowe

Czy mogę używać tożsamości zarządzanych z usługą App Service podczas ściągania obrazów w usłudze ACR?

Tak, ta funkcja jest dostępna w interfejsie wiersza polecenia platformy Azure. Można użyć tożsamości przypisanych przez system lub przypisanych przez użytkownika. Ta funkcja nie jest obecnie obsługiwana w witrynie Azure Portal.

Używam własnego kontenera niestandardowego. Chcę, aby platforma zainstalować udział SMB w katalogu "/home/".

Jeśli WEBSITES_ENABLE_APP_SERVICE_STORAGE ustawienie jest nieokreślone lub ustawione na wartość false, /home/ katalog nie będzie współużytkowany w wystąpieniach skalowania, a zapisane pliki nie będą utrwalane po ponownym uruchomieniu. Jawne ustawienie WEBSITES_ENABLE_APP_SERVICE_STORAGE wartości true spowoduje włączenie instalacji. Po ustawieniu wartości true, jeśli chcesz wyłączyć instalację, musisz jawnie ustawić WEBSITES_ENABLE_APP_SERVICE_STORAGE wartość 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 ona zarządzana przez platformę za pośrednictwem sterownika magazynu platformy Docker.

Miejsce na dysku hosta jest oddzielone od limitu przydziału magazynu systemu plików. Nie można go rozwinąć i istnieje limit 15 GB dla każdego wystąpienia. Służy do przechowywania dowolnych obrazów niestandardowych w ramach procesu roboczego. 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 zainstalowanej ścieżki magazynu platformy Azure, zostanie również użyte 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 /home katalogiem lub byOS ( Bring Your Own Storage), spowoduje to błędy uruchamiania lub wyjątki środowiska uruchomieniowego po przekroczeniu limitu miejsca na dysku hosta.

Zalecamy przechowywanie obrazów kontenerów tak małych, jak to możliwe i zapisywanie danych w magazynie trwałym lub byOS podczas uruchamiania w usłudze App Service systemu Linux. Jeśli nie jest to możliwe, musisz podzielić plan usługi App Service, ponieważ miejsce na dysku hosta jest stałe i współdzielone między wszystkie kontenery w planie usługi App Service.

Uruchamianie kontenera niestandardowego trwa długo, a platforma uruchamia ponownie kontener przed jego uruchomieniem.

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ść 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 http:// lub 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). Nazwy obrazów używające portu niestandardowego nie mogą być wprowadzane za pośrednictwem portalu. Aby ustawić docker-custom-image-namepolecenie , użyj az narzędzia wiersza polecenia.

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

Nie obsługujemy uwidaczniania więcej niż jednego portu.

Czy mogę przenieść własny magazyn?

Tak, funkcja bring your own storage jest 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 kończenie żądań HTTPS na udostępnionych frontonach.

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

Tak, jest to wymagane w przypadku kontenerów niestandardowych. Aby ręcznie skonfigurować port niestandardowy, użyj instrukcji EXPOSE w pliku Dockerfile i ustawieniu aplikacji, WEBSITES_PORT z wartością portu, która ma być powiązana z kontenerem.

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

Tak, zastąp zmienną środowiskową przed uruchomieniem aplikacji .NET Core. Na przykład w skrycie init.sh: eksportowanie ASPNETCORE_URLS={Wartość}

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

Jak mogę skonfigurować usługę Azure Container Registry (ACR) do użycia z wieloma kontenerami?

Aby można było używać usługi ACR z wieloma kontenerami, wszystkie obrazy kontenerów muszą być hostowane na tym samym serwerze rejestru usługi ACR. Gdy znajdują się one na tym samym serwerze rejestru, należy utworzyć ustawienia aplikacji, a następnie zaktualizować plik konfiguracji narzędzia Docker Compose, aby uwzględnić nazwę obrazu usługi ACR.

Utwórz następujące ustawienia aplikacji:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (pełny adres URL, np. https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (włącz dostęp administratora w ustawieniach usługi ACR)

W pliku konfiguracji odwołaj się do obrazu usługi ACR, 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?

  • Tylko jeden kontener może być otwarty w celu uzyskania dostępu
  • Dostępny jest tylko port 80 i 8080 (uwidocznione porty)

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

  • Ustawienie WEBSITES_WEB_CONTAINER_NAME aplikacji ustawione na nazwę kontenera
  • Pierwszy kontener do zdefiniowania portu 80 lub 8080
  • Jeśli żadna z powyższych wartości nie jest prawdziwa, pierwszy kontener zdefiniowany w pliku będzie dostępny (uwidoczniony)

Jak mogę używać depends_on?

Opcja depends_on jest nieobsługiwana w usłudze App Service i zostanie zignorowana. Podobnie jak zalecenie dotyczące uruchamiania i zamykania kontrolki z platformy Docker, aplikacje wielokontenerowe usługi App Service powinny sprawdzać zależności za pośrednictwem kodu aplikacji — zarówno podczas uruchamiania, jak i rozłączania. Poniższy przykładowy kod przedstawia sprawdzanie aplikacji w języku Python, aby sprawdzić, 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)

Gniazda sieci Web

Gniazda internetowe są obsługiwane w aplikacjach systemu Linux. Ustawienie webSocketsEnabled usługi ARM nie ma zastosowania do aplikacji systemu Linux, ponieważ gniazda internetowe są zawsze włączone dla systemu Linux.

Ważne

Gniazda internetowe są teraz obsługiwane w przypadku aplikacji systemu Linux w planach bezpłatnej usługi App Service. Obsługujemy maksymalnie pięć połączeń gniazd internetowych w planach bezpłatnej usługi App Service. Przekroczenie tego limitu powoduje zwrócenie odpowiedzi HTTP 429 (zbyt wiele żądań).

Cennik i umowy 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, ale możesz zobaczyć więcej szczegółów na naszej stronie cennika: Cennik usługi App Service.

Inne pytania

Jak działa żądanie rozgrzewania kontenera?

Po uruchomieniu kontenera przez usługi aplikacja systemu Azure żądanie rozgrzewki wysyła żądanie HTTP do punktu końcowego /robots933456.txt aplikacji. Jest to po prostu fikcyjny punkt końcowy, ale aplikacja musi odpowiadać za pomocą dowolnego kodu stanu innego niż 5XX. Jeśli logika aplikacji nie odpowiada z żadnym kodem stanu HTTP do nieistniejących punktów końcowych, żądanie rozgrzewania nie może odebrać odpowiedzi i bezterminowe ponowne uruchomienie kontenera. Żądanie rozgrzewki może również zakończyć się niepowodzeniem z powodu błędu konfiguracji portu.

Aby upewnić się, że port jest poprawnie skonfigurowany w usługach aplikacja systemu Azure, zobacz pytanie Jak mogę określić port w kontenerze systemu Linux?

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 mogę określić port w kontenerze systemu Linux?

Typ kontenera opis Jak ustawić/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 którym porcie nasłuchuje 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ć ustawienie aplikacji WEBSITES_PORT na numer portu, a usługa App Service przekazuje żądania do tego portu w kontenerze. Ustawienie aplikacji WEBSITES_PORT 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 aplikacją internetową systemu Linux?

System plików aplikacji jest zainstalowanym udziałem sieciowym. Umożliwia to skalowanie w poziomie scenariuszy, w których kod musi być wykonywany na wielu hostach. Niestety blokuje to 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. Zalecamy usługę zarządzanej bazy danych: 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.