คู่มือการติดตั้ง Forward Email แบบโฮสต์เองสำหรับ Debian

คู่มือนี้ให้คำแนะนำทีละขั้นตอนสำหรับการติดตั้งโซลูชัน Forward Email แบบโฮสต์เองบนระบบ Debian คู่มือนี้ออกแบบมาเฉพาะสำหรับ Debian 11 (Bullseye) และ Debian 12 (Bookworm)

ก่อนเริ่มการติดตั้ง โปรดตรวจสอบให้แน่ใจว่าคุณมี:

  • เซิร์ฟเวอร์ Debian: เวอร์ชัน 11 (Bullseye) หรือ 12 (Bookworm)
  • สิทธิ์ root: คุณต้องสามารถรันคำสั่งในฐานะ root (เข้าถึง sudo)
  • ชื่อโดเมน: โดเมนที่คุณควบคุมพร้อมสิทธิ์จัดการ DNS
  • เซิร์ฟเวอร์สะอาด: แนะนำให้ใช้การติดตั้ง Debian ใหม่
  • การเชื่อมต่ออินเทอร์เน็ต: จำเป็นสำหรับการดาวน์โหลดแพ็กเกจและอิมเมจ Docker

  • RAM: อย่างน้อย 2GB (แนะนำ 4GB สำหรับการใช้งานจริง)
  • พื้นที่เก็บข้อมูล: อย่างน้อย 20GB พื้นที่ว่าง (แนะนำ 50GB+ สำหรับการใช้งานจริง)
  • CPU: อย่างน้อย 1 vCPU (แนะนำ 2+ vCPU สำหรับการใช้งานจริง)
  • เครือข่าย: ที่อยู่ IP สาธารณะพร้อมพอร์ตต่อไปนี้ที่สามารถเข้าถึงได้:
    • 22 (SSH)
    • 25 (SMTP)
    • 80 (HTTP)
    • 443 (HTTPS)
    • 465 (SMTPS)
    • 993 (IMAPS)
    • 995 (POP3S)

ขั้นตอนที่ 1: การตั้งค่าระบบเบื้องต้น

ก่อนอื่น ให้แน่ใจว่าระบบของคุณเป็นเวอร์ชันล่าสุดและสลับไปยังผู้ใช้ root:

# Update system packages
sudo apt update && sudo apt upgrade -y

# Switch to root user (required for the installation)
sudo su -

Step 2: กำหนดค่า DNS Resolvers

กำหนดค่าระบบของคุณให้ใช้เซิร์ฟเวอร์ DNS ของ Cloudflare เพื่อการสร้างใบรับรองที่เชื่อถือได้:

# หยุดและปิดใช้งาน systemd-resolved หากกำลังทำงานอยู่
if systemctl is-active --quiet systemd-resolved; then
    rm /etc/resolv.conf
    systemctl stop systemd-resolved
    systemctl disable systemd-resolved
    systemctl mask systemd-resolved
fi

# กำหนดค่า Cloudflare DNS resolvers
tee /etc/resolv.conf > /dev/null <<EOF
nameserver 1.1.1.1
nameserver 2606:4700:4700::1111
nameserver 1.0.0.1
nameserver 2606:4700:4700::1001
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
nameserver 8.8.4.4
nameserver 2001:4860:4860::8844
EOF

Step 3: ติดตั้ง Dependencies ของระบบ

ติดตั้งแพ็กเกจที่จำเป็นสำหรับ Forward Email บน Debian:

# อัปเดตรายการแพ็กเกจ
apt-get update -y

# ติดตั้ง dependencies พื้นฐาน (รายการแพ็กเกจเฉพาะ Debian)
apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    git \
    openssl \
    lsb-release \
    apt-transport-https \
    software-properties-common

Step 4: ติดตั้งและกำหนดค่า Snapd

Debian ไม่มี snapd มาให้โดยค่าเริ่มต้น ดังนั้นเราต้องติดตั้งและกำหนดค่า:

# ติดตั้ง snapd
apt-get install -y snapd

# เปิดใช้งานและเริ่มบริการ snapd
systemctl enable snapd
systemctl start snapd

# สร้าง symlink เพื่อให้ snap ทำงานได้อย่างถูกต้อง
ln -sf /var/lib/snapd/snap /snap

# รอให้ snapd พร้อมใช้งาน
sleep 10

# ตรวจสอบว่า snapd ทำงานได้
snap version

Step 5: ติดตั้ง Snap Packages

ติดตั้ง AWS CLI และ Certbot ผ่าน snap:

# ติดตั้ง AWS CLI
snap install aws-cli --classic

# ติดตั้ง Certbot และปลั๊กอิน DNS
snap install certbot --classic
snap set certbot trust-plugin-with-root=ok
snap install certbot-dns-cloudflare

# ตรวจสอบการติดตั้ง
aws --version
certbot --version

Step 6: ติดตั้ง Docker

ติดตั้ง Docker CE และ Docker Compose บน Debian:

# เพิ่มกุญแจ GPG อย่างเป็นทางการของ Docker (เฉพาะ Debian)
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | tee /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

# เพิ่มที่เก็บ Docker (เฉพาะ Debian)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list

# อัปเดตดัชนีแพ็กเกจและติดตั้ง Docker
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# ติดตั้ง docker-compose แบบสแตนด์อโลนเป็นตัวสำรอง (ถ้าปลั๊กอินไม่ทำงาน)
if ! command -v docker-compose &> /dev/null; then
    apt-get install -y docker-compose
fi

# ตรวจสอบการติดตั้ง Docker
docker --version
docker compose version || docker-compose --version

Step 7: กำหนดค่าบริการ Docker

ตรวจสอบให้แน่ใจว่า Docker เริ่มทำงานโดยอัตโนมัติและกำลังทำงานอยู่:

# เปิดใช้งานและเริ่มบริการ Docker
systemctl unmask docker
systemctl enable docker
systemctl start docker

# ตรวจสอบว่า Docker กำลังทำงาน
docker info

ถ้า Docker เริ่มทำงานไม่ได้ ให้ลองเริ่มด้วยตนเอง:

# วิธีเริ่มต้นสำรองหาก systemctl ล้มเหลว
nohup dockerd >/dev/null 2>/dev/null &
sleep 5
docker info

Step 8: ติดตั้งและกำหนดค่า UFW Firewall

การติดตั้ง Debian แบบ minimal อาจไม่มี UFW ดังนั้นให้ติดตั้งก่อน:

# ติดตั้ง UFW หากยังไม่มี
if ! command -v ufw &> /dev/null; then
    apt-get update -y
    apt-get install -y ufw
fi

# ตั้งค่านโยบายเริ่มต้น
ufw default deny incoming
ufw default allow outgoing

# อนุญาต SSH (สำคัญ - อย่าล็อกตัวเองออก!)
ufw allow 22/tcp

# อนุญาตพอร์ตที่เกี่ยวข้องกับอีเมล
ufw allow 25/tcp    # SMTP
ufw allow 80/tcp    # HTTP (สำหรับ Let's Encrypt)
ufw allow 443/tcp   # HTTPS
ufw allow 465/tcp   # SMTPS
ufw allow 993/tcp   # IMAPS
ufw allow 995/tcp   # POP3S
ufw allow 2993/tcp  # IMAP (พอร์ตทางเลือก)
ufw allow 2995/tcp  # POP3 (พอร์ตทางเลือก)
ufw allow 3456/tcp  # พอร์ตบริการที่กำหนดเอง
ufw allow 4000/tcp  # พอร์ตบริการที่กำหนดเอง
ufw allow 5000/tcp  # พอร์ตบริการที่กำหนดเอง

# อนุญาตการเชื่อมต่อฐานข้อมูลภายในเครื่อง
ufw allow from 127.0.0.1 to any port 27017  # MongoDB
ufw allow from 127.0.0.1 to any port 6379   # Redis

# เปิดใช้งานไฟร์วอลล์
echo "y" | ufw enable

# ตรวจสอบสถานะไฟร์วอลล์
ufw status numbered

Step 9: โคลน Forward Email Repository

ดาวน์โหลดซอร์สโค้ด Forward Email:

# Set up variables
REPO_FOLDER_NAME="forwardemail.net"
REPO_URL="https://github.com/forwardemail/forwardemail.net.git"
ROOT_DIR="/root/$REPO_FOLDER_NAME"

# Clone the repository
git clone "$REPO_URL" "$ROOT_DIR"
cd "$ROOT_DIR"

# Verify the clone was successful
ls -la

Step 10: ตั้งค่าการกำหนดค่าสภาพแวดล้อม

เตรียมการกำหนดค่าสภาพแวดล้อม:

# Set up directory variables
SELF_HOST_DIR="$ROOT_DIR/self-hosting"
ENV_FILE_DEFAULTS=".env.defaults"
ENV_FILE=".env"

# Copy default environment file
cp "$ROOT_DIR/$ENV_FILE_DEFAULTS" "$SELF_HOST_DIR/$ENV_FILE"

# Create SSL directory
mkdir -p "$SELF_HOST_DIR/ssl"

# Create database directories
mkdir -p "$SELF_HOST_DIR/sqlite-data"
mkdir -p "$SELF_HOST_DIR/mongo-backups"
mkdir -p "$SELF_HOST_DIR/redis-backups"

Step 11: กำหนดค่าชื่อโดเมนของคุณ

ตั้งชื่อโดเมนของคุณและอัปเดตตัวแปรสภาพแวดล้อม:

# Replace 'yourdomain.com' with your actual domain
DOMAIN="yourdomain.com"

# Function to update environment file
update_env_file() {
  local key="$1"
  local value="$2"

  if grep -qE "^${key}=" "$SELF_HOST_DIR/$ENV_FILE"; then
    sed -i -E "s|^${key}=.*|${key}=${value}|" "$SELF_HOST_DIR/$ENV_FILE"
  else
    echo "${key}=${value}" >> "$SELF_HOST_DIR/$ENV_FILE"
  fi
}

# Update domain-related environment variables
update_env_file "DOMAIN" "$DOMAIN"
update_env_file "NODE_ENV" "production"
update_env_file "HTTP_PROTOCOL" "https"
update_env_file "WEB_HOST" "$DOMAIN"
update_env_file "WEB_PORT" "443"
update_env_file "CALDAV_HOST" "caldav.$DOMAIN"
update_env_file "CARDDAV_HOST" "carddav.$DOMAIN"
update_env_file "API_HOST" "api.$DOMAIN"
update_env_file "APP_NAME" "$DOMAIN"
update_env_file "SMTP_HOST" "smtp.$DOMAIN"
update_env_file "SMTP_PORT" "465"
update_env_file "IMAP_HOST" "imap.$DOMAIN"
update_env_file "IMAP_PORT" "993"
update_env_file "POP3_HOST" "pop3.$DOMAIN"
update_env_file "POP3_PORT" "995"
update_env_file "MX_HOST" "mx.$DOMAIN"
update_env_file "SMTP_EXCHANGE_DOMAINS" "mx.$DOMAIN"
update_env_file "SELF_HOSTED" "true"
update_env_file "WEBSITE_URL" "$DOMAIN"
update_env_file "AUTH_BASIC_ENABLED" "true"

Step 12: สร้างใบรับรอง SSL

# Generate certificates using manual DNS challenge
certbot certonly \
  --manual \
  --agree-tos \
  --preferred-challenges dns \
  -d "*.$DOMAIN" \
  -d "$DOMAIN"

สำคัญ: เมื่อได้รับแจ้ง คุณจะต้องสร้างระเบียน TXT ใน DNS ของคุณ คุณอาจเห็นการท้าทายหลายรายการสำหรับโดเมนเดียวกัน - สร้างระเบียนทั้งหมด อย่าลบระเบียน TXT แรกเมื่อเพิ่มระเบียนที่สอง

ตัวเลือก B: Cloudflare DNS (ถ้าคุณใช้ Cloudflare)

ถ้าโดเมนของคุณใช้ Cloudflare สำหรับ DNS คุณสามารถทำให้การสร้างใบรับรองเป็นอัตโนมัติได้:

# Create Cloudflare credentials file
cat > /root/.cloudflare.ini <<EOF
dns_cloudflare_email = "your-email@example.com"
dns_cloudflare_api_key = "your-cloudflare-global-api-key"
EOF

# Set proper permissions
chmod 600 /root/.cloudflare.ini

# Generate certificates automatically
certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.cloudflare.ini \
  -d "$DOMAIN" \
  -d "*.$DOMAIN" \
  --non-interactive \
  --agree-tos \
  --email "your-email@example.com"

คัดลอกใบรับรอง

หลังจากสร้างใบรับรองแล้ว ให้คัดลอกไปยังไดเรกทอรีแอปพลิเคชัน:

# Copy certificates to application SSL directory
cp /etc/letsencrypt/live/$DOMAIN*/* "$SELF_HOST_DIR/ssl/"

# Verify certificates were copied
ls -la "$SELF_HOST_DIR/ssl/"

Step 13: สร้างกุญแจเข้ารหัส

สร้างกุญแจเข้ารหัสต่างๆ ที่จำเป็นสำหรับการทำงานอย่างปลอดภัย:

# Generate helper encryption key
helper_encryption_key=$(openssl rand -base64 32 | tr -d /=+ | cut -c -32)
update_env_file "HELPER_ENCRYPTION_KEY" "$helper_encryption_key"

# Generate SRS secret for email forwarding
srs_secret=$(openssl rand -base64 32 | tr -d /=+ | cut -c -32)
update_env_file "SRS_SECRET" "$srs_secret"

# Generate TXT encryption key
txt_encryption_key=$(openssl rand -hex 16)
update_env_file "TXT_ENCRYPTION_KEY" "$txt_encryption_key"

# Generate DKIM private key for email signing
openssl genrsa -f4 -out "$SELF_HOST_DIR/ssl/dkim.key" 2048
update_env_file "DKIM_PRIVATE_KEY_PATH" "/app/ssl/dkim.key"

# Generate webhook signature key
webhook_signature_key=$(openssl rand -hex 16)
update_env_file "WEBHOOK_SIGNATURE_KEY" "$webhook_signature_key"

# Set SMTP transport password
update_env_file "SMTP_TRANSPORT_PASS" "$(openssl rand -base64 32)"

echo "✅ All encryption keys generated successfully"

ขั้นตอนที่ 14: อัปเดตเส้นทาง SSL ในการตั้งค่า

กำหนดเส้นทางใบรับรอง SSL ในไฟล์ environment:

# อัปเดตเส้นทาง SSL ให้ชี้ไปยังไฟล์ใบรับรองที่ถูกต้อง
sed -i -E \
  -e 's|^(.*_)?SSL_KEY_PATH=.*|\1SSL_KEY_PATH=/app/ssl/privkey.pem|' \
  -e 's|^(.*_)?SSL_CERT_PATH=.*|\1SSL_CERT_PATH=/app/ssl/fullchain.pem|' \
  -e 's|^(.*_)?SSL_CA_PATH=.*|\1SSL_CA_PATH=/app/ssl/chain.pem|' \
  "$SELF_HOST_DIR/$ENV_FILE"

ขั้นตอนที่ 15: ตั้งค่าการยืนยันตัวตนแบบ Basic

สร้างข้อมูลรับรองการยืนยันตัวตนแบบ Basic ชั่วคราว:

# สร้างรหัสผ่านแบบสุ่มที่ปลอดภัย
PASSWORD=$(openssl rand -base64 16)

# อัปเดตไฟล์ environment ด้วยข้อมูลรับรอง basic auth
update_env_file "AUTH_BASIC_USERNAME" "admin"
update_env_file "AUTH_BASIC_PASSWORD" "$PASSWORD"

# แสดงข้อมูลรับรอง (โปรดบันทึกไว้!)
echo ""
echo "🔐 สำคัญ: โปรดบันทึกข้อมูลเข้าสู่ระบบเหล่านี้!"
echo "=================================="
echo "ชื่อผู้ใช้: admin"
echo "รหัสผ่าน: $PASSWORD"
echo "=================================="
echo ""
echo "คุณจะต้องใช้ข้อมูลเหล่านี้เพื่อเข้าถึงเว็บอินเทอร์เฟซหลังการติดตั้ง"
echo ""

ขั้นตอนที่ 16: ดีพลอยด้วย Docker Compose

เริ่มต้นบริการ Forward Email ทั้งหมด:

# กำหนดเส้นทางไฟล์ Docker Compose
DOCKER_COMPOSE_FILE="$SELF_HOST_DIR/docker-compose-self-hosted.yml"

# หยุดคอนเทนเนอร์ที่มีอยู่
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" down
else
    docker compose -f "$DOCKER_COMPOSE_FILE" down
fi

# ดึงอิมเมจล่าสุด
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" pull
else
    docker compose -f "$DOCKER_COMPOSE_FILE" pull
fi

# เริ่มบริการทั้งหมดในโหมด detached
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" up -d
else
    docker compose -f "$DOCKER_COMPOSE_FILE" up -d
fi

# รอสักครู่ให้บริการเริ่มทำงาน
sleep 10

# ตรวจสอบสถานะบริการ
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" ps
else
    docker compose -f "$DOCKER_COMPOSE_FILE" ps
fi

ขั้นตอนที่ 17: ตรวจสอบการติดตั้ง

ตรวจสอบว่าบริการทั้งหมดทำงานอย่างถูกต้อง:

# ตรวจสอบคอนเทนเนอร์ Docker
docker ps

# ตรวจสอบบันทึกบริการสำหรับข้อผิดพลาดใดๆ
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" logs --tail=50
else
    docker compose -f "$DOCKER_COMPOSE_FILE" logs --tail=50
fi

# ทดสอบการเชื่อมต่อเว็บอินเทอร์เฟซ
curl -I https://$DOMAIN

# ตรวจสอบว่าพอร์ตกำลังฟังอยู่หรือไม่
ss -tlnp | grep -E ':(25|80|443|465|587|993|995)'

การตั้งค่าบันทึก DNS

คุณต้องกำหนดบันทึก DNS ต่อไปนี้สำหรับโดเมนของคุณ:

บันทึก MX

@ MX 10 mx.yourdomain.com

บันทึก A

@ A YOUR_SERVER_IP
mx A YOUR_SERVER_IP
smtp A YOUR_SERVER_IP
imap A YOUR_SERVER_IP
pop3 A YOUR_SERVER_IP
api A YOUR_SERVER_IP
caldav A YOUR_SERVER_IP
carddav A YOUR_SERVER_IP

บันทึก SPF

@ TXT "v=spf1 mx ~all"

บันทึก DKIM

รับคีย์สาธารณะ DKIM ของคุณ:

# ดึงคีย์สาธารณะ DKIM
openssl rsa -in "$SELF_HOST_DIR/ssl/dkim.key" -pubout -outform DER | openssl base64 -A

สร้างบันทึก DNS DKIM:

default._domainkey TXT "v=DKIM1; k=rsa; p=YOUR_DKIM_PUBLIC_KEY"

บันทึก DMARC

_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com"

การเข้าสู่ระบบครั้งแรก

  1. เปิดเว็บเบราว์เซอร์และไปที่ https://yourdomain.com
  2. ป้อนข้อมูลรับรองการยืนยันตัวตนแบบ basic ที่คุณบันทึกไว้ก่อนหน้านี้
  3. ทำตามวิซาร์ดการตั้งค่าเริ่มต้นให้เสร็จสมบูรณ์
  4. สร้างบัญชีอีเมลแรกของคุณ

ตั้งค่าการสำรองข้อมูลแบบเข้ากันได้กับ S3

กำหนดค่าการสำรองข้อมูลอัตโนมัติไปยังที่เก็บข้อมูลแบบเข้ากันได้กับ S3:

# สร้างไดเรกทอรีข้อมูลรับรอง AWS
mkdir -p ~/.aws

# กำหนดค่าข้อมูลรับรอง AWS
cat > ~/.aws/credentials <<EOF
[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
EOF

# กำหนดค่าการตั้งค่า AWS
cat > ~/.aws/config <<EOF
[default]
region = auto
output = json
EOF

# สำหรับ S3 ที่ไม่ใช่ AWS (เช่น Cloudflare R2) ให้เพิ่ม URL endpoint
echo "endpoint_url = YOUR_S3_ENDPOINT_URL" >> ~/.aws/config

ตั้งค่าการสำรองข้อมูลด้วย Cron Jobs

# ทำให้สคริปต์สำรองข้อมูลสามารถรันได้
chmod +x "$ROOT_DIR/self-hosting/scripts/backup-mongo.sh"
chmod +x "$ROOT_DIR/self-hosting/scripts/backup-redis.sh"

# เพิ่มงาน cron สำรองข้อมูล MongoDB (รันทุกวันตอนเที่ยงคืน)
(crontab -l 2>/dev/null; echo "0 0 * * * $ROOT_DIR/self-hosting/scripts/backup-mongo.sh >> /var/log/mongo-backup.log 2>&1") | crontab -

# เพิ่มงาน cron สำรองข้อมูล Redis (รันทุกวันตอนเที่ยงคืน)
(crontab -l 2>/dev/null; echo "0 0 * * * $ROOT_DIR/self-hosting/scripts/backup-redis.sh >> /var/log/redis-backup.log 2>&1") | crontab -

# ตรวจสอบว่างาน cron ถูกเพิ่มแล้ว
crontab -l

ตั้งค่าให้อัปเดตอัตโนมัติสำหรับการติดตั้ง Forward Email ของคุณ:

# สร้างคำสั่งอัปเดตอัตโนมัติ (ใช้คำสั่ง docker compose ที่เหมาะสม)
if command -v docker-compose &> /dev/null; then
    DOCKER_UPDATE_CMD="docker-compose -f $DOCKER_COMPOSE_FILE pull && docker-compose -f $DOCKER_COMPOSE_FILE up -d"
else
    DOCKER_UPDATE_CMD="docker compose -f $DOCKER_COMPOSE_FILE pull && docker compose -f $DOCKER_COMPOSE_FILE up -d"
fi

# เพิ่มงาน cron อัปเดตอัตโนมัติ (รันทุกวันตอนตี 1)
(crontab -l 2>/dev/null; echo "0 1 * * * $DOCKER_UPDATE_CMD >> /var/log/autoupdate.log 2>&1") | crontab -

# ตรวจสอบว่างาน cron ถูกเพิ่มแล้ว
crontab -l

ความแตกต่างในการจัดการแพ็กเกจ

  • Snapd: ไม่ได้ติดตั้งมาโดยค่าเริ่มต้นบน Debian ต้องติดตั้งเอง
  • Docker: ใช้ที่เก็บแพ็กเกจและกุญแจ GPG เฉพาะ Debian
  • UFW: อาจไม่มีใน Debian แบบติดตั้งแบบ minimal
  • systemd: พฤติกรรมอาจแตกต่างเล็กน้อยจาก Ubuntu

การจัดการบริการ

# ตรวจสอบสถานะบริการ (คำสั่งเฉพาะ Debian)
systemctl status snapd
systemctl status docker
systemctl status ufw

# รีสตาร์ทบริการถ้าจำเป็น
systemctl restart snapd
systemctl restart docker

การตั้งค่าเครือข่าย

Debian อาจมีชื่อหรือการตั้งค่าอินเทอร์เฟซเครือข่ายที่แตกต่าง:

# ตรวจสอบอินเทอร์เฟซเครือข่าย
ip addr show

# ตรวจสอบเส้นทางเครือข่าย
ip route show

# ตรวจสอบการแก้ไขชื่อ DNS
nslookup google.com

ตำแหน่งบันทึกล็อก

  • ล็อก Docker Compose: ใช้คำสั่ง docker compose ที่เหมาะสมตามการติดตั้ง
  • ล็อกระบบ: /var/log/syslog
  • ล็อกสำรองข้อมูล: /var/log/mongo-backup.log, /var/log/redis-backup.log
  • ล็อกอัปเดตอัตโนมัติ: /var/log/autoupdate.log
  • ล็อก Snapd: journalctl -u snapd

งานบำรุงรักษาปกติ

  1. ตรวจสอบพื้นที่ดิสก์: df -h
  2. ตรวจสอบสถานะบริการ: ใช้คำสั่ง docker compose ที่เหมาะสม
  3. ตรวจสอบล็อก: ตรวจสอบทั้งล็อกแอปพลิเคชันและระบบ
  4. อัปเดตแพ็กเกจระบบ: apt update && apt upgrade
  5. ตรวจสอบ snapd: snap list และ snap refresh

การต่ออายุใบรับรอง

ใบรับรองควรต่ออายุอัตโนมัติ แต่คุณสามารถต่ออายุด้วยตนเองได้ถ้าจำเป็น:

# ต่ออายุใบรับรองด้วยตนเอง
certbot renew

# คัดลอกใบรับรองที่ต่ออายุแล้ว
cp /etc/letsencrypt/live/$DOMAIN*/* "$SELF_HOST_DIR/ssl/"

# รีสตาร์ทบริการเพื่อใช้ใบรับรองใหม่
if command -v docker-compose &> /dev/null; then
    docker-compose -f "$DOCKER_COMPOSE_FILE" restart
else
    docker compose -f "$DOCKER_COMPOSE_FILE" restart
fi

ปัญหาเฉพาะ Debian

1. Snapd ไม่ทำงาน

# ตรวจสอบสถานะ snapd
systemctl status snapd

# รีสตาร์ท snapd
systemctl restart snapd

# ตรวจสอบ path ของ snap
echo $PATH | grep snap

# เพิ่ม snap ใน PATH ถ้าไม่มี
echo 'export PATH=$PATH:/snap/bin' >> ~/.bashrc
source ~/.bashrc

2. คำสั่ง Docker Compose ไม่พบ

# ตรวจสอบคำสั่ง docker compose ที่มีอยู่
command -v docker-compose
command -v docker

# ใช้คำสั่งที่เหมาะสมในสคริปต์
if command -v docker-compose &> /dev/null; then
    echo "ใช้ docker-compose"
else
    echo "ใช้ docker compose"
fi

3. ปัญหาการติดตั้งแพ็กเกจ

# อัปเดตแคชแพ็กเกจ
apt update

# แก้ไขแพ็กเกจที่เสียหาย
apt --fix-broken install

# ตรวจสอบแพ็กเกจที่ถูกล็อก
apt-mark showhold

ปัญหาทั่วไป

1. บริการ Docker ไม่เริ่มทำงาน

# ตรวจสอบสถานะ Docker
systemctl status docker

# ตรวจสอบบันทึก Docker
journalctl -u docker

# ลองเริ่มต้นแบบทางเลือก
nohup dockerd >/dev/null 2>/dev/null &

2. การสร้างใบรับรองล้มเหลว

  • ตรวจสอบให้แน่ใจว่าเปิดพอร์ต 80 และ 443
  • ยืนยันว่าบันทึก DNS ชี้ไปยังเซิร์ฟเวอร์ของคุณ
  • ตรวจสอบการตั้งค่าไฟร์วอลล์ด้วย ufw status

3. ปัญหาการส่งอีเมล

  • ยืนยันว่าบันทึก MX ถูกต้อง
  • ตรวจสอบบันทึก SPF, DKIM และ DMARC
  • ตรวจสอบให้แน่ใจว่าพอร์ต 25 ไม่ถูกบล็อกโดยผู้ให้บริการโฮสติ้งของคุณ

การขอความช่วยเหลือ

  1. อัปเดตระบบอย่างสม่ำเสมอ: อัปเดต Debian และแพ็กเกจอย่างสม่ำเสมอ
  2. ตรวจสอบบันทึก: ตั้งค่าการตรวจสอบและแจ้งเตือนบันทึก
  3. สำรองข้อมูลเป็นประจำ: ทดสอบกระบวนการสำรองและกู้คืนข้อมูล
  4. ใช้รหัสผ่านที่แข็งแรง: สร้างรหัสผ่านที่แข็งแรงสำหรับทุกบัญชี
  5. เปิดใช้งาน Fail2Ban: พิจารณาติดตั้ง fail2ban เพื่อความปลอดภัยเพิ่มเติม
  6. ตรวจสอบความปลอดภัยเป็นระยะ: ทบทวนการตั้งค่าของคุณเป็นระยะ
  7. ตรวจสอบ Snapd: อัปเดตแพ็กเกจ snap ด้วยคำสั่ง snap refresh

การติดตั้ง Forward Email แบบโฮสต์เองของคุณควรเสร็จสมบูรณ์และทำงานบน Debian แล้ว โปรดจำไว้ว่า:

  1. กำหนดค่าบันทึก DNS ของคุณอย่างถูกต้อง
  2. ทดสอบการส่งและรับอีเมล
  3. ตั้งค่าการสำรองข้อมูลเป็นประจำ
  4. ตรวจสอบระบบของคุณอย่างสม่ำเสมอ
  5. อัปเดตการติดตั้งของคุณอย่างต่อเนื่อง
  6. ตรวจสอบ snapd และแพ็กเกจ snap

ความแตกต่างหลักจาก Ubuntu คือการติดตั้ง snapd และการตั้งค่าที่เก็บ Docker เมื่อกำหนดค่าเหล่านี้อย่างถูกต้อง แอป Forward Email จะทำงานเหมือนกันทั้งสองระบบ

สำหรับตัวเลือกการตั้งค่าเพิ่มเติมและฟีเจอร์ขั้นสูง โปรดดูเอกสารอย่างเป็นทางการของ Forward Email ที่ https://forwardemail.net/self-hosted#configuration.