在 Ubuntu 24.04 上設置和配置應用伺服器
介紹
在 Ubuntu 24.04 上設置和配置應用程式伺服器對於在生產環境中部署網頁應用程式至關重要。無論您是在托管 Node.js 應用程式、Python 網路服務,還是基於 PHP 的網站,妥善配置的應用程式伺服器都為可靠、安全且可擴展的部署提供了基礎。
本教程將指導您在運行 Ubuntu 24.04 的 Linux-Console.net Droplet 上設置一個可投入生產的應用伺服器。您將學習如何安裝和配置必要的組件,使用 Nginx 設置反向代理,透過 SSL 憑證保護您的伺服器,並使用 systemd 進行進程管理來部署應用程序。此配置遵循生產環境最佳實踐,確保您的伺服器能夠處理實際工作負載。
重點摘要
- 在 Ubuntu 24.04 上使用 Linux-Console.net Droplet 配置生產就緒的應用伺服器。
- 設定 Nginx 作為反向代理來處理進來的請求並將流量導向您的應用程式
- 使用 Let’s Encrypt 實施 SSL/TLS 加密以保障安全連線。
- 使用
systemd部署和管理應用程式,以確保可靠的進程管理。 - 採取安全強化措施,包括防火牆配置和使用者權限管理。
- 支援多種應用程式類型,包括 Node.js、Python 和 PHP 應用程式。
先決條件
在開始之前,請確保您擁有以下物品:
- 一個運行 Ubuntu 24.04 的 Linux-Console.net Droplet。如果你需要創建一個,請參考我們的使用 Ubuntu 初始伺服器設置指南,其中包括創建具有
sudo權限的非 root 用戶及配置防火牆。 - 域名已指向您的 Droplet 的 IP 地址。您可以按照我們的指南《如何在 Linux-Console.net 上設置主機名稱》進行配置。
- 對 Linux 指令列及伺服器的 SSH 存取有基本了解。
步驟 1 — 更新系統套件
首先更新系統的套件索引,並升級現有的套件,以確保你擁有最新的安全補丁和軟體版本:
sudo apt update
sudo apt upgrade -y
這可確保您的 Ubuntu 24.04 伺服器具有最新的套件資訊和安全更新。與 Ubuntu 22.04 相比,Ubuntu 24.04 包含更新的套件版本,包括較新的 systemd、Nginx 及其他核心元件版本。
步驟 2 — 安裝 Nginx 作為反向代理
Nginx 作為反向代理,處理進來的 HTTP 和 HTTPS 請求,並將它們轉發到您的應用伺服器。這種設置提供了多種好處:SSL 終止、負載平衡功能,以及通過將應用伺服器置於代理後面來提高安全性。
使用 apt 安裝 Nginx:
sudo apt install nginx -y安裝完成後,啟動並設定 Nginx 開機自動運行:
sudo systemctl start nginx
sudo systemctl enable nginx確認 Nginx 是否正在運行:
sudo systemctl status nginx你應該會看到顯示 Nginx 正在運行的輸出。
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 07:03:01 UTC; 32s ago
Docs: man:nginx(8)
Main PID: 46284 (nginx)
Tasks: 3 (limit: 4656)
Memory: 2.4M (peak: 5.3M)
CPU: 46ms
CGroup: /system.slice/nginx.service
├─46284 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─46286 "nginx: worker process"
└─46287 "nginx: worker process"
Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.步驟 3 — 設定防火牆
Ubuntu 24.04 使用 UFW(簡易防火牆)來管理防火牆。配置它以允許 HTTP、HTTPS 和 SSH 流量,同時阻擋其他不必要的端口。
首先,確保已安裝 UFW 並檢查其狀態:
sudo ufw status如果 UFW 尚未啟用,請啟用它並配置必要的規則:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enablesudo ufw allow 'Nginx Full'
sudo ufw enable
Rules updated
Rules updated (v6)
Rules updated
Rules updated (v6)
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startupNginx Full 配置允許 HTTP(端口 80)和 HTTPS(端口 443)的流量。請確認防火牆規則:
sudo ufw status verbose
你應該看到允許 OpenSSH 和 Nginx 完整流量的規則。
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80,443/tcp (Nginx Full) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6) 步驟 4 — 使用 Let’s Encrypt 設置 SSL
使用 SSL/TLS 加密保護您的應用伺服器對於生產環境部署至關重要。Let’s Encrypt 提供可自動續期的免費 SSL 證書。
安裝 Certbot 和 Nginx 插件:
sudo apt install certbot python3-certbot-nginx -y為您的網域取得 SSL 憑證。將 your_domain 替換為您實際的網域名稱:
sudo certbot --nginx -d your_domain -d www.your_domainCertbot 會提示您輸入電子郵件地址,並詢問您是否希望將 HTTP 流量重定向到 HTTPS。為了更好的安全性,建議選擇重定向。證書會在到期前自動續期。
測試自動續訂流程:
sudo certbot renew --dry-run如果此命令完成且沒有錯誤,自動續期已正確配置。
步驟 5 — 配置 Nginx 為反向代理
建立一個 Nginx 伺服器區塊配置,將流量導向您的應用伺服器。本範例展示了一個通用配置,您可以根據不同的應用類型進行調整。
為您的域建立一個新的配置文件:
sudo nano /etc/nginx/sites-available/your_domain添加以下配置,將 your_domain 替換為您的實際域名,並調整 proxy_pass 的 URL 以符合您的應用程式端口:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain www.your_domain;
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}
這個配置:
- 將 HTTP 流量重新導向到 HTTPS
- 在 Nginx 層終止 SSL
- 將請求轉發到在 3000 埠上運行的您的應用程式(可根據需要調整)
- 保留客戶端 IP 位址和協議資訊
透過建立符號連結來啟用此配置:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/測試 Nginx 配置的語法錯誤:
sudo nginx -t如果測試通過,重新載入 Nginx 以應用更改:
sudo systemctl reload nginx第 6 步 — 安裝應用程式運行時依賴
您所需的運行時依賴取決於您的應用程式類型。本節涵蓋 Node.js、Python 和 PHP 應用程式的設置。
安裝 Node.js
對於 Node.js 應用程式,請使用 NodeSource 的倉庫安裝 Node.js,以獲取最新的 LTS 版本:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs驗證安裝:
node --version
npm --versionv20.19.6
10.8.2安裝 Python 和 pip
Ubuntu 24.04 預設包含 Python 3.12。安裝 pip 和虛擬環境工具:
sudo apt install python3-pip python3-venv -y驗證安裝:
python3 --version
pip3 --versionpip3 --version
Python 3.12.3
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)安裝 PHP 與 PHP-FPM
對於 PHP 應用程式,請安裝 PHP 及 PHP-FPM(FastCGI 處理程序管理器):
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl -y確認 PHP-FPM 是否正在運行:
sudo systemctl status php8.3-fpm Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 08:02:36 UTC; 1min 56s ago
Docs: man:php-fpm8.3(8)
Process: 59077 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (code=exited, >
Main PID: 59074 (php-fpm8.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 4656)
Memory: 9.5M (peak: 10.4M)
CPU: 97ms
CGroup: /system.slice/php8.3-fpm.service
├─59074 "php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)"
├─59075 "php-fpm: pool www"
└─59076 "php-fpm: pool www"
Dec 18 08:02:36 Anish-Ubuntu-24 systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...<$> 注意:Ubuntu 24.04 包含 PHP 8.3。如果您的系統使用不同版本,請調整版本號。 <$>
步驟 7 — 為您的應用程式建立 Systemd 服務
Systemd 將你的應用程式作為服務來管理,確保它在開機時自動啟動,並在發生崩潰時重新啟動。這個範例是為 Node.js 應用程式建立 systemd 服務,但你可以將其調整用於其他類型的應用程式。
建立一個 systemd 服務檔案:
sudo nano /etc/systemd/system/your-app.service添加以下配置,並根據需要調整路徑和環境變量:
[Unit]
Description=Your Application Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/your-app
Environment="NODE_ENV=production"
Environment="PORT=3000"
ExecStart=/usr/bin/node /var/www/your-app/server.js
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target主要配置要點:
Type=simple:適用於在前景運行的應用程式User=www-data:為了安全性,以非 root 使用者身份運行應用程式WorkingDirectory:設置應用程式的工作目錄Restart=on-failure:如果應用程式當機,會自動重新啟動RestartSec=10: 在重新啟動前等待 10 秒
重新載入 systemd 並啟動您的服務:
sudo systemctl daemon-reload
sudo systemctl start your-app
sudo systemctl enable your-app檢查服務狀態:
sudo systemctl status your-app● your-app.service
Loaded: loaded (/etc/systemd/system/your-app.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 08:07:30 UTC; 4ms ago
Main PID: 59408 ((node))
Tasks: 1 (limit: 4656)
Memory: 512.0K (peak: 512.0K)
CPU: 936us
CGroup: /system.slice/your-app.service
└─59408 "(node)"
Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: your-app.service: Scheduled restart job, restart counter is at 4.
Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: Started your-app.service.Python 應用程式範例
對於使用 Gunicorn 的 Python 應用程式,你的 systemd 服務可能看起來像這樣:
[Unit]
Description=Your Python Application
After=network.target
[Service]
Type=notify
User=www-data
WorkingDirectory=/var/www/your-app
Environment="PATH=/var/www/your-app/venv/bin"
ExecStart=/var/www/your-app/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app
Restart=on-failure
[Install]
WantedBy=multi-user.targetPHP 應用程式範例
對於 PHP 應用程式,你通常會使用帶有 Nginx 的 PHP-FPM。配置 Nginx 將請求轉發給 PHP-FPM:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}第 8 步 — 部署您的應用程式
為您的應用程式建立目錄並設置適當的權限:
sudo mkdir -p /var/www/your-app
sudo chown -R www-data:www-data /var/www/your-app將您的應用程式檔案部署到此目錄。您可以使用 Git、SCP 或其他部署方法:
cd /var/www/your-app
sudo -u www-data git clone https://github.com/your-username/your-repo.git .根據需要安裝相依套件並建置您的應用程式。對於 Node.js:
sudo -u www-data npm install --production對於 Python:
sudo -u www-data python3 -m venv venv
sudo -u www-data ./venv/bin/pip install -r requirements.txt部署後,重新啟動您的應用程式服務:
sudo systemctl restart your-app第九步 — 生產強化最佳實踐
套用這些安全措施以加固您的應用伺服器,使其適合生產環境使用。
透過 SSH 禁用 root 登入
編輯 SSH 配置:
sudo nano /etc/ssh/sshd_config設定以下內容:
PermitRootLogin no
PasswordAuthentication no重新啟動 SSH:
sudo systemctl restart sshd設定自動安全更新
啟用自動安全更新:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades設定日誌輪換
配置日誌輪替以防止日誌文件佔用磁碟空間。編輯 logrotate 配置:
sudo nano /etc/logrotate.d/your-app新增:
/var/www/your-app/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
}監控磁碟空間
設置監控以在磁碟空間不足時提醒您。安裝並配置監控工具:
sudo apt install htop iotop -y第10步 — 排除常見問題
本節討論設定應用程式伺服器時可能遇到的常見問題。
應用程式無法啟動
檢查服務狀態和日誌:
sudo systemctl status your-app
sudo journalctl -u your-app -n 50 --no-pager常見問題包括:
- systemd 服務檔案中的檔案路徑不正確
- 缺少環境變數
- 權限錯誤(確保服務使用者可以存取應用程式檔案)
Nginx 502 壞網關錯誤
這通常表示 Nginx 無法連接到您的應用程式。請檢查:
- 您的應用程式正在運行:
sudo systemctl status your-app- 應用程式正在監聽正確的埠口:
sudo netstat -tlnp | grep 3000- 你在
Nginx配置中的proxy_passURL 與你的應用程式的埠相符合。
SSL 證書問題
如果 SSL 證書無法更新:
- 檢查 Certbot 日誌:
sudo tail -f /var/log/letsencrypt/letsencrypt.log- 驗證您的網域 DNS 記錄是否指向您的伺服器:
dig your_domain- 確保防火牆已開放埠 80 和 443。
高記憶體使用率
監控記憶體使用情況:
free -h
htop如果您的應用程式消耗過多記憶體,請考慮:
- 優化您的應用程式程式碼
- 增加您的 Droplet 記憶體
- 實作應用程式層級快取
常見問題
1. 什麼是 Ubuntu 中的應用伺服器?
應用伺服器是一種運行和管理網頁應用的伺服器環境。在 Ubuntu 24.04 上,這通常包括配置運行環境(如 Node.js、Python 或 PHP)、設置反向代理(如 Nginx),以及使用 systemd 管理應用程式進程。應用伺服器負責處理傳入請求、執行應用程式代碼,並向客戶端返回響應。
2. 我該如何為我的應用程式配置 systemd?
要為您的應用程式配置 systemd,您需要建立一個服務檔案。以下是一個逐步示例:
假設你的應用程式是一個位於 /home/ubuntu/my-app 的 Node.js 應用,並且你想使用 ubuntu 用戶使用 npm start 來運行它。
- 建立 systemd 服務檔案:
sudo nano /etc/systemd/system/my-app.service- 將以下內容添加到文件中:
[Unit]
Description=My Node.js App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my-app
ExecStart=/usr/bin/npm start
Restart=on-failure
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target- 重新載入 systemd 以識別新的服務:
sudo systemctl daemon-reload- 啟用服務以在開機時啟動:
sudo systemctl enable my-app- 啟動應用程式:
sudo systemctl start my-app現在,您的應用程式將在背景運行,故障時自動重啟,並在開機時自動啟動。您可以使用以下指令檢查其狀態:
sudo systemctl status my-app這個方法適用於大多數應用程式。只需根據您的環境調整 ExecStart、User 和 WorkingDirectory 即可。
3. 我應該使用 Nginx 還是 Apache 作為我的反向代理?
Nginx 和 Apache 都能很好地作為反向代理,但由於 Nginx 佔用記憶體較少、在高並發下性能更佳,並且在反向代理場景下配置更簡單,因此通常在現代應用伺服器中更受偏好。
Nginx 在處理靜態內容和將請求代理到應用伺服器方面也表現出色,使其非常適合用於生產環境部署。Apache 仍然是一個穩健的選擇,尤其是當你需要特定模組或對其配置語法更熟悉時。
4. 我該如何在 Ubuntu 24.04 上保護我的應用伺服器?
透過以下方式保護您的應用伺服器:啟用 UFW 防火牆並僅開放必要的端口、使用 Let’s Encrypt 安裝 SSL 證書、以非 root 用戶運行應用程式、禁用 root SSH 登入、配置自動安全更新、保持軟體包更新,並實施適當的檔案權限。此外,使用強密碼或 SSH 金鑰,配置 fail2ban 以防止暴力破解攻擊,並定期檢查應用程式和系統日誌以查找可疑活動。
5. 我可以在單一的 Ubuntu 伺服器上托管多個應用程式嗎?
是的,你可以在單一 Ubuntu 24.04 伺服器上運行多個應用程式。為每個應用程式配置獨立的 systemd 服務,每個服務監聽不同的端口(例如 3000、3001、8000)。為每個域名或子域名設置 Nginx 伺服器區塊(虛擬主機),每個區塊將請求代理到相應的應用程式端口。此方法可以有效利用伺服器資源,同時保持應用程式之間的隔離。
6. 我該如何檢查我的應用程式是否正常運作?
透過檢查 systemd 服務狀態來確認您的應用程式是否正在運行,指令為 sudo systemctl status your-app。使用 sudo journalctl -u your-app -f 查看應用程式日誌,以即時觀察日誌輸出。透過您的網域或 IP 位址存取應用程式以進行測試。檢查 Nginx 是否正確路由請求,可查看 Nginx 存取日誌與錯誤日誌,位置在 /var/log/nginx/access.log 和 /var/log/nginx/error.log。使用 htop 或 free -h 監控資源使用情況,確保您的應用程式不會過度消耗 CPU 或記憶體。
結論
您已成功在 Ubuntu 24.04 上設置並配置了一個可投入生產的應用伺服器。您的 Linux-Console.net Droplet 現在已配備 Nginx 作為反向代理、SSL/TLS 加密、systemd 服務管理以及安全加固措施。此設置支持在安全且可擴展的環境中部署 Node.js、Python、PHP 及其他網頁應用程式。
此配置遵循生產環境最佳實踐,包括自動服務重啟、SSL 證書更新、防火牆保護以及適當的用戶權限設定。您的應用伺服器已準備好處理實際工作負載,並可隨著需求增長進行擴展。
欲進一步學習及進階設定,可參考這些相關的 Linux-Console.net 教學:
- 如何在 Ubuntu 上安裝和使用 Docker-學習容器化以便更輕鬆地部署和管理應用程式
- 如何在 Ubuntu 上配置 Nginx 作為反向代理 - 深入探討高級 Nginx 反向代理配置
- 保護伺服器的建議安全措施-生產伺服器的額外安全強化技術
準備好部署您的應用程式了嗎?立即使用 Linux-Console.net 的 Droplets,為您的應用伺服器建立可擴展且可靠的基礎架構。憑藉自動備份、監控及靈活的定價等功能,Linux-Console.net Droplets 為您的生產環境部署提供所需的基礎。
感謝您與 Linux-Console.net 社群一起學習。
