Aplikasi Node.js
Node.js, dibangun dan dijalankan di samping PHP Anda.
Kami membangun API, situs yang dirender di server, layanan real-time, dan worker dengan Node, lalu menjalankannya di server yang sama dengan situs PHP Anda, di belakang satu Nginx.
Yang kami bangun dengan Node
Lima jenis pekerjaan, masing-masing ada di sini karena cocok untuk Node.
-
01
Express
API dan back end yang kecil dan lugas: sedikit route, middleware yang jelas, tidak ada yang tersembunyi.
API dan back end -
02
NestJS
Layanan yang lebih besar dengan modul, dependency injection, dan kontrak bertipe di TypeScript, untuk kode yang akan dikembangkan sebuah tim selama bertahun-tahun.
Layanan terstruktur -
03
Next.js · Nuxt
Rendering sisi server untuk React dan Vue: halaman tiba dalam keadaan siap untuk mesin pencari dan tampilan pertama yang cepat, lalu berperilaku seperti aplikasi.
Situs yang dirender di server -
04
Socket.IO · WebSockets
Chat, notifikasi, dasbor langsung, dan pelacakan yang diperbarui saat itu juga ketika sesuatu berubah, melalui satu koneksi terbuka.
Real-time -
05
Worker dan antrean
Pekerjaan latar belakang, tugas terjadwal, dan konsumen antrean di Redis yang menjauhkan pekerjaan lambat dari request.
Pekerjaan latar belakang
Mengapa Node pandai menunggu
Proses Node menjalankan JavaScript Anda di satu thread dan menyerahkan urusan menunggu - disk, jaringan, database - kepada sistem. Dengan cara itulah satu proses menjaga banyak koneksi tetap terbuka sekaligus.
- Kode Anda berjalan di call stack, satu fungsi dalam satu waktu.
- Pekerjaan lambat meninggalkan thread: file, DNS, dan hashing masuk ke pool libuv, sedangkan socket diawasi oleh sistem operasi.
- Saat pekerjaan selesai, callback-nya menunggu di antrean task.
- Sebelum task berikutnya, semua callback promise di antrean microtask dijalankan.
- Loop berputar melewati fase-fasenya dan mengambil task berikutnya.
PHP dan Node di satu server
Nginx menjawab setiap request dan mengirim setiap path ke proses yang menanganinya. Situs PHP dan layanan Node Anda berbagi mesin, database, dan sertifikat - bukan memori satu sama lain.
Mana untuk pekerjaan apa
Kami membangun dengan keduanya, jadi jawabannya datang dari pekerjaannya, bukan dari kebiasaan.
Pilih PHP jika
- Situs sebagian besar berisi halaman, formulir, dan panel admin: toko, situs konten, sistem bisnis.
- Anda menginginkan WordPress, WooCommerce, atau Laravel beserta semua yang sudah dibuat untuknya.
- Setiap request berdiri sendiri dan selesai dengan cepat.
- Orang yang akan merawatnya sudah menguasai PHP.
Pilih Node jika
- Koneksi tetap terbuka: chat, dasbor langsung, notifikasi, pelacakan.
- Halaman React atau Vue dirender di server dengan Next.js atau Nuxt.
- Layanan lebih banyak menunggu API lain dan mengalirkan data.
- Satu bahasa di browser dan di server membantu tim Anda.
Sering kali jawabannya: keduanya
PHP memegang situs, toko, dan panel admin; layanan Node kecil di sampingnya menangani bagian real-time. Keduanya membaca database yang sama dan berada di belakang Nginx yang sama.
Rilis tanpa jeda
Rilis baru dimulai di samping yang lama, membuktikan dirinya sehat, dan baru kemudian mengambil alih trafik. Worker lama menyelesaikan request yang sudah mereka tangani sebelum berhenti.
- Pengunjung dilayani
- Rilis saat ini
- Rilis baru
-
01
Ambil dan pasang
git pull && npm ciVersi persis dari lockfile, tidak ada versi lebih baru yang datang tiba-tiba.
-
02
Build
npm run buildTypeScript dan aset dikompilasi sebelum apa pun dimulai ulang.
-
03
Jalankan di samping yang lama
pm2 reload appRilis baru menyala di samping rilis yang masih melayani.
-
04
Tunggu sampai siap
wait_ready: trueRilis itu harus lolos health check sebelum menerima pengunjung.
-
05
Ambil alih trafik
cluster → new workersKoneksi baru diarahkan ke rilis baru.
-
06
Kosongkan yang lama
SIGINT → server.close()Worker lama menyelesaikan request yang sedang ditangani, lalu berhenti.
Server di sekitar kode
Segala yang menjaga layanan Node tetap berjalan tertulis di server, dalam file yang kami rawat dan dapat Anda baca.
-
/etc/nginx/sites-enabled/app.confReverse proxy
TLS, kompresi, file statis yang di-cache, dan upgrade WebSocket, di depan setiap proses.
-
/srv/app/ecosystem.config.jsPengelola proses
PM2 menjaga proses tetap hidup, memulai ulang jika crash, dan memakai setiap core dalam mode cluster. Bila satu proses sudah cukup, unit systemd melakukan pekerjaan yang sama.
-
/srv/app/.env (0600)Environment dan rahasia
Kunci dan kata sandi disimpan di luar kode dan di luar git, hanya dapat dibaca oleh pengguna milik aplikasi itu sendiri.
-
/srv/app/package-lock.jsonAudit dependensi
npm audit di setiap rilis; upgrade dibaca dan diuji sebelum sampai ke produksi.
-
/srv/app/.nvmrcUpgrade antarversi Node LTS
Aplikasi berjalan di rilis Long Term Support, dan kami memindahkannya ke rilis berikutnya sebelum dukungan rilis lama berakhir.
-
/var/log/app/Log dan pemantauan
Log terstruktur yang dirotasi, dengan peringatan saat proses dimulai ulang, memori naik, atau error bertambah.

Ceritakan apa yang harus dikerjakan aplikasi Node Anda
Layanan baru, situs Next.js, atau aplikasi yang sudah berjalan di suatu tempat dan membutuhkan rumah yang layak. Kami meninjaunya dan memberikan penawaran setelah percakapan singkat.