Firtly, my servers are nginx-based and certified by certbot - let's encrypt. Hence, I'm assuming you're acquainted with this setup. Now, unto the epicenter of our problem.
A major problem using the prescribed (best-practise) procedure for deploying several NodeJS server instances on digitalOcean (referred to as DO hereafter), is that; environment variables become difficult to locate; once the server is started. This becomes a bigger trouble when there are more than one servers, to be used on a single droplet. I circumvented through this challenge, by doing the following;
a) Create various folders, on DO named w.r.t how you'd like PM2 to identify these servers; i.e. if you've got 3 servers to deploy on a single droplet, you'd say;
e.g plutonium_server, neptunium_server, promethium_server
b) clone your repo into each folder: git clone https://github.com...
c) cd into the repo; sudo nano package.json
d) in your start script, enter: "pm2 start <your start file>"
e.g: "pm2 start ./backend/dist/index.js"
ensure your package.json file has got an engines object; (recommended for deployment)
e.g engines: {
"node": "18.1.0",
"yarn": "1.22.18"
}
e) save the file by saying;
ctrl + x then shift + y then enter
f) install your project dependencies; yarn install
g) copy your environment variables; create the environment variable file as you have it locally
e.g: cd backend/src/config && sudo nano .env
h) copy and paste the contents of the local env-file into the newly server .env file you can call the env file whatever
name you perceive; but as programmed locally. Just ensure the extension is appended. Repeat step e.
i) spin the server: yarn start
j) rename the server: pm2 restart 0 --name plutonium_server
k) you can now run pm2 logs or pm2 list for monitoring
l) subsequently, all you need do next time is: pm2 start plutonium_server, pm2 stop plutonium_server etc
m) replicate this procedure; to deploy other instances.
Thanks for reading.
Top comments (0)