SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-29

Cara Pasang ERPNext di VPS Menggunakan Docker

Ketahui cara kendali ERPNext pada VPS dengan Docker. Panduan ini merangkumi konfigurasi 11 kontena, penetapan versi, TLS, e-mel, serta prosedur pemulihan data yang diuji.

Perkara yang anda persetujui untuk jalankan

Self-hosting ERPNext pada VPS ialah tugas operasi, bukan pemasangan satu arahan. Stak Docker Compose rasmi terdiri daripada sebelas kontena, dan ia menyimpan lejar am serta rekod pelanggan anda. Ini meningkatkan standard bagi semua perkara di bawah: sandaran (backup) tidak dianggap sandaran sehingga anda berjaya memulihkannya, dan tag imej yang tidak dipinkan (unpinned) adalah migrasi skema yang menunggu masa untuk berlaku.

Beberapa nama muncul sepanjang panduan ini. ERPNext ialah aplikasi perniagaan. Frappe ialah kerangka kerja Python di bawahnya. Bench ialah alat baris arahan yang mengurus tapak (site), yang sudah dipasang di dalam kontena. Tapak ialah satu penyewa: satu pangkalan data MariaDB ditambah satu direktori fail yang dimuat naik. Hampir setiap arahan di sini dijalankan bench di dalam kontena backend terhadap satu tapak yang dinamakan.

Panduan ini menggunakan repositori frappe_docker, iaitu penempatan (deployment) yang diselenggara oleh projek tersebut. Setiap arahan di bawah telah disemak terhadap repositori itu pada Ogos 2026. Jika Docker Compose merupakan perkara baharu bagi anda, menjalankan Docker Compose pada VPS merangkumi asas yang diandaikan oleh panduan ini.

Berapakah keperluan VPS untuk ERPNext?

ChartCommon published ERPNext sizing tiers (guidance, not a measurement)
The data behind this chart
[
  {
    "label": "Evaluation",
    "vcpu": 2,
    "ram_gb": 4,
    "disk_gb": 40
  },
  {
    "label": "Small production",
    "vcpu": 4,
    "ram_gb": 8,
    "disk_gb": 100
  },
  {
    "label": "Room to grow",
    "vcpu": 4,
    "ram_gb": 16,
    "disk_gb": 160
  }
]

Panduan yang diterbitkan bermula pada 2 vCPU dan 4 GB RAM sebelum seorang pun pengguna log masuk. Ini adalah tahap penilaian. Angka ini merupakan titik permulaan, bukan ukuran daripada panduan ini, dan jumlah dokumen anda sendiri yang menentukan keperluan sebenar. Baris terakhir bukanlah tahap minimum yang diterbitkan. Ia adalah anggaran tahap di mana memori tidak lagi menjadi perkara yang perlu anda fikirkan.

Jujurlah dengan diri sendiri mengenai pelan berspesifikasi rendah. VPS 1 GB atau 2 GB akan memulakan stack tersebut tetapi akan terhenti semasa import pertama atau laporan panjang pertama, kerana sembilan kontena yang berjalan serentak ditambah dengan buffer pool MariaDB serta pekerja Python yang membina laporan tidak akan muat dalam memori tersebut. Kegagalan ini tidak berlaku secara teratur. Pembunuh memori (OOM killer) kernel akan menghentikan kontena, dan docker inspect padanya kemudian akan menunjukkan "OOMKilled": true dengan kod keluar 137. Pekerja yang dihentikan di tengah tugasan akan menyebabkan dokumen yang dihantar mempunyai kerja latar belakang yang separuh siap.

Bagi syarikat yang menggunakan ERPNext setiap hari, 8 GB RAM dan 4 vCPU dengan 100 GB SSD adalah tahap minimum yang realistik. RAM akan habis terlebih dahulu. Cakera berkembang lebih pantas daripada jangkaan, kerana setiap lampiran dan setiap sandaran tempatan disimpan pada volum yang sama dengan pangkalan data.

Sebelas kontena dan fungsi setiap satunya

Jalankan docker compose ps selepas stack tersebut siap dan sembilan kontena sedang berjalan. Dua lagi, configurator dan create-site, menjalankan tugasnya sekali sahaja kemudian berhenti; inilah sebab mengapa jumlah keseluruhannya ialah sebelas.

  • backend menjalankan aplikasi Frappe di bawah gunicorn. Di sinilah bench berada.
  • frontend ialah nginx. Ia menyediakan aset statik dan menghantar segala permintaan lain ke backend.
  • queue-short dan queue-long ialah worker RQ (Redis Queue). Ia menjalankan tugasan latar belakang seperti menghantar e-mel, import data dan menjana laporan.
  • scheduler mencetuskan tugasan berasaskan masa, termasuk laporan berjadual dan dokumen auto-ulang.
  • websocket ialah proses socket.io yang menyokong kemas kini langsung dalam pelayar.
  • db ialah MariaDB.
  • redis-cache dan redis-queue ialah dua instans Redis yang berasingan, satu untuk cache dan satu lagi untuk baris gilir tugasan.

Pembahagian ini penting untuk difahami kerana ia memberitahu anda log mana yang perlu dibaca. E-mel yang tersekat adalah masalah worker baris gilir, jadi docker compose logs -f queue-short ialah arahan yang tepat. Halaman yang dimuatkan tetapi tidak mengemas kini lencana pemberitahuan adalah masalah websocket. Membaca log backend untuk kedua-dua masalah ini hanya akan membuang masa anda.

Pasang menggunakan fail compose pengeluaran, bukan demo

Repositori ini membekalkan pwd.yml, dan README menyatakan dengan jelas: "Persediaan ini bertujuan untuk penilaian jangka pendek sahaja. Anda tidak akan dapat memasang aplikasi tersuai pada persediaan ini." Gunakannya untuk melihat ERPNext selama satu petang. Jangan jalankan syarikat menggunakannya.

sudo apt update && sudo apt install -y git
curl -fsSL https://get.docker.com | bash
git clone https://github.com/frappe/frappe_docker
cd frappe_docker
mkdir -p ~/gitops
cp example.env ~/gitops/erpnext.env

Buka ~/gitops/erpnext.env dan tukar empat nilai. ERPNEXT_VERSION menetapkan tag imej. DB_PASSWORD dibekalkan sebagai 123 dalam fail contoh. SITES_RULE ialah peraturan penghalaan Traefik, dan LETSENCRYPT_EMAIL menerima amaran sijil.

ERPNEXT_VERSION=v16.32.1
DB_PASSWORD=<a long random password>
SITES_RULE=Host(`erp.example.com`)
LETSENCRYPT_EMAIL=ops@example.com

Sekarang, render satu fail compose, kemudian mulakannya.

docker compose --project-name erpnext \
  --env-file ~/gitops/erpnext.env \
  -f compose.yaml \
  -f overrides/compose.mariadb.yaml \
  -f overrides/compose.redis.yaml \
  -f overrides/compose.https.yaml \
  config > ~/gitops/erpnext.yaml

docker compose --project-name erpnext -f ~/gitops/erpnext.yaml up -d

config tidak memulakan apa-apa. Ia menggabungkan fail asas dengan override dan mencetak hasilnya dengan setiap pemboleh ubah yang telah digantikan. Anda kemudian menjalankan fail yang telah dirender itu. Langkah tambahan ini berbaloi: stack yang sedang berjalan adalah satu fail yang boleh anda baca dan commit, jadi ia tidak boleh berubah secara tiba-tiba apabila seseorang menyunting fail env atau apabila anda menarik (pull) repositori. bagaimana beberapa fail Docker Compose bergabung menjelaskan peraturan override dengan terperinci.

Tunggu db bermula dan configurator tamat, yang mengambil masa beberapa saat, kemudian cipta tapak tersebut.

docker compose --project-name erpnext exec backend \
  bench new-site --mariadb-user-host-login-scope=% \
  --db-root-password '<your DB_PASSWORD>' \
  --install-app erpnext \
  --admin-password '<a strong admin password>' \
  erp.example.com

Semaknya:

docker compose --project-name erpnext ps
docker compose --project-name erpnext exec backend bench --site erp.example.com list-apps

list-apps sepatutnya mencetak frappe dan erpnext berserta versinya. ps yang sihat menunjukkan sembilan servis dalam keadaan running dan tiada dalam restarting.

Dua perkara sering menjadi masalah di sini. --mariadb-user-host-login-scope=% bukanlah pilihan di bawah Docker. Kontena aplikasi mencapai MariaDB merentasi rangkaian Docker, jadi ia tiba sebagai hos jauh, dan pengguna pangkalan data yang diletakkan dalam skop localhost tidak boleh log masuk dari sana. Penciptaan tapak kemudian gagal dengan ralat akses MariaDB dinafikan yang menamakan pengguna root. Skop % memberikan akses kepada pengguna tapak baharu dari mana-mana hos dalam rangkaian peribadi tersebut.

Perkara kedua ialah nama tapak. Bahagian hadapan memilih tapak mana yang hendak dihidangkan daripada header HTTP Host secara lalai, jadi tapak yang dicipta sebagai erpnext tidak boleh dicapai pada erp.example.com walaupun kedua-duanya wujud. Namakan tapak mengikut domain, seperti di atas, atau tetapkan FRAPPE_SITE_NAME_HEADER dalam fail env kepada nama tapak dan render semula fail compose tersebut.

HTTPS, dan syarat yang perlu dipenuhi sebelum ia berfungsi

compose.https.yaml override menjalankan Traefik pada port 443, mengubah hala port 80 kepadanya, dan meminta sijil daripada Let's Encrypt. TLS (transport layer security) ialah mekanisme yang menghalang invois dan kuki sesi daripada dihantar melalui rangkaian dalam bentuk teks biasa.

Dua perkara mesti dipenuhi atau tiada sijil akan dikeluarkan. Rekod DNS A bagi erp.example.com mestilah sudah menghala ke VPS. Port 80 dan 443 mestilah boleh dicapai dari internet, kerana Let's Encrypt mengesahkan anda mengawal nama domain tersebut melalui cabaran HTTP-01 pada port 80. Periksa firewall rangkaian pembekal anda serta firewall pada pelayan itu sendiri. Kedua-duanya adalah kawalan yang berasingan, dan firewall pada panel kawalan sering dilupakan oleh pengguna.

Sijil disimpan dalam volum cert-data di /letsencrypt/acme.json. Jika pelayar memaparkan sijil lalai dan bukannya sijil anda, cari nama servis proksi dalam docker compose --project-name erpnext ps dan baca lognya untuk melihat ralat ACME (automatic certificate management environment). Menjalankan aplikasi web lain pada pelayan yang sama? satu instans Traefik di hadapan beberapa aplikasi Docker Compose menunjukkan cara untuk berkongsi proksi tersebut daripada berebut port 443. Aplikasi kedua pada pelayan seperti ini biasanya ditujukan kepada pelanggan, dan meja bantuan Chatwoot yang dihoskan sendiri diletakkan di belakang proksi yang sama, supaya kakitangan yang menguruskan invois juga boleh menjawab e-mel dan sembang pelanggan di satu tempat.

E-mel keluar, atau invois tidak pernah meninggalkan pelayan

Ini adalah langkah yang sering dilangkau oleh panduan ERPNext, dan ia merupakan penentu sama ada sistem tersebut berguna atau tidak. Tanpa e-mel keluar yang berfungsi, tiada invois sampai kepada pelanggan, tiada tetapan semula kata laluan diterima, dan tiada laporan berjadual dihantar. Stak ini tidak mengandungi pelayan e-mel.

Jangan cuba menghantar e-mel terus dari VPS pada port 25. Kebanyakan penyedia menyekat port 25 keluar pada akaun baharu, dan apa sahaja yang berjaya keluar akan ditolak atau diklasifikasikan sebagai spam, kerana alamat VPS baharu tidak mempunyai reputasi penghantaran. Gunakan relay yang disahkan pada port 587.

Laluan yang disokong adalah melalui skrin Email Account dalam antara muka ERPNext, yang menyimpan kata laluan dalam bentuk disulitkan. Anda juga boleh menulis kunci tersebut ke dalam konfigurasi tapak:

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-config mail_server smtp.example.com

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-config mail_port 587 --parse

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-config use_tls 1 --parse

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-config mail_login 'erp@example.com'

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-config auto_email_id 'erp@example.com'

--parse menyimpan 587 sebagai nombor dan bukannya rentetan "587". Baca semula fail tersebut dan pastikan kedua-dua nilai itu tidak mempunyai tanda petik di sekelilingnya:

docker compose --project-name erpnext exec backend \
  cat sites/erp.example.com/site_config.json

Tetapkan mail_password melalui skrin Email Account dan bukannya pada baris perintah, supaya ia disimpan dalam bentuk disulitkan dan tidak akan masuk ke dalam sejarah shell anda.

Kemudian, hantar mesej sebenar. Cipta Sales Invoice, e-melkan kepada alamat yang anda kawal, dan pantau baris gilir semasa anda melakukannya:

docker compose --project-name erpnext logs -f queue-short

E-mel keluar adalah tugasan latar belakang, jadi mesej yang tidak pernah sampai biasanya akan muncul sebagai tugasan yang gagal dalam log tersebut dan bukannya sebagai ralat dalam pelayar. Terbitkan rekod SPF (sender policy framework) dan DKIM (domainkeys identified mail) untuk domain penghantar, kemudian tambah polisi DMARC. Tanpanya, invois yang betul dari segi teknikal masih akan masuk ke dalam folder spam pelanggan. Jika anda lebih suka mengawal keseluruhan laluan, pelayan e-mel Mailcow yang dihoskan sendiri memberikan anda relay yang anda kawal, pada pelayan yang berasingan daripada ERP.

Sandaran yang benar-benar boleh dipulihkan

Satu dump pangkalan data sahaja bukanlah sandaran untuk ERPNext. Lampiran dan fail peribadi disimpan dalam direktori sites, bukan dalam MariaDB. Jika anda hanya memulihkan pangkalan data, setiap pesanan belian yang dimuat naik akan menjadi pautan yang rosak.

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com backup --with-files

Perintah tersebut menulis empat fail ke dalam sites/erp.example.com/private/backups di dalam volum sites:

  • satu dump -database.sql.gz
  • satu arkib -files.tar bagi fail awam
  • satu arkib -private-files.tar bagi fail peribadi
  • satu salinan konfigurasi tapak -site_config_backup.json

Fail keempat adalah fail yang sering dibuang oleh pengguna, dan ia merupakan fail yang paling kritikal. Ia menyimpan encryption_key, iaitu kunci yang digunakan oleh Frappe untuk menyulitkan kata laluan yang disimpan: kelayakan akaun e-mel, kunci gerbang pembayaran, dan setiap rahsia integrasi. Jika anda memulihkan pangkalan data tanpa kunci yang sepadan, tapak akan dimuatkan seperti biasa, tetapi penghantaran e-mel akan gagal dengan ralat:

frappe.exceptions.ValidationError: Encryption key is invalid! Please check site_config.json

Simpan kesemua empat fail tersebut bersama-sama, sentiasa.

Kemudian, pindahkan fail tersebut keluar dari pelayan. Sandaran yang berada di dalam volum tidak akan terselamat jika pelayan rosak, dan bench juga akan membuangnya: secara lalai, ia memadamkan sandaran yang lebih lama daripada 24 jam dari direktori tersebut.

docker compose --project-name erpnext cp \
  backend:/home/frappe/frappe-bench/sites/erp.example.com/private/backups \
  ~/erpnext-backups

Jalankan perintah itu melalui cron, kemudian pindahkan direktori tersebut ke lokasi yang tidak anda tadbir. sandaran restic yang disulitkan ke storan luar tapak adalah alat yang tepat, kerana ia menyulitkan data sebelum dimuat naik dan restic check membuktikan bahawa repositori tersebut masih boleh dibaca. Sandaran ERP adalah salinan keseluruhan lejar anda, jadi ia perlu disimpan dalam keadaan tersulit pada perkakasan yang berbeza daripada pelayan asal.

Uji pemulihan sebelum anda memerlukannya

Sandaran yang tidak diuji hanyalah satu andaian. Uji sandaran tersebut ke tapak kedua pada pelayan yang sama, jangan sekali-kali melakukannya pada tapak yang sedang aktif.

docker compose --project-name erpnext exec backend \
  bench new-site --mariadb-user-host-login-scope=% \
  --db-root-password '<your DB_PASSWORD>' \
  --admin-password '<a strong admin password>' \
  restore-test.example.com

docker compose --project-name erpnext exec backend \
  bench --site restore-test.example.com --force restore \
  sites/erp.example.com/private/backups/<stamp>-erp.example.com-database.sql.gz \
  --with-public-files sites/erp.example.com/private/backups/<stamp>-erp.example.com-files.tar \
  --with-private-files sites/erp.example.com/private/backups/<stamp>-erp.example.com-private-files.tar \
  --db-root-password '<your DB_PASSWORD>'

Salin kunci penyulitan daripada konfigurasi yang disandarkan ke dalam tapak yang dipulihkan, jika tidak, integrasinya akan terus rosak:

docker compose --project-name erpnext exec backend \
  bench --site restore-test.example.com set-config encryption_key '<value from site_config_backup.json>'

Sekarang, semak pemulihan tersebut seperti cara seorang akauntan bekerja. Buka laporan Akaun Belum Terima dan bandingkan baki penutup dengan tapak yang aktif. Buka invois pembelian terkini dan muat turun lampirannya. Tapak yang sekadar memaparkan halaman log masuk tidak membuktikan apa-apa.

Alih keluar tapak ujian apabila anda selesai:

docker compose --project-name erpnext exec backend \
  bench drop-site restore-test.example.com

Mengapa penetapan versi (version pinning) lebih penting untuk ERPNext

Pada laman statik, tag imej yang tidak ditetapkan (unpinned) hanya bermaksud but semula yang tidak dijangka. Pada ERPNext, ia bermaksud migrasi skema. bench migrate menulis semula jadual pangkalan data dan boleh menulis semula data dokumen, serta tiada fungsi buat asal (undo). Proses rollback memerlukan pemulihan daripada sandaran, bukan sekadar docker compose down.

Oleh itu, tetapkan tag tersebut. ERPNEXT_VERSION=v16.32.1 ialah keluaran yang ditetapkan dalam pwd.yml repositori itu sendiri pada Ogos 2026. Jangan gunakan nombor tersebut tanpa menyemaknya terlebih dahulu. Keluaran semasa disenaraikan pada halaman keluaran frappe/erpnext, dan tag imej yang tersedia ada di Docker Hub. Baca nota untuk versi yang ingin anda gunakan sebelum anda beralih.

Proses naik taraf itu sendiri bermula dengan sandaran dan mod penyelenggaraan.

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com backup --with-files

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-maintenance-mode on

Sunting ERPNEXT_VERSION dalam ~/gitops/erpnext.env, kemudian lakukan render, pull, dan migrate.

docker compose --project-name erpnext \
  --env-file ~/gitops/erpnext.env \
  -f compose.yaml \
  -f overrides/compose.mariadb.yaml \
  -f overrides/compose.redis.yaml \
  -f overrides/compose.https.yaml \
  config > ~/gitops/erpnext.yaml

docker compose --project-name erpnext -f ~/gitops/erpnext.yaml pull
docker compose --project-name erpnext -f ~/gitops/erpnext.yaml up -d

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com migrate

docker compose --project-name erpnext exec backend \
  bench --site erp.example.com set-maintenance-mode off

Mod penyelenggaraan adalah penting kerana migrate mengubah skema semasa ia berjalan. Pengguna yang menghantar dokumen terhadap jadual yang separuh dimigrasi akan menyebabkan anda terpaksa membaiki rekod secara manual.

Lakukan peralihan satu versi utama pada satu masa, dengan sandaran di antara setiap langkah. Kod migrasi dalam sesuatu keluaran ditulis untuk menaik taraf daripada keluaran sebelumnya, jadi melangkau versi utama akan menjalankan migrasi dalam kombinasi yang tidak diuji oleh sesiapa.

Repositori ini juga membekalkan overrides/compose.migrator.yaml, yang menambah kontena untuk menjalankan bench --site all migrate pada setiap permulaan. Ia memang memudahkan. Namun, ini juga bermaksud docker compose up dengan tag yang telah diubah akan memigrasi pangkalan data pengeluaran anda tanpa pengawasan. Bagi sistem perniagaan, jalankan migrasi sebagai keputusan yang anda buat pada pagi tersebut.

Mengukuhkan pelayan yang menyimpan rekod pelanggan

Tukar kata laluan Pentadbir pada log masuk pertama. Fail compose penilaian menghantar admin sebagai kata laluan tersebut, dan tabiat ini sering terbawa-bawa ke persekitaran pengeluaran.

Tukar DB_PASSWORD daripada 123 dalam example.env. Nilai tersebut akan berakhir dalam ~/gitops/erpnext.yaml yang dijana dalam bentuk teks biasa, jadi chmod 600 fail tersebut dan pastikan ia tidak dimasukkan ke dalam mana-mana repositori git. Untuk tahap keselamatan yang lebih tinggi, overrides/compose.mariadb-secrets.yaml membaca kata laluan daripada fail rahsia Docker dan bukannya pemboleh ubah persekitaran. mengendalikan fail env dan rahsia dalam Docker Compose membincangkan pertukaran antara kedua-dua kaedah ini.

Terbitkan hanya apa yang perlu. Dengan penggantian HTTPS, port 80 dan 443 adalah satu-satunya port yang didedahkan. Jangan tambah pemetaan ports kepada servis db untuk memudahkan penyambungan klien pangkalan data: tindakan ini meletakkan MariaDB di internet awam. Gunakan docker compose --project-name erpnext exec backend bench mariadb sebaliknya. Pada hos, benarkan port 22, 80 dan 443, sekat yang lain, dan periksa juga tembok api rangkaian berasingan daripada penyedia anda.

Aktifkan pengesahan dua faktor dalam Tetapan Sistem untuk setiap akaun yang memegang peranan Pengurus Sistem. Peranan tersebut boleh membaca setiap dokumen dan mengeksport setiap jadual, jadi anggap ia sebagai akaun pentadbir dan bukannya sekadar kemudahan. Jika anda menjalankan beberapa aplikasi yang dihoskan sendiri, Authentik sebagai penyedia daftar masuk tunggal yang dihoskan sendiri adalah lebih baik daripada menambah satu lagi kata laluan bagi setiap aplikasi.

Lakukan patching pada hos dan but semula untuk kemas kini kernel. Sebelum anda bergantung pada tindanan (stack) untuk kembali berfungsi, periksa fail yang dijana untuk polisi restart pada setiap servis, kerana tindanan tanpa polisi tersebut akan kekal mati selepas but semula. memastikan tindanan Docker Compose bermula semula selepas but semula membincangkan bahagian systemd.

Apabila ERPNext tidak lagi sesuai pada satu VPS

Satu VPS boleh menampung syarikat kecil untuk tempoh yang lama. Berikut adalah tanda-tanda ia tidak lagi mencukupi:

  • Tugasan latar belakang bertimbun, menyebabkan e-mel dan import tiba lewat beberapa minit atau jam.
  • docker inspect melaporkan kontena dengan "OOMKilled": true atau kod keluar 137.
  • Laporan yang mengambil masa dua saat kini mengambil masa tiga puluh saat, dan MariaDB merupakan proses yang menggunakan CPU paling banyak.
  • Sandaran berjalan terlalu lama sehingga bertindih dengan jadual sandaran seterusnya.

Mulakan dengan memberikan MariaDB sumber yang tidak dikongsi, kerana pangkalan data dan pekerja Python bersaing untuk memori yang sama, dan buffer pool adalah bahagian yang paling memerlukan memori tambahan. Pelayan aplikasi yang lebih besar kurang membantu berbanding jangkaan ramai. menjalankan pangkalan data dalam Docker atau pada hos merangkumi keputusan tersebut, dan menetapkan had memori dalam Docker Compose menghalang satu kontena daripada melumpuhkan kontena lain semasa anda melakukan perubahan.

Selepas itu, tambah pekerja baris gilir (queue workers) dan bukannya kapasiti web. Kerja perlahan ERPNext adalah kerja latar belakang: penjanaan laporan dan import pukal. Lebih banyak kontena pekerja menelan kos yang lebih rendah berbanding kotak pelayan yang lebih besar, dan ia menyelesaikan simptom yang sebenarnya dikeluhkan oleh pengguna.

FAQ

Berapakah jumlah RAM yang diperlukan oleh ERPNext pada VPS?

Panduan yang diterbitkan bermula pada 4 GB dengan 2 vCPU, dan tahap tersebut hanya untuk tujuan penilaian. Bagi syarikat yang menggunakannya setiap hari, rancangkan 8 GB dan 4 vCPU dengan 100 GB storan SSD. Di bawah spesifikasi tersebut, kernel out of memory killer akan menghentikan kontena apabila beban meningkat, yang mana docker inspect akan melaporkan sebagai "OOMKilled": true dengan kod keluar 137. Ini hanyalah titik permulaan dan bukannya ukuran muktamad, jadi pantau penggunaan memori anda sepanjang bulan pertama.

Bolehkah saya menjalankan pwd.yml dalam persekitaran pengeluaran?

Tidak. README projek tersebut menyatakan bahawa ia hanya bertujuan untuk penilaian jangka pendek sahaja, dan ambil perhatian bahawa anda tidak boleh memasang aplikasi tersuai ke dalamnya. Gunakan compose.yaml bersama override MariaDB, Redis dan HTTPS, render fail tersebut menjadi satu fail tunggal dengan docker compose config, kemudian jalankan fail tersebut.

Mengapakah laman ERPNext saya tidak boleh dicapai sejurus selepas saya menciptanya?

Frontend memilih laman yang hendak dihidangkan berdasarkan header HTTP Host secara lalai, jadi nama laman mestilah sepadan dengan domain dalam pelayar. Laman yang dicipta sebagai erpnext tidak akan dihidangkan pada erp.example.com. Sama ada cipta laman menggunakan domain sebagai namanya, atau tetapkan FRAPPE_SITE_NAME_HEADER dalam fail env kepada nama laman tersebut, render semula fail compose, dan mulakan semula stack.

Apakah yang perlu ada dalam sandaran (backup) ERPNext?

Empat fail yang disimpan bersama: dump -database.sql.gz, arkib -files.tar dan -private-files.tar, serta salinan konfigurasi -site_config_backup.json. Menjalankan bench --site erp.example.com backup --with-files akan menghasilkan kesemua empat fail tersebut. Salinan konfigurasi menyimpan encryption_key, jadi pemulihan tanpa fail tersebut akan menyebabkan kata laluan integrasi yang disimpan tidak dapat dinyahsulit, yang akan muncul sebagai Encryption key is invalid! Please check site_config.json.

Bagaimanakah cara untuk menaik taraf ERPNext tanpa merosakkan data saya?

Lakukan sandaran dengan --with-files, aktifkan mod penyelenggaraan, tukar ERPNEXT_VERSION dalam fail env anda, render semula fail compose, lakukan pull, naikkan stack, kemudian jalankan bench --site erp.example.com migrate dan matikan mod penyelenggaraan. Lakukan naik taraf satu versi utama pada satu masa dan baca nota keluaran terlebih dahulu, kerana migrate menulis semula skema dan data dokumen tanpa pilihan untuk buat asal (undo). Melakukan rollback bermaksud memulihkan sandaran yang anda ambil pada permulaan tadi.