Skip to content

Manual Deployment

Panduan deploy manual menggunakan Docker Compose untuk infrastruktur custom.

  • Server dengan Docker dan Docker Compose installed
  • SSH access ke server
  • Domain dengan DNS pointed ke server IP
Terminal window
ssh user@your-server-ip
Terminal window
cd /opt
git clone https://github.com/Syskita/merq.git
cd merq/merq-backend
Terminal window
cp env.example .env
nano .env

Isi semua required variables (lihat Environment Variables Reference).

Terminal window
docker network create merq-network
Terminal window
docker run -d \
--name merq-postgres \
--network merq-network \
-e POSTGRES_USER=merq \
-e POSTGRES_PASSWORD=your_password \
-e POSTGRES_DB=merq_production \
-v merq-pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:15-alpine
Terminal window
docker run -d \
--name merq-redis \
--network merq-network \
-v merq-redisdata:/data \
-p 6379:6379 \
redis:7-alpine
Terminal window
docker run -d \
--name merq-typesense \
--network merq-network \
-e TYPESENSE_API_KEY=your_api_key \
-v merq-typesensedata:/data \
-p 8108:8108 \
typesense/typesense:27 \
--data-dir /data \
--api-key=your_api_key
Terminal window
cd /opt/merq/merq-backend
docker build -t merq-backend:latest .
Terminal window
docker run -d \
--name merq-backend \
--network merq-network \
-e RUN_MIGRATION=true \
-e RUN_SEEDER=true \
-p 8080:8080 \
--env-file .env \
merq-backend:latest

Monitor logs:

Terminal window
docker logs -f merq-backend
Terminal window
docker run -d \
--name merq-backend \
--network merq-network \
-p 8080:8080 \
--env-file .env \
merq-backend:latest

merq-web is a static site — it is NOT containerised. Vite bakes env vars into the bundle at build time, so there is no runtime container to pass them to.

Terminal window
cd /opt/merq/merq-web
# Create .env.local with your production values
cp .env.example .env.local
# Edit .env.local: set VITE_API_BASE_URL=https://api.yourdomain.com/api etc.
nano .env.local
# Run the deploy script (installs deps, builds, copies to /var/www/merq-web)
bash deploy.sh

The deploy.sh script performs:

  1. bun install — installs dependencies
  2. bun run build — outputs static files to dist/
  3. Copies dist/ contents to /var/www/merq-web
  4. Sets chmod -R 755 /var/www/merq-web so Nginx can serve the files

Configure Nginx to serve /var/www/merq-web and proxy /api to the backend container (see Step 9).

Terminal window
# Install Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Terminal window
sudo nano /etc/caddy/Caddyfile
api.yourdomain.com {
reverse_proxy localhost:8080
}
admin.yourdomain.com {
root * /var/www/merq-web
file_server
try_files {path} /index.html
}
Terminal window
sudo systemctl reload caddy
Terminal window
# Backend health check
curl http://localhost:8080/api/health
# Check all containers
docker ps
Terminal window
# 1. Pull latest code
cd /opt/merq
git pull origin main
# 2. Rebuild backend
cd merq-backend
docker build -t merq-backend:latest .
# 3. Stop & remove old container
docker stop merq-backend
docker rm merq-backend
# 4. Start new container
docker run -d \
--name merq-backend \
--network merq-network \
-p 8080:8080 \
--env-file .env \
merq-backend:latest
# 5. Redeploy web dashboard (static files)
cd /opt/merq/merq-web
bash deploy.sh
# 6. Verify
docker logs -f merq-backend

Create systemd service untuk auto-start:

Terminal window
sudo nano /etc/systemd/system/merq-backend.service
[Unit]
Description=Merq Backend Container
Requires=docker.service
After=docker.service
[Service]
Type=simple
ExecStart=/usr/bin/docker start -a merq-backend
ExecStop=/usr/bin/docker stop merq-backend
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

Enable:

Terminal window
sudo systemctl enable merq-backend
sudo systemctl start merq-backend

Setup cron job untuk daily backups:

Terminal window
crontab -e
# Daily backup at 2 AM
0 2 * * * pg_dump -h localhost -U merq merq_production > /backups/merq_$(date +\%Y\%m\%d).sql