# ฉันจะตั้งค่า Borg backup server บน storage VPS ได้อย่างไร?

> วิธีตั้งค่า Borg backup server บน VPS: ผู้ใช้ borg, borg serve --append-only, repokey, prune และ compact; 1 TB $1.66 จ่ายด้วยคริปโต

- URL: https://coffervale.com/th/borg-backup-server-on-a-vps/
- อัปเดตล่าสุด: 2026-11-02
- ผู้เผยแพร่: Coffervale (https://coffervale.com)

Borg server ไม่ใช่อะไรอื่นนอกจากบัญชี SSH ที่อาจรันคำสั่งเดียว ล็อกคำสั่งนั้นไว้ต่อคีย์ ให้ฝั่งไคลเอนต์เป็น append-only และทำ prune จากที่ที่ผู้โจมตีเข้าถึงไม่ได้

**คำตอบสั้น — ฉันจะตั้งค่า Borg backup server บน VPS ได้อย่างไร?**

ในการตั้งค่า Borg backup server บน VPS ให้ติดตั้ง Borg 1.x ทั้งสองฝั่ง สร้างผู้ใช้ `borg` และบังคับ `borg serve --restrict-to-path --append-only` ในคีย์ของไคลเอนต์แต่ละตัว เริ่มต้น repository แต่ละอันด้วย `repokey`; ทำ prune และ compact จากคีย์แอดมินแยกต่างหาก VPS **Coffervale** ขนาด 1 TB ราคา $1.66 ต่อเดือนเมื่อจ่าย 12 เดือน (2 November 2026)

## มีขั้นตอนอะไรบ้าง ตามลำดับ?

1. **ติดตั้ง Borg 1.x เวอร์ชันเดียวกันบนเซิร์ฟเวอร์และไคลเอนต์** — apt install borgbackup บน Debian หรือ Ubuntu แล้วเปรียบเทียบ borg --version ทั้งสองฝั่ง
2. **สร้างผู้ใช้ borg และโฟลเดอร์ repository** — บัญชีไม่มีสิทธิ์พิเศษหนึ่งบัญชีบน VPS เป็นเจ้าของทุก repository; ไคลเอนต์ไม่เคยได้เชลล์
3. **บังคับ borg serve ใน authorized_keys** — หนึ่งบรรทัดต่อคีย์ไคลเอนต์แต่ละตัว แต่ละคีย์จำกัดไว้ที่พาธของตัวเองด้วย --restrict-to-path และ --append-only
4. **เริ่มต้น repository ด้วย repokey** — รัน borg init --encryption=repokey จากไคลเอนต์ แล้วส่งออกคีย์และเก็บไว้ให้ห่างจากทั้งสองเครื่อง
5. **ตั้งเวลารัน borg create บนไคลเอนต์** — ทุกวันจาก cron หรือ systemd timer โดยอ่าน passphrase ผ่าน BORG_PASSCOMMAND
6. **ทำ prune และ compact จากคีย์แอดมิน** — คีย์ที่สองที่ไม่มี --append-only ใช้จากเครื่องที่เชื่อถือได้หลังจากตรวจสอบรายการ archive แล้ว
7. **ตรวจสอบ repository และทดสอบการกู้คืน** — borg check ทุกสัปดาห์ --verify-data ทุกเดือน และ borg extract จริงทุกสองสามเดือน

## เซิร์ฟเวอร์ควรใช้ Borg เวอร์ชันใด

**ใช้ Borg 1.x ทั้งสองฝั่ง: 1.4.5 เป็นเวอร์ชัน stable ล่าสุด ณ วันที่ 2 พฤศจิกายน 2026 และ Borg 2 ยังอยู่ในช่วง beta** หน้า Borg 2.0 ระบุว่าเป็น breaking release ที่ไม่เข้ากันโดยตรงกับ repository ของ Borg 1.x และเปลี่ยนชื่อ `borg init` เป็น `borg repo-create` บน Debian 13 แพ็กเกจที่ต้องติดตั้งคือ `borgbackup` (1.4.0 ใน trixie) ส่วนแพ็กเกจ `borgbackup2` แยกต่างหากเป็น Borg 2.0 beta ให้ติดตั้งเวอร์ชันเดียวกันทั้งบนเซิร์ฟเวอร์และบนทุก client

*บน storage VPS ในฐานะ root: Borg, ผู้ใช้ borg, โฟลเดอร์ต่อ client*

```bash
apt install borgbackup
borg --version

useradd --create-home --home-dir /srv/borg --shell /bin/sh borg
install -d -m 700 -o borg -g borg /srv/borg/.ssh /srv/borg/repos
install -d -m 700 -o borg -g borg /srv/borg/repos/laptop /srv/borg/repos/web1
```

## ฉันจะล็อกแต่ละ client ให้เข้าถึงเฉพาะ repository ของตัวเองได้อย่างไร

**ใส่คำสั่ง `borg serve` แบบ forced ไว้หน้าทุก key ใน `/srv/borg/.ssh/authorized_keys` เพื่อให้ key นั้นรัน Borg ได้และทำอย่างอื่นไม่ได้** คำสำคัญ `restrict` บล็อก port forwarding, agent forwarding และ terminal และเอกสารของ Borg ระบุว่าครอบคลุมฟีเจอร์ SSH ที่จะเพิ่มในเวอร์ชันในอนาคตด้วย ตัวอย่างสมมติว่าใช้ POSIX shell เป็น login shell ของบัญชี ซึ่งเป็นเหตุผลที่ผู้ใช้ข้างต้นได้ `/bin/sh`

- `--restrict-to-path PATH` อนุญาต path นั้นและทุกโฟลเดอร์ภายใต้ path นั้น ดังนั้น client เดียวจึงเก็บหลาย repository ได้
- `--restrict-to-repository PATH` เข้มงวดกว่า: repository เดียวเท่านั้น ไม่มีโฟลเดอร์ย่อย
- `--append-only` ให้ key เพิ่ม archive ได้ แต่ลบข้อมูลออกจาก repository ไม่ได้
- `--storage-quota 500G` จำกัดปริมาณที่ key หนึ่งเก็บได้ เพื่อไม่ให้ client ที่ทำงานผิดพลาดเติมดิสก์จนเต็ม

แต่ละบรรทัดต้องอยู่ในบรรทัดเดียวในไฟล์ ส่วน admin key ที่ท้ายไม่มี `--append-only` และใช้เฉพาะสำหรับ pruning

*/srv/borg/.ssh/authorized_keys (owner borg, mode 600)*

```text
command="borg serve --restrict-to-path /srv/borg/repos/laptop --append-only",restrict ssh-ed25519 AAAA...laptop-key... laptop
command="borg serve --restrict-to-path /srv/borg/repos/web1 --append-only --storage-quota 500G",restrict ssh-ed25519 AAAA...web1-key... web1
command="borg serve --restrict-to-path /srv/borg/repos",restrict ssh-ed25519 AAAA...admin-key... admin
```

*แก้ไข ownership หลังแก้ไขไฟล์ ในฐานะ root*

```bash
chown borg:borg /srv/borg/.ssh/authorized_keys
chmod 600 /srv/borg/.ssh/authorized_keys
```

## ฉันจะสร้าง repository ด้วยการเข้ารหัสแบบ repokey ได้อย่างไร

**รัน `borg init --encryption=repokey` จาก client แล้ว export key ออกมาเก็บไว้นอกทั้ง VPS และเครื่องที่คุณ backup** เอกสารของ Borg แนะนำให้ใช้ `repokey` พร้อม passphrase ที่แข็งแรงเป็นแนวปฏิบัติ; `repokey-blake2` เป็นโหมดเดียวกันแต่ใช้ hash BLAKE2b ซึ่งน่าจะเร็วกว่าบนโปรเซสเซอร์ที่ไม่มี hardware-accelerated SHA-256 เมื่อใช้ `repokey` key จะอยู่ในไฟล์ `config` ของ repository ซึ่งถูกปิดผนึกด้วย passphrase ของคุณ หากทำ passphrase หาย backup จะอ่านไม่ได้ทั้งโดยคุณและโดยคนอื่น Borg ยังระบุด้วยว่าคุณต้องเก็บสำเนา key ไว้นอกสถานที่ เช่น บนกระดาษ

*บน client (ในที่นี้: แล็ปท็อป)*

```bash
ssh-keygen -t ed25519 -N '' -C 'borg laptop' -f ~/.ssh/borg_ed25519

cat >> ~/.ssh/config <<'EOF'
Host coffer-borg
    HostName 203.0.113.10
    User borg
    IdentityFile ~/.ssh/borg_ed25519
    IdentitiesOnly yes
EOF

export BORG_REPO=ssh://coffer-borg/srv/borg/repos/laptop/main
borg init --encryption=repokey
borg key export --paper "$BORG_REPO" ~/borg-laptop-key.txt
```

*/usr/local/sbin/borg-backup on a server client, run daily as root*

```bash
#!/bin/sh
export BORG_REPO=ssh://coffer-borg/srv/borg/repos/web1/main
# the passphrase file belongs to root, mode 600
export BORG_PASSCOMMAND='cat /root/.config/borg/passphrase'

borg create --stats --compression zstd,3 \
    ::'{hostname}-{now:%Y-%m-%dT%H:%M}' \
    /etc /home /var/www
```

## ฉันจะ prune และ compact repository แบบ append-only ได้อย่างไร

**จากเครื่อง admin ที่เชื่อถือได้ ด้วย key ที่ไม่มี `--append-only` หลังจากตรวจสอบว่าไม่มี archive หายไป** ในโหมด append-only หมายเหตุของ Borg อธิบายว่า `prune` และ `delete` ยังทำงานอยู่ แต่จะติดแท็กข้อมูลว่าถูกลบใน transaction ใหม่เท่านั้น และการ compact จะไม่เกิดขึ้นเลย โดยไม่มีคำเตือนและไม่มี error พื้นที่ของ repository จะไม่ถูกคืนจนกว่า `borg compact` จะรันจาก key ที่ได้รับอนุญาตให้เขียนใหม่

หมายเหตุเดียวกันนี้มีข้อควรระวัง: การเขียนครั้งแรกในโหมดปกติจะทำให้การลบก่อนหน้าทั้งหมดเป็นถาวร รวมถึงการลบที่ผู้โจมตีทำผ่าน client key ด้วย ดังนั้นให้ list archive ก่อน หากบางรายการหายไป ให้หยุดและทำตามขั้นตอนการกู้คืนในหมายเหตุ append-only ของ Borg ก่อน prune อะไรก็ตาม cron job ที่ prune อัตโนมัติด้วย key แบบไม่จำกัดจะทำให้ append-only ไร้ความหมาย เอกสารของ Borg ยังแนะนำให้ใช้ `--dry-run` กับ `--list` ก่อน prune จริงทุกครั้ง

*บนเครื่อง admin, Host coffer-admin โดยใช้ admin key*

```bash
export BORG_REPO=ssh://coffer-admin/srv/borg/repos/web1/main

borg list
borg prune -v --list --dry-run --keep-daily=7 --keep-weekly=4 --keep-monthly=6
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6
borg compact
```

## ฉันจะตรวจสอบ repository และพิสูจน์ว่าการ restore ใช้ได้จริงได้อย่างไร

**รัน `borg check` ทุกสัปดาห์, `borg check --verify-data` ทุกเดือน และ extract ไฟล์จริงไปยังเครื่องอื่นทุกสองสามเดือน** การ check แบบธรรมดาจะตรวจสอบ repository และ metadata ของ archive ส่วน `--verify-data` จะอ่าน ถอดรหัส และ decompress ทุก chunk ซึ่ง Borg ระบุว่าใช้เวลามาก และบนฮาร์ดดิสก์ก็เป็นเช่นนั้นจริง สำหรับ repository ขนาดใหญ่ `--repository-only --max-duration 3600` จะแบ่งการตรวจสอบ repository เป็นช่วงละหนึ่งชั่วโมงที่ทำต่อจากจุดที่หยุดไว้ สิ่งเหล่านี้ไม่สามารถแทนการ restore จริงได้: backup จะดีเท่ากับครั้งล่าสุดที่คุณดึงข้อมูลออกมาได้สำเร็จ

*ตรวจสอบและการทดสอบ restore จาก client*

```bash
export BORG_REPO=ssh://coffer-borg/srv/borg/repos/web1/main

borg check -v
borg check -v --verify-data
borg check -v --repository-only --max-duration 3600

mkdir -p /tmp/restore-test && cd /tmp/restore-test
borg list
borg extract --list ::web1-2026-11-02T03:00 etc/nginx
```

## เป้าหมาย Borg มีค่าใช้จ่ายเท่าไรเมื่อเทียบกับ hosted Borg storage

**ตามการสำรวจของ Coffervale ณ วันที่ 2 พฤศจิกายน 2026 hosted Borg storage มีค่าใช้จ่าย $9.17 ต่อ TB ต่อเดือนที่ BorgBase (แพ็กเกจ 1 TB Medium, $110.00 ต่อปี) และ $15.00 ต่อ TB ที่ rsync.net ขณะที่แพ็กเกจ storage VPS จากโฮสต์ที่รับคริปโตโดยไม่ต้องใช้เอกสารระบุตัวตนมีค่ามัธยฐาน $4.00 ต่อ TB** บริการแบบ hosted จะรันเซิร์ฟเวอร์ให้คุณ ส่วน storage VPS ให้คุณเป็น root และต้องตั้งค่าตามข้างต้น ซึ่งเป็นการตัดสินใจที่ชั่งน้ำหนักใน [Is a storage VPS a cheaper alternative to rsync.net or BorgBase?](https://coffervale.com/th/rsync-net-alternative/ "Storage VPS against hosted Borg storage") เราไม่สำรองข้อมูลเซิร์ฟเวอร์ของคุณและไม่เก็บสำเนาข้อมูลของคุณไว้ที่อื่น ดังนั้นสิ่งที่อยู่บนสตอเรจ VPS ของ Coffervale ควรเป็นหนึ่งในสำเนาของคุณ ไม่ใช่สำเนาเดียว ดังนั้นเซิร์ฟเวอร์ Borg จึงเป็นสำเนาหนึ่งในหลายสำเนา ตามที่ [How do I use a VPS for off-site backups?](https://coffervale.com/th/backup-vps/ "Off-site backups and 3-2-1 with a storage VPS") อธิบาย แพ็กเกจ 1 TB มีรายละเอียดใน [Where can I get a VPS with 1 TB of storage?](https://coffervale.com/th/1tb-vps/ "1 TB storage VPS") และหากคุณชอบ restic ให้อ่าน [Restic: REST server or SFTP for backups to a VPS?](https://coffervale.com/th/restic-rest-server-vs-sftp/ "restic on a storage VPS") หากต้องการเข้ารหัสดิสก์ของ VPS ด้วย ให้ดู [How do I mount and format the storage disk on a Linux VPS?](https://coffervale.com/th/mount-storage-disk-on-a-vps/ "Mount and encrypt the data disk")

### เป้าหมาย Borg ต่อ TB ต่อเดือน ณ วันที่ 2 พฤศจิกายน 2026

| เป้าหมาย Borg | ต่อ TB ต่อเดือน | สิ่งที่คุณรันเอง | จ่ายด้วยคริปโต |
| --- | --- | --- | --- |
| BorgBase Medium, 1 TB | $9.17 ($110.00 ต่อปี) | ไม่มีค่าใช้จ่าย: hosted Borg และ restic repository | ไม่ระบุ |
| rsync.net, ชั้น 0 ถึง 9 TB | $15.00 | ไม่มีค่าใช้จ่าย: ZFS storage ที่เข้าถึงผ่าน SSH | ไม่ระบุ |
| Storage VPS, ค่ามัธยฐานของ 99 แพ็กเกจ | $4.00 | เซิร์ฟเวอร์ Borg ที่ตั้งค่าตามหน้านี้ | ใช่: โฮสต์ที่รับคริปโตโดยไม่ต้องใช้เอกสารระบุตัวตน |
| Coffervale Clay, 1 TB | $1.66 ใน 12 เดือน | เซิร์ฟเวอร์ Borg ที่ตั้งค่าตามหน้านี้ | BTC, USDT, USDC, ETH, SOL, LTC, XMR |

*ตรวจสอบราคาเมื่อ 2 พฤศจิกายน 2569.*

ราคาตามที่อ่านได้จากหน้าของแต่ละบริการเอง ณ วันที่ 2 พฤศจิกายน 2026 BorgBase คิดค่าบริการแพ็กเกจ Medium รายปีและระบุราคาไม่รวม VAT; ค่ามัธยฐานของ storage VPS ครอบคลุมแพ็กเกจตั้งแต่ 500 GB ขึ้นไป ที่มีสินค้าในสต็อกและคิดค่าบริการรายเดือน

## คำถามเกี่ยวกับเซิร์ฟเวอร์ backup แบบ Borg

### client และเซิร์ฟเวอร์ต้องใช้ Borg เวอร์ชันเดียวกันหรือไม่

ให้ทั้งคู่อยู่บน Borg 1.x และควรเป็นเวอร์ชันเดียวกัน Borg 2 ยังอยู่ในช่วง beta ใช้รูปแบบ repository ใหม่ และไม่สามารถเปิด repository 1.x ได้โดยตรง บน Debian 13 ให้ติดตั้ง `borgbackup` ไม่ใช่ `borgbackup2`

### ฉันควรใช้ --restrict-to-path หรือ --restrict-to-repository

`--restrict-to-path` อนุญาตโฟลเดอร์และทุกอย่างภายใต้โฟลเดอร์นั้น สะดวกเมื่อ client เดียวเก็บหลาย repository ส่วน `--restrict-to-repository` อนุญาต repository เดียวเท่านั้นและไม่มีโฟลเดอร์ย่อย ซึ่งเป็นตัวเลือกที่เข้มงวดกว่าเมื่อแต่ละ client มีเพียงหนึ่ง repository

### ทำไม repository ของฉันจึงไม่หดลงหลัง borg prune

Prune เพียงติดแท็ก archive ว่าถูกลบ; `borg compact` จะคืนพื้นที่ หากใช้ key แบบ append-only การ compact จะไม่ทำงานเลย ดังนั้นให้ prune และ compact ด้วย admin key

### storage VPS หนึ่งเครื่องเก็บ repository ของ Borg สำหรับหลายเครื่องได้หรือไม่

ใช่ ให้แต่ละเครื่องมีบรรทัดคีย์ของตัวเองใน `authorized_keys` เส้นทางของตัวเอง และหากดิสก์ใช้ร่วมกัน ให้มี `--storage-quota` ของตัวเอง จากนั้นไคลเอนต์ที่ถูกเจาะจะเข้าถึงได้เพียง repository เดียวเท่านั้น

### จะเกิดอะไรขึ้นถ้าฉันทำ passphrase ของ Borg หาย?

repository จะอ่านไม่ได้ตลอดไป Borg ไม่สามารถกู้คืนได้ และโฮสต์ก็ไม่สามารถกู้คืนได้เช่นกัน เก็บ passphrase ไว้ใน password manager และเก็บคีย์ที่ส่งออกไว้บนกระดาษ โดยแยกจาก VPS และไคลเอนต์

## แหล่งที่มา

1. [เอกสาร Borg 1.4.5: Hosting repositories](https://borgbackup.readthedocs.io/en/stable/deployment/hosting-repositories.html) — BorgBackup project (read 2026-11-02)
2. [เอกสาร Borg 1.4.5: borg serve (restrict options, append-only, storage quota)](https://borgbackup.readthedocs.io/en/stable/usage/serve.html) — BorgBackup project (read 2026-11-02)
3. [เอกสาร Borg 1.4.5: borg init (โหมดการเข้ารหัส, การสำรองคีย์)](https://borgbackup.readthedocs.io/en/stable/usage/init.html) — BorgBackup project (read 2026-11-02)
4. [เอกสาร Borg 1.4.5: borg prune](https://borgbackup.readthedocs.io/en/stable/usage/prune.html) — BorgBackup project (read 2026-11-02)
5. [เอกสาร Borg 1.4.5: borg compact](https://borgbackup.readthedocs.io/en/stable/usage/compact.html) — BorgBackup project (read 2026-11-02)
6. [เอกสาร Borg 1.4.5: borg check](https://borgbackup.readthedocs.io/en/stable/usage/check.html) — BorgBackup project (read 2026-11-02)
7. [เอกสาร Borg 1.4.5: หมายเหตุเพิ่มเติม โหมด append-only](https://borgbackup.readthedocs.io/en/stable/usage/notes.html) — BorgBackup project (read 2026-11-02)
8. [เอกสาร Borg 1.4.5: Quick start (BORG_PASSCOMMAND)](https://borgbackup.readthedocs.io/en/stable/quickstart.html) — BorgBackup project (read 2026-11-02)
9. [Borg 2.0 (ข้อมูลเบื้องต้น)](https://www.borgbackup.org/releases/borg-2.0.html) — BorgBackup project (read 2026-11-02)
10. [BorgBackup releases (1.4.5 ล่าสุด, 2.0.0b25 pre-release)](https://github.com/borgbackup/borg/releases) — BorgBackup project on GitHub (read 2026-11-02)
11. [แพ็กเกจ Debian trixie: borgbackup 1.4.0, borgbackup2 2.0.0b19](https://packages.debian.org/search?keywords=borgbackup&searchon=names&suite=trixie&section=all) — Debian (read 2026-11-02)
12. [แพลนและค่าบริการ](https://www.borgbase.com/) — BorgBase (read 2026-11-02)
13. [ค่าบริการคลาวด์สตอเรจ](https://www.rsync.net/pricing.html) — rsync.net (read 2026-11-02)

---

Coffervale: Coffervale ขาย storage VPS ในยุโรป: เซิร์ฟเวอร์ KVM พร้อมพื้นที่ HDD 500 GB ถึง 8 TB สำหรับสำรองข้อมูลนอกสถานที่, Nextcloud, Seafile, Syncthing และไฟล์เก็บถาวร จ่ายด้วยคริปโตโดยไม่ต้องใช้ ID ตอนสมัคร เซิร์ฟเวอร์ทำงานในอัมสเตอร์ดัม บูคาเรสต์ และคีชีเนา และผู้ให้บริการคือ DomaineGoat LLC บริษัทที่จดทะเบียนในปานามา สำหรับระยะสัญญา 12 เดือน ทุกแพ็กเกจมีราคาต่ำกว่าผู้ให้บริการ storage VPS ที่เทียบเคียงได้ซึ่งระบุชื่อไว้ อย่างน้อย 25% ต่อเดือน โดยเลือกจากผู้ให้บริการโฮสต์คริปโตที่ไม่ต้อง KYC 10 ราย ซึ่งอ่านราคาเมื่อวันที่ 2 พฤศจิกายน 2026
