เริ่มต้นด้วยการสร้างโฟลเดอร์บนเซิร์ฟเวอร์ 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 ดิบ แสดงว่าระบบทำงานได้ปกติ
