My personal choice of self-hosted apps.
This project is accompanied by toots on Mastodon: mastodon.social/@holtwick.
- BirdsiteLive is a Twitter to Mastodon proxy. You can follow Twitter accounts as if they were Mastodon ones. -> github
- Gitea is a bit like Github, but for smaller groups. It helps you to manage code and tickets. But also provides a super easy registry for your private packages. it is tiny and fast. -> gitea.io
- Nextcloud is your "Cloud Service". I use it for file sharing mainly. But it can do most things Google and Apple offer as well, like mail, contacts, calendar, office tools. -> nextcloud.com
- LanguageTool LanguageTool is your private instance of the best grammar and spell checker available. When you use this private instance, you have less to worry about non-public texts going through a public checking service. -> languagetool.org
New entries from time to time...
I run my stuff on a cloud server instance at Hetzner. There I choose the "Docker" presets. Any other provider will probably work as well.
Then the first thing to do is to set up a Nginx Proxy Manager. This is as easy as creating a folder named proxy
and put this docker-compose.yml
file in it. Then start with docker compose up -d
.
The proxy does two things:
- It manages your projects
- It manages your SSL certificates via Let's Encrypt
Now we can get started setting up more services. The best thing to do upfront is to configure a wildcard in your DNS, like *.selfhosted.example.com
pointing to your cloud server instance.
To install a project:
- Copy the
docker-compose.yml
to a subfolder on your cloud server. - Start it from there with
docker compose up -d
. - In the web interface of the Nginx Proxy create a "Proxy Host" with:
- Domain Names: Something like
my.selfhosted.example.com
- Scheme:
http
- Forward Hostname / IP: The
container_name
you chose in thedocker-compose.yml
. - Forward Port: The port the service usually uses.
- Domain Names: Something like
- You can then also request the SSL certificate from there.
Please note, that each docker-compose.yml
includes these lines:
networks:
default:
external:
name: proxy
This is required to allow connection to the Nginx Proxy.
Another convention is to not use Docker volumes but redirect to a local data
folder. This helps with backups and porting to other instances.