Home > Blog > tech

Docker Compose 2026 สร้าง Home Lab Self-Hosted Services ที่บ้าน

docker compose home lab self hosted 2026
Docker Compose 2026 สร้าง Home Lab Self-Hosted Services ที่บ้าน
2026-04-17 | tech | 3400 words

ในปี 2026 การสร้าง Home Lab ด้วย Docker Compose เป็นเทรนด์ที่ได้รับความนิยมในหมู่ Developer และ Tech Enthusiast ทั่วโลก เพราะช่วยให้คุณ Host Services ต่างๆ ที่บ้าน แทนการเสียเงินรายเดือนให้ Cloud Services ตัวอย่างเช่น Nextcloud (แทน Google Drive), Jellyfin (แทน Netflix), Vaultwarden (แทน 1Password) ทำให้ประหยัดเงินได้หลายหมื่นบาทต่อปี พร้อมความเป็นส่วนตัวของข้อมูล บทความนี้จะสอนวิธีสร้าง Home Lab ด้วย Docker Compose ตั้งแต่พื้นฐานไปจนถึง Production-ready Setup

ทำไมต้องใช้ Docker Compose สำหรับ Home Lab?

# =============================================
# เหตุผลที่ Docker Compose เหมาะกับ Home Lab:
# =============================================
#
# 1. Multi-Container Management:
# → จัดการหลาย Services พร้อมกัน
# → Start/Stop ทั้งหมดใน 1 command
# → docker-compose up -d
#
# 2. Declarative Configuration:
# → YAML file เดียว
# → Version Control ใน Git
# → Reproducible Setup
#
# 3. Easy Networking:
# → Services คุยกันผ่าน Network
# → Auto Service Discovery
# → DNS-based (service name)
#
# 4. Volume Management:
# → Persistent Data
# → Named Volumes
# → Bind Mounts
#
# 5. Easy Updates:
# → docker-compose pull
# → docker-compose up -d
# → Zero Downtime (กับ Traefik)
#
# =============================================
# เปรียบเทียบกับ Alternatives:
# =============================================
#
# Docker Compose vs Kubernetes:
# → Docker Compose: เหมาะ 1 เครื่อง
# → Kubernetes: Multi-node, Complex
# → K8s overkill สำหรับ Home
#
# Docker Compose vs Bare Metal:
# → Compose: Isolated, Easy Update
# → Bare Metal: ไม่ isolated, Dep conflicts
# → Docker ดีกว่าแน่นอน
#
# Docker Compose vs Docker Swarm:
# → Swarm: Multi-host, HA
# → Compose: Single host, Simple
# → Home Lab ใช้ Compose พอ

Hardware ที่แนะนำสำหรับ Home Lab 2026

# =============================================
# Budget Options:
# =============================================
#
# 1. Raspberry Pi 5 (8GB):
#    → ราคา: ~4,000 บาท
#    → CPU: ARM64 (Cortex-A76)
#    → RAM: 8GB LPDDR4X
#    → Storage: microSD + NVMe SSD
#    → ใช้ไฟ 5W (ประหยัดมาก)
#    → เหมาะ: Light services
#
# 2. Old PC/Laptop:
#    → ราคา: 0-5,000 (ของเก่า)
#    → CPU: Core i5/i7 gen 4+
#    → RAM: 8-16GB
#    → Storage: SSD 256GB+
#    → เหมาะ: Medium workload
#
# 3. Mini PC (Beelink, Minisforum):
#    → ราคา: 10,000-20,000
#    → CPU: Ryzen 5/7 Mobile
#    → RAM: 16-32GB DDR5
#    → Storage: 512GB-2TB NVMe
#    → เหมาะ: Medium-Heavy
#
# =============================================
# Advanced Setup:
# =============================================
#
# 4. NAS (Synology, QNAP):
#    → ราคา: 15,000-50,000
#    → Hardware RAID
#    → Hot-swap drives
#    → รองรับ Docker
#
# 5. Home Server (Custom Build):
#    → ราคา: 30,000-100,000+
#    → Ryzen 9 / Intel Xeon
#    → ECC RAM 64GB+
#    → ZFS Storage
#
# =============================================
# Storage Recommendations:
# =============================================
# → OS: SSD 256GB (Boot + Docker)
# → Data: HDD/SSD 1-4TB
# → Backup: External USB HDD
# → Cloud Backup: Backblaze B2
#
# =============================================
# Network:
# =============================================
# → Ethernet ดีกว่า WiFi
# → Router ที่มี Static IP
# → DDNS (No-IP, DuckDNS)
# → VPN (Tailscale, WireGuard)

Install Docker และ Docker Compose

# =============================================
# Ubuntu Server 24.04 (แนะนำ):
# =============================================
#
# # Update system
# sudo apt update && sudo apt upgrade -y
#
# # Install prerequisites
# sudo apt install -y curl ca-certificates
#
# # Add Docker GPG key
# sudo install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
#   sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#
# # Add Docker repository
# echo "deb [arch=$(dpkg --print-architecture) \
#   signed-by=/etc/apt/keyrings/docker.gpg] \
#   https://download.docker.com/linux/ubuntu \
#   $(lsb_release -cs) stable" | \
#   sudo tee /etc/apt/sources.list.d/docker.list
#
# # Install Docker
# sudo apt update
# sudo apt install -y docker-ce docker-ce-cli containerd.io \
#   docker-buildx-plugin docker-compose-plugin
#
# # Add user to docker group
# sudo usermod -aG docker $USER
# newgrp docker
#
# # Test
# docker run hello-world
# docker compose version
#
# =============================================
# Directory Structure แนะนำ:
# =============================================
# /home/user/docker/
# ├── nextcloud/
# │   ├── docker-compose.yml
# │   ├── .env
# │   └── data/
# ├── jellyfin/
# │   ├── docker-compose.yml
# │   └── config/
# ├── traefik/
# │   ├── docker-compose.yml
# │   └── traefik.yml
# └── backup/
#     └── scripts/

Essential Services สำหรับ Home Lab

# =============================================
# Top Self-Hosted Services 2026:
# =============================================
#
# 1. Reverse Proxy:
#    → Traefik v3 (แนะนำ)
#    → Nginx Proxy Manager
#    → Caddy
#
# 2. Password Manager:
#    → Vaultwarden (Bitwarden server)
#    → Free, Open-source
#    → แทน 1Password, LastPass
#
# 3. Cloud Storage:
#    → Nextcloud
#    → OwnCloud
#    → Seafile
#    → แทน Google Drive, Dropbox
#
# 4. Media Server:
#    → Jellyfin (ฟรี)
#    → Plex (มี Premium)
#    → Emby
#    → แทน Netflix, Spotify
#
# 5. Container Management:
#    → Portainer
#    → Web UI สำหรับ Docker
#
# 6. Home Automation:
#    → Home Assistant
#    → รวม Smart Devices
#
# 7. DNS Filtering:
#    → Pi-hole
#    → AdGuard Home
#    → Block ads network-wide
#
# 8. VPN:
#    → Wireguard (Wg-Easy UI)
#    → Tailscale
#    → เข้าถึง Home จากข้างนอก
#
# 9. Note Taking:
#    → Joplin Server
#    → Obsidian Sync Alternative
#    → Trilium Notes
#
# 10. Git:
#     → Gitea
#     → Forgejo
#     → แทน GitHub (Private)
#
# 11. Monitoring:
#     → Grafana + Prometheus
#     → Uptime Kuma
#     → Netdata
#
# 12. Photo Management:
#     → Immich (Google Photos clone)
#     → PhotoPrism
#     → LibrePhotos

Docker Compose Example: Nextcloud

# =============================================
# nextcloud/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   db:
#     image: mariadb:10.11
#     container_name: nextcloud-db
#     restart: unless-stopped
#     command: --transaction-isolation=READ-COMMITTED \
#              --binlog-format=ROW
#     volumes:
#       - ./db:/var/lib/mysql
#     environment:
#       - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
#       - MYSQL_PASSWORD=${DB_PASS}
#       - MYSQL_DATABASE=nextcloud
#       - MYSQL_USER=nextcloud
#     networks:
#       - internal
#
#   redis:
#     image: redis:7-alpine
#     container_name: nextcloud-redis
#     restart: unless-stopped
#     networks:
#       - internal
#
#   app:
#     image: nextcloud:28-apache
#     container_name: nextcloud-app
#     restart: unless-stopped
#     depends_on:
#       - db
#       - redis
#     volumes:
#       - ./nextcloud:/var/www/html
#       - ./data:/var/www/html/data
#     environment:
#       - MYSQL_PASSWORD=${DB_PASS}
#       - MYSQL_DATABASE=nextcloud
#       - MYSQL_USER=nextcloud
#       - MYSQL_HOST=db
#       - REDIS_HOST=redis
#       - NEXTCLOUD_ADMIN_USER=admin
#       - NEXTCLOUD_ADMIN_PASSWORD=${ADMIN_PASS}
#       - NEXTCLOUD_TRUSTED_DOMAINS=cloud.mydomain.com
#     ports:
#       - "8080:80"
#     networks:
#       - internal
#       - external
#
# networks:
#   internal:
#     driver: bridge
#   external:
#     external: true
#
# =============================================
# .env file:
# =============================================
# DB_ROOT_PASS=SuperSecretRoot123!
# DB_PASS=SecretUserPass456!
# ADMIN_PASS=AdminPassword789!
#
# =============================================
# Start:
# =============================================
# docker compose up -d
# docker compose logs -f

Traefik: Modern Reverse Proxy

# =============================================
# ทำไมใช้ Traefik?
# =============================================
# → Auto Service Discovery
# → Let's Encrypt SSL อัตโนมัติ
# → Modern Dashboard
# → Docker-native
# → Zero Config (เกือบ)
#
# =============================================
# traefik/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   traefik:
#     image: traefik:v3.0
#     container_name: traefik
#     restart: unless-stopped
#     command:
#       - --api.dashboard=true
#       - --providers.docker=true
#       - --providers.docker.exposedbydefault=false
#       - --entrypoints.web.address=:80
#       - --entrypoints.websecure.address=:443
#       - --entrypoints.web.http.redirections.entrypoint.to=websecure
#       - --entrypoints.web.http.redirections.entrypoint.scheme=https
#       - --certificatesresolvers.le.acme.email=me@example.com
#       - --certificatesresolvers.le.acme.storage=/acme.json
#       - --certificatesresolvers.le.acme.tlschallenge=true
#     ports:
#       - "80:80"
#       - "443:443"
#     volumes:
#       - /var/run/docker.sock:/var/run/docker.sock:ro
#       - ./acme.json:/acme.json
#     networks:
#       - external
#     labels:
#       - "traefik.enable=true"
#       - "traefik.http.routers.dashboard.rule=Host(\\`traefik.example.com\\`)"
#       - "traefik.http.routers.dashboard.service=api@internal"
#       - "traefik.http.routers.dashboard.tls=true"
#       - "traefik.http.routers.dashboard.tls.certresolver=le"
#
# networks:
#   external:
#     external: true
#
# =============================================
# Service ที่ใช้ Traefik (Nextcloud):
# =============================================
# labels:
#   - "traefik.enable=true"
#   - "traefik.http.routers.nextcloud.rule=Host(\\`cloud.example.com\\`)"
#   - "traefik.http.routers.nextcloud.tls=true"
#   - "traefik.http.routers.nextcloud.tls.certresolver=le"
#   - "traefik.http.services.nextcloud.loadbalancer.server.port=80"
#
# → เพียงเท่านี้ Traefik รู้และ Route ให้!
# → SSL Certificate อัตโนมัติ!

Vaultwarden: Self-hosted Password Manager

# =============================================
# Vaultwarden (เดิม Bitwarden_rs):
# =============================================
# → Rust-based Bitwarden server
# → Lightweight (ใช้ RAM น้อย)
# → รองรับ Official Bitwarden apps
# → ฟรี 100%
#
# =============================================
# vaultwarden/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   vaultwarden:
#     image: vaultwarden/server:latest
#     container_name: vaultwarden
#     restart: unless-stopped
#     environment:
#       - DOMAIN=https://vault.example.com
#       - SIGNUPS_ALLOWED=false
#       - ADMIN_TOKEN=${ADMIN_TOKEN}
#       - WEBSOCKET_ENABLED=true
#       - SMTP_HOST=smtp.gmail.com
#       - SMTP_FROM=me@example.com
#       - SMTP_PORT=587
#       - SMTP_SECURITY=starttls
#       - SMTP_USERNAME=me@gmail.com
#       - SMTP_PASSWORD=${SMTP_PASS}
#     volumes:
#       - ./data:/data
#     networks:
#       - external
#     labels:
#       - "traefik.enable=true"
#       - "traefik.http.routers.vault.rule=Host(\\`vault.example.com\\`)"
#       - "traefik.http.routers.vault.tls=true"
#       - "traefik.http.routers.vault.tls.certresolver=le"
#       - "traefik.http.services.vault.loadbalancer.server.port=80"
#
# networks:
#   external:
#     external: true
#
# =============================================
# Features:
# =============================================
# ✓ รองรับ Apps (Desktop, Mobile, Web)
# ✓ Browser Extensions
# ✓ 2FA Support
# ✓ File Attachments
# ✓ Organizations (Share)
# ✓ Emergency Access

Jellyfin: Self-hosted Streaming

# =============================================
# Jellyfin: Netflix Alternative:
# =============================================
# → 100% Free Open-source
# → ไม่มี Limit
# → Stream Movies, TV, Music, Photos
# → Hardware Transcoding
# → แชร์กับครอบครัว
#
# =============================================
# jellyfin/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   jellyfin:
#     image: jellyfin/jellyfin:latest
#     container_name: jellyfin
#     restart: unless-stopped
#     user: 1000:1000
#     volumes:
#       - ./config:/config
#       - ./cache:/cache
#       - /mnt/media/movies:/media/movies:ro
#       - /mnt/media/tv:/media/tv:ro
#       - /mnt/media/music:/media/music:ro
#     ports:
#       - "8096:8096"
#     devices:
#       - /dev/dri:/dev/dri  # Intel GPU transcoding
#     networks:
#       - external
#     labels:
#       - "traefik.enable=true"
#       - "traefik.http.routers.jellyfin.rule=Host(\\`jellyfin.example.com\\`)"
#       - "traefik.http.routers.jellyfin.tls=true"
#       - "traefik.http.routers.jellyfin.tls.certresolver=le"
#
# networks:
#   external:
#     external: true
#
# =============================================
# Library Structure:
# =============================================
# /mnt/media/
# ├── movies/
# │   └── Movie Title (Year)/
# │       ├── movie.mkv
# │       ├── movie.srt (subtitles)
# │       └── poster.jpg
# ├── tv/
# │   └── Show Name/
# │       └── Season 01/
# │           ├── S01E01.mkv
# │           └── S01E02.mkv
# └── music/
#     └── Artist/
#         └── Album/
#             └── 01 - Song.mp3
#
# =============================================
# Supporting Apps:
# =============================================
# → Jellyfin (Web, iOS, Android, TV)
# → Chromecast, AirPlay
# → Roku, Fire TV
# → ARR Suite (Sonarr, Radarr)

Pi-hole: Network-wide Ad Blocking

# =============================================
# Pi-hole: Block ads ทั้ง Network:
# =============================================
# → DNS-level blocking
# → Blocks ads บนทุก device
# → TV, Mobile, PC, IoT
# → Stats dashboard
# → ประหยัด Bandwidth 20-30%
#
# =============================================
# pihole/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   pihole:
#     image: pihole/pihole:latest
#     container_name: pihole
#     restart: unless-stopped
#     ports:
#       - "53:53/tcp"
#       - "53:53/udp"
#       - "67:67/udp"
#     environment:
#       - TZ=Asia/Bangkok
#       - WEBPASSWORD=${PIHOLE_PASSWORD}
#     volumes:
#       - ./etc-pihole:/etc/pihole
#       - ./etc-dnsmasq.d:/etc/dnsmasq.d
#     cap_add:
#       - NET_ADMIN
#     networks:
#       - external
#     labels:
#       - "traefik.enable=true"
#       - "traefik.http.routers.pihole.rule=Host(\\`pihole.example.com\\`)"
#       - "traefik.http.services.pihole.loadbalancer.server.port=80"
#
# =============================================
# Configure Router:
# =============================================
# → DHCP → DNS: Pi-hole IP
# → All devices use Pi-hole
# → Blocks ads automatically
#
# =============================================
# Blocklists แนะนำ:
# =============================================
# - StevenBlack/hosts
# - EasyList
# - EasyPrivacy
# - Malware-filter
# - Anti-YouTube-Ads
# = Block 2-3 ล้าน domains

Uptime Kuma: Monitor Services

# =============================================
# Uptime Kuma:
# =============================================
# → Self-hosted Uptime Monitoring
# → แทน UptimeRobot (ฟรี)
# → Notifications ผ่าน Discord, Telegram, LINE
# → Beautiful Dashboard
#
# =============================================
# uptime-kuma/docker-compose.yml:
# =============================================
# version: '3.9'
#
# services:
#   uptime-kuma:
#     image: louislam/uptime-kuma:latest
#     container_name: uptime-kuma
#     restart: unless-stopped
#     volumes:
#       - ./data:/app/data
#     ports:
#       - "3001:3001"
#     labels:
#       - "traefik.enable=true"
#       - "traefik.http.routers.uptime.rule=Host(\\`status.example.com\\`)"
#       - "traefik.http.services.uptime.loadbalancer.server.port=3001"
#
# =============================================
# Monitoring Types:
# =============================================
# → HTTP/HTTPS
# → TCP Port
# → Ping (ICMP)
# → DNS
# → Docker Container
# → SSL Certificate Expiry
# → Database (MySQL, Postgres)

Automated Backups

# =============================================
# Backup Strategy: 3-2-1 Rule:
# =============================================
# → 3 copies of data
# → 2 different media
# → 1 offsite
#
# =============================================
# backup.sh Script:
# =============================================
# #!/bin/bash
# BACKUP_DIR="/backup/$(date +%Y-%m-%d)"
# mkdir -p $BACKUP_DIR
#
# # Stop containers
# cd /home/user/docker/nextcloud
# docker compose stop
#
# # Backup data
# tar -czf $BACKUP_DIR/nextcloud.tar.gz ./data ./nextcloud ./db
#
# # Restart
# docker compose start
#
# # Upload to Backblaze B2 (offsite)
# rclone copy $BACKUP_DIR b2:my-backup-bucket/
#
# # Cleanup old (keep 7 days)
# find /backup -type d -mtime +7 -exec rm -rf {} \;
#
# =============================================
# Cron Schedule:
# =============================================
# # Daily at 2 AM
# 0 2 * * * /home/user/backup.sh
#
# # Weekly (Sunday)
# 0 3 * * 0 /home/user/weekly-backup.sh
#
# =============================================
# Cloud Storage Options:
# =============================================
# → Backblaze B2: $5/TB/month
# → AWS S3: $23/TB/month
# → Wasabi: $7/TB/month
# → Cloudflare R2: $15/TB (ฟรี Egress)
# → Storj: $4/TB/month

Remote Access: WireGuard / Tailscale

# =============================================
# Wireguard (Self-hosted VPN):
# =============================================
#
# wg-easy/docker-compose.yml:
# version: '3.9'
#
# services:
#   wg-easy:
#     image: ghcr.io/wg-easy/wg-easy:latest
#     container_name: wg-easy
#     restart: unless-stopped
#     environment:
#       - WG_HOST=vpn.example.com
#       - PASSWORD=${WG_PASSWORD}
#     volumes:
#       - ./config:/etc/wireguard
#     ports:
#       - "51820:51820/udp"
#       - "51821:51821/tcp"
#     cap_add:
#       - NET_ADMIN
#       - SYS_MODULE
#
# =============================================
# Tailscale (Easier, zero-config):
# =============================================
# # Install
# curl -fsSL https://tailscale.com/install.sh | sh
# sudo tailscale up
#
# # On another device
# sudo tailscale up
#
# → ใช้งานได้ทันที
# → ไม่ต้องเปิด Port
# → Private Network (100.x.y.z)
# → Free up to 20 devices

Monitoring: Grafana + Prometheus

# =============================================
# Stack: Prometheus + Grafana + cAdvisor:
# =============================================
#
# monitoring/docker-compose.yml:
# version: '3.9'
#
# services:
#   prometheus:
#     image: prom/prometheus:latest
#     container_name: prometheus
#     restart: unless-stopped
#     volumes:
#       - ./prometheus.yml:/etc/prometheus/prometheus.yml
#       - ./data:/prometheus
#     command:
#       - '--config.file=/etc/prometheus/prometheus.yml'
#       - '--storage.tsdb.path=/prometheus'
#
#   grafana:
#     image: grafana/grafana:latest
#     container_name: grafana
#     restart: unless-stopped
#     volumes:
#       - ./grafana-data:/var/lib/grafana
#     environment:
#       - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASS}
#
#   cadvisor:
#     image: gcr.io/cadvisor/cadvisor:latest
#     container_name: cadvisor
#     restart: unless-stopped
#     volumes:
#       - /:/rootfs:ro
#       - /var/run:/var/run:ro
#       - /sys:/sys:ro
#       - /var/lib/docker/:/var/lib/docker:ro
#
#   node-exporter:
#     image: prom/node-exporter:latest
#     container_name: node-exporter
#     restart: unless-stopped
#     volumes:
#       - /proc:/host/proc:ro
#       - /sys:/host/sys:ro
#
# =============================================
# Grafana Dashboards (Import):
# =============================================
# → 1860: Node Exporter Full
# → 193: Docker & System
# → 15661: NVIDIA GPU
# → 10619: Nextcloud
# → 11671: Traefik 3

Performance Optimization

# =============================================
# Tips เพื่อให้ Home Lab รันดี:
# =============================================
#
# 1. Use Alpine Images:
#    → Smaller, Faster
#    → nginx:alpine vs nginx
#    → 10MB vs 150MB
#
# 2. Resource Limits:
#    services:
#      app:
#        deploy:
#          resources:
#            limits:
#              cpus: '2'
#              memory: 2G
#            reservations:
#              memory: 1G
#
# 3. Docker Log Rotation:
#    # /etc/docker/daemon.json
#    {
#      "log-driver": "json-file",
#      "log-opts": {
#        "max-size": "10m",
#        "max-file": "3"
#      }
#    }
#
# 4. Prune Regularly:
#    docker system prune -af --volumes
#
# 5. Use SSD for Docker:
#    # Move Docker dir to SSD
#    # /etc/docker/daemon.json
#    {
#      "data-root": "/mnt/ssd/docker"
#    }
#
# 6. Health Checks:
#    services:
#      app:
#        healthcheck:
#          test: ["CMD", "curl", "-f", "http://localhost"]
#          interval: 30s
#          timeout: 10s
#          retries: 3
#
# 7. Restart Policies:
#    restart: unless-stopped  # แนะนำ
#    restart: always
#    restart: on-failure:3

Developer ที่เทรด Forex กับ Home Lab

# =============================================
# Home Lab สำหรับ Trading:
# =============================================
#
# 1. MT4/MT5 on VPS:
#    → ติดตั้งบน Home Server
#    → รัน 24/7
#    → ไม่ต้องเช่า VPS 20-50$/เดือน
#
# 2. Trading Bots:
#    → Python + ccxt library
#    → Docker container
#    → Schedule via Cron
#
# 3. Data Collection:
#    → TimescaleDB / InfluxDB
#    → เก็บข้อมูลตลาด
#    → Backtest strategies
#
# 4. Monitoring:
#    → Grafana Dashboards
#    → P&L Real-time
#    → Alert on Margin Call
#
# 5. Notebook Server:
#    → Jupyter Lab
#    → Strategy Development
#    → Data Analysis
#
# =============================================
# docker-compose.yml for Trading:
# =============================================
# services:
#   jupyter:
#     image: jupyter/datascience-notebook
#     volumes: [./notebooks:/home/jovyan/work]
#     ports: ["8888:8888"]
#
#   timescaledb:
#     image: timescale/timescaledb:latest-pg15
#     volumes: [./db:/var/lib/postgresql/data]
#
#   mt5:
#     image: gmag11/metatrader5:latest
#     volumes: [./config:/config]
#     ports: ["3389:3389"]  # RDP
#
#   trading-bot:
#     build: ./bot
#     environment:
#       - ICAFEFX_API_KEY=${ICAFEFX_KEY}
#     restart: unless-stopped

สำหรับ Developer ที่สนใจการเทรด Forex การมี Home Lab ช่วยประหยัดค่า VPS และทำให้สามารถทดลอง Trading Bot ได้อย่างอิสระ การผสมผสาน Jupyter Notebook สำหรับ Strategy Development, TimescaleDB สำหรับ Market Data, และ MT5 Container สำหรับ Execution เป็นทางเลือกที่ดีสำหรับ Quant Trader ที่ต้องการ Cost-Effective Setup การใช้สัญญาณจาก iCafeFX ร่วมกับระบบ Automation ที่สร้างเองใน Home Lab ช่วยให้สามารถ Backtest และ Live Trading ได้พร้อมกัน

Security Best Practices

# =============================================
# Home Lab Security Checklist:
# =============================================
#
# Network:
# □ 1. ใช้ Firewall (UFW)
# □ 2. เปิด Port แค่จำเป็น
# □ 3. VPN only สำหรับ Admin
# □ 4. Cloudflare Tunnel (แทน Port Forward)
#
# Authentication:
# □ 5. 2FA ทุก Services
# □ 6. SSH Key only (ไม่ใช้ password)
# □ 7. fail2ban
# □ 8. Strong Passwords (Vaultwarden)
#
# Updates:
# □ 9. Auto-update OS
# □ 10. Watchtower (Auto-update Docker)
# □ 11. Subscribe Security Newsletters
#
# Backups:
# □ 12. Daily backups
# □ 13. Offsite backup
# □ 14. Test Restore (quarterly)
# □ 15. Encrypted backups
#
# Monitoring:
# □ 16. Log aggregation
# □ 17. Intrusion Detection
# □ 18. Uptime monitoring
# □ 19. SSL cert expiry alerts
#
# Docker:
# □ 20. Non-root users
# □ 21. Read-only filesystems
# □ 22. Resource limits
# □ 23. No privileged mode

Cost Comparison: Home Lab vs Cloud Services

# =============================================
# Monthly Cost ถ้าใช้ Cloud:
# =============================================
# - Google Drive 2TB: 299/เดือน
# - Netflix Premium: 419/เดือน
# - 1Password Family: 329/เดือน
# - NordVPN: 350/เดือน
# - Microsoft 365: 299/เดือน
# - GitHub Pro: 145/เดือน
# - UptimeRobot Pro: 300/เดือน
# - Home Assistant Cloud: 250/เดือน
# รวม: 2,391/เดือน
# ปี: 28,692
#
# =============================================
# Home Lab Cost:
# =============================================
# Hardware (Mini PC): 20,000 (1x)
# Electricity: 200/เดือน
# Internet (มีอยู่แล้ว): 0
# Domain: 300/ปี
# Backup (B2): 100/เดือน
#
# Year 1: 20,000 + 3,900 = 23,900
# Year 2+: 3,900/ปี
#
# =============================================
# Savings:
# =============================================
# Year 1: 28,692 - 23,900 = 4,792
# Year 2: 28,692 - 3,900 = 24,792
# Year 3: 28,692 - 3,900 = 24,792
# 5 ปี: ประหยัด 99,168+!
# = ~20K/ปี

Checklist Home Lab 2026

# =============================================
# HOME LAB SETUP CHECKLIST:
# =============================================
#
# Hardware:
# □ 1. Server (Mini PC / Old PC / NAS)
# □ 2. SSD (OS) + HDD (Data)
# □ 3. UPS (ป้องกันไฟดับ)
# □ 4. Ethernet cable (ไม่ใช่ WiFi)
#
# OS:
# □ 5. Ubuntu Server 24.04 LTS
# □ 6. Static IP
# □ 7. SSH access
# □ 8. Auto-updates
#
# Docker:
# □ 9. Docker + Compose installed
# □ 10. User in docker group
# □ 11. Docker Compose projects structure
#
# Core Services:
# □ 12. Traefik (Reverse Proxy)
# □ 13. Portainer (Management)
# □ 14. Vaultwarden (Passwords)
# □ 15. Nextcloud (Storage)
# □ 16. Pi-hole (Ad Block)
#
# Media:
# □ 17. Jellyfin
# □ 18. Immich (Photos)
# □ 19. Audiobookshelf
#
# Productivity:
# □ 20. Gitea
# □ 21. Joplin Server
# □ 22. Bookstack
#
# Monitoring:
# □ 23. Uptime Kuma
# □ 24. Grafana + Prometheus
# □ 25. Netdata
#
# Security:
# □ 26. VPN (WireGuard/Tailscale)
# □ 27. 2FA enabled
# □ 28. Firewall configured
# □ 29. Backups automated
#
# Domain:
# □ 30. Domain name (Cloudflare)
# □ 31. DNS records
# □ 32. SSL certificates (Let's Encrypt)

สรุป: Home Lab = ความอิสระของข้อมูล

Home Lab ด้วย Docker Compose ในปี 2026 ไม่ได้เป็นแค่ Hobby ของ Tech Nerd แต่เป็น การลงทุนที่คุ้มค่า ที่ประหยัดเงินได้ 20,000-30,000 บาทต่อปี และให้ ความเป็นส่วนตัวของข้อมูล ที่คุณควบคุมได้เต็มที่ ด้วยการเริ่มต้นที่ Traefik, Vaultwarden, Nextcloud, Jellyfin และขยายไปเรื่อยๆ การเรียนรู้ Docker Compose เป็นทักษะที่สำคัญสำหรับ Developer ยุคใหม่ และ Home Lab เป็นสนามทดลองที่ดีที่สุด


Back to Blog | iCafe Forex | SiamLanCard | Siam2R