librelad 875a60f90f LibrePortal v0.1.0 — initial release
A free, open, self-hosted app platform (GNU AGPLv3): one-click app deploys,
Traefik reverse proxy with automatic SSL, rootless Docker support, gluetun
VPN routing, and a web dashboard to manage it all.

Free & open forever to self-host; optional paid hosted services fund it.
See PROMISE.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-21 20:37:54 +01:00

105 lines
2.7 KiB
YAML
Executable File

networks:
vpn:
external: true
name: vpn
services:
kimai: # This is the latest FPM image of kimai
image: kimai/kimai2:fpm-dev
container_name: kimai
environment:
- ADMINMAIL=EMAILHERE
- ADMINPASS=RANDOMIZEDPASSWORD1
- DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai
- TRUSTED_HOSTS=IPADDRESSHERE,DOMAINSUBNAMEHERE
- memory_limit=500
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro #SOCKETHERE
- ./kimai-public/:/opt/kimai/public
# - var:/opt/kimai/var
# - ./ldap.conf:/etc/openldap/ldap.conf:z
# - ./ROOT-CA.pem:/etc/ssl/certs/ROOT-CA.pem:z
restart: unless-stopped
networks:
vpn:
ipv4_address: 10.100.0.101
sqldb:
image: mysql:5.7
container_name: kimai-sqldb
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimaiuser
- MYSQL_PASSWORD=kimaipassword
- MYSQL_ROOT_PASSWORD=RANDOMIZEDPASSWORD2
ports:
- 3336:3306
volumes:
- ./kimai-mysql/:/var/lib/mysql
command: --default-storage-engine innodb
restart: unless-stopped
healthcheck:
test: mysqladmin -p$$MYSQL_ROOT_PASSWORD ping -h localhost
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
networks:
vpn:
ipv4_address: 10.100.0.102
phpmyadmin:
container_name: kimai-phpmyadmin
image: phpmyadmin
restart: always
ports:
- PORT2:80
environment:
- PMA_ARBITRARY=1
networks:
vpn:
ipv4_address: 10.100.0.103
swagger:
container_name: kimai-swagger
image: swaggerapi/swagger-ui
ports:
- PORT3:8080
volumes:
- ./swagger.json:/swagger.json
environment:
- SWAGGER_JSON=/swagger.json
networks:
vpn:
ipv4_address: 10.100.0.104
kimai-nginx:
container_name: kimai-nginx
image: tobybatch/nginx-fpm-reverse-proxy
ports:
- PORT1:80
volumes:
- ./kimai-public:/opt/kimai/public:ro
restart: unless-stopped
depends_on:
- kimai
healthcheck:
test: wget --spider http://kimai-nginx/health || exit 1
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
disable: false #HEALTHCHECKHERE
#labels:
#traefik.enable: true
#traefik.http.routers.kimai-nginx.entrypoints: web,websecure
#traefik.http.routers.kimai-nginx.rule: Host(`DOMAINSUBNAMEHERE`)
#traefik.http.routers.kimai-nginx.tls: true
#traefik.http.routers.kimai-nginx.tls.certresolver: production
#traefik.http.services.kimai-nginx.loadbalancer.server.port: 80
#traefik.http.routers.kimai-nginx.middlewares:
networks:
vpn:
ipv4_address: IPADDRESSHERE