Hướng dẫn publish website ASP.NET Core với NGINX trên CentOS

publish website asp.net core trên vps server
publish website asp.net core trên vps server

ASP.NET Core đang ngày càng lớn mạnh và là 1 trong những framework mạnh mẽ cho việc phát triển website. Và với việc ra đời NET core Microsoft đã cho phép việc publish hay deploy các ứng dụng web biết bằng Asp.net core trên hệ điều hành nhân Linux

Ở bài viết này ChickenIT sẽ hướng dẫn các bạn cách publish website ASP.NET core với NGINX trên CentOS 7. Nào mình cùng bắt đầu nhé.

Chuẩn bị publish website Asp.net core

Ở bước chuẩn bị này mình cần 1 máy chủ ảo (vps) cài hệ điều hành CentOS 7. Các bạn hoàn toàn có thể cài hệ điều hành nhân Linux khác như Unbutu chẳng hạn. Mình sử dụng vps có ip là: 104.156.239.156

Nếu bạn chưa có hoặc chưa biết cách tạo máy chủ ảo (VPS) có thể tham khảo các bài viết của mình.

Thông tin về dịch vụ VPS của VultrCách tạo VPS trên Vultr

Tiếp theo các bạn cần 1 website ASP.NET core để demo. Cái này có thể bạn chưa cần vì trong hướng dẫn mình sẽ tạo nhanh 1 ứng dụng để demo

Chuẩn bị vậy thôi. Mình bắt đầu ngay nào.

Thêm .NET package vào hệ thống

Để đăng thêm và đăng ký package trên hệ thống CentOS 7 bạn có thể dùng YUM với lệnh bên dưới. Chú ý các bạn cần chạy với quyền root nhé.

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

Tiếp theo các bạn cần cài SDK của .NET

Cài đặt SDK .NET sử dụng YUM

Các bạn có thể cài đặt nhanh chóng với lần lượt các lệnh sau đây

sudo yum update -y
sudo yum install libunwind libicu -y
sudo yum install dotnet-sdk-2.1.4 -y

Sau khi chạy xong các bạn có thể dùng lệnh dotnet –info để kiểm tra mình đã cài đặt thành công sdk .net chưa nhé.

dotnet info kiểm tra version .net core trên máy
dotnet info kiểm tra version .net core trên máy

Tạo 1 website .Net core

Để tạo và chạy 1 ứng dụng web app trên .Net core ta dùng lệnh sau:

cd
dotnet new razor -o myfirstwebapp
cd myfirstwebapp
dotnet run

Sau khi chạy lệnh dotnet run bạn đã thấy website vửa tạo đang đựng chạy trên đường dẫn http://localhost:5000.

Dùng lệnh CTRL + C để tắt .NET core web app

Publish web app vừa tạo bằng lệnh commands

cd ~/myfirstwebapp
dotnet publish

Bạn có thể tìm kiếm dữ liệu publish web app tại: /root/myfirstwebapp/bin/Debug/netcoreapp2.0/publish/

Cài đặt Supervisor giúp .NET core web app luôn online

Bạn khó có thể đảm bảo website có thể hoạt động ổn định bất kể ngày tháng vì vậy mà công cụ quản lý, giám sát, theo dõi và khởi động lại ứng dụng web khi bị lỗi là rất cần thiết. Và Supervisor là 1 công cụ như vậy.

Để cài đặt Supervisor các bạn làm như sau.

Cập nhật các package hệ thống

sudo yum update -y

Cài đặt kho lưu trữ EPEL. Sở dĩ phải cài đặt EPEL là do hiện tại với CentOS 7 bạn không thể cài đặt trực tiếp Supervisor. Do vậy mà việc cài đặt EPEL là rất cần thiết.

sudo yum install epel-release
[root@publish_web myfirstwebapp]# sudo yum install epel-release
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution

Dependencies Resolved
============================================================================
 Package                                      Arch                                   Version                              Repository                              Size
============================================================================
Installing:
 epel-release                                 noarch                                 7-11                                 extras                                  15 k
Transaction Summary
============================================================================
Install  1 Package
Total download size: 15 k
Installed size: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-11.noarch.rpm                                                                                                                    |  15 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-11.noarch                                                                                                                            1/1
  Verifying  : epel-release-7-11.noarch                                                                                                                            1/1
Installed:
  epel-release.noarch 0:7-11
Complete!
[root@publish_web myfirstwebapp]#                  

Tiếp theo hãy cập nhật và cài đặt Supervisor.

Sau khi cài đặt EPEL Repository bạn có thể dễ dàng cài đặt Supervisor bằng lệnh dưới đây.

sudo yum update
sudo yum -y install supervisor

Sau khi cài đặt xong bạn có thể bắt đầu supervisord bằng commands dưới

sudo systemctl start supervisord
sudo systemctl enable supervisord

Để kiếm tra trạng thái supervisord bạn sử dụng

sudo systemctl status supervisord
[root@publish_web myfirstwebapp]# sudo systemctl start supervisord
[root@publish_web myfirstwebapp]# sudo systemctl enable supervisord
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
[root@publish_web myfirstwebapp]# sudo systemctl status supervisord
● supervisord.service - Process Monitoring and Control Daemon
   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-01-09 14:01:44 UTC; 10s ago
 Main PID: 2025 (supervisord)
   CGroup: /system.slice/supervisord.service
           └─2025 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf

Jan 09 14:01:44 publish_web systemd[1]: Starting Process Monitoring and Control Daemon...
Jan 09 14:01:44 publish_web systemd[1]: Started Process Monitoring and Control Daemon.
[root@publish_web myfirstwebapp]#  

Sau khi cài đặt xong Supervisor việc tiếp theo chúng ta cần làm là cài đặt Supervisor cho ứng dụng web của bạn.

cd /etc/supervisord.d
sudo vi myfirstwebapp.conf

Thêm dữ liệu sau vào file myfirstwebapp.conf

[program:myfirstwebapp]
command=dotnet myfirstwebapp.dll
directory=/root/myfirstwebapp/bin/Debug/netcoreapp2.0/publish/
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=1
stderr_logfile=/var/log/myfirstwebapp.err.log
stdout_logfile=/var/log/myfirstwebapp.out.log

Save và quit bằng lệnh

:wq!

Tiếp theo các bạn cần sửa đổi tệp supervisord mặc định và thêm tệp cấu hình mới của bạn vào.

sudo cp /etc/supervisord.conf /etc/supervisord.conf.bak
sudo vi /etc/supervisord.conf

Các bạn tìm đến dòng cuối cùng của supervisord.conf bạn sẽ thấy dòng

files = supervisord.d/*.ini

Hãy thay thế nó bằng

files = supervisord.d/*.conf

Sau đó hãy lưu và thoát khoải trình edit file bằng lệnh

:wq!

Khởi động supervisord và thiết lập supervisord tự động khởi động cùng hệ thống.

sudo systemctl start supervisord.service
sudo systemctl enable supervisord.service

Tải lại những thiết lập Supervisor mới.

sudo supervisorctl reread
sudo supervisorctl update
[root@publish_web supervisord.d]# sudo systemctl start supervisord.service
[root@publish_web supervisord.d]# sudo systemctl enable supervisord.service
[root@publish_web supervisord.d]# sudo supervisorctl reread
myfirstwebapp: available
[root@publish_web supervisord.d]# sudo supervisorctl update
myfirstwebapp: added process group
[root@publish_web supervisord.d]#                  

Kiểm tra xem ứng dụng web của bạn đã sẵn sàng chạy chưa?

sudo supervisorctl status
[root@publish_web supervisord.d]# sudo supervisorctl status
myfirstwebapp                    RUNNING   pid 2102, uptime 0:01:22
[root@publish_web supervisord.d]#                                             

Cài đặt máy chủ proxy Nginx

Để cài đặt Nginx bẳng YUM các bạn dùng lệnh

sudo yum install nginx -y

Bạn hãy chỉnh sửa tệp cấu hình Nginx mặc định như sau:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo vi /etc/nginx/nginx.conf

Tiếp theo trong tệp nginx.conf bạn hãy tìm đến dòng

location / {
}

và thêm đoạn dữ liệu sau vào trong {}

proxy_pass http://127.0.0.1:5000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

Tiếp theo bạn khởi động nginx và thiết lập cho nginx khởi động cùng hệ thống.

sudo systemctl start nginx.service
sudo systemctl enable nginx.service
[root@publish_web supervisord.d]# sudo systemctl start nginx.service
[root@publish_web supervisord.d]# sudo systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@publish_web supervisord.d]#                                                                                                       

Để người dùng có thể truy cập dễ dàng website của bạn thì việc bạn tắt tường lửa là 1 điều rất quan trọng. Sử dụng lệnh sau để thay đổi tường lửa của bạn.

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload
[root@publish_web supervisord.d]# sudo firewall-cmd --zone=public --permanent --add-service=http
success
[root@publish_web supervisord.d]# sudo firewall-cmd --zone=public --permanent --add-service=https
success
[root@publish_web supervisord.d]# sudo firewall-cmd --reload
success
[root@publish_web supervisord.d]#                                             

Ok. Vậy là bạn đã publish thành công website của mình lên VPS server. Website của bạn giờ đã có thể chạy online trên môi trường internet rồi. Cùng kiểm tra thành quả nhé!

Publish thành công website asp,net core lên vsp server
Publish thành công website asp,net core lên vsp server

Kết luận

Trên đây là bài hướng dẫn của mình cách publish website ASP.NET Core với NGINX trên CentOS. Với việc ra đời Asp.net core giờ đây các bạn không chỉ có thể tạo ra những website rất dễ dàng mà việc publish website đó đến với mọi người cũng đơn giản và dễ dàng hơn.

Hy vọng bài viết có ích đối với bạn đọc. Chúc các bạn 1 ngày tốt lành

Tham khảo:

How to Deploy a .NET Core Web Application on CentOS 7

Giới thiệu ChickenIT 12 bài viết
Chào các bạn, mình là ChickenIT (gà IT). Sở thích của mình là máy tính, viết lách và lang thang trên mạng. Blog này là nơi mình chia sẻ những sở thích bên cạnh những kiến thức, kinh nghiệm của bản thân. Hy vọng sẽ giúp ích được cho các bạn.

Hãy bình luận đầu tiên

Để lại một phản hồi

Thư điện tử của bạn sẽ không được hiện thị công khai.


*