version: '3.6' # # ISOLATED NETWORKS # networks: transmission: name: transmission jellyfin: name: jellyfin gitea: name: gitea nextcloud: name: nextcloud autism_app_network: name: autism_app_network gladys_network: name: gladys_network kimai_network: name: kimai_network services: # # NGINX AND CERTBOT # nginx: image: nginx:latest container_name: nginx restart: unless-stopped depends_on: - transmission - jellyfin - gitea - nextcloud - nextcloud_db - autism_app - gladys - kimai - kimai_db ports: - 80:80 - 443:443 volumes: - ${DOCKER_CONFIG_DIR}/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ${DOCKER_CONFIG_DIR}/certbot/conf:/etc/letsencrypt:ro - ${DOCKER_CONFIG_DIR}/certbot/www:/var/www/certbot:ro - ${NGINX_LOG_DIR}/:/logs command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" networks: - transmission - jellyfin - gitea - nextcloud - autism_app_network - gladys_network - kimai_network certbot: image: certbot/certbot:latest container_name: certbot restart: unless-stopped volumes: - ${DOCKER_CONFIG_DIR}/certbot/conf:/etc/letsencrypt:rw - ${DOCKER_CONFIG_DIR}/certbot/www:/var/www/certbot:rw entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" # # HOMESERVER SERVICES # transmission: image: lscr.io/linuxserver/transmission:latest container_name: transmission restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=Europe/London - TRANSMISSION_WEB_HOME=/combustion-release/ - USER=${TRANSMISSION_USERNAME} - PASS=${TRANSMISSION_PASSWORD} volumes: - ${DOCKER_CONFIG_DIR}/transmission/config:/config - ${DOCKER_DATA_DIR}/transmission/downloads:/downloads - ${DOCKER_DATA_DIR}/transmission/watch:/watch networks: - transmission jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin restart: unless-stopped group_add: - "109" # cat /etc/group | grep render - "44" # cat /etc/group | grep video environment: - PUID=1000 - PGID=1000 - TZ=Europe/London - JELLYFIN_PublishedServerUrl=${JELLYFIN_DOMAIN_NAME} volumes: - ${DOCKER_CONFIG_DIR}/jellyfin/library:/config - /mnt/drive-one/media/series:/data/series - /mnt/drive-one/media/movies:/data/movies - /dev/shm/JellyfinTranscode:/transcode devices: - /dev/dri/renderD128:/dev/dri/renderD128 - /dev/dri/card0:/dev/dri/card0 networks: - jellyfin gitea: image: gitea/gitea:latest container_name: gitea restart: unless-stopped environment: - USER_UID=1000 - USER_GID=1000 volumes: - ${DOCKER_DATA_DIR}/gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro networks: - gitea nextcloud: image: nextcloud:latest container_name: nextcloud restart: unless-stopped depends_on: - nextcloud_db environment: - POSTGRES_HOST=nextcloud_db - POSTGRES_DB=nextcloud - POSTGRES_USER=${POSTGRES_NEXTCLOUD_USERNAME} - POSTGRES_PASSWORD=${POSTGRES_NEXTCLOUD_PASSWORD} volumes: - ${DOCKER_DATA_DIR}/nextcloud:/var/www/html networks: - nextcloud nextcloud_db: image: postgres:latest container_name: nextcloud_db hostname: nextcloud_db restart: unless-stopped environment: - POSTGRES_DB=nextcloud - POSTGRES_USER=${POSTGRES_NEXTCLOUD_USERNAME} - POSTGRES_PASSWORD=${POSTGRES_NEXTCLOUD_PASSWORD} volumes: - ${DOCKER_DATA_DIR}/nextcloud_db:/var/lib/postgresql/data networks: - nextcloud kimai: # https://techoverflow.net/2021/03/08/a-modern-kimai-setup-using-docker-compose-and-nginx/ image: kimai/kimai2:apache-debian-master-prod container_name: kimai restart: unless-stopped environment: - APP_ENV=prod - TRUSTED_HOSTS=localhost,${KIMAI_HOSTNAME} - ADMINMAIL=${KIMAI_ADMIN_EMAIL} - ADMINPASS=${KIMAI_ADMIN_PASSWORD} - DATABASE_URL=mysql://kimai:${KIMAI_MARIADB_PASSWORD}@kimai_db/kimai volumes: - ${DOCKER_DATA_DIR}/kimai:/opt/kimai/var depends_on: - kimai_db networks: - kimai_network kimai_db: image: mariadb:latest container_name: kimai_db restart: unless-stopped environment: - MYSQL_DATABASE=kimai - MYSQL_USER=kimai - MYSQL_PASSWORD=${KIMAI_MARIADB_PASSWORD} - MYSQL_ROOT_PASSWORD=${KIMAI_MARIADB_ROOT_PASSWORD} volumes: - ${DOCKER_DATA_DIR}/kimai_db:/var/lib/mysql command: --default-storage-engine innodb healthcheck: test: mysqladmin -p${KIMAI_MARIADB_ROOT_PASSWORD} ping -h localhost interval: 20s start_period: 10s timeout: 10s retries: 3 networks: - kimai_network # # HOME-AUTOMATION SERVICES # gladys: image: gladysassistant/gladys:v4 container_name: gladys privileged: true restart: unless-stopped environment: NODE_ENV: production SQLITE_FILE_PATH: /var/lib/gladysassistant/gladys-production.db volumes: - /var/run/docker.sock:/var/run/docker.sock - ${DOCKER_DATA_DIR}/gladysassistant:/var/lib/gladysassistant - /dev:/dev networks: - gladys_network # # OTHER SERVICES # autism_app: container_name: autism_app image: autism_app restart: unless-stopped build: context: ./autism-app volumes: - ./autism-app/src:/app/src networks: - autism_app_network