安裝 n8n 測試中123
· 4 min read
前言:
發布日期: 2022 年 1 月 19 日下午 12:21
目前我把bitbucket 當作練習範例的程式碼倉庫,練習用的範例都會放這 一般的side project 會放在github,網頁上內嵌的程式碼會用 gits 本來內嵌程式碼也是要用 bitbucket 但是我找不到可以內嵌的選項...
#!/bin/bash
# ==========================================================
# n8n 自動安裝腳本(子網域版)
# 適用:Ubuntu 20.04+ / 22.04 / 24.04
# 功能:
# - 安裝 Docker / Nginx / Certbot
# - 建立 n8n Docker 容器
# - 自動設定 HTTPS (Let's Encrypt)
# - Watchtower 自動更新 n8n
# - 全程記錄 log
# Ubuntu 主機系統安裝後 先執行 sudo apt update -y && sudo apt upgrade -y
# 因為更新有點久,我就不寫在腳本裡
# ==========================================================
set -e
LOG_FILE="/var/log/install-n8n-subdomain.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "=============================="
echo " 🚀 n8n 安裝啟動"
echo "=============================="
# ----------- 使用者輸入含預設值 -----------
read -p "請輸入要安裝 n8n 的子網域 (預設: n8n.feylaibook.com): " DOMAIN
DOMAIN=${DOMAIN:-n8n.feylaibook.com}
read -p "請輸入你的 Email (用於 SSL 憑證註冊,預設: smile.hsu@gmail.com): " EMAIL
EMAIL=${EMAIL:-smile.hsu@gmail.com}
echo "使用的子網域: $DOMAIN"
echo "使用的 Email: $EMAIL"
# ----------- 安裝基本套件 -----------
echo "[1/8] 更新系統並安裝必要套件..."
#sudo apt update -y && sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https software-properties-common ufw nginx
# ----------- 安裝 Docker 與 docker-compose -----------
echo "[2/8] 安裝 Docker 與 docker-compose..."
if ! command -v docker &> /dev/null; then
curl -fsSL https://get.docker.com | sudo bash
fi
if ! command -v docker compose &> /dev/null && ! command -v docker-compose &> /dev/null; then
sudo apt install -y docker-compose
fi
sudo systemctl enable docker
sudo systemctl start docker
# ----------- 安裝 Certbot (SSL) -----------
echo "[3/8] 安裝 Certbot..."
sudo apt install -y certbot python3-certbot-nginx
# ----------- 建立 n8n 資料夾與隨機密碼 -----------
echo "[4/8] 建立 n8n 資料夾與隨機密碼..."
sudo mkdir -p /root/n8n_data
sudo chown -R 1000:1000 /root/n8n_data
N8N_USER="admin"
N8N_PASS=$(openssl rand -base64 12)
# ----------- 建立 docker-compose.yml -----------
echo "[5/8] 建立 docker-compose.yml..."
cat <<EOF | sudo tee /root/docker-compose.yml > /dev/null
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
ports:
- "5678:5678"
environment:
- TZ=Asia/Taipei
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=$N8N_USER
- N8N_BASIC_AUTH_PASSWORD=$N8N_PASS
- N8N_HOST=$DOMAIN
- WEBHOOK_URL=https://$DOMAIN/
- GENERIC_TIMEZONE=Asia/Taipei
volumes:
- /root/n8n_data:/home/node/.n8n
EOF
# 自動偵測 docker-compose 指令
if command -v docker compose &> /dev/null; then
COMPOSE_CMD="docker compose"
elif command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
else
echo "❌ 錯誤:找不到 docker compose 或 docker-compose,請確認 Docker 已正確安裝。"
exit 1
fi
echo "[6/8] 啟動 n8n 容器..."
$COMPOSE_CMD -f /root/docker-compose.yml up -d
# ----------- 建立 Nginx 設定檔 -----------
echo "[7/8] 建立 Nginx 設定檔..."
NGINX_CONF="/etc/nginx/sites-available/n8n"
sudo bash -c "cat > $NGINX_CONF" <<EOF
server {
listen 80;
server_name $DOMAIN;
location / {
proxy_pass http://localhost:5678/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_cache_bypass \$http_upgrade;
}
}
EOF
sudo ln -sf /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/n8n
sudo nginx -t && sudo systemctl reload nginx
# ----------- SSL 憑證 -----------
echo "[8/8] 申請 SSL 憑證..."
sudo systemctl stop nginx
sudo certbot certonly --standalone -d "$DOMAIN" -m "$EMAIL" --agree-tos --non-interactive
sudo systemctl start nginx
# 啟用 HTTPS
sudo bash -c "cat > $NGINX_CONF" <<EOF
server {
listen 80;
server_name $DOMAIN;
return 301 https://\$host\$request_uri;
}
server {
listen 443 ssl;
server_name $DOMAIN;
ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:5678/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_cache_bypass \$http_upgrade;
}
}
EOF
sudo nginx -t && sudo systemctl reload nginx
# ----------- 防火牆設定 -----------
echo "[3.5] 設定防火牆 (UFW)..."
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
# ----------- SSL 自動續期 -----------
echo "[8.5] 設定 SSL 自動續期..."
# Certbot 自動續期服務會自動運作,每天檢查
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
# ----------- 安裝 Watchtower -----------
echo "[9/9] 安裝 Watchtower (自動更新 n8n)..."
sudo docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower:latest
# ----------- 完整安裝訊息 -----------
echo ""
echo "=============================================="
echo "✅ n8n 安裝完成!"
echo ""
echo "📍 網址: https://$DOMAIN/"
echo "👤 帳號: $N8N_USER"
echo "🔑 密碼: $N8N_PASS"
echo ""
echo "📦 Docker Compose 位置: /root/docker-compose.yml"
echo "🧩 Watchtower 已啟用(每5分鐘自動檢查 n8n 更新)"
echo ""
echo "📜 安裝日誌:$LOG_FILE"
echo "🔍 若出現錯誤,可檢查最近 50 行日誌:"
echo " tail -n 50 $LOG_FILE"
echo "=============================================="
# 顯示目前 Docker 容器
sudo docker ps
