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.
![](https://homegrowntechie.com/wp-content/uploads/2021/06/checklist-384-454891.png)
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
![](https://homegrowntechie.com/wp-content/uploads/2021/06/DrawIO.png)
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!
![](https://homegrowntechie.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-10-at-10.34.50-PM.png)