This repository contains the code to build, deploy and manage my personal infrastructure. It all started with an old laptop on a chair in a corner of the room manually configured and has evolved over time. This repository represents the current state of it and it will keep evolving as my needs change or whenver I discover better ways of doing things. The value for you could be mostly educational as you probably don't want to replicate all my infrastructure as your needs will most likely be diffrent.
These are some of the key features that shape the project:
- Everything is a Docker container: All apps are containerized and deployed as Docker containers in order to facilitate the deployment and the interchanging of containers between machines.
- All is backed up on S3: In order to avoid data loss, databases and filesystems are periodically compressed, encrypted using restic and stored on S3.
- It's cloud-agnostic: To avoid vendor lock-in it is all about linux machines running Docker containers, I tried to avoid cloud specific configuration so I can move applications from one provider or even my own physical servers.
Interactive UI to perform focused deployments
Monitoring integrated in Grafana
Automatic backups in S3
Endpoint monitoring using UptimeRobot
Authenticated applications managed by Pomerium
Execute ./run
and select the desired actions. The script will ask you to install jq
and gum
if you don't have them installed.
This reflects the current state of the infrastructure, it has evolved from different models and will change according to my needs. The main driver of the current structure was to take advantage of free tiers of cloud providers, however I've run out of credits in most of them and costs have been ramping up so probably it will evolve to a cheaper model. The Raspberry Pi + VPN configuration is what I envisioned as the future of the topolgy but currently there are still some problems to be solved with that.
- flappysonic: Runs the website for the game Flappysonic.
- thumbor: Image processing service for other elements on the infrastructure.
- tombraiderjs: Runs the website for the demo of TombRaiderJs.
- movie quote twitter bot: Runs Battle Royale Movie Quotes Twitter Bot.
- like and share twitter bot: Makes Battle Royale Movie Quotes Twitter Bot interact with people.
- anki: Runs an instance of Anki Sync Server, an open source flashcard application.
- nextcloud: An instance of Nextcloud a self hosted productivity platform.
- kimai: Runs an instance of Kimai a self-hosted time tracking tool.
- pomermium: Runs Pomerium to act as the access-proxy for certain apps.
- postgres: Even though some apps run their own databases ther is a Postgres instance shared by some apps.
- gallery client: Client part of a simple image gallery app.
- gallery server: Server part of a simple image gallery app, images stored on S3.
- plants client: Client part of a simple plant care app.
- plants server: Server part of a simple plant care app.
- itemtree client: Client part of a simple inventory app.
- itemtree server: Server part of a simple inventory app.
- expenses client: Client part of an expenses management app.
- expenses server: Server part of an expenses management app.
- garments client: Client part of an clothing management app.
- garments server: Server part of an clothing management app.
- journaling service: Journaling service to store events from multiple apps.
- user info service: User information service to mange user information shared among apps.
- mealie: Mealie is a self hosted recipe manager.
- jackett: Tracker proxy server
- sonarr: Sonarr is a series collection manager.
- lidarr: Lidarr is a music collection manager.
- radarr: Radarr is a movie colection manager.
- deluge: Deluge is a torrent client.
- amule: Amule is an EDonkey network client.
- ofelia: Job scheduler.
- miniflux: Rss server.
- pleroma: Social networking software.
- apprise: Notifications microservice.
- immich: Picture manager.
- dashy: Dashboard.
- mealie-discord: Discord Bot to ask what's for lunch.
- cadvisor: cAdvisor to monitor containers.
- prometheus: Prometheus to gather metrics.
- grafana: Grafana to display metrics.
- loki: Loki to store logs.
- funkwhale: Funkwhale for listening to music.
- babybuddy: Baby habits tracker.
- tink-firefly-endpoint: Retrieve information from Tink and push it to Firefly, endpoint part.
- firefly iii: A free and open source personal finance manager.
- restic: Restic as a backup program.
- metube: Self-hosted YouTube downloader.