Overview
Any readers of this blog are probably aware that I often self-host open-source services. Self-Hosting can be daunting at first, but with a little groundwork, it can be quite easy, safe, and rewarding. Recently I deployed my own instance of the handy draw.io – from start to finish it took me less than 5 minutes. The ease of deploying the service reminded me how far I have come in my journey of self-hosting. Only a couple years ago I would have been completely lost about where to begin, but now I have it boiled down to two primary steps: Deploy docker container, expose docker container using NGINXProxymanager.

Prerequisites
There are some prerequisites that should be in place before self hosting. Some of them listed below are not required but make it much more enjoyable and rewarding. I won’t get into the weeds about why these are important, since my goal in the post is to show how easy self-hosting CAN be – not how hard it actually IS!
- Your own Domain
- A good internet connection (specifically upload speeds)
- A router that supports advanced options (like OPNSense)
- A properly configured NGINX reverse proxy (like NGINXProxyManager)
- A hypervisor (like proxmox) and/or a docker host

Draw.io in 5 Minutes
The below steps are not a tutorial on how to setup Draw.io, but rather my workflow now that I have all the prerequisites in place to spin up a new self-hosted service in minutes. My steps were:
- SSH into my Docker Host and modify my
docker_compose.yaml
file that contains the blueprint of my docker services. I simply add the following:
#Draw.io
drawio:
image: fjudith/draw.io
container_name: drawio
restart: unless-stopped
ports:
- 1005:8080
- On my Docker host I run the following to bring up my Draw.io docker container.
sudo docker-compose up -d
- Next I open up NGINXProxyManager and expose the Draw.io service to the Internet. NGINXProxyManager handles the task of using a Let’s Encrypt certificate to expose the internal service over HTTPS:
NGINXProxyManager NGINXProxyManager Configuration
- That’s it. Now I can navigate to
draw.my_domain.com
and enjoy Draw.io running on my own personal server!
