SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-27

VPS-এ Actual Budget সেটআপ করার নিয়ম

Docker Compose ব্যবহার করে VPS-এ Actual Budget হোস্ট করার পূর্ণাঙ্গ নির্দেশিকা। HTTPS কেন বাধ্যতামূলক, ডেটা ভলিউম কনফিগারেশন, ব্যাংক ইমপোর্ট এবং ব্যাকআপ নেওয়ার সঠিক পদ্ধতি জানুন।

আপনি যা তৈরি করছেন

Actual Budget হলো একটি self-hosted এনভেলপ বাজেটিং অ্যাপ। যারা YNAB-এর বিকল্প হিসেবে নিজের সার্ভারে হোস্ট করা যায় এমন কিছু খুঁজছেন, তাদের জন্য এটিই সাধারণত সেরা সমাধান। এই সার্ভারটি একটি container, একটি data volume এবং একটি HTTPS name নিয়ে গঠিত। একটি সাধারণ বাজেটিং অ্যাপের জন্য প্রয়োজনীয় সবকিছুই সবচেয়ে ছোট VPS-এ অনায়াসেই চলে, কারণ সার্ভারটি মূলত ফাইল সংরক্ষণ এবং সিঙ্ক করার কাজ করে।

কোনো কমান্ড টাইপ করার আগে এর আর্কিটেকচার বুঝে নেওয়া জরুরি। বাজেটটি মূলত একটি SQLite database, যা আপনার ব্রাউজার এবং প্রতিটি মোবাইল অ্যাপের ভেতরে থাকে। আপনি যে সার্ভারটি ইনস্টল করতে যাচ্ছেন তা একটি sync endpoint হিসেবে কাজ করে; এটি account list, budget files এবং change log সংরক্ষণ করে, যার মাধ্যমে ফোন এবং ল্যাপটপের ডেটা সিঙ্ক থাকে। এই কারণেই সার্ভার ডাউন থাকলেও অ্যাপটি কাজ করে এবং যতক্ষণ পর্যন্ত একটি client-এ ডেটার কপি থাকে, ততক্ষণ সার্ভার হারিয়ে গেলেও আপনার বাজেটের কোনো ক্ষতি হয় না।

সার্ভারের কেন HTTPS প্রয়োজন

Actual-এর জন্য HTTPS প্রয়োজন, এবং এটি কোনো আনুষ্ঠানিকতা নয়। ব্রাউজারগুলো শুধুমাত্র secure context-এ Web Crypto API উন্মুক্ত করে, যা Actual-এর এন্ড-টু-এন্ড এনক্রিপশনের জন্য ব্যবহৃত ইন্টারফেস। একটি secure context হলো https:// অথবা http://localhost। অন্য কোনো মেশিন থেকে ব্রাউজারে http://203.0.113.10:5006 ব্যবহার করে অ্যাপটি লোড করলে এই ফিচারগুলো কাজ করবে না, কারণ ব্রাউজার পেজটিকে এই সুবিধাগুলো প্রদান করে না। অফিশিয়াল মোবাইল বিল্ডগুলোও সাধারণ http:// সার্ভার URL গ্রহণ করে না।

তাই দুটি কার্যকর উপায় রয়েছে। কন্টেইনারের সামনে একটি আসল ডোমেইন নামের বিপরীতে একটি আসল সার্টিফিকেট বসানো, যা এই গাইডে দেখানো হয়েছে। অথবা, প্রজেক্টের ডকুমেন্টেশন অনুযায়ী ACTUAL_HTTPS_KEY এবং ACTUAL_HTTPS_CERT ব্যবহার করে সার্ভারে একটি self-signed সার্টিফিকেট যুক্ত করা এবং প্রতিটি ডিভাইসে ব্রাউজারের সতর্কতা গ্রহণ করা। Let's Encrypt থেকে একটি ফ্রি সার্টিফিকেট পেতে পাঁচ মিনিট সময় লাগে, তাই প্রথম বিকল্পটি বেছে নিন।

Docker Compose ব্যবহার করে Actual Budget ইনস্টল করা

যদি সার্ভারটি নতুন হয়, তবে প্রথমে Docker ইনস্টল করুন। যদি Compose ফাইলের সিনট্যাক্স আপনার কাছে নতুন মনে হয়, তবে 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

এই ফাইলের তিনটি বিষয় গুরুত্বপূর্ণ।

ইমেজটি হলো actualbudget/actual-server:latest, যা প্রজেক্টের পক্ষ থেকে Docker Hub-এ পাবলিশ করা হয়েছে এবং ghcr.io/actualbudget/actual-এ মিরর করা হয়েছে। কম ক্ষমতার মেশিনের জন্য এতে একটি latest-alpine ট্যাগ রয়েছে।

কন্টেইনারটি /data-এর অধীনে সবকিছু লেখে। এর ভেতরে আপনি server-files পাবেন, যা আপনার লগইন এবং সেশন টোকেনসহ account.sqlite ধারণ করে, এবং user-files, যা বাজেট ফাইলগুলো সংরক্ষণ করে। এই পাথটি মাউন্ট করুন, অন্যথায় docker compose pull আপনার বাজেট ফাইল মুছে ফেলবে। ACTUAL_DATA_DIR ব্যবহার করে এটি পরিবর্তন করা সম্ভব, তবে ডিফল্ট সেটিংসই যথেষ্ট।

পোর্টটি শুধুমাত্র 127.0.0.1-এ পাবলিশ করা হয়েছে। সাধারণ 5006:5006 ব্যবহার করলে তা প্রতিটি ইন্টারফেসে পাবলিশ হয়ে যায় এবং Docker নিজেই ufw-এর আগে নিজস্ব রুল লিখে ফেলে, ফলে deny-all ফায়ারওয়াল থাকা সত্ত্বেও অ্যাপটি ইন্টারনেটের জন্য উন্মুক্ত হয়ে যাবে। এই বিষয়টি কেন Docker পাবলিশ করা পোর্ট ufw-কে বাইপাস করে গাইডে ব্যাখ্যা করা হয়েছে। লুপব্যাক (loopback)-এ বাইন্ড করার অর্থ হলো শুধুমাত্র একই সার্ভারে থাকা রিভার্স প্রক্সি এটিতে অ্যাক্সেস করতে পারবে।

এটি চালু করুন:

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

সার্ভারটি যখন পোর্ট 5006-এ লিসেন করছে বলে রিপোর্ট করবে, তখন লগ স্থিতিশীল হবে। DNS কনফিগার করার আগে লোকালি এটি পরীক্ষা করুন:

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

একটি 200 মানে হলো অ্যাপটি সঠিকভাবে কাজ করছে। curl: (7) Failed to connect মানে হলো কন্টেইনারটি চলছে না এবং docker compose ps কমান্ডটি দিলে দেখা যাবে এটি বন্ধ হয়ে গেছে। এর সাধারণ কারণ হলো মাউন্ট করা ভলিউমে পারমিশন সমস্যা, যা লগে EACCES লাইন হিসেবে দেখা যায়।

একটি সার্টিফিকেট এবং একটি ডোমেইন নাম যুক্ত করা

আপনার VPS-এর দিকে একটি A record নির্দেশ করুন, budget.example.com, এবং এটি resolve হওয়া পর্যন্ত অপেক্ষা করুন। এরপর nginx ইনস্টল করুন এবং সার্টিফিকেট ইস্যু করুন। Ubuntu 24.04-এ nginx-এর সাথে Certbot গাইডটিতে সার্টিফিকেট ইস্যু করা এবং রিনিউয়াল টাইমার সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।

প্রক্সি ব্লক:

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-এর ডিফল্ট রিকোয়েস্ট বডি লিমিট 1 MB, তাই ফাইলের আকার এর চেয়ে বড় হয়ে গেলে সিঙ্ক ব্যর্থ হয় এবং nginx access log-এ 413 Request Entity Too Large ত্রুটি দেখায়, যেখানে অ্যাপটি কেবল একটি সাধারণ সিঙ্ক এরর প্রদর্শন করে। সার্ভারের নিজস্ব আলাদা লিমিট রয়েছে: 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 খুলুন। প্রথম স্ক্রিনে আপনাকে একটি সার্ভার পাসওয়ার্ড সেট করতে বলা হবে। এই একটি পাসওয়ার্ড পুরো সার্ভারকে সুরক্ষিত রাখে, তাই একটি দীর্ঘ র‍্যান্ডম পাসওয়ার্ড তৈরি করুন এবং এমন কোথাও রাখুন যেখানে আপনি এটি খুঁজে পাবেন, যেমন একটি self-hosted Vaultwarden password manager-এ। এখানে কোনো ইউজার অ্যাকাউন্ট তৈরি করার প্রয়োজন নেই। Actual-এর সার্ভার ডিজাইন অনুযায়ী একক-পাসওয়ার্ড ভিত্তিক, তাই বাজেট শেয়ার করার অর্থ হলো সেই পাসওয়ার্ডটি শেয়ার করা।

এরপর একটি বাজেট ফাইল তৈরি করুন। Actual আপনাকে এন্ড-টু-এন্ড এনক্রিপশন চালু করতে বলবে। হ্যাঁ (yes) নির্বাচন করুন, এতে সার্ভার শুধুমাত্র সাইফারটেক্সট সংরক্ষণ করবে, যা ভাড়াকৃত মেশিনে আর্থিক তথ্যের জন্য সঠিক পদ্ধতি। এর একটি ঝুঁকিও আছে: এনক্রিপশন পাসওয়ার্ডটি কখনোই সার্ভারে পৌঁছায় না, তাই আপনি যদি এটি হারিয়ে ফেলেন তবে ফাইলটি চিরতরে হারিয়ে যাবে এবং এটি রিসেট করার কোনো উপায় নেই। সেই স্ক্রিনটি পার হওয়ার আগেই পাসওয়ার্ডটি লিখে রাখুন।

বছরের পর বছর ধরে হিস্ট্রি ইমপোর্ট না করে আপনার ব্যাংকের বর্তমান ব্যালেন্স থেকে শুরু করুন। এনভেলপ বাজেটিং আপনার বর্তমান অর্থের ওপর ভিত্তি করে কাজ করে, তাই হিস্ট্রি না থাকলেও আপনার কোনো সমস্যা হবে না।

ট্রানজ্যাকশন ইমপোর্ট করা

এখানে উৎসাহের চেয়ে সততা বেশি গুরুত্বপূর্ণ, কারণ ইমপোর্ট করার প্রক্রিয়াটিই হলো মূল কারণ যার জন্য মানুষ self-hosted বাজেট অ্যাপ ব্যবহার করা ছেড়ে দেয়।

ম্যানুয়াল এন্ট্রি হলো প্রাথমিক পদ্ধতি এবং এটি সবসময় কাজ করে। envelope পদ্ধতির ক্ষেত্রে এটিই মূল বিষয়, কারণ কোনো কেনাকাটার তথ্য টাইপ করার মাধ্যমেই আপনি সেটি সম্পর্কে সচেতন হন।

ফাইল ইমপোর্ট বড় আকারের ডেটা সামলানোর জন্য কার্যকর। Actual সফটওয়্যারটি CSV, QIF, OFX এবং QFX ফরম্যাট পড়তে পারে এবং প্রতিটি ব্যাংক অন্তত একটি ফরম্যাটে ডেটা এক্সপোর্ট করার সুবিধা দেয়। অ্যাকাউন্ট স্ক্রিন থেকে প্রতিটি অ্যাকাউন্টের জন্য আলাদাভাবে ইমপোর্ট করুন, একবার কলামগুলো ম্যাপ করে দিন, এবং Actual সেই অ্যাকাউন্টের জন্য লেআউটটি মনে রাখবে।

অটোমেটিক ব্যাংক সিঙ্ক করার সুবিধা রয়েছে, তবে এর জন্য একটি থার্ড-পার্টি সার্ভিস প্রয়োজন কারণ সার্ভার নিজে থেকে সরাসরি ব্যাংকের সাথে যোগাযোগ করতে পারে না। Actual উত্তর আমেরিকার ব্যাংকগুলোর জন্য SimpleFIN Bridge, ইউরোপের জন্য Enable Banking, নিউজিল্যান্ডের জন্য Akahu এবং ব্রাজিলের জন্য Pluggy.ai সমর্থন করে। GoCardless এখনো সমর্থিত কিন্তু নতুন অ্যাকাউন্ট গ্রহণ করছে না। আপনাকে নিজে এই প্রোভাইডারদের কাছে সাইন আপ করতে হবে, ক্রেডেনশিয়াল তৈরি করতে হবে এবং সেগুলো সার্ভারে যোগ করতে হবে। জুলাই 2026 অনুযায়ী, SimpleFIN Bridge সর্বোচ্চ 25টি প্রতিষ্ঠানের জন্য বছরে 15 US ডলার চার্জ করে এবং অন্যদের মূল্য নির্ধারণের পদ্ধতি ভিন্ন।

এই সুবিধাটি ব্যবহারের আগে দুটি সীমাবদ্ধতা মেনে নিতে হবে। API ক্রেডেনশিয়ালগুলো সার্ভারে থাকে এবং এগুলো end-to-end encryption-এর আওতাভুক্ত নয়, কারণ সার্ভারকে এগুলো ব্যবহার করতে হয়। এছাড়া Actual নিজে থেকে ডেটা পুল করে না: সিঙ্ক করার জন্য আপনাকে একটি বাটনে চাপ দিতে হবে, এটি কোনো ব্যাকগ্রাউন্ড জব নয়।

ব্যাকআপ, কারণ এটি কেবল ফাইল

আপনার প্রয়োজনীয় সবকিছু /opt/actual/data ডিরেক্টরির অধীনে থাকে। এখানে কোনো এক্সপোর্ট ধাপ বা ডাটাবেস ডাম্প স্ক্রিপ্ট করার প্রয়োজন নেই।

একটি সতর্কতার বিষয় হলো SQLite। সার্ভার যখন কোনো কিছু লিখছে, সেই সময়ে account.sqlite কপি করলে অসম্পূর্ণ ট্রানজ্যাকশন কপি হয়ে যেতে পারে, যা আপনি রিস্টোর করার আগ পর্যন্ত জানতে পারবেন না। কপি করার কয়েক সেকেন্ডের জন্য কন্টেইনারটি বন্ধ রাখুন:

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

restic backups on a VPS-এ বর্ণিত পদ্ধতি অনুসরণ করে এটিকে একটি শিডিউলে রাখুন, যেখানে রিপোজিটরি সেটআপ, রিটেনশন এবং রিস্টোর ড্রিল সম্পর্কে আলোচনা করা হয়েছে। রিস্টোর ড্রিলটি অবশ্যই চালিয়ে দেখুন। যে ব্যাকআপ আপনি কখনো রিস্টোর করে দেখেননি, তা কেবল একটি অনুমান মাত্র।

Actual-এর নিজস্ব ক্লায়েন্ট-সাইড ব্যাকআপ একটি আলাদা বিষয় এবং এটি সম্পর্কে জানা থাকা ভালো। ব্রাউজার বাজেট ফাইলের সাম্প্রতিক কপিগুলো সংরক্ষণ করে, যা ফাইল মেনু থেকে পাওয়া যায়। এটি সার্ভার স্পর্শ না করেই "আমি ভুলবশত একটি ক্যাটাগরি মুছে ফেলেছি" জাতীয় সমস্যার সমাধান দেয়।

সার্ভার আপডেট করা

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

নতুন image থেকে Compose container পুনরায় তৈরি করে এবং একই volume আবার সংযুক্ত করে, তাই data অক্ষত থাকে। Client-গুলোকেও আপডেট করুন। Server ও app-এর version কাছাকাছি থাকা প্রত্যাশিত। Server-এর তুলনায় অনেক পুরোনো client version mismatch message দেখিয়ে sync করতে অস্বীকার করতে পারে। Major version পরিবর্তনের আগে backup নিন, কারণ প্রথমবার start হওয়ার সময় migration চলে এবং downgrade করার কোনো পথ নেই। Floating latest tag ব্যবহারে Actual সাধারণত সমস্যা করে না, কারণ এর state একটি file directory হিসেবে সংরক্ষিত হয়। কিন্তু প্রকৃত database বহনকারী app-এর ক্ষেত্রে এটি প্রযোজ্য নয়। self-hosting Chatwoot-এ নির্দিষ্ট tag এবং upgrade-এর আগে dump নেওয়ার প্রয়োজনীয় প্রক্রিয়া দেখানো হয়েছে।

কী কী সমস্যা হতে পারে এবং আপনি কী দেখবেন

অ্যাপ লোড হয় কিন্তু সিঙ্ক সম্পন্ন হয় না। Nginx access log-এ 413 চেক করুন। এর মানে হলো client_max_body_size খুব কম সেট করা আছে। 502 আসার অর্থ হলো Nginx সচল আছে কিন্তু কন্টেইনারটি নেই।

এনক্রিপশন অপশনগুলো দেখা যাচ্ছে না, অথবা মোবাইল অ্যাপ URL গ্রহণ করছে না। পেজটি নিরাপদ কনটেক্সটে নেই। অ্যাড্রেস বারে http:// দেখা যাবে, যেখানে একটি IP অ্যাড্রেস বা এমন একটি হোস্টনাম থাকবে যা localhost নয়। সমস্যাটি এড়িয়ে না গিয়ে সার্টিফিকেট ঠিক করুন।

একটি মেসেজ দেখাচ্ছে যে বাজেট ফাইলটি এই ভার্সনের সাথে সামঞ্জস্যপূর্ণ নয়। ক্লায়েন্ট এবং সার্ভার ভার্সনের মধ্যে অমিল তৈরি হয়েছে। উভয়কেই একই রিলিজে আপডেট করুন এবং রিলোড দিন।

কন্টেইনারটি বারবার রিস্টার্ট হচ্ছে। docker compose logs actual পড়ুন। /data-এ পারমিশন এরর মানে হলো মাউন্ট করা ডিরেক্টরিটি কন্টেইনারের ইউজার দ্বারা রাইট করা যাচ্ছে না। অ্যাড্রেস-ইন-ইউজ এরর মানে হলো অন্য কোনো সার্ভিস ইতিমধ্যে লুপব্যাকে 5006 পোর্টটি দখল করে রেখেছে।

প্রথমবার লোড হতে ধীরগতি মনে হচ্ছে। বাজেট ফাইলটি খোলার সময় পুরো ফাইলটি ব্রাউজারে ডাউনলোড হয়। এটি একটি বড় ট্রান্সফার, এরপর লোকাল রিড হয়। এটি সার্ভারের সাইজিংয়ের সমস্যা নয়, তাই RAM বাড়ালেও কোনো পরিবর্তন হবে না।

FAQ

Actual Budget কাজ করার জন্য কি HTTPS প্রয়োজন?

হ্যাঁ, বাস্তবে তাই। Actual-এর এন্ড-টু-এন্ড এনক্রিপশন ব্রাউজারের Web Crypto API ব্যবহার করে, এবং ব্রাউজারগুলো শুধুমাত্র নিরাপদ কনটেক্সটেই এই সুবিধা দেয়, যার অর্থ হলো https:// অথবা http://localhost। অন্য কোনো মেশিন থেকে সাধারণ HTTP ব্যবহার করলে এই ফিচারগুলো কাজ করবে না এবং অফিসিয়াল মোবাইল অ্যাপগুলো সাধারণ HTTP সার্ভার URL গ্রহণ করবে না। একটি আসল হোস্টনামে Let's Encrypt সার্টিফিকেট ব্যবহার করুন, অথবা যদি আপনি শুধুমাত্র ডেস্কটপ ব্রাউজার ব্যবহার করেন তবে ACTUAL_HTTPS_KEY এবং ACTUAL_HTTPS_CERT দিয়ে সেলফ-সাইনড সার্টিফিকেট ব্যবহার করতে পারেন।

Actual কি আমার ব্যাংকের ট্রানজ্যাকশনগুলো স্বয়ংক্রিয়ভাবে ইমপোর্ট করতে পারে?

শুধুমাত্র আপনার নিজের সাইন-আপ করা কোনো থার্ড-পার্টি সার্ভিসের মাধ্যমে এটি সম্ভব: উত্তর আমেরিকায় SimpleFIN Bridge, ইউরোপে Enable Banking, নিউজিল্যান্ডে Akahu, অথবা ব্রাজিলে Pluggy.ai। GoCardless সমর্থিত হলেও বর্তমানে নতুন অ্যাকাউন্ট গ্রহণ করছে না। এই API ক্রেডেনশিয়ালগুলো আপনার সার্ভারে থাকে এবং এগুলো এন্ড-টু-এন্ড এনক্রিপশনের আওতাভুক্ত নয়। সিঙ্ক করার প্রক্রিয়াটিও ম্যানুয়াল, অর্থাৎ আপনাকে একটি বাটনে ক্লিক করতে হয় এবং ব্যাকগ্রাউন্ডে কোনো কিছু স্বয়ংক্রিয়ভাবে পোল (poll) হয় না। CSV, QIF, OFX এবং QFX ইমপোর্টের জন্য কোনো থার্ড-পার্টি সার্ভিসের প্রয়োজন নেই।

আমাকে ঠিক কী কী ব্যাকআপ রাখতে হবে?

মাউন্ট করা ডেটা ডিরেক্টরি, যা এই গাইডে /opt/actual/data হিসেবে উল্লেখ করা হয়েছে। এতে লগইন ও সেশনের জন্য server-files/account.sqlite এবং বাজেট ফাইলগুলোর জন্য user-files থাকে। কপি করার আগে কন্টেইনারটি বন্ধ করুন, কারণ চলমান SQLite ডেটাবেস কপি করলে অসম্পূর্ণ রাইট (partial write) হওয়ার ঝুঁকি থাকে। সার্ভারের অন্য কোথাও কোনো স্টেট (state) সংরক্ষিত থাকে না।

এনক্রিপশন পাসওয়ার্ড হারিয়ে ফেললে কী হবে?

ফাইলটি আর পুনরুদ্ধার করা সম্ভব নয়। পাসওয়ার্ডটি কখনোই সার্ভারে পৌঁছায় না, যা এন্ড-টু-এন্ড এনক্রিপশনের মূল উদ্দেশ্য। তাই এটি রিসেট করার কোনো উপায় বা সাপোর্ট নেই। ফাইলটি তৈরি করার সাথে সাথেই একটি পাসওয়ার্ড ম্যানেজারে এটি সংরক্ষণ করুন এবং এমন কোথাও একটি কপি রাখুন যা এই সার্ভারের ওপর নির্ভরশীল নয়।

Actual Budget চালানোর জন্য সার্ভারের সক্ষমতা কতটুকু প্রয়োজন?

খুবই সামান্য। কন্টেইনারটি শুধুমাত্র স্ট্যাটিক অ্যাসেট এবং ফাইল সার্ভ করে, আর বাজেটের হিসাব-নিকাশ ব্রাউজারের ভেতরেই সম্পন্ন হয়। 1 GB RAM সহ একটি শেয়ারড vCPU-তেই এটি অনায়াসেই চলে। কয়েক বছরের হিস্ট্রি থাকা একটি পারিবারিক বাজেটের ডেটা ডিরেক্টরি মাত্র কয়েক মেগাবাইট জায়গা নেয়। ডিস্কের ওপর চাপ মূলত আপনার ব্যাকআপ এবং অন্যান্য কন্টেইনার থেকে আসে, Actual থেকে নয়। যদি আপনি এমন একটি সার্ভার সেটআপ করেন যেখানে আরও বেশি রিসোর্স প্রয়োজন এমন কিছু চলবে, তবে সাধারণত ফটো সার্ভারই আপনার প্রয়োজনীয় রিসোর্সের সীমা নির্ধারণ করবে। তাই কোনো প্ল্যান বেছে নেওয়ার আগে PhotoPrism এবং Immich-এর আসলে কতটুকু RAM প্রয়োজন তা যাচাই করে নিন। একই যুক্তি মিডিয়া স্ট্যাকের ক্ষেত্রেও প্রযোজ্য: ট্রান্সকোডিং (transcoding) আপনার প্ল্যান নির্ধারণ করবে, যেখানে Halcyon, যা একটি Jellyfin লাইব্রেরিকে 90-এর দশকের ভিডিও স্টোরে রূপান্তর করে-এর মতো ব্রাউজার ফ্রন্ট-এন্ডের জন্য Actual-এর মতোই খুব সামান্য রিসোর্স প্রয়োজন হয়।