ปรับใช้ .NET 6 MVC บนระบบ Linux

เริ่มต้นด้วยการสร้างโฟลเดอร์บนเซิร์ฟเวอร์ Linux ของคุณ ยกตัวอย่างเช่น ตั้งชื่อว่า myweb อย่าลืมกำหนดสิทธิ์การเข้าถึงโฟลเดอร์ให้เหมาะสม โดยค่าเริ่มต้นมาตรฐานคือ 0755 ค่า 0755 จะแปลงเป็นสิทธิ์ rwxr-xr-x ดังนี้

ผู้ใช้อื่น:อ่านและรันโปรแกรมได้เท่านั้น (r-x)

เจ้าของ (บัญชีผู้ใช้ของคุณ):มีสิทธิ์อ่าน เขียน และรันโปรแกรมอย่างสมบูรณ์ (rwx)

สมาชิกกลุ่ม:อ่านและรันโปรแกรมได้เท่านั้น (r-x)

ต่อไปให้ทำการเผยแพร่โปรเจกต์ผ่าน Visual Studio ก่อนเปลี่ยนการตั้งค่าเป็น Release และคอมไพล์โปรเจกต์เสร็จแล้ว ให้คลิกขวาที่โปรเจกต์แล้วเลือกเผยแพร่ เมื่อการเผยแพร่เสร็จสิ้น ให้คัดลอกไฟล์ทั้งหมดจากโฟลเดอร์เผยแพร่ไปวางในไดเรกทอรี myweb ที่คุณสร้างไว้โดยใช้โปรแกรม FTP

cd /usr/myweb

หลังจากย้ายไฟล์เรียบร้อยแล้ว ให้รันคำสั่งด้านล่างเพื่อเปิดแอปพลิเคชันในโหมดพื้นหลัง การทำงานในพื้นหลังจะทำให้โปรแกรมยังคงทำงานต่อ แม้คุณจะปิดหน้าต่าง SSH ที่เชื่อมต่อกับ Linux ระยะไกลแล้วก็ตาม

sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)

สัญลักษณ์ & ที่ท้ายคำสั่งมีความสำคัญอย่างยิ่งสำหรับการรันในพื้นหลัง หากละเว้นสัญลักษณ์นี้ แอปจะทำงานในโหมดหน้าจอหลัก เมื่อปิดเทอร์มินัลหรือกดปุ่ม Ctrl + C โปรแกรมจะหยุดทำงานทันที

ตัวอย่างการใช้งานจริงของผม:sudo nohup dotnet WebSite.dll &

ข้อควรระวังเพิ่มเติมที่สำคัญ

กำหนดค่าพอร์ตก่อนทำการเผยแพร่ โดยเปิดไฟล์ appsettings.json ภายในโปรเจกต์ .NET MVC

เพิ่มการตั้งค่าตามแม่แบบด้านล่างนี้

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

การตั้งค่านี้ยอมรับการเชื่อมต่อจากทุกที่อยู่ IP ผ่านพอร์ต 8080 คุณยังสามารถใช้ Nginx ทำหน้าที่พร็อกซีย้อนกลับ และโฮสต์โดเมนหลายตัวบนเซิร์ฟเวอร์ Linux เครื่องเดียวได้

หากคุณใช้ Nginx เป็นพร็อกซีย้อนกลับอย่างเดียว ไม่จำเป็นต้องเปิดพอร์ตนี้ในไฟร์วอลล์ ให้กำหนดให้บริการเชื่อมต่อเฉพาะภายในเครื่องดังนี้

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

เมื่อใช้การตั้งค่านี้ แอปพลิเคชันจะรับเฉพาะคำขอจากภายในเครื่อง และปฏิเสธการเชื่อมต่อโดยตรงจากภายนอกทั้งหมด

เป้าหมายของผมคือการเข้าถึงแอปพลิเคชันนี้ผ่านที่อยู่ abc.com/hello

จากนั้นรันคำสั่ง sudo nohup dotnet WebSite.dll & เพื่อเปิดใช้งานแอปพลิเคชัน

ตรวจสอบการทำงานของแอปด้วยคำสั่งนี้:ps -aux | grep WebSite.dll

หากพบรายการกระบวนการที่ตรงกัน แสดงว่าบริการเปิดใช้งานสำเร็จแล้ว

ตั้งค่า Nginx พร็อกซีย้อนกลับ (ข้ามส่วนนี้หากไม่ต้องการใช้งานฟีเจอร์พร็อกซี)

หากคุณติดตั้ง Nginx ไว้แล้ว ไฟล์การตั้งค่าหลักจะอยู่ที่ /etc/nginx/nginx.conf

แก้ไขไฟล์การตั้งค่าเว็บไซต์ที่ตำแหน่ง /etc/nginx/sites-available/default

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/web/xxxx;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	# เว็บไซต์หลัก
	location / {
		try_files $uri $uri/ =404;
	}

	# ✅ จุดสำคัญ:ส่งต่อ /hello ไปยัง .NET
	location /hello {
		proxy_pass http://127.0.0.1:8080;
		proxy_http_version 1.1;
		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;
	}
}Code language: PHP (php)

หลังจากบันทึกการแก้ไข ให้รีสตาร์ท Nginx

sudo nginx -t
sudo systemctl restart nginx

ต่อไปให้รีสตาร์ทแอปพลิเคชัน .NET MVC

ขั้นแรกใช้คำสั่ง ps -aux | grep WebSite.dll ค้นหากระบวนการที่กำลังทำงานอยู่ จากนั้นจดหมายเลข PID ที่อยู่ด้านหน้าแถวคำสั่ง sudo

ใช้หมายเลข PID นั้นเพื่อปิดอินสแตนซ์ .NET MVC ที่กำลังรันอยู่

รีสตาร์ทบริการด้วยคำสั่งนี้:sudo nohup dotnet 你的项目.dll –urls http://127.0.0.1:8080 > /dev/null 2>&1 &

ถึงขั้นตอนการทดสอบระบบทั้งหมดแล้ว

รีสตาร์ท Nginx

รันคำสั่งดังนี้

bash

ป้อนคำสั่ง

sudo systemctl restart nginx

.NET ทำงานบนพอร์ต 8080

ใช้คำสั่งด้านล่างตรวจสอบสถานะการทำงานของบริการ .NET

bash

ป้อนคำสั่ง

curl http://127.0.0.1:8080
Code language: JavaScript (javascript)

หากเทอร์มินัลแสดงเนื้อหา HTML ดิบ แสดงว่าระบบทำงานได้ปกติ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *