SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-10-30

วิธีติดตั้ง Actual Budget บน VPS ด้วย Docker Compose

เรียนรู้วิธีติดตั้ง Actual Budget บน VPS ผ่าน Docker Compose ครบทุกขั้นตอน ตั้งแต่การตั้งค่า Data Volume การทำ HTTPS การสร้างไฟล์งบประมาณ ไปจนถึงการสำรองข้อมูลและนำเข้าข้อมูลธนาคาร

สิ่งที่คุณกำลังสร้าง

Actual Budget เป็นแอปพลิเคชันจัดการงบประมาณแบบซอง (envelope budgeting) ที่สามารถโฮสต์ด้วยตนเองได้ และเป็นคำตอบมาตรฐานสำหรับผู้ที่มองหาทางเลือกแทน YNAB ที่สามารถโฮสต์เองได้ เซิร์ฟเวอร์นี้ประกอบด้วย 1 คอนเทนเนอร์, 1 data volume และ 1 ชื่อโดเมน HTTPS ทุกอย่างที่จำเป็นสำหรับการทำงบประมาณทั่วไปสามารถทำงานได้อย่างราบรื่นบน VPS ขนาดเล็กที่สุดที่คุณสามารถเช่าได้ เนื่องจากเซิร์ฟเวอร์ทำหน้าที่หลักในการจัดเก็บไฟล์และซิงค์ข้อมูลเท่านั้น

สถาปัตยกรรมนี้เป็นสิ่งที่ควรทำความเข้าใจก่อนที่คุณจะเริ่มพิมพ์คำสั่งใดๆ ตัวงบประมาณเองคือฐานข้อมูล SQLite ที่อยู่ในเบราว์เซอร์และในแอปมือถือแต่ละเครื่อง เซิร์ฟเวอร์ที่คุณกำลังจะติดตั้งทำหน้าที่เป็นจุดเชื่อมต่อสำหรับการซิงค์ (sync endpoint) โดยจะเก็บรายการบัญชี, ไฟล์งบประมาณ และบันทึกการเปลี่ยนแปลง (change log) ที่ช่วยให้โทรศัพท์และแล็ปท็อปมีข้อมูลตรงกัน นี่คือเหตุผลที่แอปยังคงทำงานได้แม้เซิร์ฟเวอร์จะล่ม และเป็นเหตุผลว่าทำไมการสูญเสียเซิร์ฟเวอร์จึงไม่ทำให้งบประมาณของคุณหายไป ตราบใดที่ยังมีไคลเอนต์เครื่องใดเครื่องหนึ่งเก็บสำเนาข้อมูลไว้อยู่

เหตุผลที่เซิร์ฟเวอร์จำเป็นต้องใช้ HTTPS

Actual จำเป็นต้องใช้ HTTPS และไม่ใช่เพียงแค่เรื่องของรูปแบบเท่านั้น Actual ต้องการฟีเจอร์ของเบราว์เซอร์ที่เรียกว่า SharedArrayBuffer เพื่อให้สามารถทำงานได้ ซึ่งเบราว์เซอร์จะเปิดใช้งานฟีเจอร์นี้ก็ต่อเมื่อหน้าเว็บนั้นอยู่ในสถานะ cross-origin isolated ภายใต้สิ่งที่ข้อกำหนดเรียกว่า secure context เท่านั้น โดย secure context จะต้องเป็น https:// หรือ http://localhost หากคุณโหลดแอปจาก http://203.0.113.10:5006 ในเบราว์เซอร์บนเครื่องอื่น เบราว์เซอร์จะไม่มอบฟีเจอร์ดังกล่าวให้กับหน้าเว็บ ส่งผลให้งบประมาณไม่ถูกโหลดขึ้นมา แม้แต่บนโทรศัพท์มือถือก็ไม่มีข้อยกเว้น ใน FAQ ของ Actual ระบุว่าแอป iOS อย่างเป็นทางการกำลังอยู่ในช่วงทดสอบเบต้าและเชื่อมต่อกับเซิร์ฟเวอร์ของคุณเอง ส่วนแอป Android อย่างเป็นทางการนั้นยังไม่มี ดังนั้นบนโทรศัพท์ส่วนใหญ่คุณจึงต้องใช้เว็บแอปตัวเดียวกันโดยติดตั้งไว้ที่หน้าจอหลักในรูปแบบ Progressive Web App ซึ่งกฎเรื่อง secure context เดียวกันนี้ก็มีผลบังคับใช้เช่นกัน

ดังนั้นจึงมีรูปแบบการตั้งค่าที่ใช้งานได้จริงอยู่ 2 วิธี วิธีแรกคือการติดตั้งใบรับรองจริงบนชื่อโดเมนจริงไว้หน้าคอนเทนเนอร์ ซึ่งเป็นวิธีที่คู่มือนี้แนะนำ หรือวิธีที่สองคือการกำหนดใบรับรองแบบ self-signed ให้กับเซิร์ฟเวอร์ด้วย ACTUAL_HTTPS_KEY และ ACTUAL_HTTPS_CERT ตามที่เอกสารของโปรเจกต์ระบุไว้ ซึ่งคุณจะต้องยอมรับคำเตือนจากเบราว์เซอร์บนทุกอุปกรณ์ที่ใช้งาน การขอใบรับรองฟรีจาก Let's Encrypt ใช้เวลาเพียง 5 นาที ดังนั้นควรเลือกวิธีแรกจะดีที่สุด

การติดตั้ง Actual Budget ด้วย Docker Compose

หากเซิร์ฟเวอร์ยังเป็นเครื่องใหม่ ให้ติดตั้ง Docker ก่อน หากคุณยังไม่คุ้นเคยกับไวยากรณ์ของไฟล์ Compose คู่มือ พื้นฐาน Docker Compose สำหรับ VPS ได้อธิบายฟิลด์ต่างๆ ที่ใช้ด้านล่างนี้ไว้แล้ว

sudo install -d -m 755 /opt/actual
sudo install -d -m 700 /opt/actual/data

เขียนไฟล์ /opt/actual/docker-compose.yml:

services:
  actual:
    image: actualbudget/actual-server:latest
    container_name: actual
    restart: unless-stopped
    ports:
      - '127.0.0.1:5006:5006'
    volumes:
      - ./data:/data

มีรายละเอียด 3 ประการในไฟล์ดังกล่าวที่ต้องให้ความสำคัญ

Image ที่ใช้คือ actualbudget/actual-server:latest ซึ่งเผยแพร่โดยโครงการบน Docker Hub และมี mirror อยู่ที่ ghcr.io/actualbudget/actual นอกจากนี้ยังมี tag latest-alpine สำหรับเครื่องที่มีทรัพยากรจำกัด

คอนเทนเนอร์จะเขียนข้อมูลทั้งหมดไว้ภายใต้ /data ภายในนั้นคุณจะพบ server-files ซึ่งเก็บ account.sqlite ที่มีข้อมูลการเข้าสู่ระบบและ session token ของคุณ และ user-files ซึ่งเก็บไฟล์งบประมาณจริง คุณต้อง mount path นี้ไว้ มิฉะนั้น docker compose pull จะทำให้ข้อมูลงบประมาณของคุณสูญหาย คุณสามารถใช้ ACTUAL_DATA_DIR เพื่อย้ายตำแหน่งได้ แต่ค่าเริ่มต้นก็เพียงพอแล้ว

พอร์ตถูกเผยแพร่ไว้ที่ 127.0.0.1 เท่านั้น การใช้ 5006:5006 เปล่าๆ จะเป็นการเผยแพร่บนทุก interface และเนื่องจาก Docker จะเขียนกฎของตัวเองนำหน้า ufw แอปพลิเคชันจึงอาจถูกเปิดเผยต่ออินเทอร์เน็ตแม้ว่าจะตั้งค่า firewall เป็น deny-all ไว้ก็ตาม ปัญหานี้อธิบายไว้ใน เหตุใดพอร์ตที่เผยแพร่โดย Docker จึงข้าม ufw การผูกไว้กับ loopback หมายความว่ามีเพียง reverse proxy บนเครื่องเดียวกันเท่านั้นที่สามารถเข้าถึงได้

เริ่มการทำงาน:

cd /opt/actual
docker compose up --detach
docker compose logs -f actual

Log จะนิ่งเมื่อเซิร์ฟเวอร์รายงานว่ากำลังรอรับการเชื่อมต่อที่พอร์ต 5006 ให้ตรวจสอบในเครื่องก่อนที่คุณจะตั้งค่า DNS:

curl -fsS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5006/

ค่า 200 หมายความว่าแอปพลิเคชันกำลังทำงานอยู่ ส่วน curl: (7) Failed to connect หมายความว่าไม่มีการตอบรับการเชื่อมต่อที่ 127.0.0.1:5006 ให้รันคำสั่ง docker compose ps --all เพราะคำสั่ง docker compose ps แบบปกติจะแสดงเฉพาะคอนเทนเนอร์ที่กำลังทำงานอยู่เท่านั้น หากคอนเทนเนอร์แสดงสถานะว่า exited สาเหตุที่พบบ่อยคือปัญหาเรื่องสิทธิ์การเข้าถึง (permission) บน volume ที่ mount ไว้ ซึ่งจะปรากฏเป็นบรรทัด EACCES ใน log

การติดตั้งใบรับรองและชื่อโดเมนจริง

ชี้ A record ไปยัง VPS ของคุณที่ budget.example.com และรอให้ DNS อัปเดต จากนั้นติดตั้ง nginx และออกใบรับรอง คู่มือ Certbot บน Ubuntu 24.04 กับ nginx ได้อธิบายขั้นตอนการออกใบรับรองและการตั้งค่าตัวนับเวลาต่ออายุไว้อย่างละเอียด

บล็อกสำหรับ proxy:

server {
    listen 443 ssl;
    http2 on;
    server_name budget.example.com;

    ssl_certificate     /etc/letsencrypt/live/budget.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/budget.example.com/privkey.pem;

    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1:5006;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

client_max_body_size คือบรรทัดที่ผู้ใช้งานมักลืม การซิงค์ข้อมูลในแต่ละวันจะส่งเฉพาะส่วนที่มีการเปลี่ยนแปลง แต่ไฟล์งบประมาณทั้งหมดจะถูกอัปโหลดเมื่อคุณลงทะเบียนงบประมาณกับเซิร์ฟเวอร์เป็นครั้งแรก และเมื่อใดก็ตามที่คุณรีเซ็ตการซิงค์ โดยปกติ nginx จะจำกัดขนาด request body ไว้ที่ 1 MB ดังนั้นเมื่อไฟล์มีขนาดใหญ่เกินกว่านี้ การอัปโหลดเต็มรูปแบบจะล้มเหลวพร้อมข้อความ 413 Request Entity Too Large ใน access log ของ nginx ในขณะที่แอปพลิเคชันจะแสดงเพียงข้อผิดพลาดทั่วไปเกี่ยวกับการซิงค์ เซิร์ฟเวอร์มีขีดจำกัดแยกต่างหากคือ ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB ซึ่งมีค่าเริ่มต้นเป็น 20 และ ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB ซึ่งมีค่าเริ่มต้นเป็น 50 ดังนั้นควรตั้งค่าขีดจำกัดของ nginx ให้สูงกว่าค่าที่เกี่ยวข้องกับคุณ

โหลดการตั้งค่าใหม่และทดสอบ:

sudo nginx -t && sudo systemctl reload nginx
curl -fsS -o /dev/null -w '%{http_code}\n' https://budget.example.com/

การใช้งานครั้งแรก: รหัสผ่านและไฟล์งบประมาณไฟล์แรกของคุณ

เปิด https://budget.example.com ในเว็บเบราว์เซอร์ หน้าจอแรกจะให้คุณตั้งรหัสผ่านสำหรับเซิร์ฟเวอร์ รหัสผ่านชุดนี้เพียงชุดเดียวจะทำหน้าที่ปกป้องเซิร์ฟเวอร์ทั้งหมด ดังนั้นควรสร้างรหัสผ่านแบบสุ่มที่มีความยาวและเก็บไว้ในที่ที่คุณสามารถเรียกใช้ได้ในภายหลัง เช่น โปรแกรมจัดการรหัสผ่าน Vaultwarden ที่โฮสต์เอง โดยค่าเริ่มต้นแล้วจะไม่มีการสร้างบัญชีผู้ใช้แยกต่างหาก เซิร์ฟเวอร์จะมีรหัสผ่านเพียงชุดเดียว ดังนั้นการแชร์งบประมาณจึงหมายถึงการแชร์รหัสผ่านดังกล่าว การล็อกอินแยกกันจะทำได้ก็ต่อเมื่อคุณเชื่อมต่อกับผู้ให้บริการ OpenID ซึ่ง Actual รองรับสำหรับการตั้งค่าแบบหลายผู้ใช้

จากนั้นให้สร้างไฟล์งบประมาณ Actual จะถามว่าต้องการเปิดใช้งานการเข้ารหัสแบบ end-to-end หรือไม่ ให้ตอบตกลงเพื่อที่เซิร์ฟเวอร์จะจัดเก็บเฉพาะข้อมูลที่เข้ารหัสไว้เท่านั้น ซึ่งเป็นวิธีที่ถูกต้องสำหรับข้อมูลทางการเงินบนเครื่องเช่า สิ่งที่ต้องแลกคือความรับผิดชอบที่แท้จริง: รหัสผ่านสำหรับการเข้ารหัสจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ ดังนั้นหากคุณทำรหัสผ่านหาย ไฟล์ข้อมูลจะสูญหายไปทันทีและไม่มีวิธีรีเซ็ตรหัสผ่านดังกล่าว โปรดจดบันทึกรหัสผ่านนั้นไว้ก่อนที่จะคลิกผ่านหน้าจอดังกล่าว

กำหนดเงินคงเหลือเริ่มต้นของคุณจากตัวเลขปัจจุบันในธนาคาร แทนที่จะนำเข้าประวัติย้อนหลังหลายปี การทำงบประมาณแบบซอง (Envelope budgeting) จะเน้นการวางแผนไปข้างหน้าจากเงินที่คุณมีอยู่ในปัจจุบัน ดังนั้นการไม่มีประวัติข้อมูลย้อนหลังจึงไม่ส่งผลกระทบใดๆ ต่อการใช้งานของคุณ

การนำเข้าธุรกรรม

ในส่วนนี้ความซื่อสัตย์สำคัญกว่าความกระตือรือร้น เพราะขั้นตอนการนำเข้าข้อมูลคือเหตุผลหลักที่ทำให้ผู้ใช้งานเลิกใช้ซอฟต์แวร์ทำงบประมาณแบบ self-hosted

การบันทึกด้วยตนเอง (Manual entry) คือพื้นฐานที่ใช้งานได้เสมอ สำหรับวิธีการจัดสรรงบประมาณแบบซอง (envelope method) นี่อาจเป็นหัวใจสำคัญ เพราะการพิมพ์รายการซื้อแต่ละครั้งจะช่วยให้คุณตระหนักถึงการใช้จ่ายของตนเอง

การนำเข้าไฟล์ (File import) ช่วยจัดการข้อมูลจำนวนมาก Actual รองรับไฟล์รูปแบบ CSV, QIF, OFX, QFX และ CAMT ซึ่งธนาคารทุกแห่งมีตัวเลือกการส่งออกข้อมูลอย่างน้อยหนึ่งรูปแบบ ให้ทำการนำเข้าแยกตามบัญชีจากหน้าจอจัดการบัญชี และทำการจับคู่คอลัมน์เมื่อไฟล์ที่นำเข้าเป็นรูปแบบ CSV

การเชื่อมต่อธนาคารอัตโนมัติ (Automatic bank sync) มีให้บริการ แต่จำเป็นต้องใช้บริการจากบุคคลที่สามเนื่องจากเซิร์ฟเวอร์ไม่สามารถติดต่อกับธนาคารได้โดยตรง Actual รองรับ SimpleFIN Bridge สำหรับธนาคารในอเมริกาเหนือ, Enable Banking สำหรับยุโรป, Akahu สำหรับนิวซีแลนด์ และ Pluggy.ai สำหรับบราซิล ส่วน GoCardless ยังคงรองรับอยู่แต่ไม่เปิดรับบัญชีใหม่ คุณต้องสมัครใช้บริการกับผู้ให้บริการด้วยตนเอง สร้างข้อมูลรับรอง (credentials) แล้วนำมาเพิ่มในเซิร์ฟเวอร์ โดย SimpleFIN Bridge มีค่าบริการ 15 ดอลลาร์สหรัฐต่อปีรวมภาษี สำหรับการเชื่อมต่อสูงสุด 25 สถาบันการเงิน ณ เดือนตุลาคม 2026 ส่วนผู้ให้บริการรายอื่นจะมีโครงสร้างราคาที่แตกต่างกันออกไป

มีข้อจำกัดสองประการที่ต้องยอมรับก่อนที่คุณจะพึ่งพาระบบนี้ ประการแรก ข้อมูลรับรอง API จะถูกเก็บไว้บนเซิร์ฟเวอร์และไม่ได้รับการคุ้มครองด้วยการเข้ารหัสแบบ end-to-end เนื่องจากเซิร์ฟเวอร์จำเป็นต้องใช้ข้อมูลดังกล่าวในการทำงาน ประการที่สอง ข้อมูลจะไม่ซิงค์ในขณะที่ Actual ปิดอยู่ โดยค่าเริ่มต้นการซิงค์อัตโนมัติจะถูกปิดไว้ และเมื่อคุณเปิดใช้งาน ระบบจะทำงานเฉพาะในขณะที่แอปพลิเคชันเปิดอยู่เท่านั้น ดังนั้นเซิร์ฟเวอร์จะไม่ทำการดึงข้อมูลจากธนาคารของคุณด้วยตัวเองโดยเด็ดขาด

การสำรองข้อมูล เนื่องจากเป็นเพียงไฟล์

ทุกสิ่งที่คุณให้ความสำคัญจะอยู่ภายใต้ /opt/actual/data ไม่จำเป็นต้องมีขั้นตอนการส่งออก (export) หรือการเขียนสคริปต์เพื่อดัมพ์ฐานข้อมูล

ข้อควรระวังเพียงอย่างเดียวคือ SQLite การคัดลอก account.sqlite ในขณะที่เซิร์ฟเวอร์กำลังเขียนข้อมูลลงไป อาจทำให้ได้ข้อมูลที่ทำธุรกรรมไม่สมบูรณ์ และคุณจะไม่ทราบเรื่องนี้จนกว่าจะพยายามกู้คืนข้อมูล ให้หยุดการทำงานของ container ในช่วงเวลาไม่กี่วินาทีที่ใช้ในการคัดลอก:

cd /opt/actual
docker compose stop
restic -r sftp:backup@backup.example.com:/srv/restic backup /opt/actual/data
docker compose start

กำหนดตารางเวลาการทำงานนี้โดยใช้วิธีการใน การสำรองข้อมูลด้วย restic บน VPS ซึ่งครอบคลุมถึงการตั้งค่า repository, การเก็บรักษาข้อมูล (retention) และการฝึกซ้อมกู้คืนข้อมูล จงฝึกซ้อมการกู้คืนข้อมูลเสมอ การสำรองข้อมูลที่คุณไม่เคยทดสอบกู้คืนถือเป็นเพียงการคาดเดาเท่านั้น

ระบบสำรองข้อมูลอัตโนมัติของ Actual เป็นคนละส่วนกันและควรทราบไว้ แต่จะมีอยู่เฉพาะในแอปเวอร์ชันเดสก์ท็อปเท่านั้น ระบบจะเก็บไฟล์งบประมาณไว้สูงสุด 10 เวอร์ชันล่าสุด ซึ่งเข้าถึงได้จากเมนู File > Load Backup วิธีนี้ช่วยแก้ปัญหา "ฉันเผลอลบหมวดหมู่โดยไม่ได้ตั้งใจ" ได้โดยไม่ต้องยุ่งกับเซิร์ฟเวอร์เลย ส่วนแอปบนเว็บเบราว์เซอร์จะไม่มีการเก็บสำเนาเหล่านี้ไว้ ดังนั้นหากทุกคนในบ้านใช้งานผ่านเบราว์เซอร์ การสำรองข้อมูลเซิร์ฟเวอร์ที่กล่าวถึงข้างต้นจึงเป็นทางเลือกเดียวที่คุณมี

การอัปเดตเซิร์ฟเวอร์

cd /opt/actual
docker compose pull
docker compose up --detach

Compose จะสร้างคอนเทนเนอร์ขึ้นใหม่จากอิมเมจเวอร์ชันล่าสุดและเชื่อมต่อกับโวลุ่มเดิม ทำให้ข้อมูลยังคงอยู่ คุณต้องอัปเดตไคลเอนต์ด้วยเช่นกัน หากไคลเอนต์มีเวอร์ชันเก่ากว่าข้อมูลที่ได้รับ ไคลเอนต์จะหยุดการปรับใช้การเปลี่ยนแปลงและแสดงข้อความ Update Required ให้สำรองข้อมูลก่อนการอัปเกรดเวอร์ชันหลักเสมอ เนื่องจากการย้ายข้อมูล (migration) จะทำงานทันทีเมื่อเริ่มระบบครั้งแรกและไม่มีช่องทางสำหรับการย้อนกลับ (downgrade) Actual มีความยืดหยุ่นต่อแท็ก latest แบบลอยตัวเนื่องจากสถานะของมันถูกเก็บเป็นไดเรกทอรีไฟล์ ในขณะที่แอปพลิเคชันที่ใช้ฐานข้อมูลจริงจะไม่เป็นเช่นนั้น โดย การทำ self-hosting Chatwoot จะอธิบายขั้นตอนการใช้แท็กแบบระบุเวอร์ชัน (pinned tags) และการสำรองข้อมูลก่อนอัปเกรดซึ่งเป็นแนวทางปฏิบัติที่จำเป็น

สิ่งที่มักจะเกิดปัญหาและสิ่งที่คุณจะพบ

แอปโหลดได้แต่การซิงค์ไม่เสร็จสิ้น ให้ตรวจสอบ log ของ nginx ที่ 413 หากพบ client_max_body_size แสดงว่าค่าถูกตั้งไว้ต่ำเกินไป หากพบ 502 หมายความว่า nginx ไม่ได้รับการตอบสนองที่ใช้งานได้จาก upstream สาเหตุส่วนใหญ่เกิดจาก container หยุดทำงานหรือไม่ได้ฟังพอร์ต 5006 ดังนั้นให้ตรวจสอบ docker compose ps --all และ log ของ container ก่อนดำเนินการอื่นใด

แอปไม่โหลดบนอุปกรณ์อื่น หรือแจ้งว่า SharedArrayBuffer หายไป หน้าเว็บไม่ได้อยู่ในบริบทที่ปลอดภัย แถบที่อยู่จะแสดง http:// พร้อม IP address หรือ hostname ที่ไม่ใช่ localhost ให้แก้ไขที่ certificate แทนการหาวิธีเลี่ยงปัญหา

ข้อความแจ้งว่าไฟล์งบประมาณไม่รองรับกับเวอร์ชันนี้ ไฟล์ถูกเปิดด้วย Actual เวอร์ชันที่ใหม่กว่าไคลเอนต์ที่คุณกำลังใช้งานอยู่ ให้ปรับปรุงไคลเอนต์ให้เป็นเวอร์ชันนั้นเป็นอย่างน้อย หรือกู้คืนข้อมูลสำรองที่ทำไว้ก่อนที่เวอร์ชันใหม่จะเข้าถึงไฟล์ จากนั้นจึงโหลดใหม่

Container รีสตาร์ทวนซ้ำ ให้ตรวจสอบ docker compose logs actual หากพบข้อผิดพลาดเรื่องสิทธิ์ที่ /data หมายความว่าไดเรกทอรีที่ mount ไว้ไม่สามารถเขียนข้อมูลได้โดยผู้ใช้ของ container หากพบข้อผิดพลาดว่ามีการใช้งาน address อยู่ แสดงว่ามีโปรเซสอื่นกำลังใช้งานพอร์ต 5006 บน loopback อยู่แล้ว

การโหลดครั้งแรกช้า ไฟล์งบประมาณทั้งหมดจะถูกดาวน์โหลดลงเบราว์เซอร์เมื่อคุณเปิดใช้งาน ซึ่งเป็นการถ่ายโอนข้อมูลขนาดใหญ่ในครั้งเดียว จากนั้นจะเป็นการอ่านข้อมูลภายในเครื่อง ปัญหานี้ไม่ใช่เรื่องขนาดของเซิร์ฟเวอร์ และการเพิ่ม RAM จะไม่ช่วยให้เร็วขึ้น

FAQ

Actual Budget จำเป็นต้องใช้ HTTPS เพื่อทำงานหรือไม่?

จำเป็น ในทางปฏิบัติ Actual ต้องใช้ฟีเจอร์ SharedArrayBuffer ของเบราว์เซอร์ในการทำงาน ซึ่งเบราว์เซอร์จะเปิดใช้งานฟีเจอร์นี้เฉพาะในบริบทที่ปลอดภัยเท่านั้น ได้แก่ https:// หรือ http://localhost หากเข้าใช้งานผ่าน HTTP ปกติจากเครื่องอื่น แอปพลิเคชันจะไม่โหลด ขณะนี้แอป iOS อย่างเป็นทางการยังอยู่ในช่วงทดสอบเบต้าและยังไม่มีแอป Android อย่างเป็นทางการ ดังนั้นอุปกรณ์ส่วนใหญ่จึงใช้งานผ่านเว็บแอปเดียวกันและต้องปฏิบัติตามกฎนี้ (FAQ) ให้ใช้ใบรับรองจาก Let’s Encrypt บนชื่อโฮสต์จริง หรือใช้ใบรับรองที่ลงนามเอง (self-signed certificate) ร่วมกับ ACTUAL_HTTPS_KEY และ ACTUAL_HTTPS_CERT หากคุณยอมรับการแจ้งเตือนเรื่องใบรับรองบนทุกอุปกรณ์ได้

Actual สามารถนำเข้าธุรกรรมธนาคารโดยอัตโนมัติได้หรือไม่?

ทำได้ผ่านบริการของบุคคลที่สามที่คุณต้องสมัครด้วยตนเองเท่านั้น ได้แก่ SimpleFIN Bridge ในอเมริกาเหนือ, Enable Banking ในยุโรป, Akahu ในนิวซีแลนด์ หรือ Pluggy.ai ในบราซิล สำหรับ GoCardless นั้นรองรับการใช้งานแต่ไม่เปิดรับบัญชีใหม่ ข้อมูลรับรอง API เหล่านี้จะถูกเก็บไว้บนเซิร์ฟเวอร์ของคุณและไม่อยู่ภายใต้การเข้ารหัสแบบ end-to-end การซิงค์อัตโนมัติจะถูกปิดไว้เป็นค่าเริ่มต้น และเมื่อเปิดใช้งานแล้ว ระบบจะทำงานเฉพาะในขณะที่ Actual เปิดอยู่เท่านั้น ดังนั้นจะไม่มีการดึงข้อมูลในเบื้องหลังบนเซิร์ฟเวอร์ สำหรับการนำเข้าไฟล์ CSV, QIF, OFX, QFX และ CAMT ไม่จำเป็นต้องใช้บริการของบุคคลที่สามแต่อย่างใด

ฉันต้องสำรองข้อมูลส่วนใดบ้าง?

ให้สำรองข้อมูลไดเรกทอรีที่ mount ไว้ ซึ่งในคู่มือนี้คือ /opt/actual/data โดยภายในจะประกอบด้วย server-files/account.sqlite ซึ่งเก็บข้อมูลการเข้าสู่ระบบและเซสชัน และ user-files ซึ่งเก็บไฟล์งบประมาณ ให้หยุดการทำงานของ container ก่อนทำการคัดลอกเสมอ เนื่องจากการคัดลอกฐานข้อมูล SQLite ขณะที่กำลังใช้งานอยู่อาจทำให้ได้ข้อมูลที่ไม่สมบูรณ์ ไม่มีส่วนอื่นบนเซิร์ฟเวอร์ที่เก็บสถานะการทำงานไว้

จะเกิดอะไรขึ้นหากฉันทำรหัสผ่านสำหรับการเข้ารหัสหาย?

ไฟล์จะไม่สามารถกู้คืนได้ รหัสผ่านจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ ซึ่งเป็นหัวใจสำคัญของการเข้ารหัสแบบ end-to-end ดังนั้นจึงไม่มีระบบรีเซ็ตรหัสผ่านและไม่มีช่องทางสนับสนุนในส่วนนี้ ให้จัดเก็บรหัสผ่านไว้ในโปรแกรมจัดการรหัสผ่านทันทีที่สร้างไฟล์ และเก็บสำเนาไว้ในที่ที่ไม่ขึ้นอยู่กับเซิร์ฟเวอร์เครื่องนี้

Actual Budget ต้องการทรัพยากรเซิร์ฟเวอร์มากน้อยเพียงใด?

ต้องการน้อยมาก container ทำหน้าที่เพียงเสิร์ฟไฟล์ static และจัดการไฟล์ข้อมูล ส่วนการคำนวณงบประมาณจะเกิดขึ้นในเบราว์เซอร์ vCPU แบบ shared 1 คอร์พร้อม RAM 1 GB ก็เพียงพอต่อการใช้งาน และไดเรกทอรีข้อมูลสำหรับงบประมาณครัวเรือนที่มีประวัติหลายปีจะมีขนาดเพียงไม่กี่สิบเมกะไบต์เท่านั้น ภาระของดิสก์จะมาจากไฟล์สำรองข้อมูลและ container อื่นๆ ของคุณ ไม่ใช่จาก Actual หากคุณกำลังเลือกขนาดเซิร์ฟเวอร์เพื่อรันแอปพลิเคชันอื่นที่กินทรัพยากรมากกว่า เซิร์ฟเวอร์รูปภาพมักจะเป็นตัวกำหนดสเปกขั้นต่ำ ดังนั้นให้ตรวจสอบ ปริมาณ RAM ที่ PhotoPrism และ Immich ต้องการจริง ก่อนตัดสินใจเลือกแผนการใช้งาน ตรรกะเดียวกันนี้ใช้กับ media stack: การแปลงรหัส (transcoding) เป็นตัวกำหนดแผนการใช้งาน ในขณะที่ส่วนติดต่อผู้ใช้ผ่านเบราว์เซอร์ เช่น Halcyon ซึ่งเปลี่ยนคลัง Jellyfin ให้เป็นร้านวิดีโอสไตล์ยุค 90 ใช้ทรัพยากรน้อยพอๆ กับ Actual

บทความนี้มีประโยชน์หรือไม่