SSD Nodes Learn 8GB RAM — ஆண்டுக்கு $66
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-01

உங்கள் VPS-ல் Actual Budget-ஐ self-host செய்வது எப்படி

Docker Compose மூலம் VPS-ல் Actual Budget இயக்குவது எப்படி? data volume, browser-க்கு HTTPS ஏன் அவசியம், முதல் budget file, bank imports, backups ஆகியவற்றை அறிக.

நீங்கள் உருவாக்குவது

Actual Budget என்பது self-host செய்யக்கூடிய envelope budgeting app ஆகும். தாங்களே host செய்யக்கூடிய YNAB மாற்றைத் தேடுபவர்கள் வழக்கமாகத் தேர்வு செய்வது இதுவாகும். Server என்பது ஒரு container, ஒரு data volume, ஒரு HTTPS name ஆகியவற்றைக் கொண்டது. வழக்கமான budget-க்குத் தேவையான அனைத்தும் நீங்கள் வாடகைக்கு எடுக்கக்கூடிய மிகச் சிறிய VPS-லேயே சீராக இயங்கும். காரணம், server பெரும்பாலும் files-ஐ சேமித்து sync செய்கிறது.

எதையும் type செய்வதற்கு முன் architecture-ஐப் புரிந்துகொள்வது பயனுள்ளதாகும். Budget தானே உங்கள் browser-லும் ஒவ்வொரு mobile app-லும் இருக்கும் SQLite database ஆகும். நீங்கள் இப்போது install செய்யப்போகும் server ஒரு sync endpoint ஆகும். அது account list, budget files, மேலும் phone மற்றும் laptop ஒரே நிலையைப் பெற உதவும் change log ஆகியவற்றை வைத்திருக்கும். அதனால் server down ஆனபோதும் app தொடர்ந்து செயல்படும். மேலும், ஒரு client-ல் copy ஒன்று இருக்கும் வரை server இழக்கப்பட்டாலும் உங்கள் budget இழக்கப்படாது.

சேவையகத்திற்கு HTTPS ஏன் தேவை

Actual, HTTPS-ஐக் கோருகிறது. இது வெறும் முறையான நடைமுறை அல்ல. Actual, end-to-end encryption-க்கு பயன்படுத்தும் இடைமுகமான Web Crypto API-ஐ, specification-ல் secure context என அழைக்கப்படும் சூழலில் மட்டுமே browsers வெளிப்படுத்தும். secure context என்பது https:// அல்லது http://localhost ஆகும். மற்றொரு machine-ல் உள்ள browser-ல் http://203.0.113.10:5006 இலிருந்து app-ஐ ஏற்றினால், அந்த அம்சங்கள் கிடைக்காது. ஏனெனில் browser அவற்றை page-க்கு வழங்காது. Official mobile builds, plain http:// server URL-ஐயும் ஏற்காது.

எனவே, செயல்படும் இரண்டு அமைப்புகள் உள்ளன. இந்த வழிகாட்டி செய்வதுபோல், container-க்கு முன்பாக உள்ள உண்மையான name-க்கு உண்மையான certificate-ஐ அமைக்கலாம். அல்லது project ஆவணப்படுத்தியுள்ளபடி, ACTUAL_HTTPS_KEY மற்றும் ACTUAL_HTTPS_CERT மூலம் server-க்கு self-signed certificate வழங்கலாம். அப்போது ஒவ்வொரு device-லும் browser warning-ஐ ஏற்க வேண்டும். Let's Encrypt வழங்கும் இலவச certificate-ஐ பெற ஐந்து நிமிடங்கள் போதும். எனவே முதல் விருப்பத்தைத் தேர்ந்தெடுக்கவும்.

Docker Compose மூலம் Actual Budget-ஐ நிறுவுதல்

Server புதிதாக இருந்தால் முதலில் Docker-ஐ நிறுவவும். Compose file syntax உங்களுக்கு புதிதாக இருந்தால், கீழே பயன்படுத்தப்படும் fields-ஐ VPS-க்கான Docker Compose அடிப்படைகள் வழிகாட்டி விளக்குகிறது.

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

அந்த file-இல் மூன்று விவரங்கள் முக்கியமானவை.

Image என்பது actualbudget/actual-server:latest. இதை project Docker Hub-இல் வெளியிட்டு, ghcr.io/actualbudget/actual-இல் mirror செய்கிறது. குறைந்த power கொண்ட machines-க்கு latest-alpine tag உள்ளது.

Container, அனைத்தையும் /data-ன் கீழ் எழுதுகிறது. அதற்குள் உங்கள் login மற்றும் session tokens-ஐ வைத்திருக்கும் account.sqlite அடங்கிய server-files உள்ளது. Budget files-ஐ வைத்திருக்கும் user-files-உம் அங்கே உள்ளது. அந்த path-ஐ mount செய்ய வேண்டும். இல்லையெனில் அடுத்த docker compose pull உங்கள் budget-ஐ நீக்கிவிடும். ACTUAL_DATA_DIR அதை மாற்றலாம். ஆனால் default மதிப்பு போதுமானது.

Port, 127.0.0.1-இல் மட்டும் publish செய்யப்படுகிறது. வெறும் 5006:5006-ஐ பயன்படுத்தினால் அது ஒவ்வொரு interface-இலும் publish ஆகும். Docker, ufw-க்கு முன்பாக தன்னுடைய rules-ஐ எழுதுகிறது. எனவே deny-all firewall இருந்தாலும் app இணையத்திற்கு திறந்திருக்கும். இந்த எதிர்பாராத நடத்தை Docker published ports ufw-ஐ ஏன் கடந்து செல்கின்றன என்பதில் விளக்கப்பட்டுள்ளது. Loopback-க்கு bind செய்தால் அதே server-இல் உள்ள reverse proxy மட்டும் அதை அணுக முடியும்.

அதைத் தொடங்கவும்:

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

Server port 5006-இல் listening செய்கிறது என்று தெரிவிக்கும் வரை log நிலைபெறும். DNS-ஐ மாற்றுவதற்கு முன் local-ஆகச் சரிபார்க்கவும்:

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

200 என்பது app requests-ஐ serve செய்கிறது என்று பொருள். curl: (7) Failed to connect என்பது container இயங்கவில்லை என்று பொருள். docker compose ps அது exited என்பதை காட்டும். பொதுவான காரணம் mounted volume-இன் permission problem ஆகும். இது log-இல் உள்ள EACCES line-ஆகத் தெரியும்.

முன்னால் certificate மற்றும் உண்மையான பெயரை அமைக்கவும்

VPS-க்கு A record-ஐச் சுட்டிக்காட்டி, budget.example.com, அது resolve ஆகும் வரை காத்திருக்கவும். பின்னர் nginx-ஐ நிறுவி certificate-ஐ issue செய்யவும். Ubuntu 24.04-ல் nginx உடன் Certbot வழிகாட்டியில் issue செய்வதும் renewal timer-ஐ அமைப்பதும் முழுமையாக விளக்கப்பட்டுள்ளன.

Proxy block:

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 என்பது பலர் மறந்துவிடும் line ஆகும். Full sync நடைபெறும்போது budget file முழுமையாக upload செய்யப்படும். Nginx-ன் default request body அளவு 1 MB ஆகும். எனவே file அளவு அதைக் கடந்ததும் sync தோல்வியடையும். Nginx access log-ல் 413 Request Entity Too Large தோன்றும்; app-ல் பொதுவான sync error மட்டுமே காட்டப்படும். Server-க்கு தனிப்பட்ட limits உள்ளன: ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB-ன் default மதிப்பு 20, ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB-ன் default மதிப்பு 50. எனவே உங்களுக்கு பொருந்தும் limit-ஐ விட nginx limit அதிகமாக இருக்குமாறு அமைக்கவும்.

Reload செய்து சோதிக்கவும்:

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

முதல் இயக்கம்: password மற்றும் உங்கள் முதல் budget file

https://budget.example.com-ஐ browser-ல் திறக்கவும். முதல் திரை server password-ஐ அமைக்கச் சொல்கிறது. அந்த ஒரு password முழு server-ஐப் பாதுகாக்கிறது. எனவே நீளமான random password-ஐ உருவாக்கி, அதை மீண்டும் கண்டுபிடிக்கக்கூடிய இடத்தில் சேமிக்கவும். உதாரணமாக, self-hosted Vaultwarden password manager-ஐப் பயன்படுத்தலாம். உருவாக்க வேண்டிய user accounts எதுவும் இல்லை. Actual-ன் server வடிவமைப்பிலேயே single-password முறையைப் பயன்படுத்துகிறது. எனவே budget-ஐப் பகிர்வது அந்த password-ஐப் பகிர்வதாகும்.

பின்னர் budget file-ஐ உருவாக்கவும். End-to-end encryption-ஐ இயக்க வேண்டுமா என்று Actual கேட்கும். Yes என்பதைத் தேர்ந்தெடுக்கவும். அப்போது server ciphertext-ஐ மட்டுமே சேமிக்கும். வாடகைக்கு எடுத்த machine-ல் financial data-க்கு இதுவே சரியான தேர்வு. இதற்கான செலவு உண்மையானது: encryption password server-ஐ ஒருபோதும் சென்றடையாது. எனவே அதை இழந்தால் file-ஐ இழந்துவிடுவீர்கள்; reset செய்யும் வழியும் இல்லை. அந்தத் திரையைத் தாண்ட click செய்வதற்கு முன் password-ஐ எழுதிப் பாதுகாக்கவும்.

பல ஆண்டுகளின் history-ஐ import செய்வதற்குப் பதிலாக, உங்கள் bank-ன் தற்போதைய figures-ஐப் பயன்படுத்தி starting balances-ஐ அமைக்கவும். Envelope budgeting, இப்போது உங்களிடம் உள்ள பணத்திலிருந்து முன்னோக்கிச் செயல்படும். எனவே history இல்லாததால் உங்களுக்கு எந்த இழப்பும் இல்லை.

பரிவர்த்தனைகளை இறக்குமதி செய்தல்

இங்கு உற்சாகத்தைவிட நேர்மை முக்கியம். ஏனெனில் self-hosted budgeting முறையை மக்கள் கைவிடுவதற்கான முக்கிய காரணம் import நடைமுறையாகும்.

Manual entry என்பது அடிப்படை முறையாகும். இது எப்போதும் செயல்படும். Envelope method-ஐப் பயன்படுத்தும்போது, இதுவே அதன் முக்கிய நோக்கமாக இருக்கலாம். ஏனெனில் வாங்கிய பொருளை type செய்வது, அந்தச் செலவை நீங்கள் கவனிக்கச் செய்கிறது.

File import பெரும்பகுதியான பணியைச் செய்கிறது. Actual, CSV, QIF, OFX மற்றும் QFX ஆகியவற்றைப் படிக்கும். ஒவ்வொரு bank-மும் குறைந்தது இவற்றில் ஒன்றையாவது export செய்கிறது. Account screen-இலிருந்து ஒவ்வொரு account-க்கும் import செய்யுங்கள். Columns-ஐ ஒருமுறை map செய்யுங்கள். அந்த account-க்கான layout-ஐ Actual நினைவில் வைத்திருக்கும்.

Automatic bank sync உள்ளது. Server தனியாக banks-உடன் தொடர்புகொள்ள முடியாததால், இதற்கு third-party service தேவை. North American banks-க்கு Actual, SimpleFIN Bridge-ஐ ஆதரிக்கிறது. Europe-க்கு Enable Banking, New Zealand-க்கு Akahu, Brazil-க்கு Pluggy.ai ஆகியவற்றை ஆதரிக்கிறது. GoCardless இன்னும் ஆதரிக்கப்படுகிறது. ஆனால் புதிய accounts-ஐ அது ஏற்கவில்லை. Provider-இடம் நீங்களே sign up செய்ய வேண்டும். Credentials-ஐ உருவாக்கி server-இல் சேர்க்க வேண்டும். July 2026 நிலவரப்படி, SimpleFIN Bridge ஆண்டுக்கு 15 US dollars வசூலிக்கிறது; இதில் அதிகபட்சம் 25 institutions அடங்கும். மற்ற services-ன் விலை முறை வேறுபடும்.

இதனை நம்புவதற்கு முன் இரண்டு வரம்புகளை ஏற்றுக்கொள்ள வேண்டும். API credentials server-இல் இருக்கும். அவை end-to-end encryption-ஆல் பாதுகாக்கப்படாது. ஏனெனில் server அவற்றைப் பயன்படுத்த வேண்டியிருக்கும். Actual polling செய்வதில்லை. Syncing என்பது நீங்கள் அழுத்தும் button; அது background job அல்ல.

Backups, ஏனெனில் இது files மட்டுமே

நீங்கள் பாதுகாக்க வேண்டிய அனைத்தும் /opt/actual/data-ன் கீழ் உள்ளன. Export படி எதுவும் இல்லை. Script செய்ய வேண்டிய database dump-உம் இல்லை.

ஒரே சிக்கல் SQLite ஆகும். Server அதில் எழுதிக்கொண்டிருக்கும்போது account.sqlite-ஐ copy செய்தால், முழுமையடையாத transaction பதிவாகலாம். Restore செய்ய முயற்சிக்கும் வரை இதை அறிய முடியாது. Copy நடைபெறும் சில seconds-க்கு container-ஐ stop செய்யவும்:

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

VPS-ல் restic backups பகுதியில் உள்ள முறையைப் பயன்படுத்தி இதை schedule செய்யவும். அந்தப் பகுதியில் repository setup, retention மற்றும் restore drill ஆகியவை உள்ளன. Restore drill-ஐ இயக்கவும். இதுவரை restore செய்யாத backup என்பது ஒரு ஊகம் மட்டுமே.

Actual-ன் சொந்த client-side backups தனியான அம்சமாகும். அதைப் பற்றி அறிந்திருப்பது பயனுள்ளதாகும். Browser, budget file-ன் சமீபத்திய copies-ஐ வைத்திருக்கும். இவற்றை file menu-விலிருந்து அணுகலாம். இதனால் server-ஐத் தொடாமல் “category-ஐ தவறுதலாக delete செய்தேன்” என்ற நிலையைச் சரிசெய்யலாம்.

சேவையகத்தைப் புதுப்பித்தல்

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

Compose புதிய image-இலிருந்து container-ஐ மீண்டும் உருவாக்கி, அதே volume-ஐ மீண்டும் இணைக்கிறது. எனவே தரவு தொடர்ந்து பாதுகாக்கப்படுகிறது. Clients-ஐயும் புதுப்பிக்கவும். Server மற்றும் app பதிப்புகள் ஒன்றுக்கொன்று நெருக்கமாக இருக்க வேண்டும். Server-ஐவிட மிகவும் பழைய client, version mismatch செய்தியுடன் sync செய்ய மறுக்கலாம். Major version மாற்றத்திற்கு முன் backup எடுக்கவும். ஏனெனில் முதல் start-இல் migrations இயங்கும், மேலும் downgrade செய்யும் வழி இல்லை.

எது செயலிழக்கும், நீங்கள் எதைப் பார்ப்பீர்கள்

பயன்பாடு ஏற்றப்படும், ஆனால் sync ஒருபோதும் நிறைவடையாது. nginx access log-ஐ 413 க்காக கண்காணிக்கவும். அதாவது client_max_body_size மிகவும் குறைவாக அமைக்கப்பட்டுள்ளது. அதற்குப் பதிலாக 502 காணப்பட்டால், nginx இயங்குகிறது, ஆனால் container இயங்கவில்லை என்று பொருள்.

Encryption options காணப்படவில்லை, அல்லது mobile app URL-ஐ ஏற்கவில்லை. பக்கம் secure context-ல் இல்லை. Address bar-ல் IP address அல்லது localhost அல்லாத hostname உடன் http:// காணப்படும். தற்காலிக வழிமுறையைப் பயன்படுத்தாமல் certificate-ஐ சரிசெய்யவும்.

Budget file இந்த version-க்கு compatible அல்ல என்ற செய்தி. Client மற்றும் server versions ஒன்றிலிருந்து ஒன்று விலகியுள்ளன. இரண்டையும் ஒரே release-க்கு update செய்து reload செய்யவும்.

Container தொடர்ச்சியாக restart ஆகிறது. docker compose logs actual ஐப் படிக்கவும். /data மீது permission error காணப்பட்டால், mounted directory container-ன் user-ஆல் எழுதக்கூடியதாக இல்லை. Address-in-use error காணப்பட்டால், loopback-ல் 5006 port-ஐ ஏற்கனவே வேறு ஒன்று பயன்படுத்துகிறது.

முதல் load மெதுவாக இருப்பது போல் தெரிகிறது. Budget file முழுவதும் அதைத் திறக்கும்போது browser-க்கு download செய்யப்படுகிறது. முதலில் இது ஒரு பெரிய transfer ஆகும்; பின்னர் local reads நடைபெறும். இது server sizing பிரச்சினை அல்ல. RAM-ஐ அதிகரிப்பதால் இதன் வேகம் மாறாது.

FAQ

Actual Budget இயங்க HTTPS தேவையா?

நடைமுறையில், தேவை. Actual-ன் end-to-end encryption, browser-ன் Web Crypto API-ஐப் பயன்படுத்துகிறது. Browsers இந்த API-ஐ secure context-ல் மட்டுமே வழங்கும். அதாவது https:// அல்லது http://localhost தேவை. மற்றொரு machine-இலிருந்து plain HTTP பயன்படுத்தும்போது இந்த அம்சங்கள் கிடைக்காது. Official mobile apps-ம் plain HTTP server URL-ஐ ஏற்காது. உண்மையான hostname-க்கு Let's Encrypt certificate பயன்படுத்துங்கள். Desktop browser-ஐ மட்டுமே பயன்படுத்தப் போனால், ACTUAL_HTTPS_KEY மற்றும் ACTUAL_HTTPS_CERT உடன் self-signed certificate பயன்படுத்தலாம்.

Actual என் bank transactions-ஐத் தானாக import செய்யுமா?

நீங்கள் தனியாகப் பதிவுசெய்யும் third-party service வழியாக மட்டுமே செய்யும். North America-வில் SimpleFIN Bridge, Europe-வில் Enable Banking, New Zealand-ல் Akahu, Brazil-ல் Pluggy.ai ஆகியவை உள்ளன. GoCardless ஆதரிக்கப்படுகிறது. ஆனால் புதிய accounts ஏற்கப்படுவதில்லை. அந்த API credentials உங்கள் server-ல் சேமிக்கப்படும். அவை end-to-end encryption-ன் பாதுகாப்புக்குள் வராது. Sync-ஐயும் manual-ஆகச் செய்ய வேண்டும். நீங்கள் ஒரு button-ஐ அழுத்த வேண்டும். பின்னணியில் எந்த polling-ம் நடக்காது. CSV, QIF, OFX மற்றும் QFX import-க்கு third party தேவையில்லை.

சரியாக எதை backup செய்ய வேண்டும்?

Mounted data directory-ஐ backup செய்ய வேண்டும். இந்த guide-ல் அது /opt/actual/data ஆகும். அதில் logins மற்றும் sessions அடங்கிய server-files/account.sqlite உள்ளது. Budget files அடங்கிய user-filesவும் உள்ளது. Copy செய்வதற்கு முன் container-ஐ நிறுத்துங்கள். இயங்கிக்கொண்டிருக்கும் SQLite database-ஐ copy செய்தால், முழுமையற்ற write பதிவாகலாம். Server-ன் வேறு எந்தப் பகுதியிலும் state சேமிக்கப்படாது.

Encryption password-ஐ இழந்தால் என்ன நடக்கும்?

File-ஐ மீட்டெடுக்க முடியாது. End-to-end encryption-ன் நோக்கமே அதுதான் என்பதால், password server-ஐ அடையாது. எனவே reset வசதியும் support வழியும் இல்லை. File-ஐ உருவாக்கிய உடனே password-ஐ password manager-ல் சேமியுங்கள். இதே server-ஐச் சாராத வேறு இடத்திலும் ஒரு copy வைத்திருங்கள்.

Actual Budget-க்கு எவ்வளவு server வளங்கள் தேவை?

மிகக் குறைவு. Container static assets மற்றும் files-ஐ வழங்கும். Budget calculations browser-ல் நடைபெறும். 1 GB RAM கொண்ட ஒரு shared vCPU இதைச் சிக்கலின்றி இயக்கும். பல ஆண்டுகளுக்கான history கொண்ட ஒரு household budget-ன் data directory, பல பத்து megabytes அளவுக்குள் இருக்கும். Disk pressure உங்கள் backups மற்றும் பிற containers காரணமாக வரும். Actual காரணமாக வராது.