This repository contains a variety of open-source fueled apps, services and tools for a self hosting & development.
admin
|portainer
: Container native monitoring and administration interfaceanalytics
|matomo
: Open-source GDPR compliant analytics platformautomations
|n8n
: Open-source integration & flow based automation toolbaas
|appwrite
: Open-source Backend As A Serviceblock_storage
|minio
: Open-source object storageblog
|ghost
: Open-source publication tool and wordpress alternativeci
|drone
: Open-source CI/CD pipeline and deployment powered by community integrationscloud
|nextcloud
: Open-source GCloud/Dropbox alternativecode
|VSC Web
: Visual Studio Code web clientgateway
|traefik
: Container native proxy & service gatewayregistry
|registry
: Docker container registryuptime
|kuma
: UptimeKuma service monitor.vault
|vaultwarden
: Open-source rust implementation of the password manager bitwarden
-
Note all
DOMAIN
variables are without HTTP(S) prefix!- Valid domain:
vault.example.com
- Invalid doman:
https://vault.example.com
- Valid domain:
-
DNS
A
record with a wildcardsub.domain.tld
pointing towards the server -
Domain & global storage
.env
variables are required for the gateway and letsencrypt to work -
A server with at least 2 core CPU and 4GB of RAM
- Note: Start-up may require more RAM or slow-down with only 2 cores/CPUs
- Note: Varies depending on load, usage and number of services currently running
- Note: Once deployed, all current services requires ~2.1GB of RAM
The Gateway Needs to be deployed first to allow LetsEncrypt to provide SSL.
- Fill in, and copy over the environment files
cp stack.env .env
- Fill in, and copy over the docker files
stack.docker-compose.yml docker-compose.yml
- Start the gateway:
docker-compose up -d
It's highly recommended to deploy Admin next and use this for preceeding stack deployments.
There are two ways to deploy the configured stacks;
- Using Portainers WebGUI & stacks feature
- Manually by following the same steps as in setup per stack (per compose file)
To add a new app container, the following needs to be included:
stack.docker-compose.yml
with the following properties:- Per service, define traefik labels for exposure
labels: - traefik.enable=true - traefik.http.routers.{SERVICE_NAME}.tls=true - traefik.http.routers.{SERVICE_NAME}.tls.certresolver=letsencrypt - traefik.http.routers.{SERVICE_NAME}.entrypoints=https - traefik.http.routers.{SERVICE_NAME}.rule=Host(`${DOMAIN}`) # Services - traefik.http.services.{SERVICE_NAME}.loadbalancer.server.port=80
- Per service, define traefik labels for exposure
stack.env
with the follwing properties:- This is required for domain and storage configuration
# Project variables COMPOSE_PROJECT_NAME=stack-{STACK_NAME} GLOBAL_STORAGE={PATH_TO_STORAGE} DOMAIN={YOUR_DOMAIN_NAME} # Service variables MY_VAR="1234"
- This is required for domain and storage configuration