Deploy NodeJS + MongoDB + Nginx (CTM stack)

First published: Wednesday, May 28, 2025 | Last updated: Wednesday, May 28, 2025

Deploy NodeJS + MongoDB + Nginx (CTM stack) using the SloopStash Kubernetes starter-kit.


Previous: Deploy Python + Redis + Nginx (CRM stack)

Next: Deploy Hadoop cluster (Data Lake stack)

Modify hosts

Windows

# Modify hosts configuration.
$ notepad C:\Windows\System32\drivers\etc\hosts
<PRIVATE_IP>  app.ctm.sloopstash.stg app-static.ctm.sloopstash.stg
<PRIVATE_IP>  app.ctm.sloopstash.qaa app-static.ctm.sloopstash.qaa
<PRIVATE_IP>  app.ctm.sloopstash.qab app-static.ctm.sloopstash.qab

Mac and Linux

# Modify hosts configuration.
$ sudo nano /etc/hosts
<PRIVATE_IP>  app.ctm.sloopstash.stg app-static.ctm.sloopstash.stg
<PRIVATE_IP>  app.ctm.sloopstash.qaa app-static.ctm.sloopstash.qaa
<PRIVATE_IP>  app.ctm.sloopstash.qab app-static.ctm.sloopstash.qab

Deploy and manage CTM stack environments

Kubernetes

# Switch to SloopStash Kubernetes starter-kit directory.
$ cd /opt/kickstart-kubernetes

# Create Kubernetes namespace.
$ kubectl create namespace sloopstash-${ENVIRONMENT}-ctm

# Create Kubernetes storage-class.
$ envsubst < storage-class/ctm/mongo-db.yml | kubectl apply -f -
$ envsubst < storage-class/ctm/app.yml | kubectl apply -f -
$ envsubst < storage-class/ctm/nginx.yml | kubectl apply -f -

# Create Kubernetes persistent-volume.
$ envsubst < persistent-volume/ctm/mongo-db.yml | kubectl apply -f -
$ envsubst < persistent-volume/ctm/app.yml | kubectl apply -f -
$ envsubst < persistent-volume/ctm/nginx.yml | kubectl apply -f -

# Create Kubernetes persistent-volume-claim.
$ envsubst < persistent-volume-claim/ctm/app.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < persistent-volume-claim/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm

# Create Kubernetes config-map.
$ kubectl create configmap mongo-db \
--from-file=workload/mongo-db/${CTM_MONGO_DB_VERSION}/conf/ \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
-n sloopstash-${ENVIRONMENT}-ctm
$ kubectl create configmap app \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
--from-file=app-supervisor=stack/ctm/app/conf/supervisor.ini \
-n sloopstash-${ENVIRONMENT}-ctm
$ kubectl create configmap nginx \
--from-file=workload/nginx/${CTM_NGINX_VERSION}/conf/ \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
--from-file=nginx-app=stack/ctm/nginx/conf/app.conf \
-n sloopstash-${ENVIRONMENT}-ctm

# Create Kubernetes service.
$ kubectl apply -f service/ctm/mongo-db.yml -n sloopstash-${ENVIRONMENT}-ctm
$ kubectl apply -f service/ctm/app.yml -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < service/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm

# Create Kubernetes stateful-set.
$ envsubst < stateful-set/ctm/mongo-db.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm

# Create Kubernetes deployment.
$ envsubst < deployment/ctm/app.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < deployment/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm

# List Kubernetes resources.
$ kubectl get sc,pv,ns -o wide

# List resources under Kubernetes namespace.
$ kubectl get pvc,cm,sts,deploy,rs,ds,po,svc,ep,ing -o wide -n sloopstash-${ENVIRONMENT}-ctm

# Delete Kubernetes namespace.
$ kubectl delete namespace sloopstash-${ENVIRONMENT}-ctm

# Delete Kubernetes persistent-volume.
$ envsubst < persistent-volume/ctm/mongo-db.yml | kubectl delete -f -
$ envsubst < persistent-volume/ctm/app.yml | kubectl delete -f -
$ envsubst < persistent-volume/ctm/nginx.yml | kubectl delete -f -

# Delete Kubernetes storage-class.
$ envsubst < storage-class/ctm/mongo-db.yml | kubectl delete -f -
$ envsubst < storage-class/ctm/app.yml | kubectl delete -f -
$ envsubst < storage-class/ctm/nginx.yml | kubectl delete -f -

Previous: Deploy Python + Redis + Nginx (CRM stack)

Next: Deploy Hadoop cluster (Data Lake stack)