Ubuntu 環境初始化
系統
檢查當前運行的內核版本
主機名稱
防火牆設定 (使用 UFW 套件管理)
SSH 預設設定
建立新用戶
套件安裝
基礎工具安裝
安裝 Apache
安裝 PHP 套件庫與 PHP 套件
安裝 Composer
安裝 Node.js
安裝 MariaDB
MySQL 安全性設定
使用
mysql_secure_installation 互動式設定工具
安裝完 MariaDB/MySQL 後,建議執行以下指令進行安全性強化:
執行後的步驟說明如下:
完成以上步驟後,MySQL 基本的安全性即已加強。
手動設定方式
安裝 phpMyAdmin
確保 Apache 支援 .htaccess
請確認 /etc/apache2/apache2.conf 或虛擬主機設定中包含:
時間校正
Redis 與 Supervisor 安裝與設定
安裝 Redis
如有需求可修改 /etc/redis/redis.conf 中的:
supervised 改為 systemd
bind 127.0.0.1 ::1(若需允許外部連接,需再加防火牆規則與安全設定)
安裝 Supervisor
Supervisor 設定 Laravel 任務隊列(Queue Worker)
建立 Supervisor 設定檔,設定一個背景執行的 Laravel 任務隊列 Worker:
啟用設定並啟動 worker:
⛳ 將 /var/www/html/ 替換為你的 Laravel 專案實際路徑。
Laravel queue:work 指令參數說明
| 參數 |
說明 |
--sleep=60 |
當佇列為空時,等待 60 秒後再次檢查是否有新任務。 |
--tries=3 |
任務失敗時最多重試 3 次,超過次數將標記為「失敗任務」。 |
--timeout=300 |
單一任務最多執行時間 300 秒,超過將被強制終止(適用長任務情境)。 |
多隊列/多優先級設定(可選)
可根據不同任務優先順序或來源隊列名稱建立多組設定:
🧠 建議依專案需求區分不同 queue 名稱,並在 .env 中設定:
Ubuntu 環境初始化
系統
檢查當前運行的內核版本
uname -r主機名稱
# 設定主機名稱 hostnamectl set-hostname "hostname"防火牆設定 (使用 UFW 套件管理)
apt-get install -y ufw ufw allow OpenSSH ufw allow 80/tcp # 允許 HTTP ufw allow 443/tcp # 允許 HTTPSSSH 預設設定
# 禁用 root 用戶的登入功能 sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config # 啟用密碼驗證 sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl restart sshd建立新用戶
adduser "username" --disabled-password usermod -aG sudo "username" # 自動生成強密碼 while true; do password=$(tr -dc 'A-Za-z0-9_!@#$%^&*' < /dev/urandom | head -c 12) if [[ ${#password} -ge 8 && "$password" =~ [0-9] && "$password" =~ [a-zA-Z] && "$password" =~ [\!\@\#\$\%\^\&\*] ]]; then echo "password: ${password}" break fi done套件安裝
基礎工具安裝
安裝 Apache
apt-get install -y apache2 systemctl enable --now apache2安裝 PHP 套件庫與 PHP 套件
安裝 Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/local/bin/composer安裝 Node.js
# 較新的 18.x 版本 curl -fsSL https://deb.nodesource.com/setup_18.x | bash - # 若需 16.x 請改用以下行 # curl -fsSL https://deb.nodesource.com/setup_16.x | bash - apt-get install -y nodejs安裝 MariaDB
curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc 'https://mariadb.org/mariadb_release_signing_key.asc' echo "deb [arch=amd64] https://mirror.rackspace.com/mariadb/repo/11.2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/mariadb.list apt-get update apt-get install -y mariadb-server systemctl enable --now mariadbMySQL 安全性設定
使用
mysql_secure_installation互動式設定工具安裝完 MariaDB/MySQL 後,建議執行以下指令進行安全性強化:
執行後的步驟說明如下:
完成以上步驟後,MySQL 基本的安全性即已加強。
手動設定方式
MYSQL_ROOT_PASSWORD="your_secure_password" mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';" mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e "DELETE FROM mysql.user WHERE User='';" mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e "DROP USER IF EXISTS 'root'@'%';" mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e "DROP DATABASE IF EXISTS test;" mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e "FLUSH PRIVILEGES;" echo "MySQL 安全配置已完成。"安裝 phpMyAdmin
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip unzip phpMyAdmin-latest-all-languages.zip mv phpMyAdmin-*-all-languages /var/www/html/phpmyadmin cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php BLOWFISH_SECRET=$(openssl rand -base64 32) sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg\['blowfish_secret'\] = '$BLOWFISH_SECRET';#" /var/www/html/phpmyadmin/config.inc.php chown -R www-data:www-data /var/www/html/phpmyadmin chmod -R 755 /var/www/html/phpmyadmin cat > /var/www/html/phpmyadmin/.htaccess <<EOF RewriteEngine On Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from $(hostname -I | awk '{print $1}') EOF chmod 644 /var/www/html/phpmyadmin/.htaccess systemctl restart apache2確保 Apache 支援
.htaccess請確認
/etc/apache2/apache2.conf或虛擬主機設定中包含:<Directory /var/www/html/phpmyadmin> AllowOverride All </Directory>時間校正
apt-get install -y chrony systemctl enable --now chrony timedatectl set-timezone Asia/Taipei hwclock -wRedis 與 Supervisor 安裝與設定
安裝 Redis
apt-get install -y redis-server # 設定開機啟動與啟動服務 systemctl enable --now redis # 測試 Redis 是否正常運作 redis-cli ping # 預期回應:PONG安裝 Supervisor
apt-get install -y supervisor # 啟動並設定開機啟動 systemctl enable --now supervisorSupervisor 設定 Laravel 任務隊列(Queue Worker)
建立 Supervisor 設定檔,設定一個背景執行的 Laravel 任務隊列 Worker:
cat > /etc/supervisor/conf.d/laravel-worker.conf <<EOF [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d ; 設定 process 名稱格式,適用於多進程情境 command=php /var/www/html/artisan queue:work --sleep=60 --tries=3 --timeout=300 autostart=true ; 開機自動啟動 autorestart=true ; 當進程異常退出時自動重啟 user=www-data ; 指定執行的使用者(Laravel 預設為 www-data) numprocs=1 ; 啟動 1 個進程,可視需求調整為多進程 redirect_stderr=true ; 將 stderr 重導向至 stdout stdout_logfile=/var/log/supervisor/laravel-worker.log ; 日誌檔案路徑 EOF啟用設定並啟動 worker:
supervisorctl reread # 重新讀取所有設定檔 supervisorctl update # 套用新設定 supervisorctl start laravel-worker:* # 啟動 worker(:* 代表啟動所有對應進程)Laravel queue:work 指令參數說明
php artisan queue:work --sleep=60 --tries=3 --timeout=300--sleep=60--tries=3--timeout=300多隊列/多優先級設定(可選)
可根據不同任務優先順序或來源隊列名稱建立多組設定:
[program:laravel-queue-high] command=php /var/www/html/artisan queue:work redis --queue=high --sleep=60 --tries=3 --timeout=300 user=www-data autostart=true autorestart=true numprocs=1 redirect_stderr=true stdout_logfile=/var/log/supervisor/laravel-queue-high.log [program:laravel-queue-low] command=php /var/www/html/artisan queue:work redis --queue=low --sleep=60 --tries=3 --timeout=300 user=www-data autostart=true autorestart=true numprocs=1 redirect_stderr=true stdout_logfile=/var/log/supervisor/laravel-queue-low.log