Manual Deployment
If you prefer not to use Docker, you can run pipel8ne directly on a host with Node.js and a MongoDB instance.
Prerequisites
- Node.js 18+
- MongoDB 6+ (running and accessible)
- A reverse proxy (Nginx, Caddy) for HTTPS in production
1. Clone and build the frontend
bash
git clone https://github.com/ogb4n/pipel8ne.git
cd pipel8ne
cd webapp
npm install
npm run build
cd ..The build output is in webapp/dist/.
2. Build the backend
bash
cd backend
npm install
npm run buildThe compiled output is in backend/dist/.
3. Configure environment variables
Create backend/.env:
env
DATABASE_URL=mongodb://user:password@localhost:27017/pipel8ne?authSource=admin
JWT_SECRET=<your secret>
SECRETS_ENCRYPTION_KEY=<your 32-byte key>
NODE_ENV=production
PORT=30004. Start the backend
bash
cd backend
NODE_ENV=production node dist/index.jsOr with a process manager like PM2:
bash
npm install -g pm2
pm2 start backend/dist/index.js \
--name pipel8ne \
--env-file backend/.env
pm2 save
pm2 startup # generate the init script to restart on reboot5. Serve the frontend
The backend automatically serves the compiled frontend from webapp/dist/ when it detects the folder. No separate web server is needed for the frontend if you run the backend on the same machine.
If you want to serve the frontend from a different host (CDN, separate Nginx vhost), copy webapp/dist/ to your static host and set the API base URL before building:
env
# webapp/.env.production
VITE_API_BASE_URL=https://api.your-domain.comThen rebuild:
bash
cd webapp && npm run buildNginx reverse proxy
nginx
server {
listen 80;
server_name your-domain.com;
# Redirect HTTP → HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}Get a free TLS certificate with Certbot:
bash
certbot --nginx -d your-domain.com