My personal choice of self-hosted apps.
This project is accompanied by toots on Mastodon:mastodon.social/@holtwick.
- BirdsiteLiveis a Twitter to Mastodon proxy. You can follow Twitter accounts as if they were Mastodon ones.-> github
- Giteais 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
- Nextcloudis 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
- LanguageToolLanguageTool 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 acloud 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 aNginx Proxy Manager.This is as easy as creating a folder namedproxy
and put thisdocker-compose.yml
file in it. Then start withdocker 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
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
- 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 eachdocker-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 localdata
folder. This helps with backups and porting to other instances.