├── .github └── FUNDING.yml ├── templates ├── openspeedtest.yml ├── thelounge.yml ├── linkding.yml ├── owncast.yml ├── freshrss.yml ├── prowlarr.yml ├── audiobookshelf.yml ├── nextcloud.yml └── forgejo.yml ├── LICENSE └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: benbristow 2 | -------------------------------------------------------------------------------- /templates/openspeedtest.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your openspeedtest instance 3 | services: 4 | openspeedtest: 5 | image: openspeedtest/latest 6 | restart: unless-stopped 7 | labels: 8 | - "traefik.enable=true" 9 | - "traefik.http.routers.openspeedtest.rule=Host(`change-me-1`)" 10 | - "traefik.http.routers.openspeedtest.entrypoints=websecure" 11 | - "traefik.http.routers.openspeedtest.tls=true" 12 | - "traefik.http.routers.openspeedtest.tls.certresolver=letsencrypt" 13 | - "traefik.http.services.openspeedtest.loadbalancer.server.port=3000" 14 | networks: 15 | - dokploy-network 16 | 17 | networks: 18 | dokploy-network: 19 | external: true 20 | -------------------------------------------------------------------------------- /templates/thelounge.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your thelounge instance 3 | services: 4 | thelounge: 5 | image: ghcr.io/thelounge/thelounge:latest 6 | restart: always 7 | volumes: 8 | - thelounge-data:/var/opt/thelounge 9 | networks: 10 | - dokploy-network 11 | labels: 12 | - "traefik.enable=true" 13 | - "traefik.http.routers.thelounge.entrypoints=websecure" 14 | - "traefik.http.routers.thelounge.tls.certResolver=letsencrypt" 15 | - "traefik.http.routers.thelounge.rule=Host(`change-me-1`)" 16 | - "traefik.http.services.thelounge.loadbalancer.server.port=9000" 17 | 18 | networks: 19 | dokploy-network: 20 | external: true 21 | 22 | volumes: 23 | thelounge-data: 24 | -------------------------------------------------------------------------------- /templates/linkding.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your linkding instance 3 | services: 4 | linkding: 5 | image: sissbruecker/linkding:latest 6 | volumes: 7 | - "linkding-data:/etc/linkding/data" 8 | - /etc/timezone:/etc/timezone:ro 9 | - /etc/localtime:/etc/localtime:ro 10 | networks: 11 | - dokploy-network 12 | labels: 13 | - "traefik.enable=true" 14 | - "traefik.http.routers.linkding.entrypoints=websecure" 15 | - "traefik.http.routers.linkding.tls.certResolver=letsencrypt" 16 | - "traefik.http.routers.linkding.rule=Host(`change-me-1`)" 17 | restart: unless-stopped 18 | 19 | volumes: 20 | linkding-data: 21 | 22 | networks: 23 | dokploy-network: 24 | external: true -------------------------------------------------------------------------------- /templates/owncast.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your owncast instance 3 | services: 4 | owncast: 5 | image: owncast/owncast:latest 6 | restart: 'unless-stopped' 7 | ports: 8 | - "1935:1935" # RTMP port 9 | volumes: 10 | - owncast-data:/app/data 11 | networks: 12 | - dokploy-network 13 | labels: 14 | - "traefik.enable=true" 15 | - "traefik.http.routers.owncast.entrypoints=websecure" 16 | - "traefik.http.routers.owncast.tls.certResolver=letsencrypt" 17 | - "traefik.http.routers.owncast.rule=Host(`change-me-1`)" 18 | - "traefik.http.services.owncast.loadbalancer.server.port=8080" 19 | 20 | networks: 21 | dokploy-network: 22 | external: true 23 | 24 | volumes: 25 | owncast-data: -------------------------------------------------------------------------------- /templates/freshrss.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your freshrss instance 3 | services: 4 | freshrss: 5 | image: 'linuxserver/freshrss:latest' 6 | restart: always 7 | hostname: 'change-me-1' 8 | environment: 9 | - PUID=1000 10 | - PGID=1000 11 | volumes: 12 | - freshrss-data:/config 13 | - /etc/timezone:/etc/timezone:ro 14 | - /etc/localtime:/etc/localtime:ro 15 | networks: 16 | - dokploy-network 17 | labels: 18 | - "traefik.enable=true" 19 | - "traefik.http.routers.freshrss.entrypoints=websecure" 20 | - "traefik.http.routers.freshrss.tls.certresolver=letsencrypt" 21 | - "traefik.http.routers.freshrss.rule=Host(`change-me-1`)" 22 | - "traefik.http.services.freshrss.loadbalancer.server.port=80" 23 | 24 | networks: 25 | dokploy-network: 26 | external: true 27 | 28 | volumes: 29 | freshrss-data: -------------------------------------------------------------------------------- /templates/prowlarr.yml: -------------------------------------------------------------------------------- 1 | # Change the following value to match your setup: 2 | # change-me-1 is the domain name for your Prowlarr instance 3 | services: 4 | prowlarr: 5 | image: lscr.io/linuxserver/prowlarr:latest 6 | container_name: prowlarr 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | volumes: 11 | - prowlarr-data:/config 12 | - /etc/timezone:/etc/timezone:ro 13 | - /etc/localtime:/etc/localtime:ro 14 | networks: 15 | - dokploy-network 16 | labels: 17 | - "traefik.enable=true" 18 | - "traefik.http.routers.prowlarr.entrypoints=websecure" 19 | - "traefik.http.routers.prowlarr.tls.certResolver=letsencrypt" 20 | - "traefik.http.routers.prowlarr.rule=Host(`change-me-1`)" 21 | - "traefik.http.services.prowlarr.loadbalancer.server.port=9696" 22 | restart: unless-stopped 23 | 24 | networks: 25 | dokploy-network: 26 | external: true 27 | 28 | volumes: 29 | prowlarr-data: -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Ben Bristow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /templates/audiobookshelf.yml: -------------------------------------------------------------------------------- 1 | # Change the following values to match your setup: 2 | # change-me-1 is the domain name for your audiobookshelf instance 3 | services: 4 | audiobookshelf: 5 | image: ghcr.io/advplyr/audiobookshelf:latest 6 | restart: always 7 | networks: 8 | - dokploy-network 9 | volumes: 10 | - audiobooks:/audiobooks 11 | - podcasts:/podcasts 12 | - config:/config 13 | - metadata:/metadata 14 | - /etc/timezone:/etc/timezone:ro 15 | - /etc/localtime:/etc/localtime:ro 16 | labels: 17 | - "traefik.enable=true" 18 | - "traefik.http.routers.audiobookshelf.rule=Host(`change-me-1`)" 19 | - "traefik.http.routers.audiobookshelf.entrypoints=websecure" 20 | - "traefik.http.routers.audiobookshelf.tls=true" 21 | - "traefik.http.routers.audiobookshelf.tls.certresolver=letsencrypt" 22 | - "traefik.http.services.audiobookshelf.loadbalancer.server.port=80" 23 | # Increase upload size limit for large audiobook files 24 | - "traefik.http.middlewares.audiobookshelf-upload.buffering.memRequestBodyBytes=104857600" 25 | - "traefik.http.middlewares.audiobookshelf-upload.buffering.maxRequestBodyBytes=104857600" 26 | - "traefik.http.routers.audiobookshelf.middlewares=audiobookshelf-upload@docker" 27 | 28 | volumes: 29 | audiobooks: 30 | podcasts: 31 | config: 32 | metadata: 33 | 34 | networks: 35 | dokploy-network: 36 | external: true -------------------------------------------------------------------------------- /templates/nextcloud.yml: -------------------------------------------------------------------------------- 1 | # Change the following values to match your setup: 2 | # change-me-1 is the domain name for your nextcloud instance 3 | # change-me-2 is the database password for your nextcloud instance, make this strong 4 | # change-me-3 is the root database password for your nextcloud database, make this strong 5 | services: 6 | nextcloud: 7 | image: nextcloud 8 | restart: always 9 | networks: 10 | - dokploy-network 11 | labels: 12 | - "traefik.enable=true" 13 | - "traefik.http.routers.nextcloud-app.rule=Host(`change-me-1`)" 14 | - "traefik.http.routers.nextcloud-app.entrypoints=websecure" 15 | - "traefik.http.routers.nextcloud-app.tls=true" 16 | - "traefik.http.routers.nextcloud-app.tls.certresolver=letsencrypt" 17 | - "traefik.http.services.nextcloud-app.loadbalancer.server.port=80" 18 | - "traefik.http.services.nextcloud-app.loadbalancer.passhostheader=true" 19 | - "traefik.http.routers.nextcloud-app.middlewares=compresstraefik" 20 | - "traefik.http.middlewares.compresstraefik.compress=true" 21 | volumes: 22 | - nextcloud_data:/var/www/html 23 | environment: 24 | - NEXTCLOUD_TRUSTED_DOMAINS=change-me-1 25 | - MYSQL_HOST=nextcloud_db 26 | - MYSQL_DATABASE=nextcloud 27 | - MYSQL_USER=nextcloud 28 | - MYSQL_PASSWORD=change-me-2 29 | - OVERWRITEPROTOCOL=https 30 | 31 | nextcloud_db: 32 | image: mariadb 33 | restart: always 34 | networks: 35 | - dokploy-network 36 | volumes: 37 | - nextcloud_db_data:/var/lib/mysql 38 | environment: 39 | - MYSQL_ROOT_PASSWORD=change-me-3 40 | - MYSQL_DATABASE=nextcloud 41 | - MYSQL_USER=nextcloud 42 | - MYSQL_PASSWORD=change-me-2 43 | 44 | volumes: 45 | nextcloud_data: 46 | nextcloud_db_data: 47 | 48 | networks: 49 | dokploy-network: 50 | external: true -------------------------------------------------------------------------------- /templates/forgejo.yml: -------------------------------------------------------------------------------- 1 | # Change the following values to match your setup: 2 | # change-me-1 is the password for the postgres database 3 | # change-me-2 is the domain name for your gitea instance 4 | services: 5 | gitea: 6 | image: codeberg.org/forgejo/forgejo:8 # Does not update itself, requires manual update process 7 | environment: 8 | - USER_UID=1000 9 | - USER_GID=1000 10 | - GITEA__database__DB_TYPE=postgres 11 | - GITEA__database__HOST=gittea_db:5432 12 | - GITEA__database__NAME=gitea 13 | - GITEA__database__USER=postgres 14 | - GITEA__database__PASSWD=change-me-1 15 | - GITEA__server__DOMAIN=change-me-2 16 | - GITEA__server__ROOT_URL=https://change-me-2/ 17 | - GITEA__service__DISABLE_SSH=true 18 | - GITEA__service__DISABLE_REGISTRATION=true 19 | volumes: 20 | - gitea_data:/data 21 | - /etc/timezone:/etc/timezone:ro 22 | - /etc/localtime:/etc/localtime:ro 23 | restart: unless-stopped 24 | networks: 25 | - dokploy-network 26 | depends_on: 27 | - gittea_db 28 | labels: 29 | - "traefik.enable=true" 30 | - "traefik.http.routers.gitea.rule=Host(`change-me-2`)" 31 | - "traefik.http.routers.gitea.entrypoints=websecure" 32 | - "traefik.http.routers.gitea.tls=true" 33 | - "traefik.http.routers.gitea.tls.certresolver=letsencrypt" 34 | - "traefik.http.services.gitea.loadbalancer.server.port=3000" 35 | 36 | gittea_db: 37 | image: postgres:16 38 | environment: 39 | - POSTGRES_USER=postgres 40 | - POSTGRES_PASSWORD=change-me-1 # Match the change-me-1 password in the gitea service 41 | - POSTGRES_DB=gitea 42 | volumes: 43 | - postgres_data:/var/lib/postgresql/data 44 | restart: unless-stopped 45 | networks: 46 | - dokploy-network 47 | 48 | volumes: 49 | gitea_data: 50 | postgres_data: 51 | 52 | networks: 53 | dokploy-network: 54 | external: true -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dokploy Compose 2 | 3 | Collection of docker-compose configs for self-hosted tools, compatible with Dokploy (https://dokploy.com/) 4 | 5 | See below for advice on using Dokploy's compose feature. 6 | 7 | https://docs.dokploy.com/en/docs/core/docker-compose/example 8 | 9 | ## Templates 10 | 11 | ### audiobookshelf.yml 12 | 13 | Template for [Audiobookshelf](https://www.audiobookshelf.org/), a self-hosted audiobook/podcast server. 14 | 15 | [View template file](/templates/audiobookshelf.yml) 16 | 17 | ### forgejo.yml 18 | 19 | Template for [Forgejo](https://forgejo.org/), a fork of Gitea, a self-hosted git server, similar to GitHub. 20 | 21 | [View template file](/templates/forgejo.yml) 22 | 23 | ### freshrss.yml 24 | 25 | Template for [FreshRSS](https://freshrss.org/), a self-hosted RSS reader, similar to Feedly or what was Google Reader. 26 | 27 | [View template file](/templates/freshrss.yml) 28 | 29 | ### linkding.yml 30 | 31 | Template for [Linkding](https://github.com/sissbruecker/linkding), a self-hosted bookmarking service. 32 | 33 | [View template file](/templates/linkding.yml) 34 | 35 | ### nextcloud.yml 36 | 37 | Template for [Nextcloud](https://nextcloud.com/), a self-hosted file sync and share platform, similar to Google Drive. 38 | 39 | [View template file](/templates/nextcloud.yml) 40 | 41 | ### openspeedtest.yml 42 | 43 | Template for [OpenSpeedTest](https://www.openspeedtest.com/), an online network speed test tool, similar to speedtest.net. 44 | 45 | [View template file](/templates/openspeedtest.yml) 46 | 47 | ### owncast.yml 48 | 49 | Template for [Owncast](https://owncast.online/), a self-hosted live streaming platform, similar to Twitch. 50 | 51 | [View template file](/templates/owncast.yml) 52 | 53 | ### prowlarr.yml 54 | 55 | Template for [Prowlarr](https://github.com/Prowlarr/Prowlarr), a self-hosted torrent/NZB indexer for downloading Linux ISOs. 56 | 57 | [View template file](/templates/prowlarr.yml) 58 | 59 | ### thelounge.yml 60 | 61 | Template for [Thelounge](https://thelounge.chat/), a self-hosted web IRC client. 62 | 63 | [View template file](/templates/thelounge.yml) 64 | 65 | ## Contributing 66 | 67 | Contributions are welcome! Please feel free to submit a pull request or open an issue for any bugs or feature requests. 68 | 69 | ## License 70 | 71 | This project is licensed under the MIT License - see the LICENSE file for details. 72 | --------------------------------------------------------------------------------