技術 7 分鐘閱讀
Linux 伺服器基礎:接案工程師必備的部署技能
前言
很多前後端工程師對 Linux 伺服器不太熟悉,部署的事通常交給 DevOps 處理。但身為接案工程師,你往往是唯一的開發者,伺服器管理的工作也落在你身上。這篇文章整理最基本且必要的 Linux 知識。
基本指令
檔案操作
# 列出檔案
ls -la
# 切換目錄
cd /var/www/html
# 建立目錄
mkdir -p /var/www/myproject
# 複製檔案
cp config.example config.php
# 移動/重新命名
mv old-name.txt new-name.txt
# 刪除檔案(小心使用)
rm file.txt
rm -rf directory/ # 遞迴刪除
# 查看檔案內容
cat config.php
less long-file.log # 分頁瀏覽
tail -f storage/logs/laravel.log # 即時追蹤 log
權限管理
# 查看權限
ls -la
# 修改權限
chmod 755 public/
chmod 644 .env
chmod -R 775 storage/ bootstrap/cache/
# 修改擁有者
chown -R www-data:www-data /var/www/myproject
權限數字的意義:
7= 讀(4) + 寫(2) + 執行(1)5= 讀(4) + 執行(1)4= 只讀
程序管理
# 查看正在執行的程序
ps aux | grep php
# 即時監控系統資源
htop
# 查看磁碟使用量
df -h
# 查看記憶體使用量
free -m
# 終止程序
kill -9 [PID]
SSH 連線
設定 SSH Key
# 在本機生成 SSH Key
ssh-keygen -t ed25519 -C "your@email.com"
# 複製公鑰到伺服器
ssh-copy-id user@your-server.com
# 之後就能免密碼連線
ssh user@your-server.com
SSH Config
在本機設定 ~/.ssh/config,簡化連線指令:
Host myserver
HostName 123.456.789.0
User deploy
IdentityFile ~/.ssh/id_ed25519
Port 22
之後只要輸入 ssh myserver 就能連線。
部署 Laravel 專案
安裝必要軟體
以 Ubuntu 22.04 為例:
# 更新系統
sudo apt update && sudo apt upgrade -y
# 安裝 Nginx
sudo apt install nginx -y
# 安裝 PHP 8.3
sudo add-apt-repository ppa:ondrej/php -y
sudo apt install php8.3-fpm php8.3-cli php8.3-mysql \
php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip \
php8.3-bcmath php8.3-gd php8.3-redis -y
# 安裝 Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
# 安裝 Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install nodejs -y
# 安裝 MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation
Nginx 設定
# /etc/nginx/sites-available/myproject
server {
listen 80;
server_name myproject.com www.myproject.com;
root /var/www/myproject/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# 啟用站台設定
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
部署流程
# 1. 拉取最新程式碼
cd /var/www/myproject
git pull origin main
# 2. 安裝相依套件
composer install --no-dev --optimize-autoloader
# 3. 前端建置
npm ci
npm run build
# 4. 資料庫遷移
php artisan migrate --force
# 5. 清除並重建快取
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 6. 重啟 Queue Worker
php artisan queue:restart
# 7. 設定權限
sudo chown -R www-data:www-data storage bootstrap/cache
自動化部署腳本
把上面的步驟寫成腳本:
#!/bin/bash
# deploy.sh
set -e
echo "開始部署..."
cd /var/www/myproject
echo "拉取最新程式碼..."
git pull origin main
echo "安裝 Composer 套件..."
composer install --no-dev --optimize-autoloader
echo "前端建置..."
npm ci && npm run build
echo "執行資料庫遷移..."
php artisan migrate --force
echo "清除快取..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
echo "設定權限..."
sudo chown -R www-data:www-data storage bootstrap/cache
echo "部署完成!"
SSL 憑證
使用 Let’s Encrypt 免費取得 SSL 憑證:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d myproject.com -d www.myproject.com
Certbot 會自動設定 Nginx 的 SSL 設定,並且每 90 天自動續約。
防火牆設定
# 啟用 UFW
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# 查看防火牆狀態
sudo ufw status
基本監控
設定 Log Rotation
Laravel 的 log 檔案會越長越大,設定自動輪換:
// config/logging.php
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14, // 保留 14 天
],
定時排程
# 設定 Cron Job
sudo crontab -e -u www-data
# 加入以下內容
* * * * * cd /var/www/myproject && php artisan schedule:run >> /dev/null 2>&1
結語
Linux 伺服器管理是一個很大的領域,這篇文章只涵蓋了最基本的部分。但對於接案工程師來說,掌握這些知識已經足以應付大部分的部署需求。隨著經驗累積,你可以慢慢學習 CI/CD、容器化部署等更進階的技術。
#Linux #伺服器 #部署 #DevOps