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
DOMAINvariables are without HTTP(S) prefix!- Valid domain:
vault.example.com - Invalid doman:
https://vault.example.com
- Valid domain:
-
DNS
Arecord with a wildcardsub.domain.tldpointing towards the server -
Domain & global storage
.envvariables 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.ymlwith 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.envwith 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