Install Proxmox Backup Server (LXC) + backup offsite โดยใช้ Tailscale (NFS)
ตัวอย่างนี้จะประกอบไปด้วย server 2 ตัวคือ
- Proxmox ที่ติดตั้ง PBS (LXC) ลงในตัว
- เป็น local backup ในตัว server node โดยต้องมีพื้นที่อย่างน้อย 210GB (10 สำหรับ LXC และ 200 สำหรับ local backup)
- raspbery pi zero 2w ที่ติดตั้ง OMV ไว้เป็น backup สำรอง
- เป็น offsite backup คือ มีหน้าที่ backup sync ผ่าน NFS สำหรับ local backup อีกที เพื่อป้องกันหายนะหาย local backup พัง
- หากคิด mount nfs share ตรง ๆ โดยไม่มี local backup แนะนำว่าอย่าคิดทำ เพราะช้ามาก
- ผมเลือกใช้ตัวนี้เพราะมันถูกและกินไฟต่ำมากแค่ 2w
- ใช้คู่กับ HDD Externa 5TB รวม ๆ แล้วกินไฟเฉลี่ย 4w
- แต่ก็ยังมีตัวเลือกที่ดีกว่าคือ Radxa ZERO 3E ที่ราคาเท่ากันแต่แรงกว่าและมาพร้อม usb-c
- เป็น offsite backup คือ มีหน้าที่ backup sync ผ่าน NFS สำหรับ local backup อีกที เพื่อป้องกันหายนะหาย local backup พัง
server ทั้ง 2 จะทำการคุยกันโดยใช้ tailscale เป็น VPN เชื่อมต่อผ่าน NFS Share
Proxmox Server
ติดตั้ง PBS LXC
ใช้ script จาก https://community-scripts.github.io/ProxmoxVE/scripts?id=proxmox-backup-server
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/proxmox-backup-server.sh)"
หลังจากนั้น Disable Enterrpise Repo แนะนำให้ Yes ทุกข้อ
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pbs-install.sh)"
อย่าข้าม Disable Enterrpise Repo ไม่งั้นลงไม่ได้
ติดตั้ง Tailscale
ข้ามส่วนนี้หากไม่ต้องการทำ offsite backup และดูในส่วน Local Backup ได้เลย
จาก https://tailscale.com/kb/1031/install-linux
curl -fsSL https://tailscale.com/install.sh | sh
หลังจากติดตั้งแล้วมันจะแนะนำให้ tailscale up ซึ่งมันจะรันไม่ได้ ต้องทำตามนี้ก่อน
https://tailscale.com/kb/1130/lxc-unprivileged
ดู lxc id จากตัวอย่างคือ 101
ไปที่ shell ของตัว server ดูเลข container id ให้ตรงแล้วใส่คำสั่งลงไปเช่น
nano /etc/pve/lxc/101.conf
เพิ่มลงไปในแถวสุดท้าย
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
กด ctrl+x หลังจากนั้น y และ enter ออกมา
reboot lxc และลองพิมพ์ tailscale up จะพบว่าใช้งานได้แล้ว
ให้ทำการ copy url ไป authenticate เข้า id เราตามปกติ (อย่าลืมไป disable key expire ด้วย)
ตอนนี้ server พร้อมทำ NFS Share ในระดับหนึ่งแล้ว แต่พักไว้ตรงนี้ก่อน
สร้าง Local Backup
ให้ทำการ stop container ก่อน หลังจากนั้นดูในส่วน container id (ตัวอย่างคือ 101) > Resources
ให้กด Add และสร้าง Mount Point
- Mount Point ID - ไม่ต้องไปยุ่งกับมัน ปกติเป็น 0 อยู่แล้ว
- Path - จากตัวอย่างจะใช้ pbs-datastore เป็น local ถ้ากลัวงงตั้งเป็น pbs-backup-local หรืออะไรก็ได้ให้เข้าใจ
- Disk size - หากไม่แน่ใจว่าควรใช้เท่าไรให้ลองดูจาก vzdump backup ที่ทำไว้ คิดไม่ออกก็ 200GB
เสร็จเรียบแล้วแล้วให้กด Create
เสร็จแล้วหากไปเช็คในเมนูหลักส่วน local-lvm > CT จะเห็นว่า vm 101 จะมี disk 0 และ disk 1 ตาม Disk size ที่ตั้งไว้
เรียบร้อยแล้วให้ทำการ start container pbs กลับขึ้นมาอีกครั้ง
PBS Web UI - Local Backup
หลังจาก login เข้ามาแล้วเราก็จะไปกำหนด path storage กันโดยดูที่ Datastore > Add Datastore
- ตั้งชื่อที่จะแสดงผลในเมนู datastore ของ pbs
- ใส่ path จุด mount ลงไปให้เรียบร้อย
- อาจตั้ง comment เตือนตัวเองไว้ด้วยว่านี่คือ local backup
เรียบร้อยแล้วให้กด Add และรอสร้าง datastore สักครู่
เมื่อเสร็จเรียบร้อยแล้วจะเห็นมันไปขึ้นที่เมนูซ้ายล่างและในส่วน Datastore Usage
จุดนี้คือจบในส่วน local backup และเราจะไปตั้งค่า backup ใน proxmox หลัก
Proxmox Datacenter
หรือก็คือฝั่ง Proxmox นั่นแหละ ตอนนี้เราจะมาตั้งค่า pbs ให้เข้ามาอยู่ใน Proxmox โดย
ให้ไปที่ตัว Datacenter เลยและเลือก Storage > Add > Proxmox Backup Server
ตั้งค่าให้เรียบร้อย โดย
- id คือชื่อที่จะแสดงใน list ของ storage
- server สามารถใส่ ip ของ pbs lxc ได้เลยไม่ต้องใช้ ip ของ tailscale
- username ทั่วไปคือ root@pam อยู่แล้วส่วน password ก็ใช้ตัวที่เข้าไปจัดการ pbs
- datastore ตั้งชื่อให้เหมือนกับที่ตั้งไว้ใน pbs
- fingerprint ให้เข้าไปเอามาจากใน pbs ตามภาพ
หลังจากเรียบร้อยแล้วก็สามารถใช้งาน Datacenter > Backup ได้ตามปกติโดยจะมีตัวเลือกของ pbs เพิ่มเข้ามาแล้ว
เป็นอันจบส่วนของ local backup ซึ่งหากไม่ต้องการทำ offsite backup ไปที่อื่นก็สามารถจบได้ตรงนี้เลย
สร้าง Offsite Backup
แบ่งเป็น 2 ส่วน คือ
- ส่วนของ raspberry pi ทำการติดตั้งและตั้งค่า NFS Share ต่าง ๆ
- ส่วนของ PBS
ส่วนของ raspberry pi
ทำการติดตั้ง debian headless 64bit และลง OMV ให้เรียบร้อย
จัดการ Storage
เข้าไปจัดการ Storage > Disks ทำการ format ให้เป็น ext 4 หลังจากนั้นให้ mount file system
แต่หากทำไว้แล้วก็ไป mount file system ให้เห็น external harddisk ได้เลย
หลังจากนั้นให้สร้าง Shared Folders ให้เรียบร้อย (ตัวอย่างจะตั้งค่าตามภาพ)
จัดการ NFS Share
ดูที่ Service > NFS > Settings
ให้เปิดใช้งาน NFS
หลังจากนั้นให้ดูที่ Service > NFS > Shares
ใน extra option ให้ใส่ no_root_squash ลงไปด้วยไม่งั้น mount ไม่ได้อย่าลืมตั้งค่าเป็น read/write
จบส่วนตั้งค่าของ raspbery pi
หลังจากกำหนด ip tailscale ของ PBS (LXC) ใน raspberry pi แล้ว ก็จะมาถึงขั้นตอนการ mount ซึ่งทำคล้าย ๆ กับ Mounting a Synology NAS (NFS Share) เลยคือ
ไปที่ฝั่ง Proxmox > container (ตัวอย่างคือ 101) > console
ติดตั้ง nfs ก่อน
apt-get install nfs-common -y
หลังจากนั้นสร้างสร้าง folder เพื่อใช้ในการ mount
mkdir /mnt/backup/pbs-pibackup
chown user backup ของ pbs (ไม่งั้นจะเจอ error 13) และ ch mod ไม่งั้นpbs จะอ่านเขียนไฟล์ไม่ได้
chown backup:backup /mnt/backup/pbs-pibackup
chmod 775 /mnt/backup/pbs-pibackup
สร้างไฟล์ config mount
nano /etc/fstab
เพิ่มคำสั่ง mount โดย
- หมายเลข ip ให้ใส่เป็น ip talescale ของ server raspberry pi
- ชื่อ folder ให้ตั้งตามชื่อของ shared folder ที่ทำไว้
# <file system> <dir> <type> <options> <dump> <pass>
100.100.100.100:/proxmox-backup-nfs /mnt/media/backup/pbs-pibackup nfs defaults 0 0
กด ctrl+x เพื่อปิด หลังจากนั้นกด y เพื่อเซฟทับ และ enter เพื่อตกลง
reload daemon
systemctl daemon-reload
mount drive ด้วยคำสั่ง
mount -aจะพบว่าไม่สามารถ mount ได้ เพราะ container ถูกตั้งค่ามาไม่ถูกต้อง
วิธีแก้แบบมักง่ายและไวที่สุดคือ ให้ backup container ไว้ก่อนโดย กดที่ container และเลือก backup ซึ่งไม่ต้องตั้งค่าอะไร กด backup ได้เลย
หลังจากนั้นให้ restore โดยเลือก privilege level เป็น Privilege ตามรูป
หลังจากเสร็จสิ้นให้แล้ว start container ตามปกติและลอง
mount -a
ก็จะทำให้ mount ได้แล้ว
ขั้นตอนต่อไปคือเข้าไปตั้งค่าใน web interface ได้สักที
ใส่ path ที่ mount nfs ไว้ลงไป และตั้งชื่อให้เรียบร้อย
หลังจากสร้างเสร็จแล้วให้ลองกดดูก็จะเห็น พื้นที่ตามที่เรา mount ไว้
จากตัวอย่างนี้คือผมเสียบ External HDD 5TB ไว้ที่ raspberry pi โดย server ทั้ง 2 เชื่อมผ่าน tailscale เรียบร้อย














