Azure App Service w systemie Linux — często zadawane pytania

Uwaga

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ł dla Ciebie lub jak możemy go ulepszyć.

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

Jeśli masz pytanie, skomentować ten artykuł.

Wbudowane obrazy

Chcę utworzyć rozwidlenie wbudowanych kontenerów platformy Docker udostępnianych przez platformę. Gdzie mogę znaleźć te pliki?

Wszystkie pliki platformy Docker można znaleźć w witrynie GitHub.

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

Stosu 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órych 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 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

Możesz również połączyć się z kontenerem aplikacji bezpośrednio z lokalnej maszyny deweloperskiej przy użyciu protokołu SSH, SFTP lub Visual Studio Code (w celu debugowania na żywo Node.js aplikacji). Aby uzyskać więcej informacji, zobacz Zdalne debugowanie i protokół SSH w App Service dla systemu Linux.

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

Ustaw pole zarezerwowane usługi App Service na wartość true.

Ciągła integracja i wdrażanie

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

Tak, aby skonfigurować ciągłą integrację/wdrażanie dla Azure Container Registry lub DockerHub, postępuj zgodnie z instrukcjami dotyczącymi ciągłego wdrażania z aplikacją internetową dla kontenerów. W przypadku rejestrów prywatnych można odświeżyć kontener, zatrzymując, 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" do wdrożenia mojej aplikacji internetowej?

Tak, musisz ustawić ustawienie aplikacji o nazwie WEBSITE_WEBDEPLOY_USE_SCMfalse.

Wdrażanie usługi Git mojej aplikacji kończy się niepowodzeniem podczas korzystania z aplikacji internetowej systemu Linux. Jak 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 wdrażania kodu aplikacji:

Obsługa języka

Chcę używać gniazd internetowych w mojej aplikacji Node.js, jakichkolwiek specjalnych ustawień lub konfiguracji do ustawienia?

Tak, wyłącz perMessageDeflate kod 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 nieskompilowane 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 platforma Kudu powinna wykryć, że wdrażasz aplikację PHP (dzięki obecności pliku composer.lock), a następnie usługa Kudu wyzwoli instalację kompozytora.

Kontenery niestandardowe

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

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

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

Jeśli WEBSITES_ENABLE_APP_SERVICE_STORAGE ustawienie jest nieokreślone lub jest ustawione na wartość false, /home/ katalog nie będzie współużytkowany w wystąpieniach skalowania, a zapisane pliki nie będą utrwalane podczas ponownego uruchamiania. Jawne ustawienie WEBSITES_ENABLE_APP_SERVICE_STORAGEwartości true spowoduje włączenie instalacji. Po ustawieniu wartości true, jeśli chcesz wyłączyć instalację, musisz jawnie ustawić wartość WEBSITES_ENABLE_APP_SERVICE_STORAGEfalse.

Nie można uruchomić kontenera z komunikatem "nie ma miejsca 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 limitach przydziału planu App Service. Jest on 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 służy 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 obrazów niestandardowych w procesie roboczym. W zależności od dokładnej dostępności miejsca na dysku hosta może być możliwe użycie większej niż 15 GB, ale nie jest to gwarantowane.

Jeśli warstwa zapisywalna kontenera zapisuje dane poza /home katalogiem lub zainstalowaną ścieżką magazynu platformy Azure, zostanie również zuż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 Przynieś własny magazyn (BYOS), spowoduje to niepowodzenie uruchamiania lub wyjątki środowiska uruchomieniowego po przekroczeniu limitu miejsca na dysku hosta.

Zalecamy jak najmniejsze przechowywanie obrazów kontenerów i zapisywanie danych w magazynie trwałym lub w systemie BYOS podczas uruchamiania w systemie Linux App Service. Jeśli nie jest to możliwe, musisz podzielić plan App Service, ponieważ miejsce na dysku hosta jest stałe i współużytkowane między wszystkie kontenery w planie App Service.

Uruchamianie kontenera niestandardowego zajmuje dużo czasu, a platforma ponownie uruchamia kontener przed jego zakończeniem.

Możesz skonfigurować czas oczekiwania platformy przed ponownym uruchomieniem kontenera. W tym celu ustaw WEBSITES_CONTAINER_START_TIME_LIMIT ustawienie aplikacji na żądaną wartość. Wartość domyślna to 230 sekund, a wartość maksymalna 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). Nazw obrazów korzystających z portu niestandardowego nie można wprowadzić za pośrednictwem portalu. Aby ustawić docker-custom-image-namepolecenie , użyj narzędzia wierszaaz polecenia.

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

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

Czy mogę przynieść 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?

Lokacja SCM działa w oddzielnym 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 zakończenie protokołu 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 do powiązania w kontenerze.

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

Tak, zastąp zmienną środowiskową przed uruchomieniem aplikacji .NET Core. Na przykład w skrypcie init.sh: export ASPNETCORE_URLS={Your value}

Wiele kontenerów z narzędziem Docker Compose

Jak mogę skonfigurować 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 w celu uwzględnienia nazwy 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łuj się do obrazu usługi ACR, podobnie 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?

  • Aby uzyskać dostęp, można otworzyć tylko jeden kontener
  • Tylko porty 80 i 8080 są dostępne (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 definiujący port 80 lub 8080
  • Jeśli żadna z powyższych wartości nie ma wartości true, pierwszy kontener zdefiniowany w pliku będzie dostępny (uwidocznione)

Jak mogę używać depends_on?

Opcja depends_on nie jest obsługiwana w App Service i zostanie zignorowana. Podobnie jak zalecenie dotyczące uruchamiania i zamykania kontrolki z platformy Docker, App Service aplikacje z wieloma kontenerami powinny sprawdzać zależności za pomocą kodu aplikacji — zarówno podczas uruchamiania, jak i rozłączenia. Poniższy przykładowy kod pokazuje aplikację języka Python sprawdzającą, 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)

Web Sockets

Gniazda sieci Web są obsługiwane w aplikacjach systemu Linux. Ustawienie webSocketsEnabled arm nie ma zastosowania do aplikacji systemu Linux, ponieważ gniazda sieci Web są zawsze włączone dla systemu Linux.

Ważna

Gniazda sieci Web są teraz obsługiwane w przypadku aplikacji systemu Linux w planach bezpłatnej App Service. Obsługujemy maksymalnie pięć połączeń gniazd internetowych w planach Bezpłatna App Service. Przekroczenie tego limitu powoduje odpowiedź HTTP 429 (zbyt wiele żądań).

Cennik i umowa SLA

Jaki jest cennik, teraz, gdy usługa jest ogólnie dostępna?

Ceny różnią się w zależności od jednostki SKU i regionu, ale więcej szczegółów można znaleźć na naszej stronie cennika: App Service Cennik.

Inne pytania

Jak działa żądanie rozgrzewki kontenera?

Po uruchomieniu kontenera przez usługi aplikacja systemu Azure żądanie rozgrzewania wysyła żądanie HTTP do punktu końcowego /robots933456.txt aplikacji. Jest to po prostu fikcyjny punkt końcowy, ale aplikacja musi odpowiedzieć dowolnym kodem stanu innym niż 5XX. Jeśli logika aplikacji nie odpowiada kodem stanu HTTP na nieistniejące punkty końcowe, żądanie rozgrzewki nie może otrzymać odpowiedzi i bezterminowo ponownie uruchamia kontener. Żądanie rozgrzewania również może zakończyć się niepowodzeniem z powodu błędnej konfiguracji portu.

Aby upewnić się, że port jest poprawnie skonfigurowany w usługach aplikacja systemu Azure Services, 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 na odpowiedź z kontenera. Limit czasu żądania rozgrzewania kontenera można zwiększyć, dodając ustawienie WEBSITES_CONTAINER_START_TIME_LIMIT aplikacji o wartości 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/struktury dla aplikacji systemu Linux, zostanie wybrany wstępnie zdefiniowany kontener. Aby wskazać kod aplikacji na odpowiedni port, użyj zmiennej środowiskowej PORT.
Kontenery niestandardowe Masz pełną kontrolę nad kontenerem. App Service nie ma kontroli nad tym, na którym porcie nasłuchuje kontener. Potrzebna jest wiedza o tym, do którego portu przesyłać żądania dalej. Jeśli kontener nasłuchuje portu 80 lub 8080, App Service może go automatycznie wykryć. Jeśli nasłuchuje innego portu, musisz ustawić ustawienie aplikacji WEBSITES_PORT na numer portu, a App Service przesyła żą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 (takiej jak SQLite) z moją 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 korzystanie z dostawców baz danych opartych na plikach, takich jak SQLite, ponieważ nie można uzyskać 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?

Dla ustawień 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 Web Apps. Dodaj ciąg "[Linux]" do tytułu pomysłu.