SSD Nodes Learn RAM 8GB — $66/mwaka
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-01

Jinsi ya Kujihifadhi Actual Budget kwenye VPS Yako

Sakinisha Actual Budget kwenye VPS kwa Docker Compose: jifunze ujazo wa data, kwa nini HTTPS inahitajika, kuunda bajeti, kuingiza benki na kuhifadhi nakala.

Unachojenga

Actual Budget ni programu ya kupanga bajeti kwa mfumo wa bahasha inayojihifadhiwa kwenye seva yako mwenyewe. Kwa kawaida hutumiwa na watu wanaotafuta mbadala wa YNAB wanaoweza kuuhifadhi wao wenyewe. Seva ni kontena moja, ujazo mmoja wa data, na jina moja la HTTPS. Kila kitu kinachohitajika na bajeti ya kawaida hufanya kazi vizuri kwenye VPS ndogo zaidi unayoweza kukodisha, kwa sababu seva huhifadhi faili na kusawazisha data hasa.

Ni muhimu kuelewa usanifu huu kabla ya kuandika chochote. Bajeti yenyewe ni hifadhidata ya SQLite iliyo ndani ya kivinjari chako na ndani ya kila programu ya simu. Seva unayokaribia kusakinisha ni kituo cha kusawazisha: huhifadhi orodha ya akaunti, faili za bajeti, na kumbukumbu ya mabadiliko inayowezesha simu na kompyuta ya mkononi kukubaliana. Ndiyo sababu programu huendelea kufanya kazi seva ikiwa haipatikani, na ndiyo sababu kupoteza seva hakupotezi bajeti yako mradi tu mteja mmoja bado ana nakala yake.

Kwa nini seva inahitaji HTTPS

Actual inahitaji HTTPS, na hili si jambo la hiari. Vivinjari hutoa API ya Web Crypto pekee, ambayo ni kiolesura kinachotumiwa na Actual kwa usimbaji fiche kutoka mwisho hadi mwisho, katika kile ambacho vipimo vinakiita muktadha salama. Muktadha salama ni https:// au http://localhost. Ukifungua programu kutoka http://203.0.113.10:5006 katika kivinjari kwenye mashine nyingine, vipengele hivyo havipatikani kwa sababu kivinjari hakikuvikabidhi ukurasa. Miundo rasmi ya programu za simu pia hukataa URL ya seva ya http:// isiyotumia usimbaji fiche.

Kwa hiyo, kuna usanidi mbili unaofanya kazi. Weka cheti halisi kwenye jina halisi mbele ya kontena; huo ndio usanidi unaotumiwa na mwongozo huu. Au ipa seva cheti cha kujitia sahihi kwa kutumia ACTUAL_HTTPS_KEY na ACTUAL_HTTPS_CERT, kama mradi unavyoeleza, kisha ukubali onyo la kivinjari kwenye kila kifaa. Cheti cha bure kutoka Let's Encrypt hupatikana ndani ya dakika tano, kwa hiyo tumia chaguo la kwanza.

Sakinisha Actual Budget kwa Docker Compose

Sakinisha Docker kwanza ikiwa seva bado ni mpya. Ikiwa sintaksia ya faili la Compose ni mpya kwako, mwongozo wa misingi ya Docker Compose kwa VPS unaeleza sehemu zinazotumika hapa.

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

Andika /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

Maelezo matatu katika faili hilo ni muhimu.

Image ni actualbudget/actual-server:latest, iliyochapishwa na mradi kwenye Docker Hub na kunakiliwa kwenye ghcr.io/actualbudget/actual. Kuna tag ya latest-alpine kwa mashine zenye nishati ndogo.

Kontena huandika kila kitu chini ya /data. Ndani yake kuna server-files, ambayo huhifadhi account.sqlite yenye taarifa zako za kuingia na tokeni za session, pamoja na user-files, ambayo huhifadhi faili za bajeti zenyewe. Mount njia hiyo; la sivyo docker compose pull inayofuata itafuta bajeti yako. ACTUAL_DATA_DIR inaweza kuihamisha, lakini thamani ya chaguo-msingi inatosha.

Port inachapishwa kwenye 127.0.0.1 pekee. 5006:5006 tupu huchapisha kwenye interface zote, na Docker huandika sheria zake kabla ya ufw. Kwa hiyo programu ingefunguliwa kwenye intaneti hata kama firewall imekataa miunganisho yote. Mshangao huo umeelezwa katika kwa nini port zilizochapishwa na Docker hupita ufw. Kuifunga kwenye loopback kunamaanisha kuwa reverse proxy iliyo kwenye seva hiyo hiyo pekee ndiyo inaweza kuifikia.

Iwashe:

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

Log hutulia baada ya seva kuripoti kuwa inasikiliza kwenye port 5006. Ijaribu ndani ya seva kabla ya kubadilisha DNS:

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

200 inamaanisha programu inahudumia maombi. curl: (7) Failed to connect inamaanisha kontena haiendeshwi, na docker compose ps itaonyesha kuwa ilisitishwa. Sababu ya kawaida ni tatizo la ruhusa kwenye volume iliyomountiwa, linaloonekana kama mstari wa EACCES kwenye log.

Weka cheti na jina halisi mbele

Elekeza rekodi ya A kwenye VPS, budget.example.com, kisha subiri itatuliwe. Sakinisha nginx, halafu toa cheti. Mwongozo wa Certbot kwenye Ubuntu 24.04 ukitumia nginx unaeleza kikamilifu utoaji wa cheti na kipima muda cha kusasisha cheti.

Sehemu ya proksi:

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 ndiyo mstari ambao watu husahau. Faili ya bajeti hupakiwa yote wakati wa ulandanishi kamili. Nginx inaweka kikomo chaguo-msingi cha mwili wa ombi kuwa 1 MB. Kwa hiyo, faili inapozidi kikomo hicho, ulandanishi hushindwa na 413 Request Entity Too Large huonekana katika kumbukumbu ya ufikiaji ya nginx, huku programu ikionyesha tu hitilafu ya jumla ya ulandanishi. Seva ina vikomo vyake tofauti: ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB huwa 20 kwa chaguo-msingi na ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB huwa 50 kwa chaguo-msingi. Weka kikomo cha nginx juu ya kikomo kinachokuhusu.

Pakia upya na ujaribu:

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

Uendeshaji wa kwanza: nenosiri na faili yako ya kwanza ya bajeti

Fungua https://budget.example.com katika kivinjari. Skrini ya kwanza inakuomba uweke nenosiri la seva. Nenosiri hilo hulinda seva nzima, kwa hiyo tengeneza nenosiri refu la nasibu na ulihifadhi mahali utakapolipata tena, kama vile kidhibiti cha nenosiri cha Vaultwarden kinachojihudumia. Hakuna akaunti za watumiaji za kuunda. Seva ya Actual imeundwa kwa nenosiri moja, kwa hiyo kushiriki bajeti kunamaanisha kushiriki nenosiri hilo.

Kisha unda faili ya bajeti. Actual inauliza ikiwa iwashwe usimbaji fiche kutoka mwanzo hadi mwisho. Jibu ndiyo, na seva itahifadhi ciphertext pekee. Hilo ndilo chaguo sahihi kwa data ya kifedha iliyo kwenye mashine iliyokodishwa. Gharama yake ni ya kweli: nenosiri la usimbaji fiche halifiki kwenye seva, kwa hiyo ukilipoteza faili hiyo itapotea na hakuna njia ya kulirejesha. Liandike kabla ya kubofya ili kuendelea kutoka kwenye skrini hiyo.

Weka salio zako za kuanzia kwa kutumia takwimu za sasa za benki yako badala ya kuleta historia ya miaka mingi. Bajeti ya bahasha huanza mbele kutoka kwenye pesa ulizo nazo sasa, kwa hiyo kutokuwa na historia hakutakugharimu chochote.

Kuingiza miamala

Hapa uaminifu ni muhimu kuliko shauku, kwa sababu mfumo wa kuleta data ndiyo sababu kuu inayowafanya watu waache kutumia zana za kupanga bajeti zinazojisimamiwa.

Kuingiza data mwenyewe ni msingi na hufanya kazi kila wakati. Kwa mbinu ya bahasha, huenda hilo ndilo lengo, kwa sababu kuandika ununuzi kunakufanya uutambue.

Uingizaji wa faili hushughulikia data nyingi. Actual husoma CSV, QIF, OFX na QFX, na kila benki hutoa angalau mojawapo ya miundo hiyo. Ingiza data kwa kila akaunti kutoka kwenye skrini ya akaunti, panga safu mara moja, na Actual itakumbuka mpangilio huo kwa akaunti hiyo.

Usawazishaji wa benki kiotomatiki unapatikana, na unahitaji huduma ya mhusika wa tatu kwa sababu seva haiwezi kuwasiliana na benki yenyewe. Actual inatumia SimpleFIN Bridge kwa benki za Amerika Kaskazini, Enable Banking kwa Ulaya, Akahu kwa New Zealand, na Pluggy.ai kwa Brazil. GoCardless bado inatumika, lakini haipokei akaunti mpya. Unajisajili mwenyewe kwa mtoa huduma, unatengeneza hati tambulishi, kisha unaziongeza kwenye seva. SimpleFIN Bridge inatoza dola 15 za Marekani kwa mwaka kwa hadi taasisi 25 kufikia Julai 2026, na watoa huduma wengine wana bei tofauti.

Kabla hujategemea huduma hii, kubali vikwazo viwili. Hati tambulishi za API ziko kwenye seva na hazilindwi na usimbaji fiche kutoka mwisho hadi mwisho, kwa sababu seva lazima izitumie. Pia Actual haichunguzi benki mara kwa mara: usawazishaji huanzishwa kwa kubonyeza kitufe, si kazi ya chinichini.

Hifadhi rudufu, kwa sababu ni faili tu

Kila kitu muhimu kiko chini ya /opt/actual/data. Hakuna hatua ya kuhamisha data, wala utupaji wa hifadhidata wa kuandaa kwa hati.

Mtego pekee ni SQLite. Kunakili account.sqlite wakati seva inaandika ndani yake kunaweza kunasa muamala ambao haujakamilika, na hutagundua hilo hadi ujaribu kurejesha. Simamisha kontena kwa sekunde chache zinazohitajika kunakili:

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

Weka hilo kwenye ratiba kwa kutumia mbinu iliyo katika hifadhi rudufu za restic kwenye VPS, inayoshughulikia usanidi wa hazina, uhifadhi wa matoleo na zoezi la kurejesha. Fanya zoezi la kurejesha. Hifadhi rudufu ambayo hujawahi kuirejesha ni makadirio tu.

Hifadhi rudufu za Actual zinazofanywa na mteja ni jambo tofauti na linafaa kulifahamu. Kivinjari huhifadhi nakala za hivi karibuni za faili la bajeti, zinazopatikana kupitia menyu ya faili. Hilo linashughulikia hali ya "nilifuta kategoria kimakosa" bila kugusa seva hata kidogo.

Kusasisha server

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

Compose huunda upya kontena kwa kutumia image mpya na kuunganisha tena volume ileile, hivyo data huhifadhiwa. Sasisha clients pia. Toleo la server na la app linapaswa kuwa karibu, na client iliyozeeka sana kuliko server inaweza kukataa kusawazisha na kuonyesha ujumbe wa kutolingana kwa matoleo. Tengeneza nakala rudufu kabla ya kuruka hadi toleo kuu jipya, kwa sababu migrations huendeshwa wakati wa kuanza kwa mara ya kwanza na hakuna njia ya kurudi kwenye toleo la awali.

Kinachoharibika na utakachoona

Programu inapakia, lakini usawazishaji haukamiliki kamwe. Kagua logi ya ufikiaji ya nginx kwa 413. Hiyo inaonyesha kuwa client_max_body_size imewekwa chini sana. 502 badala yake inaonyesha kuwa nginx inafanya kazi lakini kontena haifanyi kazi.

Chaguo za usimbaji fiche hazipo, au programu ya simu inakataa URL. Ukurasa hauko katika muktadha salama. Upau wa anwani utaonyesha http:// ukiwa na anwani ya IP au jina la mwenyeji ambalo si localhost. Rekebisha cheti badala ya kutumia njia ya mkato.

Ujumbe unasema kuwa faili ya bajeti haiendani na toleo hili. Toleo la mteja na la seva yameachana. Sasisha yote mawili yawe toleo lilelile, kisha pakia upya.

Kontena linaanzisha upya kila mara. Soma docker compose logs actual. Hitilafu ya ruhusa kwenye /data inamaanisha kuwa saraka iliyowekwa haijaandikika na mtumiaji wa kontena. Hitilafu ya anwani inayotumika inamaanisha kuwa kitu kingine tayari kinatumia 5006 kwenye loopback.

Upakiaji wa kwanza unaonekana kuwa wa polepole. Faili lote la bajeti hupakuliwa kwenye kivinjari unapoifungua. Huo ni uhamishaji mmoja mkubwa, kisha usomaji wa ndani. Si tatizo la ukubwa wa seva, na kuongeza RAM hakutabadilisha hali hiyo.

FAQ

Je, Actual Budget inahitaji HTTPS ili kufanya kazi?

Ndiyo, kwa matumizi ya kawaida. Usimbaji fiche wa kutoka mwisho hadi mwisho wa Actual hutumia Web Crypto API ya kivinjari, na vivinjari huifichua tu katika muktadha salama, yaani https:// au http://localhost. Kwa HTTP isiyo salama kutoka kwenye mashine nyingine, vipengele hivyo havipatikani, na programu rasmi za simu hukataa URL ya seva inayotumia HTTP isiyo salama. Tumia cheti cha Let's Encrypt kwenye jina halisi la mpangishaji, au cheti cha kujisaini chenye ACTUAL_HTTPS_KEY na ACTUAL_HTTPS_CERT ikiwa utatumia kivinjari cha kompyuta pekee.

Je, Actual inaweza kuagiza miamala yangu ya benki kiotomatiki?

Ni kupitia huduma ya mtu wa tatu tu ambayo utajisajili mwenyewe: SimpleFIN Bridge huko Amerika Kaskazini, Enable Banking huko Ulaya, Akahu huko New Zealand, au Pluggy.ai nchini Brazil. GoCardless inatumika, lakini haipokei akaunti mpya. Taarifa hizo za API huhifadhiwa kwenye seva yako na hazilindwi na usimbaji fiche wa kutoka mwisho hadi mwisho. Usawazishaji pia ni wa mwongozo, kwa hiyo unabofya kitufe na hakuna mchakato unaochunguza data chinichini. Uagizaji wa CSV, QIF, OFX na QFX hauhitaji mtu wa tatu kabisa.

Ni vitu gani hasa ninavyopaswa kuhifadhi nakala?

Saraka ya data iliyowekwa, ambayo ni /opt/actual/data katika mwongozo huu. Ina server-files/account.sqlite yenye taarifa za kuingia na vipindi vya vikao, na user-files yenye mafaili ya bajeti. Simamisha kontena kabla ya kunakili, kwa sababu kunakili hifadhidata ya SQLite inayotumika kunaweza kunasa uandishi ambao haujakamilika. Hakuna kitu kingine kwenye seva kinachohifadhi hali.

Nini hutokea nikisahau nenosiri la usimbaji fiche?

Faili hiyo haiwezi kurejeshwa. Nenosiri halifikii seva, ambalo ndilo kusudi kuu la usimbaji fiche wa kutoka mwisho hadi mwisho, kwa hiyo hakuna uwekaji upya wala njia ya usaidizi. Hifadhi nenosiri hilo katika kidhibiti cha nywila mara tu unapounda faili, na weka nakala mahali ambapo hakutegemei seva hii hii.

Actual Budget inahitaji seva yenye uwezo gani?

Inahitaji uwezo mdogo sana. Kontena huhudumia rasilimali tuli na mafaili, huku hesabu za bajeti zikifanyika kwenye kivinjari. vCPU 1 ya pamoja yenye RAM ya 1 GB huendesha programu bila matatizo, na saraka ya data ya bajeti ya kaya yenye historia ya miaka kadhaa hubaki katika makumi ya megabaiti. Shinikizo la diski husababishwa na nakala zako za kuhifadhi na kontena zako nyingine, si na Actual.