2016-05-25 26 views
9

Tôi cần thông tin về lưu trữ bảng điều khiển lõi net hoặc ứng dụng asp.net dưới dạng deamon linux. Ứng dụng lưu trữ như Dịch vụ Windows đã được hỗ trợ bởi Microsoft.Hosting.WindowsService, nhưng tôi cần một cái gì đó tương tự cho deamons Linux.ASP.NET Core RC2 dưới dạng linux deamon

+0

Tôi tự hỏi mình cùng một câu hỏi vài phút trước. Tôi ước tôi có thể upvote nó nhiều hơn một lần. Trên thực tế, tôi muốn, sử dụng cùng một codebase, làm cho nó có thể chạy một ứng dụng .Net Core như dịch vụ windows, nhị phân linux (như một deamon) và dockerized. –

Trả lời

9

Tôi đang chạy trên RHEL và do đó đã chọn ghi các tệp đơn vị hệ thống của riêng mình. Dưới đây là một ví dụ về một trong tôi sử dụng trong conjuction với PostgreSQL (do đó biến môi trường). Tôi đã loại bỏ thông tin nhạy cảm vì những lý do rõ ràng.

[Unit] 
Description=My Sample Application 
Documentation= 


Wants=network.target 
After=network.target 


[Service] 
User=dotnetuser 
Group=dotnetuser 
Nice=5 
KillMode=control-group 
SuccessExitStatus=0 1 
Environment=MY_CONNSTRING=Server=localhost;Username=myUser;Password=myPass;Database=myDatabase 


NoNewPrivileges=true 
PrivateTmp=true 
InaccessibleDirectories=/sys /srv -/opt /media -/lost+found 
ReadWriteDirectories=/var/www/myapp 
WorkingDirectory=/var/www/myapp 
ExecStart=/opt/dotnet/dotnet run 


[Install] 
WantedBy=multi-user.target 

Các tập tin đi trong thư mục /etc/systemd/system và được đặt tên theo bất cứ điều gì bạn muốn đặt tên cho dịch vụ với ".service" sau khi nó. Ví dụ: đường dẫn đầy đủ có thể là /etc/systemd/system/aspnet-example.service.

Sau đó, bạn có thể bắt đầu và ngừng dịch vụ với systemctl start aspnet-examplesystemctl stop aspnet-example.

Để thiết lập các dịch vụ để bắt đầu lúc khởi động: systemctl enable aspnet-example

Những điều chính để chỉ ra trong file cấu hình là:

  • người dùng và Nhóm KHÔNG nên là root. Tôi khuyên bạn nên tạo một người dùng mới theo đó các ứng dụng của bạn chạy.

  • KillMode = nhóm điều khiển được đặt sao cho SIGTERM được gửi đến tất cả các quá trình dotnet mà dịch vụ được chạy.

  • ReadWriteDirectory và WorkingDirectory trỏ tới thư mục gốc của ứng dụng web của bạn. Tôi đã sử dụng /var/www/myapp làm ví dụ.

  • ExecStart phải là một đường dẫn tuyệt đối đến nhị phân dotnet. Systemd không hỗ trợ đường dẫn tương đối.

EDIT: Một điều tôi quên đề cập đến là tôi thường chạy nginx làm proxy ngược trước ứng dụng của mình. Tôi đã bao gồm một liên kết có thêm thông tin về việc xuất bản lên một máy chủ sản xuất Linux.

https://docs.asp.net/en/latest/publishing/linuxproduction.html

Các vấn đề liên quan