- 逆向行駛 - https://520.be/ -

[Debain]安裝HestiaCP

IMG_2026_07_28~08_58_46~1448x1086

🐧 在 Debian 上打造你的虛擬主機王國!HestiaCP 安裝與終極優化全攻略

🔥 站長老實說懶人包:
2021 年新年期間,我趁著連假試了兩套源自於 VestaCP 的虛擬主機管理系統 — HestiaCP [25]myVesta [26]

兩者都主打安全與 Debian 系統的完美結合(HestiaCP 也支援 Ubuntu)。但 HestiaCP 自帶 PHP 版本選擇器(從 5.4、7.0~7.4 到 8.0 任你挑),對於需要同時跑多個不同版本 PHP 程式的建站環境來說,簡直是超級福音!

更棒的是,HestiaCP 的文件超級詳細,GitHub 星星數也比較多。而且,只要在網站設定好 HSTS 和 HTTP/2,到 SSL Labs [27] 測試直接就能拿到 A+ 的頂級成績,不用再額外折騰!

實際操作下來,HestiaCP 的後台介面經過重新美化,操作邏輯更貼近我的使用習慣。當然 myVesta 也很不錯,兩者用起來都跟 VestaCP 差不多,這邊就留個筆記做紀錄 🏂🏇

[28]


🟦 🟦 🟦

🛠️ 前置作業:幫新房子掛上正確的門牌號碼

安裝 HestiaCP 之前,我們要先幫伺服器設定一個「正確的主機名稱」。這就像是幫新蓋好的房子掛上門牌號碼一樣,門牌對了,郵差(網際網路)送信過來才不會迷路或被擋在門外。

由於我的習慣一直都是將主機名稱設定為我要使用的網域名稱(通常是子網域),這樣後續 HestiaCP 在套用 SSL 憑證時會非常順暢,不需要額外的手動設定。以下是前置作業的完整指令:

# 修改主機名稱(請將 lax1.520.be 換成你自己的域名)
hostnamectl set-hostname lax1.520.be && hostname lax1.520.be
exec bash

# ----- 設定 DNS 解析伺服器(讓伺服器知道去哪裡查網域名稱) -----
# 編輯 /etc/resolv.conf 檔案
cat > /etc/resolv.conf <

💡 碎碎念冷知識: DNS(Domain Name System)就像是網際網路的「電話簿」。例如當你在瀏覽器輸入 520.be 時,電腦會先去問 DNS 伺服器:「這個域名對應的 IP 位址是多少?」然後才能找到正確的伺服器。設定好用的 DNS(如 Cloudflare 的 1.1.1.1),就像是給你的伺服器配備了一本「更新速度超快的電話簿」!

[29]
🟢 🟢 🟢

🚀 開始安裝 HestiaCP

前置作業完成後,我們就要正式開始安裝 HestiaCP 了。由於安裝過程可能需要一段時間,強烈建議先進入 screen 工作階段,這就像是遊戲裡的「存檔點」——即使你不小心關掉 SSH 視窗或網路突然斷線,安裝進度也會在伺服器背景繼續跑,重新連線後用 screen -r 就能恢復操作,不會讓心血白費!

# 建立名為 HestiaCP 的 Screen 工作階段
screen -S HestiaCP

我這邊的安裝設定是:Apache + Nginx(反向代理)、多重 PHP 版本、Bind(DNS)、MariaDB(資料庫)、Vsftpd(FTP)、Fail2Ban(入侵防護)。完全排除郵件相關功能(Exim、Dovecot)是因為郵件伺服器會吃非常多資源,而且設定維護很麻煩,對於純粹想架站的朋友來說,用第三方郵件服務(如 Gmail 或 MXRoute)會輕鬆很多。

HestiaCP 還有一個超棒的優點:安裝時可以直接指定控制台的語系(繁體中文)和連接埠!其他相關的安裝選項可以參考 HestiaCP 官方教學文件 [30]

cd /opt
wget -O hst-install.sh https://git.io/JedYV
bash hst-install.sh -a yes -n yes -w yes -o yes -v yes -k yes \
-m yes -g no -x yes -z no -c no -t no -i yes -b yes -q yes -d yes \
-r 5566 -l zh-tw -y no -s lax1.520.be -e admin@520.be -f

由於 Debian 系統的特性,大多數軟體都透過 apt 套件管理器自動安裝,刷刷刷地就跑完了。你可以起身動一動、泡杯咖啡,大約 15 分鐘內 就能安裝完畢。

⚠️ 超級重要: 安裝完成後,SSH 畫面會顯示 HestiaCP 控制台的登入網址、帳號和「隨機生成的密碼」。請務必把這組密碼抄下來(複製到安全的地方),然後重開機!這組密碼只會出現這麼一次,錯過就沒有了。

# 安裝完成後,將系統重新啟動
sudo systemctl reboot

[31]


🔷 🔷 🔷

🔧 調教 HestiaCP:讓你的虛擬主機管理員更好用

🔗 步驟 1:將 HestiaCP 指令加入系統路徑

為了方便在終端機中直接使用 HestiaCP 提供的指令(例如 v-add-letsencrypt-host),我們需要把它的執行檔路徑加到系統的 PATH 環境變數中。這就像是把管理員的專用工具箱直接放在你隨手可及的地方,不用每次都跑去倉庫翻找。

# 將 /usr/local/hestia/bin 加入 PATH
source /etc/profile
PATH=$PATH:/usr/local/hestia/bin && export PATH

🔒 步驟 2:為主機名稱建立 SSL 憑證並啟用 HSTS + HTTP/2

接下來,我們要幫 HestiaCP 控制台本身加上 SSL 加密(就像幫管理員辦公室裝上防彈玻璃),並啟用 HSTS(強制瀏覽器永遠使用 HTTPS 連線)HTTP/2(新一代網頁傳輸協定,速度更快)。這樣設定之後,到 SSL Labs 測試直接就能拿到 A+ 的頂級成績!

⚠️ 特別注意: 如果你的主機名稱與網域名稱「不同」,請改用 v-add-letsencrypt-domain 這個指令來指定要申請憑證的域名。

# 為主機名稱申請 Let's Encrypt SSL 憑證(自動續約)
v-add-letsencrypt-host

# 為主機名稱啟用 HSTS(強制 HTTPS)與 HTTP/2
v-add-web-domain-ssl-hsts 'admin' 'lax1.520.be'
v-add-web-domain-ssl-force 'admin' 'lax1.520.be'

# ---- 如果主機名稱與網域名稱不同,請改用此指令 ----
# v-add-letsencrypt-domain admin lax1.520.be

# ---- SSL 憑證檔案存放位置(方便日後查閱) ----
# 憑證檔案:/home/admin/conf/web/lax1.520.be/ssl/lax1.520.be.crt
# 私鑰檔案:/home/admin/conf/web/lax1.520.be/ssl/lax1.520.be.key
# 中繼憑證:/home/admin/conf/web/lax1.520.be/ssl/lax1.520.be.ca

🗑️ 步驟 3:清理不必要的安裝檔案

安裝過程中,HestiaCP 會下載許多不同作業系統版本的安裝腳本。我們可以把非 Debian 系統的資料夾刪除,節省硬碟空間,也讓系統更乾淨整潔。

# 刪除不需要的作業系統安裝目錄
rm -fr /usr/local/hestia/install/rhel
rm -fr /usr/local/hestia/install/ubuntu
rm -fr /usr/local/hestia/install/debian/7
rm -fr /usr/local/hestia/install/debian/8
rm -fr /usr/local/hestia/install/debian/9

🛡️ 步驟 4:設定防火牆與 Fail2ban 白名單

防火牆與 Fail2ban 就像是伺服器的「超凶悍夜店保鑣」。如果不把常用的服務(像是 Cloudflare 的 CDN 節點、HetrixTools 的監控服務)加入白名單(VIP 名單),保鑣可能會因為誤判,把這些正常的服務也一腳踢出去,導致網站無法正常連線。

# ----- 建立空白的防火牆規則檔案(準備開始設定) -----
touch /etc/iptables.up.rules

# ----- 將 Cloudflare 的所有 IP 加入白名單(讓 CDN 可以正常存取網站) -----
for x in $(curl https://www.cloudflare.com/ips-v4); do v-add-firewall-rule accept $x 0; done

# ----- 將 HetrixTools 監控服務的 IP 加入白名單 -----
for x in $(curl https://hetrixtools.com/resources/uptime-monitor-only-ips.txt); do v-add-firewall-rule accept $x 0; done

# 查看目前防火牆規則
# cat /usr/local/hestia/data/firewall/rules.conf

# ----- 將 MxToolbox 的 IP 加入白名單(郵件檢測服務用) -----
v-add-firewall-rule 'ACCEPT' '64.20.227.128/24' '0'   # MxToolbox
v-add-firewall-rule 'ACCEPT' '52.55.244.91/32'  '0'   # MxToolbox
v-add-firewall-rule 'ACCEPT' '18.205.72.90/32'  '0'   # MxToolbox

# ----- 範例:自訂開放特定連接埠(例如 SSH 和 HestiaCP 控制台) -----
v-add-firewall-rule ACCEPT 0.0.0.0/0 22 TCP SSH
v-add-firewall-rule ACCEPT 0.0.0.0/0 5566 TCP HestiaCP

接下來,我們還要設定 Fail2ban 的白名單,把我們自己常用的 IP 位址加進去,避免被 Fail2ban 誤封。

# 備份原始的 Fail2ban 設定檔
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak

# 修改白名單設定(加入你的常用 IP 和 DNS 伺服器)
sed -i 's/#ignoreip = 127.0.0.1\/8 ::1/ignoreip = 127.0.0.1\/8 ::1 192.168.1.0\/24 1.1.1.1 9.9.9.9 2001:2001:: 2620:fe::fe/g' /etc/fail2ban/jail.conf

# 檢查設定是否正確
cat /etc/fail2ban/jail.conf | grep ignoreip

# 重新啟動 Fail2ban 使設定生效
systemctl restart fail2ban

[32]


🟧 🟧 🟧

⚡ 調教 PHP:讓網站的引擎運轉得更順暢

接下來,我們要調整 PHP 的設定,讓它更符合網站運作的需求。由於 PHP 8.4 版本不新也不舊,相關的套件支援最齊全,非常適合建站環境,所以我推薦使用這個版本。

🔀 變更網站與使用者的 PHP 版本為 8.4

# 將指定網站的 PHP 版本變更為 8.4
v-change-web-domain-backend-tpl 'admin' 'lax1.520.be' 'PHP-8_4'

# 將使用者的命令列 PHP 版本也變更為 8.4
v-change-user-php-cli 'admin' '8.4'

📝 調整 PHP 8.4 參數(php.ini)

以下我們會透過 sed 指令,批次修改 PHP 的設定檔。這就像是精準地調整引擎的各種參數——上傳檔案大小、記憶體上限、執行時間等,讓網站跑起來更順暢、更安全。

# ----- 備份原始設定檔(以備不時之需) -----
cp /etc/php/8.4/fpm/php.ini /etc/php/8.4/fpm/php.ini.bak

# ----- 禁用危險的 PHP 函數(防止駭客利用) -----
sed -i 's/; disable_functions/disable_function/g' /etc/php/8.4/fpm/php.ini
sed -i 's/disable_functions =.*/disable_functions = passthru,system,chroot,chgrp,chown,ini_alter,ini_restore,dl,symlink,popepassthru,stream_socket_server,fsocket/g' /etc/php/8.4/fpm/php.ini

# ----- 調整記憶體限制(讓 PHP 可以處理較大的請求) -----
sed -i 's/memory_limit =.*/memory_limit = 1024M/g' /etc/php/8.4/fpm/php.ini

# ----- 調整 POST 資料大小上限(影響表單提交、檔案上傳) -----
sed -i 's/post_max_size =.*/post_max_size = 1024M/g' /etc/php/8.4/fpm/php.ini

# ----- 調整上傳檔案大小上限 -----
sed -i 's/upload_max_filesize =.*/upload_max_filesize = 1024M/g' /etc/php/8.4/fpm/php.ini

# ----- 調整最大執行時間(防止長時間執行的腳本被中斷) -----
sed -i 's/max_execution_time =.*/max_execution_time = 120/g' /etc/php/8.4/fpm/php.ini
sed -i 's/max_input_time =.*/max_input_time = 120/g' /etc/php/8.4/fpm/php.ini

# ----- 調整單次請求最大上傳檔案數量 -----
sed -i 's/max_file_uploads =.*/max_file_uploads = 2000/g' /etc/php/8.4/fpm/php.ini

# ----- 調整最大輸入變數數量(避免複雜表單被截斷) -----
sed -i 's/max_input_vars =.*/max_input_vars = 5000/g' /etc/php/8.4/fpm/php.ini

# ----- 設定時區為台北(讓時間顯示正確) -----
sed -i 's/date.timezone =.*/date.timezone = Asia\/Taipei/g' /etc/php/8.4/fpm/php.ini

# ----- 強制 Session Cookie 使用 HTTPS(增加安全性) -----
sed -i 's/;session.cookie_secure =.*/session.cookie_secure = True/g' /etc/php/8.4/fpm/php.ini

# ----- 啟用並設定 OpCache(讓 PHP 腳本快取加速) -----
sed -i '/opcache.enable/d' /etc/php/8.4/fpm/php.ini
echo "opcache.enable=1" >> /etc/php/8.4/fpm/php.ini
sed -i '/opcache.memory_consumption/d' /etc/php/8.4/fpm/php.ini
echo "opcache.memory_consumption=256" >> /etc/php/8.4/fpm/php.ini
sed -i '/opcache.interned_strings_buffer/d' /etc/php/8.4/fpm/php.ini
echo "opcache.interned_strings_buffer=8" >> /etc/php/8.4/fpm/php.ini
sed -i '/opcache.max_accelerated_files/d' /etc/php/8.4/fpm/php.ini
echo "opcache.max_accelerated_files=4000" >> /etc/php/8.4/fpm/php.ini
sed -i '/opcache.revalidate_freq/d' /etc/php/8.4/fpm/php.ini
echo "opcache.revalidate_freq=60" >> /etc/php/8.4/fpm/php.ini
sed -i '/opcache.fast_shutdown/d' /etc/php/8.4/fpm/php.ini
echo "opcache.fast_shutdown=1" >> /etc/php/8.4/fpm/php.ini

# ----- 檢查 Apache 設定是否正確(出現 Syntax OK 就是沒問題) -----
/usr/sbin/apachectl -t

驗證小幫手: 上面的指令執行完畢後,只要最尾端出現 Syntax OK 的訊息,就代表 Apache 設定檔完全正確,可以放心繼續往下進行! 🤖

📦 安裝 Redis 與 Memcached(物件快取加速器)

Redis 和 Memcached 就像是便利商店的「常溫貨架」和「冷藏貨架」(快取層)。有了它們,網站不用每次都跑進深處的大倉庫(資料庫)搬資料,客人一進門就能馬上從貨架上拿走商品,讓網頁載入速度瞬間起飛!

# 安裝 Redis、Memcached 及其相關工具
apt update && apt install -y sqlite3 redis-server redis-tools memcached

# 安裝 PHP 與 Redis / Memcached 的連線套件
apt install -y php-memcache php-memcached php-redis php-sqlite3 php8.4-memcache php8.4-memcached php8.4-redis php8.4-sqlite3

⚙️ 調整 Redis 參數

# ----- 備份 Redis 設定檔 -----
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak

# ----- 調整最大客戶端連線數 -----
sed -i 's/# maxclients 10000/maxclients 128/g' /etc/redis/redis.conf

# ----- 啟用 daemon 模式(讓 Redis 在背景執行) -----
sed -i 's/daemonize no/daemonize yes/g' /etc/redis/redis.conf

# ----- 設定連線超時時間 -----
sed -i 's/timeout 0/timeout 120/g' /etc/redis/redis.conf

# ----- 設定最大記憶體使用量(記憶體較大的主機可以調高) -----
sed -i 's/# maxmemory /maxmemory 512mb/g' /etc/redis/redis.conf

# ----- 調整系統記憶體配置(讓 Redis 運作更穩定) -----
sed -i '/overcommit_memory/d' /etc/sysctl.conf
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

# ----- 將 admin 使用者加入 redis 群組(方便管理) -----
usermod -aG redis admin

# ----- 重新啟動 Redis 並驗證 -----
systemctl restart redis
systemctl restart php8.4-fpm
systemctl restart apache2

# ----- 檢查 Redis 是否正常運作 -----
ps ax | grep redis-server && lsof -itcp -n -P | grep redis-server
php -m | grep redis
php -m | grep igbinary

# ----- 即時監控 Redis 的運作情況 -----
redis-cli MONITOR

驗證小幫手: 上面的檢查指令執行後,只要 每個指令都有出現預期的回應,就代表 Redis 已經成功安裝並正常運作了! 🤖

[33]


🔴 🔴 🔴

🗄️ 調教 MariaDB:讓資料庫更安全、更相容

🔤 變更資料庫編碼為 utf8mb4

把資料庫編碼升級成 utf8mb4,就像是幫檔案倉庫換上「最新版的國際翻譯字典」。這樣當使用者在網站上輸入 😂😍🚀 等 Emoji 表情符號時,才不會變成奇怪的問號或亂碼,讓網站內容完美呈現!

# ----- 建立 MariaDB 自訂設定檔目錄 -----
mkdir -p /etc/mysql/conf.d

# ----- 寫入 utf8mb4 編碼設定 -----
cat <<"EOF" > /etc/mysql/conf.d/mysql.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
EOF

# ----- 重新啟動 MariaDB 並驗證 -----
systemctl restart mysql
ps ax | grep mysqld && lsof -itcp -n -P | grep mysqld

🔑 查詢與驗證 MySQL Root 密碼

# ----- 查詢 HestiaCP 自動產生的 MySQL Root 密碼 -----
cat /usr/local/hestia/conf/mysql.conf | grep PASSWORD

# ----- 使用該密碼登入 MySQL 並檢查編碼設定 -----
# 請將下方的 OOXX 替換為剛才查到的密碼
mysql -u root -pOOXX

# ----- 在 MySQL 命令列中執行以下指令,檢查編碼是否正確 -----
# show variables where variable_name like 'character_set_%' or variable_name like 'collation%';
# quit

# ----- 檢查 MariaDB 服務狀態 -----
mysqladmin -u root -pOOXX status

[34]


🟩 🟩 🟩

🏗️ 建立初始環境:準備好你的第一個網站

👤 建立 FTP 帳號

# 建立一個專屬的 FTP 群組
groupadd sftp-only

# 建立 FTP 帳號(請將 OOXX 換成你的密碼)
v-add-web-domain-ftp admin lax1.520.be ftp001 OOXX

🗄️ 建立資料庫

# 建立資料庫(資料庫名稱和帳號都會自動加上前綴 admin_)
# 請將 OOXX 換成你的資料庫密碼
v-add-database admin 001 001 OOXX mysql

📊 啟用網站統計

# 啟用 AWStats 網站流量統計
v-change-web-domain-stats 'admin' 'lax1.520.be' 'awstats'

📥 下載常用工具

# ----- 下載 X 探針(伺服器狀態檢測工具) -----
wget -O /home/admin/web/lax1.520.be/public_html/x-prober.php https://git.io/JLAbS

# ----- 下載 PHP 效能測試工具 -----
wget -O /home/admin/web/lax1.520.be/public_html/php-benchmark-script.php https://git.io/JLAbQ

# ----- 下載 PHP 執行使用者檢測工具 -----
wget -O /home/admin/web/lax1.520.be/public_html/whoami.php https://git.io/JLAbF

# ----- 下載 WoltLab PHP 環境檢測工具 -----
wget -O /home/admin/web/lax1.520.be/public_html/woltlab-test.php https://www.woltlab.com/media/301-test-php/

# ----- 下載網站權限自動修復腳本(超實用!) -----
wget -O /usr/local/hestia/bin/v-fix-websites-permissions https://git.io/Je4Df
chmod +x /usr/local/hestia/bin/v-fix-websites-permissions
sed -i 's#$VESTA/bin/v-list-sys-users#v-list-sys-users#g' /usr/local/hestia/bin/v-fix-websites-permissions

# ----- 執行權限修復(確保所有網站的檔案權限都正確) -----
v-fix-websites-permissions

🔥 懶人包總結 — 初始環境資訊一覽:

📍 HestiaCP 控制台:https://lax1.520.be:8083/
📍 管理員帳號:admin | 密碼:OOXX

📍 FTP 連線:ftp://admin_ftp001:OOXX@lax1.520.be/public_html
📍 FTP 本機路徑:/home/admin/web/lax1.520.be/public_html

📍 資料庫名稱:admin_001 | 資料庫帳號:admin_001 | 密碼:OOXX

📍 常用工具網址:
• phpMyAdmin:http://lax1.520.be/phpmyadmin/
• X 探針:http://lax1.520.be/x-prober.php
• PHP 環境檢測:http://lax1.520.be/whoami.php
• PHP 效能測試:http://lax1.520.be/php-benchmark-script.php
• WoltLab 環境檢測:http://lax1.520.be/woltlab-test.php

[35]


🟡 🟡 🟡

📊 附錄:HestiaCP 常用服務與連線埠總整理

服務名稱 (Service) 預設連線埠 (Port) 白話文說明
HestiaCP 控制台 8083 管理整個伺服器的大腦中心,就像大樓的管理員室。
SSH / SFTP 22 透過終端機遠端指揮伺服器的安全連線通道。
HTTP / HTTPS 80 / 443 網頁伺服器(Apache/Nginx)對外提供網站畫面的大門。
FTP 21 搬家公司的貨運通道,專門用來上傳與下載網站檔案。
MariaDB (MySQL) 3306 網站的資料庫倉庫,存放文章、會員帳號等文字資料。

[36]


🟨 🟨 🟨

📚 結語

由於 VestaCP 這套虛擬主機管理系統已經發展得非常成熟,所以 HestiaCP 需要手動調教的地方其實不多。實際在 2GB 記憶體的 VPS 上運作,跑 WordPress 就非常順暢,控制台的介面也比原版 VestaCP 好看很多。

目前使用下來的感覺,唯一的遺憾是期待日後能完整支援 IPv6 🍻🍺🍻。不過對於絕大多數的網站運營需求來說,HestiaCP 已經是一個非常優秀、安全且易於管理的虛擬主機控制台了!

※ 本文操作步驟與指令參酌自 HestiaCP 官方文件與社群實測經驗。
※ 實際執行狀況會因伺服器規格、網路環境與安裝的額外軟體而略有不同,請以現場操作為準。

[37]


🔶 🔶 🔶

🖇️ 參考資料與延伸資源:

列印本文 [45] 👨‍👩‍👧‍👦 6 次瀏覽