Deploying SongWalk: CI/CD with Drone, Docker, and Nginx Proxy Manager

Building the app is half the battle. Getting it deployed and staying deployed is the other half. For SongWalk, that meant setting up a proper CI/CD pipeline that builds, tests, and deploys on every push — without turning into a full-time DevOps job.

The Stack

SongWalk runs on an Oracle Cloud ARM64 instance behind Nginx Proxy Manager. The CI/CD pipeline uses Drone CI — a lightweight, Docker-native CI server that runs on the same Oracle host. Every push to the prod branch triggers an automated deploy.

The pipeline is 38 lines of YAML:

kind: pipeline
type: docker
name: deploy
platform:
  os: linux
  arch: arm64
trigger:
  branch: [prod]
steps:
  - name: deploy
    image: docker:dind
    volumes:
      - name: docker-socket
        path: /var/run/docker.sock
    commands:
      - docker compose -p songwalk down
      - docker compose -p songwalk up -d --build --force-recreate
      - docker network connect songwalk_default nginx-app-1

Why It Works

The Drone runner has direct access to the host Docker socket — no SSH, no remote agents, no complexity. The pipeline clones the repo, builds the Docker image, tears down the old container, and starts the new one. It also connects the app to the Nginx Proxy Manager network so the reverse proxy can route traffic.

Named Docker volumes keep data persistent across deploys. Environment variables and secrets (like SMTP credentials) are injected via Drone’s secret manager.

From Local Dev to Production

SongWalk supports three deployment modes: Python directly for development, Docker Compose for staging, and Drone CI for production. The dev mode auto-reloads on file changes. The production mode disables debug, sets restart policies, and configures the base URL for HTTPS.

The transition from a local experiment to a publicly deployed app took about an afternoon once the pipeline was set up. That is the power of Docker + Drone: infrastructure that stays out of your way.

What About NPM?

Nginx Proxy Manager handles SSL termination, domain routing, and Let’s Encrypt certificates. Each app gets a subdomain (songwalk.tekonline.com.au), and NPM proxies to the Docker container by name. No manual nginx config files. No certbot scripts. Just a clean web UI.

The whole stack — app, CI/CD, reverse proxy — runs on a single ARM64 instance. For a self-hosted music sharing app serving a handful of users, that is more than enough.

SongWalk is live. The code is on GitHub.


Read More in the SongWalk Series


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *