ASP.NET Core: Câu hỏi thường gặp về App Service Azure trên Linux


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Hình ảnh tích hợp

Tôi muốn rẽ nhánh các bộ chứa Docker tích hợp mà nền tảng cung cấp. Tôi có thể tìm những tập tin đó ở đâu?

Bạn có thể tìm thấy tất cả các tệp Docker trên GitHub.

Các giá trị dự kiến ​​cho phần Startup File khi tôi định cấu hình ngăn xếp thời gian chạy là gì?

Stack Giá trị được kì vọng
Java SE lệnh để khởi động ứng dụng JAR của bạn (ví dụ:  java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat vị trí của tập lệnh để thực hiện bất kỳ cấu hình cần thiết nào (ví dụ:  /home/site/deployments/tools/startup_script.sh)
Node.js tệp cấu hình PM2 hoặc tệp tập lệnh của bạn
.NET Core tên DLL đã biên dịch là dotnet <myapp>.dll
PHP khởi động tùy chỉnh tùy chọn 
Python tập lệnh khởi động tùy chọn
Ruby tập lệnh Ruby mà bạn muốn khởi tạo ứng dụng của mình bằng

Các lệnh hoặc tập lệnh này được thực thi sau khi bộ chứa Docker tích hợp được khởi động, nhưng trước khi mã ứng dụng của bạn được khởi động.

Quản trị

Điều gì xảy ra khi tôi nhấn nút khởi động lại trong cổng Azure?

Hành động này giống như khởi động lại Docker.

Tôi có thể sử dụng Secure Shell (SSH) để kết nối với máy ảo chứa ứng dụng (VM) không?

Có, bạn có thể làm điều đó thông qua trang web quản lý kiểm soát nguồn (SCM).

Ghi chú

Bạn cũng có thể kết nối trực tiếp với bộ chứa ứng dụng từ máy phát triển cục bộ của mình bằng SSH, SFTP hoặc Visual Studio Code (để gỡ lỗi trực tiếp các ứng dụng Node.js). Để biết thêm thông tin, hãy xem  Gỡ lỗi từ xa và SSH trong App Service trên Linux.

Làm cách nào tôi có thể tạo gói App Service Linux thông qua SDK hoặc mẫu Trình quản lý tài nguyên Azure?

Đặt trường dành riêng của dịch vụ ứng dụng thành true.

Tích hợp và triển khai liên tục

Ứng dụng web của tôi vẫn sử dụng hình ảnh bộ chứa Docker cũ sau khi tôi đã cập nhật hình ảnh trên Docker Hub. Bạn có hỗ trợ tích hợp liên tục và triển khai các vùng chứa tùy chỉnh không?

Có, để thiết lập tích hợp/triển khai liên tục cho Azure Container Registry hoặc DockerHub, bằng cách làm theo Triển khai liên tục với ứng dụng web cho bộ chứa. Đối với các cơ quan đăng ký riêng tư, bạn có thể làm mới vùng chứa bằng cách dừng rồi khởi động ứng dụng web của mình. Hoặc bạn có thể thay đổi hoặc thêm cài đặt ứng dụng giả để buộc làm mới vùng chứa của mình.

Bạn có hỗ trợ môi trường dựng không?

Có.

Tôi có thể sử dụng 'WebDeploy/MSDeploy' để triển khai ứng dụng web của mình không?

Có, bạn cần đặt cài đặt ứng dụng có tên  WEBSITE_WEBDEPLOY_USE_SCM là false.

Việc triển khai ứng dụng Git của tôi không thành công khi sử dụng ứng dụng web Linux. Làm thế nào tôi có thể làm việc xung quanh vấn đề?

Nếu việc triển khai Git không thành công với ứng dụng web Linux của bạn, hãy chọn một trong các tùy chọn sau để triển khai mã ứng dụng của bạn:

curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
  • Nếu bạn gặp lỗi  curl không tìm thấy lệnh, hãy đảm bảo rằng bạn đã cài đặt curl bằng cách sử dụng  apt-get install curl trước khi chạy lệnh  curl trước đó.

Hỗ trợ ngôn ngữ

Tôi muốn sử dụng web socket trong ứng dụng Node.js của mình, thì cần cài đặt đặc biệt hoặc cấu hình nào?

Có, hãy tắt  perMessageDeflate trong code Node.js phía máy chủ của bạn. Ví dụ: nếu bạn đang sử dụng socket.io, hãy sử dụng mã sau:

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

Bạn có hỗ trợ các ứng dụng .NET Core chưa biên dịch không?

Có.

Bạn có hỗ trợ Composer làm trình quản lý phụ thuộc cho các ứng dụng PHP không?

Có, trong quá trình triển khai Git, Kudu sẽ phát hiện ra rằng bạn đang triển khai ứng dụng PHP (nhờ có tệp composer.lock) và sau đó Kudu sẽ kích hoạt cài đặt composer.

Vùng chứa tùy chỉnh

Tôi có thể sử dụng Managed Identities với App Service khi kéo hình ảnh từ ACR không?

Có, chức năng này có sẵn từ Azure CLI. Bạn có thể sử dụng danh tính do hệ thống hoặc người dùng chỉ định. Chức năng này hiện không được hỗ trợ trong cổng Azure.

Tôi đang sử dụng vùng chứa tùy chỉnh của riêng mình. Tôi muốn nền tảng gắn chia sẻ SMB vào thư mục `/home/`.

Nếu cài đặt WEBSITES_ENABLE_APP_SERVICE_STORAGE không được chỉ định hoặc được đặt thành false, thì thư mục /home/ sẽ không được chia sẻ trên các phiên bản tỷ lệ và các tệp được ghi sẽ không tồn tại trong các lần khởi động lại. Đặt tường minh WEBSITES_ENABLE_APP_SERVICE_STORAGE thành true sẽ kích hoạt quá trình gắn kết. Khi điều này được đặt thành true, nếu bạn muốn tắt tính năng gắn kết, bạn cần đặt WEBSITES_ENABLE_APP_SERVICE_STORAGE thành false một cách tường minh.

Vùng chứa của tôi không khởi động được vì lỗi "no space left on device". Lỗi này nghĩa là gì?

App Service trên Linux sử dụng hai loại lưu trữ khác nhau:

  • Dung lượng lưu trữ hệ thống tệp: Dung lượng lưu trữ hệ thống tệp được bao gồm trong hạn ngạch của gói App Service. Nó được sử dụng khi các tệp được lưu vào bộ lưu trữ liên tục bắt nguồn từ thư mục /home.
  • Không gian đĩa máy chủ: Không gian đĩa máy chủ được sử dụng để lưu trữ hình ảnh vùng chứa. Nó được quản lý bởi nền tảng thông qua trình điều khiển lưu trữ docker.

Không gian đĩa máy chủ tách biệt với hạn ngạch lưu trữ hệ thống tệp. Nó không thể mở rộng và có giới hạn 15 GB cho mỗi phiên bản. Nó được sử dụng để lưu trữ bất kỳ hình ảnh tùy chỉnh nào trên worker. Bạn có thể sử dụng dung lượng lớn hơn 15 GB tùy thuộc vào tình trạng sẵn có chính xác của dung lượng ổ đĩa máy chủ, nhưng điều này không được đảm bảo.

Nếu lớp có thể ghi của vùng chứa lưu dữ liệu bên ngoài thư mục /home hoặc đường dẫn lưu trữ Azure được gắn, thì dung lượng đĩa lưu trữ cũng sẽ được sử dụng.

Nền tảng thường xuyên dọn dẹp không gian đĩa máy chủ để loại bỏ các vùng chứa không sử dụng. Nếu bộ chứa ghi một lượng lớn dữ liệu bên ngoài thư mục /home hoặc Bring Your Own Storage (BYOS), điều đó sẽ dẫn đến lỗi khởi động hoặc ngoại lệ thời gian chạy khi vượt quá giới hạn dung lượng ổ đĩa máy chủ.

Chúng tôi khuyên bạn nên giữ hình ảnh bộ chứa của mình càng nhỏ càng tốt và ghi dữ liệu vào bộ lưu trữ liên tục hoặc BYOS khi chạy trên App Service Linux. Nếu không thể, bạn phải chia gói App Service vì dung lượng ổ đĩa lưu trữ là cố định và được chia sẻ giữa tất cả các vùng chứa trong App Service Plan.

Vùng chứa tùy chỉnh của tôi mất nhiều thời gian để bắt đầu và nền tảng khởi động lại vùng chứa trước khi hoàn tất khởi động.

Bạn có thể định cấu hình khoảng thời gian nền tảng sẽ đợi trước khi khởi động lại vùng chứa của bạn. Để làm như vậy, hãy đặt  WEBSITES_CONTAINER_START_TIME_LIMIT cài đặt ứng dụng thành giá trị bạn muốn. Giá trị mặc định là 230 giây và giá trị tối đa là 1800 giây.

Định dạng cho URL máy chủ đăng ký riêng là gì?

Cung cấp URL đăng ký đầy đủ, bao gồm http:// hoặc https://.

Định dạng cho tên hình ảnh trong tùy chọn đăng ký riêng tư là gì?

Thêm tên hình ảnh đầy đủ, bao gồm cả URL đăng ký riêng tư (ví dụ: myacr.azurecr.io/dotnet:latest). Không thể nhập tên hình ảnh sử dụng cổng tùy chỉnh qua cổng. Để thiết lập docker-custom-image-name, hãy sử dụng công cụ dòng lệnh az.

Tôi có thể hiển thị nhiều cổng trên hình ảnh vùng chứa tùy chỉnh của mình không?

Chúng tôi không hỗ trợ hiển thị nhiều hơn một cổng.

Tôi có thể mang theo bộ lưu trữ của riêng mình không?

Có, bộ nhớ mang theo của riêng bạn đang ở chế độ xem trước.

Tại sao tôi không thể duyệt qua hệ thống tệp của vùng chứa tùy chỉnh của mình hoặc chạy các quy trình từ trang web SCM?

Trang web SCM chạy trong một vùng chứa riêng biệt. Bạn không thể kiểm tra hệ thống tệp hoặc các quy trình đang chạy của vùng chứa ứng dụng.

Tôi có cần triển khai HTTPS trong vùng chứa tùy chỉnh của mình không?

Không, nền tảng xử lý chấm dứt HTTPS ở giao diện người dùng được chia sẻ.

Tôi có cần sử dụng WEBSITES_PORT cho vùng chứa tùy chỉnh không?

Có, điều này là bắt buộc đối với vùng chứa tùy chỉnh. Để định cấu hình cổng tùy chỉnh theo cách thủ công, hãy sử dụng hướng dẫn EXPOSE trong Dockerfile và cài đặt ứng dụng, WEBSITES_PORT, với giá trị cổng để liên kết trên vùng chứa.

Tôi có thể sử dụng ASPNETCORE_URLS trong hình ảnh Docker không?

Có, ghi đè lên biến môi trường trước khi khởi động ứng dụng .NET core. Ví dụ: Trong tập lệnh init.sh: export ASPNETCORE_URLS={Your value}

Nhiều vùng chứa với Docker Compose

Làm cách nào để định cấu hình Azure Container Registry (ACR) để sử dụng với nhiều bộ chứa?

Để sử dụng ACR với nhiều vùng chứa, tất cả các hình ảnh vùng chứa cần được lưu trữ trên cùng một máy chủ đăng ký ACR. Khi chúng ở trên cùng một máy chủ đăng ký, bạn sẽ cần tạo cài đặt ứng dụng, sau đó cập nhật tệp cấu hình Docker Compose để bao gồm tên hình ảnh ACR.

Tạo các cài đặt ứng dụng sau:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (URL đầy đủ, ví dụ:  https://<server-name>.azurecr.io)
  • DOCKER_REGISTRY_SERVER_PASSWORD (cho phép quản trị viên truy cập trong cài đặt ACR)

Trong tệp cấu hình, hãy tham chiếu hình ảnh ACR của bạn như ví dụ sau:

hình ảnh: <tên máy chủ>.azurecr.io/<tên hình ảnh>:<tag>

Làm cách nào để biết vùng chứa nào có thể truy cập internet?

  • Chỉ có thể mở một vùng chứa để truy cập
  • Chỉ có thể truy cập cổng 80 và 8080 (các cổng bị lộ)

Dưới đây là các quy tắc để xác định vùng chứa nào có thể truy cập được - theo thứ tự ưu tiên:

  • Cài đặt ứng dụng  WEBSITES_WEB_CONTAINER_NAME được đặt thành tên vùng chứa
  • Vùng chứa đầu tiên xác định cổng 80 hoặc 8080
  • Nếu cả hai điều trên đều không đúng, vùng chứa đầu tiên được xác định trong tệp sẽ có thể truy cập được (hiển thị)

Làm cách nào để sử dụng depends_on?

Tùy chọn depends_on không được hỗ trợ trên App Service và nó sẽ bị bỏ qua. Giống như đề xuất kiểm soát khởi động và tắt máy từ Docker, các ứng dụng nhiều bộ chứa App Service nên kiểm tra các phần phụ thuộc thông qua mã ứng dụng - cả khi khởi động và ngắt kết nối. Mã ví dụ bên dưới hiển thị một ứng dụng Python đang kiểm tra xem bộ chứa Redis có đang chạy hay không.

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

Web Sockets được hỗ trợ trên các ứng dụng Linux. Cài đặt ARM webSocketsEnabled không áp dụng cho các ứng dụng Linux vì Web Sockets luôn được bật cho Linux.

Quan trọng

Web Sockets hiện được hỗ trợ cho các ứng dụng Linux trên các gói App Service miễn phí. Chúng tôi hỗ trợ tối đa năm kết nối ổ cắm web trên các gói App Service miễn phí. Vượt quá giới hạn này dẫn đến phản hồi HTTP 429 (Quá nhiều yêu cầu).

Định giá và SLA

Giá cả là gì, bây giờ dịch vụ thường có sẵn?

Giá khác nhau tùy theo SKU và khu vực nhưng bạn có thể xem thêm chi tiết tại trang giá của chúng tôi: Giá App Service.

Câu hỏi khác

Yêu cầu khởi động vùng chứa hoạt động như thế nào?

Khi App Service Azure khởi động vùng chứa của bạn, yêu cầu khởi động sẽ gửi một yêu cầu HTTP đến điểm cuối /robots933456.txt của ứng dụng của bạn. Đây chỉ đơn giản là một điểm cuối giả, nhưng ứng dụng của bạn cần phản hồi bằng bất kỳ mã trạng thái nào không phải 5XX. Nếu logic ứng dụng của bạn không phản hồi với bất kỳ mã trạng thái HTTP nào tới các điểm cuối không tồn tại, thì yêu cầu khởi động không thể nhận được phản hồi và nó sẽ khởi động lại vùng chứa của bạn vĩnh viễn. Yêu cầu khởi động cũng có thể không thành công do cấu hình sai cổng.

Để đảm bảo rằng cổng được định cấu hình chính xác trên App Service Azure, hãy xem câu hỏi Làm cách nào để chỉ định cổng trong bộ chứa Linux của tôi?

Có thể tăng thời gian chờ yêu cầu khởi động vùng chứa không?

Theo mặc định, yêu cầu khởi động không thành công sau khi đợi 240 giây để nhận được phản hồi từ vùng chứa. Bạn có thể tăng thời gian chờ yêu cầu khởi động vùng chứa bằng cách thêm cài đặt ứng dụng  WEBSITES_CONTAINER_START_TIME_LIMIT có giá trị trong khoảng từ 240 đến 1800 giây.

Làm cách nào để chỉ định cổng trong bộ chứa Linux của tôi?

Loại bộ chứa Mô tả Cách đặt/sử dụng cổng
Built-in container Nếu bạn chọn phiên bản ngôn ngữ/framework cho ứng dụng Linux, thì một container xác định trước sẽ được chọn cho bạn. Để trỏ mã ứng dụng của bạn đến đúng cổng, hãy sử dụng biến môi trường PORT.
Custom container Bạn có toàn quyền kiểm soát container. App Service không kiểm soát được bộ chứa của bạn sẽ lắng nghe trên cổng nào. Những gì nó cần là biết cổng nào để chuyển tiếp yêu cầu tới. Nếu vùng chứa của bạn lắng nghe cổng 80 hoặc 8080, thì App Service có thể tự động phát hiện cổng đó. Nếu ứng dụng lắng nghe bất kỳ cổng nào khác, bạn cần đặt cài đặt ứng dụng WEBSITES_PORT thành số cổng và App Service sẽ chuyển tiếp yêu cầu tới cổng đó trong vùng chứa. Cài đặt ứng dụng WEBSITES_PORT không có bất kỳ ảnh hưởng nào trong vùng chứa và bạn không thể truy cập cài đặt đó dưới dạng biến môi trường trong vùng chứa.

Tôi có thể sử dụng cơ sở dữ liệu dựa trên tệp (như SQLite) với Ứng dụng web Linux của mình không?

Hệ thống tệp của ứng dụng của bạn là một chia sẻ mạng được gắn kết. Điều này cho phép mở rộng quy mô các tình huống trong đó mã của bạn cần được thực thi trên nhiều máy chủ. Thật không may, điều này chặn việc sử dụng các nhà cung cấp cơ sở dữ liệu dựa trên tệp như SQLite vì không thể có được các khóa độc quyền trên tệp cơ sở dữ liệu. Chúng tôi khuyên dùng dịch vụ cơ sở dữ liệu được quản lý: Azure SQLCơ sở dữ liệu Azure cho MySQL hoặc Cơ sở dữ liệu Azure cho PostgreSQL.

Các ký tự được hỗ trợ trong tên cài đặt ứng dụng là gì?

Bạn chỉ có thể sử dụng các chữ cái (AZ, az), số (0-9) và ký tự gạch dưới (_) cho cài đặt ứng dụng.

Tôi có thể yêu cầu các tính năng mới ở đâu?

Bạn có thể gửi ý tưởng của mình tại diễn đàn phản hồi về Ứng dụng web. Thêm "[Linux]" vào tiêu đề ý tưởng của bạn.

Bước tiếp theo

Liên hệ với chúng tôi để được giúp đỡ

Nếu bạn có câu hỏi hoặc cần trợ giúp, hãy tạo yêu cầu hỗ trợ hoặc yêu cầu bộ phận hỗ trợ của cộng đồng Azure. Bạn cũng có thể gửi phản hồi về sản phẩm cho bộ phận hỗ trợ cộng đồng Azure.

Nguồn: learn.microsoft.com
» Tiếp: Mua miền App Service và định cấu hình ứng dụng với miền đó
« Trước: Các câu hỏi thường gặp về việc tạo hoặc xóa tài nguyên trong App Service Azure
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!