Self-Hosting My Projects: A Practical Deployment Setup for personal projects
Digital OceanCoolifyDokploySelf HostingDeploymentVercelNetlifyNorthflankRender
Overview
Deploying personal projects can be surprisingly frustrating — especially when they’re not meant for production or public release, but you still want them online. Sometimes it's just about seeing something live, validating the work, or testing ideas in a real environment.
For frontend apps, platforms like Vercel or Netlify offer reliable free-tier hosting. Backend services are trickier, but options like Render and Northflank work reasonably well.
After months of switching between different free services, I decided to set up a deployment workflow that’s stable, manageable, and entirely under my control. Here’s what that looks like.
The Workflow
Server: The cheapest DigitalOcean droplet. It’s not particularly powerful but it’s good enough to for small applications with zero traffic.
Self-hosted platform: I use Dokploy for managing deployments. I initially tried Coolify, which worked well for a while, but Dokploy felt simpler and more consistent in the long run, although has similar flaws. From here, I SSH into the server and install the necessary components to make it work.
Image builds: I build my images via GitHub Actions to offload the resource-heavy nature of the build step. There’s different options to build on the server itself but that’s not practical on such cheap and low-resource servers – builds tend to freeze or overload the server.
Deployment: Once the image is build in ghcr, it is deployed to the server through the GitHub workflow. While there is an existing setup for CI/CD in Dokploy with webhooks, because I have hosted it locally, it’s not feasible for me as I don’t want to expose my ports or use tunnels at the moment. Hence, there’s no continuous deployment pipeline — just manual deployment triggered as needed.
Certificates: Dokploy handles HTTPS certificates automatically with Lets Encrypt if you have a custom domain, which simplifies the process significantly. If you do not have the domain, then they will generate non-secure urls which will also do the job.
Domain management: I use DigitalOcean’s DNS to create and manage subdomains, assigning them to projects as needed. I previously managed it from Namecheap but migrated them here to centralize the process.Why This Works
This setup strikes a balance between control and simplicity. It’s not fully automated, but it’s predictable. I know how everything fits together, and it doesn’t rely on third-party free tiers that may change or disappear. For personal or experimental projects, for me this approach has proven reliable and low maintenance so far.