Skip to content

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 build

The 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=3000

4. Start the backend

bash
cd backend
NODE_ENV=production node dist/index.js

Or 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 reboot

5. 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.com

Then rebuild:

bash
cd webapp && npm run build

Nginx 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

Released under the MIT License.