From 52626765962fa5bbfc44a36b2b2bb287553bb400 Mon Sep 17 00:00:00 2001 From: marcomaiermm Date: Sat, 8 Jun 2024 10:45:34 +0200 Subject: [PATCH 001/295] feat: Add Supertokens template --- public/svgs/supertokens.svg | 17 +++++++++++++++ templates/compose/supertokens.yaml | 35 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 public/svgs/supertokens.svg create mode 100644 templates/compose/supertokens.yaml diff --git a/public/svgs/supertokens.svg b/public/svgs/supertokens.svg new file mode 100644 index 000000000..30b435bd0 --- /dev/null +++ b/public/svgs/supertokens.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/templates/compose/supertokens.yaml b/templates/compose/supertokens.yaml new file mode 100644 index 000000000..703cab780 --- /dev/null +++ b/templates/compose/supertokens.yaml @@ -0,0 +1,35 @@ +# documentation: https://supertokens.com/docs/guides +# logo: svgs/supertokens.svg +# slogan: An open-source authentication solution that simplifies the implementation of secure user authentication and session management for web and mobile applications. +# tags: supertokens,login,authentication,authorization,oauth,user-management,session-management,access-control,otp,magic-link,passwordless +# port: 3567 + +services: + supertokens: + image: registry.supertokens.io/supertokens/supertokens-postgresql + depends_on: + db: + condition: service_healthy + environment: + - SERVICE_FQDN_SUPERTOKENS_3567 + - POSTGRESQL_CONNECTION_URI="postgresql://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@db:5432/${POSTGRES_DB:-supertokens}" + restart: unless-stopped + healthcheck: + test: "bash -c 'exec 3<>/dev/tcp/127.0.0.1/3567 && echo -e \"GET /hello HTTP/1.1\\r\\nhost: 127.0.0.1:3567\\r\\nConnection: close\\r\\n\\r\\n\" >&3 && cat <&3 | grep \"Hello\"'\n" + interval: 10s + timeout: 5s + retries: 5 + db: + image: postgres:16 + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRESQL + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRESQL + - POSTGRES_DB=${POSTGRES_DB:-supertokens} + volumes: + - supertokens-postgres-data:/var/lib/postgresql/data + restart: unless-stopped + healthcheck: + test: ["CMD", "pg_isready", "-U", "$SERVICE_USER_POSTGRESQL", "-d", "${POSTGRES_DB:-supertokens}"] + interval: 5s + timeout: 5s + retries: 5 From 7d1f760c532c769c4bb525c97d299adb2bb2d14d Mon Sep 17 00:00:00 2001 From: marcomaiermm Date: Sat, 8 Jun 2024 11:23:11 +0200 Subject: [PATCH 002/295] add optional api key --- templates/compose/supertokens.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/compose/supertokens.yaml b/templates/compose/supertokens.yaml index 703cab780..f6ab90c5f 100644 --- a/templates/compose/supertokens.yaml +++ b/templates/compose/supertokens.yaml @@ -12,6 +12,7 @@ services: condition: service_healthy environment: - SERVICE_FQDN_SUPERTOKENS_3567 + - API_KEYS=${API_KEYS:-} - POSTGRESQL_CONNECTION_URI="postgresql://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@db:5432/${POSTGRES_DB:-supertokens}" restart: unless-stopped healthcheck: From 2637afcfb2f08f8d54678d3614318fc1fdc57083 Mon Sep 17 00:00:00 2001 From: Anthony Ly Date: Wed, 26 Jun 2024 09:51:12 +0200 Subject: [PATCH 003/295] add service template for azimutt --- public/svgs/azimutt.svg | 6 +++ templates/compose/azimutt.yaml | 76 ++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 public/svgs/azimutt.svg create mode 100644 templates/compose/azimutt.yaml diff --git a/public/svgs/azimutt.svg b/public/svgs/azimutt.svg new file mode 100644 index 000000000..223805fea --- /dev/null +++ b/public/svgs/azimutt.svg @@ -0,0 +1,6 @@ + + + + diff --git a/templates/compose/azimutt.yaml b/templates/compose/azimutt.yaml new file mode 100644 index 000000000..522c5a935 --- /dev/null +++ b/templates/compose/azimutt.yaml @@ -0,0 +1,76 @@ +# documentation: https://docs.azimutt.app/ +# slogan: Next-Gen ERD: Design, Explore, Document and Analyze your database. +# tags: erd, entity-relationship diagram, database tool, database schema, diagram +# icon: svgs/azimutt.svg +# port: 4000 + +services: + database: + image: postgres + restart: always + container_name: azimutt-db + environment: + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRESQL + - POSTGRES_USER=$SERVICE_USER_POSTGRESQL + - POSTGRES_DB=azimutt_app + volumes: + - pg-data:/var/lib/postgresql/data + storage: + image: quay.io/minio/minio:latest + command: server /data --console-address ":9001" + environment: + - MINIO_SERVER_URL=$MINIO_SERVER_URL + - MINIO_BROWSER_REDIRECT_URL=$MINIO_BROWSER_REDIRECT_URL + - MINIO_ROOT_USER=$SERVICE_USER_MINIO + - MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO + volumes: + - minio-data:/data + createbuckets: + image: minio/mc + depends_on: + - storage + entrypoint: > + /bin/sh -c " + /usr/bin/mc config host add myminio http://storage:9000 $SERVICE_USER_MINIO $SERVICE_PASSWORD_MINIO; + /usr/bin/mc mb -p myminio/azimutt; + /usr/bin/mc policy download myminio/azimutt; + exit 0; + " + smtp: + image: bytemark/smtp + environment: + - RELAY_HOST=$SERVICE_URL_SMTP + - RELAY_PORT=587 + - RELAY_USERNAME=$SERVICE_EMAIL_SMTP + - RELAY_PASSWORD=$SERVICE_PASSWORD_SMTP + backend: + container_name: azimutt-backend + platform: linux/amd64 + restart: always + image: ghcr.io/azimuttapp/azimutt:main + depends_on: + - database + - storage + ports: + - 4000:4000 + environment: + - SERVICE_FQDN_AZIMUTT + - PHX_SERVER=true + - PHX_HOST=$SERVICE_FQDN_AZIMUTT + - PORT=4000 + - DATABASE_URL=ecto://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@database/azimutt_app + - SECRET_KEY_BASE=$SERVICE_PASSWORD_64_AZIMUTT + - FILE_STORAGE_ADAPTER=s3 + - S3_BUCKET=azimutt + - S3_HOST=$MINIO_SERVER_URL + - S3_KEY_ID=$SERVICE_USER_MINIO + - S3_KEY_SECRET=$SERVICE_PASSWORD_MINIO + - AUTH_PASSWORD=true + - SKIP_ONBOARDING_FUNNEL=true + - SKIP_EMAIL_CONFIRMATION=true + - PUBLIC_SITE=false + - EMAIL_ADAPTER=smtp + - SMTP_RELAY=$SERVICE_URL_SMTP + - SMTP_USERNAME=$SERVICE_EMAIL_SMTP + - SMTP_PASSWORD=$SERVICE_PASSWORD_SMTP + - SMTP_PORT=587 \ No newline at end of file From ac887eefd67e6ca09d7ea7660ff0c982bf060d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Sz=C3=BCcs?= <2458236+martonsz@users.noreply.github.com> Date: Sat, 29 Jun 2024 18:52:06 +0200 Subject: [PATCH 004/295] Adding service for paperless fulfills: https://github.com/coollabsio/coolify/discussions/2349 This service is using a workaround for the issue mentioned here: https://github.com/coollabsio/coolify/discussions/2572 --- public/svgs/paperless.svg | 12 +++++++ templates/compose/paperless.yaml | 60 ++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 public/svgs/paperless.svg create mode 100644 templates/compose/paperless.yaml diff --git a/public/svgs/paperless.svg b/public/svgs/paperless.svg new file mode 100644 index 000000000..347b1e759 --- /dev/null +++ b/public/svgs/paperless.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/templates/compose/paperless.yaml b/templates/compose/paperless.yaml new file mode 100644 index 000000000..cb5f1ca76 --- /dev/null +++ b/templates/compose/paperless.yaml @@ -0,0 +1,60 @@ +# documentation: https://docs.paperless-ngx.com/configuration/ +# slogan: Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper. +# logo: svgs/paperless.svg +# port: 8000 +services: + redis: + image: docker.io/library/redis:${REDIS_TAG:-7.2.5} + restart: unless-stopped + volumes: + - redis:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + timeout: 10s + retries: 3 + + paperless: + image: paperlessngx/paperless-ngx:${PAPERLESS_TAG:-2.10.2} + restart: unless-stopped + depends_on: + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - data:/usr/src/paperless/data + - media:/usr/src/paperless/media + - type: bind + source: ./export + target: /usr/src/paperless/export + is_directory: true + - type: bind + source: ./consume + target: /usr/src/paperless/consume + is_directory: true + - type: bind + source: ./init-workaround.sh + target: /init-workaround.sh + content: | + #!/bin/bash + # Workaround for https://github.com/coollabsio/coolify/discussions/2572 + # Paperless won't start if the PAPERLESS_URL ends with a path. + if [[ "$PAPERLESS_URL" == */ ]]; then + PAPERLESS_URL="${PAPERLESS_URL%/}" + export PAPERLESS_URL + fi + # Run the original entrypoint + # ENTRYPOINT CMD + exec /sbin/docker-entrypoint.sh /usr/local/bin/paperless_cmd.sh + entrypoint: ["/init-workaround.sh"] + environment: + - PAPERLESS_ADMIN_PASSWORD=$SERVICE_PASSWORD_PAPERLESS_ADMIN + - PAPERLESS_ADMIN_USER=${PAPERLESS_ADMIN_USER:-admin} + - PAPERLESS_REDIS=redis://redis:6379 + - PAPERLESS_SECRET_KEY=$SERVICE_PASSWORD_64_PAPERLESSSECRETKEY + - PAPERLESS_URL=${PAPERLESS_URL:-$SERVICE_FQDN_PAPERLESS} + - SERVICE_FQDN_PAPERLESS + \ No newline at end of file From 384707639213af3381dec03e59590072dc2e3384 Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 29 Jun 2024 18:04:15 -0400 Subject: [PATCH 005/295] feat: adds forgejo service with runners --- templates/compose/forgejo-with-mariadb.yaml | 45 ++++++ templates/compose/forgejo-with-mysql.yaml | 46 +++++++ .../compose/forgejo-with-postgresql.yaml | 44 ++++++ .../compose/forgejo-with-runner-mariadb.yaml | 128 ++++++++++++++++++ .../forgejo-with-runner-with-mysql.yaml | 128 ++++++++++++++++++ .../forgejo-with-runner-with-postgresql.yaml | 127 +++++++++++++++++ templates/compose/forgejo-with-runner.yaml | 105 ++++++++++++++ templates/compose/forgejo.yaml | 22 +++ 8 files changed, 645 insertions(+) create mode 100644 templates/compose/forgejo-with-mariadb.yaml create mode 100644 templates/compose/forgejo-with-mysql.yaml create mode 100644 templates/compose/forgejo-with-postgresql.yaml create mode 100644 templates/compose/forgejo-with-runner-mariadb.yaml create mode 100644 templates/compose/forgejo-with-runner-with-mysql.yaml create mode 100644 templates/compose/forgejo-with-runner-with-postgresql.yaml create mode 100644 templates/compose/forgejo-with-runner.yaml create mode 100644 templates/compose/forgejo.yaml diff --git a/templates/compose/forgejo-with-mariadb.yaml b/templates/compose/forgejo-with-mariadb.yaml new file mode 100644 index 000000000..e1d49515b --- /dev/null +++ b/templates/compose/forgejo-with-mariadb.yaml @@ -0,0 +1,45 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, mariadb +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=mysql + - HOST=mariadb + - NAME=${MYSQL_DATABASE-forgejo} + - USER=$SERVICE_USER_MYSQL + - PASSWD=$SERVICE_PASSWORD_MYSQL + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + mariadb: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + + mariadb: + image: mariadb:11 + volumes: + - forgejo-mariadb-data:/var/lib/mysql + environment: + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/forgejo-with-mysql.yaml b/templates/compose/forgejo-with-mysql.yaml new file mode 100644 index 000000000..f46b2c447 --- /dev/null +++ b/templates/compose/forgejo-with-mysql.yaml @@ -0,0 +1,46 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, mysql +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - SERVICE_FQDN_FORGEJO_3000 + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=mysql + - HOST=mysql + - NAME=${MYSQL_DATABASE-forgejo} + - USER=$SERVICE_USER_MYSQL + - PASSWD=$SERVICE_PASSWORD_MYSQL + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + mysql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + + mysql: + image: mysql:8 + volumes: + - forgejo-mysql-data:/var/lib/mysql + environment: + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/forgejo-with-postgresql.yaml b/templates/compose/forgejo-with-postgresql.yaml new file mode 100644 index 000000000..4c39fc1b9 --- /dev/null +++ b/templates/compose/forgejo-with-postgresql.yaml @@ -0,0 +1,44 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, postgresql +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=postgres + - HOST=postgresql + - NAME=${POSTGRESQL_DATABASE-forgejo} + - USER=$SERVICE_USER_POSTGRESQL + - PASSWD=$SERVICE_PASSWORD_POSTGRESQL + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + postgresql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + + postgresql: + image: postgres:16-alpine + volumes: + - forgejo-postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_DB=${POSTGRESQL_DATABASE} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/forgejo-with-runner-mariadb.yaml b/templates/compose/forgejo-with-runner-mariadb.yaml new file mode 100644 index 000000000..1f4b932d1 --- /dev/null +++ b/templates/compose/forgejo-with-runner-mariadb.yaml @@ -0,0 +1,128 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - SERVICE_FQDN_FORGEJO_3000 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=mysql + - HOST=mariadb + - NAME=${MYSQL_DATABASE-forgejo} + - USER=$SERVICE_USER_MYSQL + - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true + - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false + - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + mariadb: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + command: >- + bash -c ' + /bin/s6-svscan /etc/s6 & + sleep 10 ; + su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; + sleep infinity + ' + + mariadb: + image: mariadb:11 + volumes: + - forgejo-mariadb-data:/var/lib/mysql + environment: + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 + + docker-in-docker: + image: docker:dind + hostname: docker + privileged: true + restart: 'unless-stopped' + healthcheck: + disable: true + environment: + DOCKER_TLS_CERTDIR: /certs + DOCKER_HOST: docker-in-docker + volumes: + - forgejo-did-certs:/certs + + runner-register: + image: code.forgejo.org/forgejo/runner:3.5.0 + restart: 'no' + links: + - docker-in-docker + - forgejo + environment: + - DOCKER_HOST=tcp://docker-in-docker:2376 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + volumes: + - forgejo-runner-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + healthcheck: + disable: true + user: 0:0 + command: >- + bash -ec ' + while : ; do + forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; + sleep 1 ; + done ; + sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + forgejo-runner generate-config > config.yml ; + sed -i -e "s|network: .*|network: host|" config.yml ; + sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; + sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; + sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; + chown -R 1000:1000 /data ; + exit 0 + ' + + runner: + image: code.forgejo.org/forgejo/runner:3.5.0 + links: + - docker-in-docker + - forgejo + depends_on: + docker-in-docker: + condition: service_started + environment: + - DOCKER_HOST=tcp://docker:2376 + - DOCKER_CERT_PATH=/certs/client + - DOCKER_TLS_VERIFY=1 + user: 1000:1000 + volumes: + - forgejo-runner-data:/data + - forgejo-did-certs:/certs + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + restart: 'unless-stopped' + healthcheck: + disable: true + command: >- + bash -c ' + while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done + ' \ No newline at end of file diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml new file mode 100644 index 000000000..0dd87767e --- /dev/null +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -0,0 +1,128 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - SERVICE_FQDN_FORGEJO_3000 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=mysql + - HOST=mysql + - NAME=${MYSQL_DATABASE-forgejo} + - USER=$SERVICE_USER_MYSQL + - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true + - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false + - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + mysql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + command: >- + bash -c ' + /bin/s6-svscan /etc/s6 & + sleep 10 ; + su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; + sleep infinity + ' + + mysql: + image: mysql:8 + volumes: + - forgejo-mysql-data:/var/lib/mysql + environment: + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 + + docker-in-docker: + image: docker:dind + hostname: docker + privileged: true + restart: 'unless-stopped' + healthcheck: + disable: true + environment: + DOCKER_TLS_CERTDIR: /certs + DOCKER_HOST: docker-in-docker + volumes: + - forgejo-did-certs:/certs + + runner-register: + image: code.forgejo.org/forgejo/runner:3.5.0 + restart: 'no' + links: + - docker-in-docker + - forgejo + environment: + - DOCKER_HOST=tcp://docker-in-docker:2376 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + volumes: + - forgejo-runner-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + healthcheck: + disable: true + user: 0:0 + command: >- + bash -ec ' + while : ; do + forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; + sleep 1 ; + done ; + sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + forgejo-runner generate-config > config.yml ; + sed -i -e "s|network: .*|network: host|" config.yml ; + sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; + sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; + sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; + chown -R 1000:1000 /data ; + exit 0 + ' + + runner: + image: code.forgejo.org/forgejo/runner:3.5.0 + links: + - docker-in-docker + - forgejo + depends_on: + docker-in-docker: + condition: service_started + environment: + - DOCKER_HOST=tcp://docker:2376 + - DOCKER_CERT_PATH=/certs/client + - DOCKER_TLS_VERIFY=1 + user: 1000:1000 + volumes: + - forgejo-runner-data:/data + - forgejo-did-certs:/certs + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + restart: 'unless-stopped' + healthcheck: + disable: true + command: >- + bash -c ' + while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done + ' \ No newline at end of file diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml new file mode 100644 index 000000000..590ba7617 --- /dev/null +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -0,0 +1,127 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - SERVICE_FQDN_FORGEJO_3000 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=postgres + - HOST=postgresql + - NAME=${POSTGRESQL_DATABASE-forgejo} + - USER=$SERVICE_USER_POSTGRESQL + - PASSWD=$SERVICE_PASSWORD_POSTGRESQL + - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true + - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false + - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + depends_on: + postgresql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + command: >- + bash -c ' + /bin/s6-svscan /etc/s6 & + sleep 10 ; + su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; + sleep infinity + ' + + postgresql: + image: postgres:16-alpine + volumes: + - forgejo-postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_DB=${POSTGRESQL_DATABASE} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + + docker-in-docker: + image: docker:dind + hostname: docker + privileged: true + restart: 'unless-stopped' + healthcheck: + disable: true + environment: + DOCKER_TLS_CERTDIR: /certs + DOCKER_HOST: docker-in-docker + volumes: + - forgejo-did-certs:/certs + + runner-register: + image: code.forgejo.org/forgejo/runner:3.5.0 + restart: 'no' + links: + - docker-in-docker + - forgejo + environment: + - DOCKER_HOST=tcp://docker-in-docker:2376 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + volumes: + - forgejo-runner-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + healthcheck: + disable: true + user: 0:0 + command: >- + bash -ec ' + while : ; do + forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; + sleep 1 ; + done ; + sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + forgejo-runner generate-config > config.yml ; + sed -i -e "s|network: .*|network: host|" config.yml ; + sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; + sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; + sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; + chown -R 1000:1000 /data ; + exit 0 + ' + + runner: + image: code.forgejo.org/forgejo/runner:3.5.0 + links: + - docker-in-docker + - forgejo + depends_on: + docker-in-docker: + condition: service_started + environment: + - DOCKER_HOST=tcp://docker:2376 + - DOCKER_CERT_PATH=/certs/client + - DOCKER_TLS_VERIFY=1 + user: 1000:1000 + volumes: + - forgejo-runner-data:/data + - forgejo-did-certs:/certs + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + restart: 'unless-stopped' + healthcheck: + disable: true + command: >- + bash -c ' + while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done + ' \ No newline at end of file diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml new file mode 100644 index 000000000..ea476efa9 --- /dev/null +++ b/templates/compose/forgejo-with-runner.yaml @@ -0,0 +1,105 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - SERVICE_FQDN_FORGEJO_3000 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - USER_UID=1000 + - USER_GID=1000 + - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true + - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false + - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + ports: + - 22222:22 + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 + command: >- + bash -c ' + /bin/s6-svscan /etc/s6 & + sleep 10 ; + su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; + sleep infinity + ' + + docker-in-docker: + image: docker:dind + hostname: docker + privileged: true + restart: 'unless-stopped' + healthcheck: + disable: true + environment: + DOCKER_TLS_CERTDIR: /certs + DOCKER_HOST: docker-in-docker + volumes: + - forgejo-did-certs:/certs + + runner-register: + image: code.forgejo.org/forgejo/runner:3.5.0 + restart: 'no' + links: + - docker-in-docker + - forgejo + environment: + - DOCKER_HOST=tcp://docker-in-docker:2376 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + volumes: + - forgejo-runner-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + healthcheck: + disable: true + user: 0:0 + command: >- + bash -ec ' + while : ; do + forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; + sleep 1 ; + done ; + sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + forgejo-runner generate-config > config.yml ; + sed -i -e "s|network: .*|network: host|" config.yml ; + sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; + sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; + sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; + chown -R 1000:1000 /data ; + exit 0 + ' + + runner: + image: code.forgejo.org/forgejo/runner:3.5.0 + links: + - docker-in-docker + - forgejo + depends_on: + docker-in-docker: + condition: service_started + environment: + - DOCKER_HOST=tcp://docker:2376 + - DOCKER_CERT_PATH=/certs/client + - DOCKER_TLS_VERIFY=1 + user: 1000:1000 + volumes: + - forgejo-runner-data:/data + - forgejo-did-certs:/certs + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + restart: 'unless-stopped' + healthcheck: + disable: true + command: >- + bash -c ' + while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done + ' \ No newline at end of file diff --git a/templates/compose/forgejo.yaml b/templates/compose/forgejo.yaml new file mode 100644 index 000000000..fe633d609 --- /dev/null +++ b/templates/compose/forgejo.yaml @@ -0,0 +1,22 @@ +# documentation: https://forgejo.org/docs +# slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. +# tags: version control, collaboration, code, hosting, lightweight +# logo: svgs/forgejo.svg + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:7 + environment: + - USER_UID=1000 + - USER_GID=1000 + ports: + - 22222:22 + volumes: + - forgejo-data:/data + - forgejo-timezone:/etc/timezone:ro + - forgejo-localtime:/etc/localtime:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 2s + timeout: 10s + retries: 15 \ No newline at end of file From c1612a9e88d67270a8a498feb0b5568eab520def Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 29 Jun 2024 23:12:43 -0400 Subject: [PATCH 006/295] Fixes environment variables --- templates/compose/forgejo-with-mariadb.yaml | 12 +++++++----- templates/compose/forgejo-with-mysql.yaml | 11 ++++++----- templates/compose/forgejo-with-postgresql.yaml | 12 +++++++----- .../compose/forgejo-with-runner-mariadb.yaml | 15 ++++++++------- .../compose/forgejo-with-runner-with-mysql.yaml | 15 ++++++++------- .../forgejo-with-runner-with-postgresql.yaml | 15 ++++++++------- templates/compose/forgejo-with-runner.yaml | 5 +++-- templates/compose/forgejo.yaml | 2 ++ 8 files changed, 49 insertions(+), 38 deletions(-) diff --git a/templates/compose/forgejo-with-mariadb.yaml b/templates/compose/forgejo-with-mariadb.yaml index e1d49515b..6b58b683c 100644 --- a/templates/compose/forgejo-with-mariadb.yaml +++ b/templates/compose/forgejo-with-mariadb.yaml @@ -7,13 +7,15 @@ services: forgejo: image: codeberg.org/forgejo/forgejo:7 environment: + - SERVICE_FQDN_FORGEJO_3000 + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=mysql - - HOST=mariadb - - NAME=${MYSQL_DATABASE-forgejo} - - USER=$SERVICE_USER_MYSQL - - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=mariadb + - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_MYSQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL volumes: - forgejo-data:/data - forgejo-timezone:/etc/timezone:ro diff --git a/templates/compose/forgejo-with-mysql.yaml b/templates/compose/forgejo-with-mysql.yaml index f46b2c447..2029ba39f 100644 --- a/templates/compose/forgejo-with-mysql.yaml +++ b/templates/compose/forgejo-with-mysql.yaml @@ -8,13 +8,14 @@ services: image: codeberg.org/forgejo/forgejo:7 environment: - SERVICE_FQDN_FORGEJO_3000 + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=mysql - - HOST=mysql - - NAME=${MYSQL_DATABASE-forgejo} - - USER=$SERVICE_USER_MYSQL - - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=mysql + - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_MYSQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL volumes: - forgejo-data:/data - forgejo-timezone:/etc/timezone:ro diff --git a/templates/compose/forgejo-with-postgresql.yaml b/templates/compose/forgejo-with-postgresql.yaml index 4c39fc1b9..4549ab70f 100644 --- a/templates/compose/forgejo-with-postgresql.yaml +++ b/templates/compose/forgejo-with-postgresql.yaml @@ -7,13 +7,15 @@ services: forgejo: image: codeberg.org/forgejo/forgejo:7 environment: + - SERVICE_FQDN_FORGEJO_3000 + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=postgres - - HOST=postgresql - - NAME=${POSTGRESQL_DATABASE-forgejo} - - USER=$SERVICE_USER_POSTGRESQL - - PASSWD=$SERVICE_PASSWORD_POSTGRESQL + - FORGEJO__database__DB_TYPE=postgres + - FORGEJO__database__HOST=postgresql + - FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL volumes: - forgejo-data:/data - forgejo-timezone:/etc/timezone:ro diff --git a/templates/compose/forgejo-with-runner-mariadb.yaml b/templates/compose/forgejo-with-runner-mariadb.yaml index 1f4b932d1..973d5e900 100644 --- a/templates/compose/forgejo-with-runner-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-mariadb.yaml @@ -1,6 +1,6 @@ # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. -# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# tags: version control, collaboration, code, hosting, lightweight, runner, mariadb, actions, cicd, ci # logo: svgs/forgejo.svg services: @@ -8,14 +8,15 @@ services: image: codeberg.org/forgejo/forgejo:7 environment: - SERVICE_FQDN_FORGEJO_3000 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=mysql - - HOST=mariadb - - NAME=${MYSQL_DATABASE-forgejo} - - USER=$SERVICE_USER_MYSQL - - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=mariadb + - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_MYSQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index 0dd87767e..3d0cae916 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -1,6 +1,6 @@ # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. -# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# tags: version control, collaboration, code, hosting, lightweight, runner, mysql, actions, cicd, ci # logo: svgs/forgejo.svg services: @@ -8,14 +8,15 @@ services: image: codeberg.org/forgejo/forgejo:7 environment: - SERVICE_FQDN_FORGEJO_3000 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=mysql - - HOST=mysql - - NAME=${MYSQL_DATABASE-forgejo} - - USER=$SERVICE_USER_MYSQL - - PASSWD=$SERVICE_PASSWORD_MYSQL + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=mysql + - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_MYSQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index 590ba7617..040626f9f 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -1,6 +1,6 @@ # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. -# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# tags: version control, collaboration, code, hosting, lightweight, runner, postresql, actions, cicd, ci # logo: svgs/forgejo.svg services: @@ -8,14 +8,15 @@ services: image: codeberg.org/forgejo/forgejo:7 environment: - SERVICE_FQDN_FORGEJO_3000 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 - - DB_TYPE=postgres - - HOST=postgresql - - NAME=${POSTGRESQL_DATABASE-forgejo} - - USER=$SERVICE_USER_POSTGRESQL - - PASSWD=$SERVICE_PASSWORD_POSTGRESQL + - FORGEJO__database__DB_TYPE=postgres + - FORGEJO__database__HOST=postgresql + - FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo} + - FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL + - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index ea476efa9..e375279be 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -1,6 +1,6 @@ # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. -# tags: version control, collaboration, code, hosting, lightweight, runner, actions +# tags: version control, collaboration, code, hosting, lightweight, runner, actions, cicd, ci # logo: svgs/forgejo.svg services: @@ -8,9 +8,10 @@ services: image: codeberg.org/forgejo/forgejo:7 environment: - SERVICE_FQDN_FORGEJO_3000 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 + - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions diff --git a/templates/compose/forgejo.yaml b/templates/compose/forgejo.yaml index fe633d609..3f13f1323 100644 --- a/templates/compose/forgejo.yaml +++ b/templates/compose/forgejo.yaml @@ -7,6 +7,8 @@ services: forgejo: image: codeberg.org/forgejo/forgejo:7 environment: + - SERVICE_FQDN_FORGEJO_3000 + - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} - USER_UID=1000 - USER_GID=1000 ports: From 204aaf5dfa10935ebd699040de4ac52d56e333ca Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 29 Jun 2024 23:13:45 -0400 Subject: [PATCH 007/295] Fixes file name --- ...-runner-mariadb.yaml => forgejo-with-runner-with-mariadb.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename templates/compose/{forgejo-with-runner-mariadb.yaml => forgejo-with-runner-with-mariadb.yaml} (100%) diff --git a/templates/compose/forgejo-with-runner-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml similarity index 100% rename from templates/compose/forgejo-with-runner-mariadb.yaml rename to templates/compose/forgejo-with-runner-with-mariadb.yaml From 807304c50b395dff677ca0a37ecfbff63e1f7338 Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 29 Jun 2024 23:29:46 -0400 Subject: [PATCH 008/295] Adds healthcheck for DID --- templates/compose/forgejo-with-runner-with-mariadb.yaml | 5 ++++- templates/compose/forgejo-with-runner-with-mysql.yaml | 5 ++++- templates/compose/forgejo-with-runner-with-postgresql.yaml | 5 ++++- templates/compose/forgejo-with-runner.yaml | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/templates/compose/forgejo-with-runner-with-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml index 973d5e900..805aa0d9f 100644 --- a/templates/compose/forgejo-with-runner-with-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-with-mariadb.yaml @@ -63,7 +63,10 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + interval: 10s + timeout: 30s + retries: 10 environment: DOCKER_TLS_CERTDIR: /certs DOCKER_HOST: docker-in-docker diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index 3d0cae916..9487694af 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -63,7 +63,10 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + interval: 10s + timeout: 30s + retries: 10 environment: DOCKER_TLS_CERTDIR: /certs DOCKER_HOST: docker-in-docker diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index 040626f9f..bac4a4681 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -62,7 +62,10 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + interval: 10s + timeout: 30s + retries: 10 environment: DOCKER_TLS_CERTDIR: /certs DOCKER_HOST: docker-in-docker diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index e375279be..7865e8fa4 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -40,7 +40,10 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + interval: 10s + timeout: 30s + retries: 10 environment: DOCKER_TLS_CERTDIR: /certs DOCKER_HOST: docker-in-docker From 793f91e7fb1fa265c2042ed120749122c7d9b810 Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 29 Jun 2024 23:42:26 -0400 Subject: [PATCH 009/295] Adds healthcheck for runner --- templates/compose/forgejo-with-runner-with-mariadb.yaml | 5 ++++- templates/compose/forgejo-with-runner-with-mysql.yaml | 5 ++++- templates/compose/forgejo-with-runner-with-postgresql.yaml | 5 ++++- templates/compose/forgejo-with-runner.yaml | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/templates/compose/forgejo-with-runner-with-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml index 805aa0d9f..b137c9382 100644 --- a/templates/compose/forgejo-with-runner-with-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-with-mariadb.yaml @@ -125,7 +125,10 @@ services: - forgejo-localtime:/etc/localtime:ro restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "pgrep", "forgejo-runner"] + interval: 10s + timeout: 30s + retries: 10 command: >- bash -c ' while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index 9487694af..21c62c06d 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -125,7 +125,10 @@ services: - forgejo-localtime:/etc/localtime:ro restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "pgrep", "forgejo-runner"] + interval: 10s + timeout: 30s + retries: 10 command: >- bash -c ' while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index bac4a4681..486c7a462 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -124,7 +124,10 @@ services: - forgejo-localtime:/etc/localtime:ro restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "pgrep", "forgejo-runner"] + interval: 10s + timeout: 30s + retries: 10 command: >- bash -c ' while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index 7865e8fa4..2e526cbde 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -102,7 +102,10 @@ services: - forgejo-localtime:/etc/localtime:ro restart: 'unless-stopped' healthcheck: - disable: true + test: ["CMD", "pgrep", "forgejo-runner"] + interval: 10s + timeout: 30s + retries: 10 command: >- bash -c ' while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done From ea81d8ecfe811d31c6b914031e0d8d0c713e218f Mon Sep 17 00:00:00 2001 From: Italo Date: Thu, 4 Jul 2024 19:46:35 -0400 Subject: [PATCH 010/295] Adds external migration configuration --- templates/compose/forgejo-with-mariadb.yaml | 2 ++ templates/compose/forgejo-with-mysql.yaml | 2 ++ templates/compose/forgejo-with-postgresql.yaml | 2 ++ templates/compose/forgejo-with-runner-with-mariadb.yaml | 2 ++ templates/compose/forgejo-with-runner-with-mysql.yaml | 2 ++ templates/compose/forgejo-with-runner-with-postgresql.yaml | 2 ++ templates/compose/forgejo-with-runner.yaml | 2 ++ templates/compose/forgejo.yaml | 2 ++ 8 files changed, 16 insertions(+) diff --git a/templates/compose/forgejo-with-mariadb.yaml b/templates/compose/forgejo-with-mariadb.yaml index 6b58b683c..92e7843f1 100644 --- a/templates/compose/forgejo-with-mariadb.yaml +++ b/templates/compose/forgejo-with-mariadb.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql diff --git a/templates/compose/forgejo-with-mysql.yaml b/templates/compose/forgejo-with-mysql.yaml index 2029ba39f..9b2359c08 100644 --- a/templates/compose/forgejo-with-mysql.yaml +++ b/templates/compose/forgejo-with-mysql.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql diff --git a/templates/compose/forgejo-with-postgresql.yaml b/templates/compose/forgejo-with-postgresql.yaml index 4549ab70f..2a7596074 100644 --- a/templates/compose/forgejo-with-postgresql.yaml +++ b/templates/compose/forgejo-with-postgresql.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=postgres diff --git a/templates/compose/forgejo-with-runner-with-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml index b137c9382..372da3866 100644 --- a/templates/compose/forgejo-with-runner-with-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-with-mariadb.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index 21c62c06d..c7abc3193 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index 486c7a462..16c9278ff 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=postgres diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index 2e526cbde..9e54fdda0 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} diff --git a/templates/compose/forgejo.yaml b/templates/compose/forgejo.yaml index 3f13f1323..bb6846679 100644 --- a/templates/compose/forgejo.yaml +++ b/templates/compose/forgejo.yaml @@ -9,6 +9,8 @@ services: environment: - SERVICE_FQDN_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_FQDN_FORGEJO} + - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - USER_UID=1000 - USER_GID=1000 ports: From e1a585c1941b74573ba6ef4a3be6918d2c819382 Mon Sep 17 00:00:00 2001 From: Italo Date: Sat, 13 Jul 2024 23:32:34 -0400 Subject: [PATCH 011/295] Healtcheck done to the process name --- templates/compose/forgejo-with-runner-with-mariadb.yaml | 2 +- templates/compose/forgejo-with-runner-with-mysql.yaml | 2 +- templates/compose/forgejo-with-runner-with-postgresql.yaml | 2 +- templates/compose/forgejo-with-runner.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/compose/forgejo-with-runner-with-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml index 372da3866..a751ee284 100644 --- a/templates/compose/forgejo-with-runner-with-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-with-mariadb.yaml @@ -65,7 +65,7 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + test: ["CMD", "pgrep", "dockerd"] interval: 10s timeout: 30s retries: 10 diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index c7abc3193..ccc33644f 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -65,7 +65,7 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + test: ["CMD", "pgrep", "dockerd"] interval: 10s timeout: 30s retries: 10 diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index 16c9278ff..0b4dcd3fe 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -64,7 +64,7 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + test: ["CMD", "pgrep", "dockerd"] interval: 10s timeout: 30s retries: 10 diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index 9e54fdda0..abcaa6e7e 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -42,7 +42,7 @@ services: privileged: true restart: 'unless-stopped' healthcheck: - test: ["CMD", "nc", "-z", "127.0.0.1", "2376"] + test: ["CMD", "pgrep", "dockerd"] interval: 10s timeout: 30s retries: 10 From 633c8253ec1cd8ea51a0d1b18992ec3017aee149 Mon Sep 17 00:00:00 2001 From: Italo Date: Wed, 17 Jul 2024 14:53:45 -0400 Subject: [PATCH 012/295] Adds missing forgejo logo svg --- public/svgs/forgejo.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 public/svgs/forgejo.svg diff --git a/public/svgs/forgejo.svg b/public/svgs/forgejo.svg new file mode 100644 index 000000000..804b05e28 --- /dev/null +++ b/public/svgs/forgejo.svg @@ -0,0 +1 @@ + \ No newline at end of file From 48886cac84f9d502527f159ccf5bb542aabc5a99 Mon Sep 17 00:00:00 2001 From: Leonardo Cabeza Date: Fri, 19 Jul 2024 16:07:53 -0500 Subject: [PATCH 013/295] feat: add easyappointments service template --- public/svgs/easyappointments.png | Bin 0 -> 25264 bytes templates/compose/easyappointments.yaml | 37 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 public/svgs/easyappointments.png create mode 100644 templates/compose/easyappointments.yaml diff --git a/public/svgs/easyappointments.png b/public/svgs/easyappointments.png new file mode 100644 index 0000000000000000000000000000000000000000..8f00d3353100889943d50ad01df93fa474ce6df6 GIT binary patch literal 25264 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 z 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 o$j=D)|L*($mmforc+Ais(jQ{`u literal 0 HcmV?d00001 diff --git a/templates/compose/easyappointments.yaml b/templates/compose/easyappointments.yaml new file mode 100644 index 000000000..d4b371817 --- /dev/null +++ b/templates/compose/easyappointments.yaml @@ -0,0 +1,37 @@ +# documentation: https://easyappointments.org/ +# slogan: SCHEDULE ANYTHING. - Let's start with easy! Get the best free online appointment scheduler on your server, today. +# tags: calendar, scheduling, database +# logo: svgs/easyappointments.png +# port: 80 + +services: + easyappointments: + image: alextselegidis/easyappointments:latest + restart: unless-stopped + environment: + - SERVICE_FQDN_EASYAPPOINTMENTS_80 + - BASE_URL=${SERVICE_FQDN_EASYAPPOINTMENTS} + - DB_HOST=mysql + - DB_NAME=easyappointments + - DB_USERNAME=root + - DB_PASSWORD=${SERVICE_PASSWORD_EASYAPPOINTMENTS} + depends_on: + - mysql + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 30 + mysql: + image: 'mysql:8.0' + restart: unless-stopped + volumes: + - './docker/mysql:/var/lib/mysql' + environment: + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_EASYAPPOINTMENTS} + - MYSQL_DATABASE=easyappointments + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 From 6b178f8b2e646728203bf4a7a7135dad6621ba29 Mon Sep 17 00:00:00 2001 From: johann Date: Wed, 24 Jul 2024 16:09:50 +0200 Subject: [PATCH 014/295] added bookstack template --- templates/compose/bookstack.yaml | 59 ++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 templates/compose/bookstack.yaml diff --git a/templates/compose/bookstack.yaml b/templates/compose/bookstack.yaml new file mode 100644 index 000000000..f374314af --- /dev/null +++ b/templates/compose/bookstack.yaml @@ -0,0 +1,59 @@ +# documentation: https://www.bookstackapp.com/docs/ +# slogan: BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information +# tags: free-and-open-source,mfa,dark-light-themes,searchable,connected,simple-interface,diagramms,notes +# port: 6875 + +services: + bookstack: + image: lscr.io/linuxserver/bookstack + container_name: bookstack + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + - APP_URL=$SERVICE_FQDN_BOOKSTACK + - DB_HOST=bookstack_db + - DB_PORT=3306 + - DB_USER=$SERVICE_USER_MYSQL + - DB_PASS=$SERVICE_PASSWORD_MYSQL + - DB_DATABASE=${MYSQL_DATABASE-bookstackapp} + - QUEUE_CONNECTION=$QUEUE_CONNECTION + volumes: + - 'bookstack_app_data:/config' + ports: + - '6875:80' + restart: unless-stopped + healthcheck: + test: + - CMD-SHELL + - 'wget -qO- http://127.0.0.1:80/' + interval: 5s + timeout: 20s + retries: 10 + depends_on: + bookstack_db: + condition: service_healthy + bookstack_db: + image: lscr.io/linuxserver/mariadb + container_name: bookstack_db + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + volumes: + - 'bookstack_db_data:/config' + restart: unless-stopped + healthcheck: + test: + - CMD + - mysqladmin + - ping + - '-h' + - 127.0.0.1 + interval: 5s + timeout: 20s + retries: 10 From 380f2f4029aea3a9dcb04111a8d6db657f767a39 Mon Sep 17 00:00:00 2001 From: Juan Felipe Date: Tue, 30 Jul 2024 18:17:38 -0300 Subject: [PATCH 015/295] feat: Add Mautic 4 and 5 to service templates --- public/svgs/mautic.svg | 17 +++++ templates/compose/mautic4.yaml | 46 ++++++++++++++ templates/compose/mautic5.yaml | 111 +++++++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 public/svgs/mautic.svg create mode 100644 templates/compose/mautic4.yaml create mode 100644 templates/compose/mautic5.yaml diff --git a/public/svgs/mautic.svg b/public/svgs/mautic.svg new file mode 100644 index 000000000..b528f72ef --- /dev/null +++ b/public/svgs/mautic.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/templates/compose/mautic4.yaml b/templates/compose/mautic4.yaml new file mode 100644 index 000000000..f1e567453 --- /dev/null +++ b/templates/compose/mautic4.yaml @@ -0,0 +1,46 @@ +# documentation: https://www.mautic.org/ +# slogan: Mautic v4 Open Source Marketing Automation +# tags: php,mautic,marketing,automation,email,service,4,open,source,crm +# logo: svgs/mautic.svg +# port: 8880 + +services: + rabbitmq: + image: 'rabbitmq:3' + environment: + - 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST:-mautic}' + volumes: + - 'rabbitmq-data:/var/lib/rabbitmq' + database: + image: powertic/percona-docker + environment: + MYSQL_ROOT_PASSWORD: ${SERVICE_PASSWORD_64_MYSQL} + volumes: + - database:/var/lib/mysql + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --sql-mode="" + mautic: + image: mautic/mautic:v4-fpm + volumes: + - mautic_data:/var/www/html + environment: + - SERVICE_FQDN_MAUTIC_80 + - MAUTIC_DB_HOST=database + - MAUTIC_DB_USER=root + - MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL} + - MAUTIC_DB_NAME=mautic4 + - MAUTIC_RUN_MIGRATIONS=true + - MAUTIC_RUN_CRON_JOBS=false + - MAUTIC_RABIITMQ_HOST=rabbitmq + - MAUTIC_RABIITMQ_PORT=5672 + - MAUTIC_RABIITMQ_USER=guest + - MAUTIC_RABIITMQ_PASSWORD=guest + - MAUTIC_RABIITMQ_VHOST=mautic + - MAUTIC_ADMIN_EMAIL=${MAUTIC_ADMIN_EMAIL} + - MAUTIC_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - MAUTIC_ADMIN_FIRSTNAME=${MAUTIC_ADMIN_FIRSTNAME} + - MAUTIC_ADMIN_LASTNAME=${MAUTIC_ADMIN_LASTNAME} + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 diff --git a/templates/compose/mautic5.yaml b/templates/compose/mautic5.yaml new file mode 100644 index 000000000..309a619d2 --- /dev/null +++ b/templates/compose/mautic5.yaml @@ -0,0 +1,111 @@ +# documentation: https://www.mautic.org/ +# slogan: Mautic v5 Open Source Marketing Automation +# tags: php,mautic,marketing,automation,email,service,5,open,source,crm +# logo: svgs/mautic.svg +# port: 8880 + +services: + db: + image: 'mysql:8.0' + environment: + - 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_64_MYSQLROOT}' + - 'MYSQL_DATABASE=${MYSQL_DATABASE}' + - 'MYSQL_USER=${MYSQL_USER}' + - 'MYSQL_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' + volumes: + - 'mysql-data:/var/lib/mysql' + healthcheck: + test: 'mysqladmin --user=$$MYSQL_USER --password=$$SERVICE_PASSWORD_64_MYSQL ping' + start_period: 5s + interval: 5s + timeout: 5s + retries: 10 + rabbitmq: + image: 'rabbitmq:3' + environment: + - 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}' + volumes: + - 'rabbitmq-data:/var/lib/rabbitmq' + mautic_web: + image: 'mautic/mautic:latest' + ports: + - 8880:80 + volumes: + - './mautic/config:/var/www/html/config:z' + - './mautic/logs:/var/www/html/var/logs:z' + - './mautic/media/files:/var/www/html/docroot/media/files:z' + - './mautic/media/images:/var/www/html/docroot/media/images:z' + - './cron:/opt/mautic/cron:z' + environment: + - SERVICE_FQDN_MAUTIC_80 + - 'DOCKER_MAUTIC_LOAD_TEST_DATA=${MAUTIC_LOAD_TEST_DATA:-false}' + - 'DOCKER_MAUTIC_RUN_MIGRATIONS=${MAUTIC_RUN_MIGRATIONS:-false}' + - 'MAUTIC_DB_HOST=${MYSQL_HOST}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' + - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + depends_on: + db: + condition: service_healthy + mautic_cron: + image: 'mautic/mautic:latest' + links: + - 'db:mysql' + volumes: + - './mautic/config:/var/www/html/config:z' + - './mautic/logs:/var/www/html/var/logs:z' + - './mautic/media/files:/var/www/html/docroot/media/files:z' + - './mautic/media/images:/var/www/html/docroot/media/images:z' + - './cron:/opt/mautic/cron:z' + environment: + - DOCKER_MAUTIC_ROLE=mautic_cron + - 'MAUTIC_DB_HOST=${MYSQL_HOST}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' + - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + depends_on: + mautic_web: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + mautic_worker: + image: 'mautic/mautic:latest' + links: + - 'db:mysql' + volumes: + - './mautic/config:/var/www/html/config:z' + - './mautic/logs:/var/www/html/var/logs:z' + - './mautic/media/files:/var/www/html/docroot/media/files:z' + - './mautic/media/images:/var/www/html/docroot/media/images:z' + - './cron:/opt/mautic/cron:z' + environment: + - DOCKER_MAUTIC_ROLE=mautic_worker + - 'MAUTIC_DB_HOST=${MYSQL_HOST}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' + - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + depends_on: + mautic_web: + condition: service_health + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 From 18ae29ba99d61b8275776c9d975ddb39092c9144 Mon Sep 17 00:00:00 2001 From: Alex Renoki Date: Wed, 31 Jul 2024 07:11:08 +0300 Subject: [PATCH 016/295] Added langfuse --- public/svgs/langfuse.png | Bin 0 -> 9788 bytes templates/compose/langfuse.yaml | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 public/svgs/langfuse.png create mode 100644 templates/compose/langfuse.yaml diff --git a/public/svgs/langfuse.png b/public/svgs/langfuse.png new file mode 100644 index 0000000000000000000000000000000000000000..8dec0fe4ae1dd9c91ea9e8e0d6ed89227fef4143 GIT binary patch literal 9788 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 KDb*-ghx{KZU0w?S literal 0 HcmV?d00001 diff --git a/templates/compose/langfuse.yaml b/templates/compose/langfuse.yaml new file mode 100644 index 000000000..1512b0f07 --- /dev/null +++ b/templates/compose/langfuse.yaml @@ -0,0 +1,46 @@ +# documentation: https://langfuse.com/docs +# slogan: Langfuse is an open-source LLM engineering platform that helps teams collaboratively debug, analyze, and iterate on their LLM applications. +# tags: ai, qdrant, weaviate, langchain, openai, gpt, llm, lmops, langfuse, llmops +# logo: svgs/langfuse.png +# port: 3000 + +version: "3" + +services: + langfuse: + image: langfuse/langfuse + restart: always + environment: + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-langfuse} + - NEXTAUTH_URL=$SERVICE_FQDN_LANGFUSE_3000 + - NEXTAUTH_SECRET=$NEXTAUTH_SECRET + - SALT=$SERVICE_PASSWORD_SALT + - AUTH_DISABLE_SIGNUP=${AUTH_DISABLE_SIGNUP:-false} + - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-false} + - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} + entrypoint: + - node + - web/server.js + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/api/public/health"] + interval: 5s + timeout: 5s + retries: 3 + depends_on: + postgres: + condition: service_healthy + postgres: + image: "postgres:16-alpine" + environment: + - POSTGRES_DB=${POSTGRES_DB:-langfuse} + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_USER=$SERVICE_USER_POSTGRES + volumes: + - "pg-data:/var/lib/postgresql/data" + healthcheck: + test: + - CMD-SHELL + - "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}" + interval: 5s + timeout: 5s + retries: 10 From 22a58eea8fcf642b5c8d551b1b7a274de85c8194 Mon Sep 17 00:00:00 2001 From: Telokis <6382729+Telokis@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:44:11 +0200 Subject: [PATCH 017/295] Add Organizr --- public/svgs/organizr.png | Bin 0 -> 13884 bytes templates/compose/organizr.yaml | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 public/svgs/organizr.png create mode 100644 templates/compose/organizr.yaml diff --git a/public/svgs/organizr.png b/public/svgs/organizr.png new file mode 100644 index 0000000000000000000000000000000000000000..92541ea72a2d618694839c857e00da415ace706d GIT binary patch literal 13884 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 S0->kEV1P0z(zTMNq5lKhnC{d7 literal 0 HcmV?d00001 diff --git a/templates/compose/organizr.yaml b/templates/compose/organizr.yaml new file mode 100644 index 000000000..badbd14ae --- /dev/null +++ b/templates/compose/organizr.yaml @@ -0,0 +1,20 @@ +# documentation: https://docs.organizr.app/ +# slogan: Homelab Services Organizer +# tags: tool +# logo: svgs/organizer.png +# port: 80 + +services: + organizr: + image: organizr/organizr:latest + restart: unless-stopped + environment: + - SERVICE_FQDN_ORGANIZR_80 + - branch=v2-master + volumes: + - organizr-data:/config + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 2s + timeout: 10s + retries: 30 From a2199429878a380e30021d1a10d7ca80acf18107 Mon Sep 17 00:00:00 2001 From: Telokis <6382729+Telokis@users.noreply.github.com> Date: Tue, 6 Aug 2024 21:44:34 +0200 Subject: [PATCH 018/295] Fix icon path --- templates/compose/organizr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/organizr.yaml b/templates/compose/organizr.yaml index badbd14ae..df95730c4 100644 --- a/templates/compose/organizr.yaml +++ b/templates/compose/organizr.yaml @@ -1,7 +1,7 @@ # documentation: https://docs.organizr.app/ # slogan: Homelab Services Organizer # tags: tool -# logo: svgs/organizer.png +# logo: svgs/organizr.png # port: 80 services: From 319457020c41a4ffbe5c618927a1f2fea2cb268a Mon Sep 17 00:00:00 2001 From: nekomi2 Date: Thu, 8 Aug 2024 21:31:33 +0700 Subject: [PATCH 019/295] add joplin compose --- public/svgs/joplin.png | Bin 0 -> 5443 bytes templates/compose/joplin.yaml | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 public/svgs/joplin.png create mode 100644 templates/compose/joplin.yaml diff --git a/public/svgs/joplin.png b/public/svgs/joplin.png new file mode 100644 index 0000000000000000000000000000000000000000..d17a1d2c170d22bbe2c54b05689c6e700ea723a7 GIT binary patch literal 5443 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 Date: Sun, 11 Aug 2024 15:11:52 +0200 Subject: [PATCH 020/295] Improve healthcheck --- templates/compose/organizr.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/compose/organizr.yaml b/templates/compose/organizr.yaml index df95730c4..658e29c65 100644 --- a/templates/compose/organizr.yaml +++ b/templates/compose/organizr.yaml @@ -14,7 +14,7 @@ services: volumes: - organizr-data:/config healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:80"] - interval: 2s - timeout: 10s - retries: 30 + test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] + interval: 10s + timeout: 1s + retries: 3 From 4f23d3880d49fc9797f19f3886a459ab1540d5b9 Mon Sep 17 00:00:00 2001 From: sroepges <47949518+sroepges@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:42:42 +0200 Subject: [PATCH 021/295] fix: update mattermost image tag and add default port --- templates/compose/mattermost.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/compose/mattermost.yaml b/templates/compose/mattermost.yaml index ce3e09531..b750aa6fd 100644 --- a/templates/compose/mattermost.yaml +++ b/templates/compose/mattermost.yaml @@ -2,10 +2,11 @@ # documentation: https://docs.mattermost.com # slogan: Mattermost is an open source, self-hosted Slack-alternative. # tags: mattermost,slack,alternative +# port: 8065 services: mattermost: - image: mattermost/mattermost-team-edition:9 + image: mattermost/mattermost-team-edition:release-9 volumes: - mattermost-data:/mattermost environment: From 7f59efd27cda84a4d88d8d810520c25204868dbc Mon Sep 17 00:00:00 2001 From: sroepges <47949518+sroepges@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:23:54 +0200 Subject: [PATCH 022/295] chore: add mattermost logo as svg --- public/svgs/mattermost.svg | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 public/svgs/mattermost.svg diff --git a/public/svgs/mattermost.svg b/public/svgs/mattermost.svg new file mode 100644 index 000000000..b01d38eb7 --- /dev/null +++ b/public/svgs/mattermost.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From b8cdb40ce52ee3b7e2e21dbc1b23f70babcfc80f Mon Sep 17 00:00:00 2001 From: sroepges <47949518+sroepges@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:26:42 +0200 Subject: [PATCH 023/295] chore: add mattermost svg to compose --- templates/compose/mattermost.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/compose/mattermost.yaml b/templates/compose/mattermost.yaml index b750aa6fd..2eda3e4f5 100644 --- a/templates/compose/mattermost.yaml +++ b/templates/compose/mattermost.yaml @@ -2,6 +2,7 @@ # documentation: https://docs.mattermost.com # slogan: Mattermost is an open source, self-hosted Slack-alternative. # tags: mattermost,slack,alternative +# logo: svgs/mattermost.svg # port: 8065 services: From ce926afdaad018d2b575e86dc5d4e7fd06ed768f Mon Sep 17 00:00:00 2001 From: Alex Renoki Date: Sat, 17 Aug 2024 06:16:38 +0300 Subject: [PATCH 024/295] Bump to v2 --- templates/compose/langfuse.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/langfuse.yaml b/templates/compose/langfuse.yaml index 1512b0f07..400e6ec75 100644 --- a/templates/compose/langfuse.yaml +++ b/templates/compose/langfuse.yaml @@ -8,7 +8,7 @@ version: "3" services: langfuse: - image: langfuse/langfuse + image: langfuse/langfuse:2 restart: always environment: - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-langfuse} From 71bb1f5e17c6b4947adb5c0c9f9403fbaa1cc030 Mon Sep 17 00:00:00 2001 From: Alex Renoki Date: Sat, 17 Aug 2024 06:20:42 +0300 Subject: [PATCH 025/295] Added litellm --- public/svgs/litellm.svg | 1 + templates/compose/litellm.yaml | 177 +++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 public/svgs/litellm.svg create mode 100644 templates/compose/litellm.yaml diff --git a/public/svgs/litellm.svg b/public/svgs/litellm.svg new file mode 100644 index 000000000..01830c3f6 --- /dev/null +++ b/public/svgs/litellm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/litellm.yaml b/templates/compose/litellm.yaml new file mode 100644 index 000000000..b16e08fbe --- /dev/null +++ b/templates/compose/litellm.yaml @@ -0,0 +1,177 @@ +# documentation: https://docs.litellm.ai +# slogan: Call all LLM APIs using the OpenAI format. Use Bedrock, Azure, OpenAI, Cohere, Anthropic, Ollama, Sagemaker, HuggingFace, Replicate, Groq (100+ LLMs) +# tags: ai, qdrant, weaviate, langchain, openai, gpt, llm, lmops, anthropic, cohere, ollama, sagemaker, huggingface, replicate, groq +# logo: svgs/litellm.svg +# port: 4000 + +volumes: + pg-data: null + redis-data: null + +services: + litellm: + image: "ghcr.io/berriai/litellm-database:main-latest" + restart: always + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + environment: + - LITELLM_LOG=ERROR + - LITELLM_MODE=PRODUCTION + - "LITELLM_MASTER_KEY=${SERVICE_PASSWORD_32_LITELLM_MASTER_KEY}" + - "UI_USERNAME=${SERVICE_USER_UI}" + - "UI_PASSWORD=${SERVICE_PASSWORD_UI}" + - "DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-litellm}" + - REDIS_HOST=redis + - REDIS_PORT=6379 + - "POSTGRES_USER=${SERVICE_USER_POSTGRES}" + - "POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}" + - "POSTGRES_DB=${POSTGRES_DB:-litellm}" + - "OPENAI_API_KEY=${OPENAI_API_KEY}" + - "OPENAI_API_BASE=${OPENAI_API_BASE}" + - "ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}" + - "ANTHROPIC_API_BASE=${ANTHROPIC_API_BASE}" + - "VOYAGE_API_KEY=${VOYAGE_API_KEY}" + - "VOYAGE_API_BASE=${VOYAGE_API_BASE}" + volumes: + - "./litellm-config.yaml:/app/config.yaml" + - type: bind + source: ./docker/app/config.yaml + target: /app/config.yaml + content: | + general_settings: + proxy_batch_write_at: 60 + + router_settings: + routing_strategy: usage-based-routing-v2 + redis_host: os.environ/REDIS_HOST + redis_port: os.environ/REDIS_PORT + redis_password: os.environ/REDIS_PASSWORD + enable_pre_call_check: true + + litellm_settings: + set_verbose: false + json_logs: true + log_raw_request_response: true + # turn_off_message_logging: false + # redact_user_api_key_info: false + drop_params: true + # max_budget: 100 + # budget_duration: 30d + num_retries: 3 + request_timeout: 600 + telemetry: false + cache: true + cache_params: + type: redis + host: os.environ/REDIS_HOST + port: os.environ/REDIS_PORT + password: os.environ/REDIS_PASSWORD + namespace: "litellm_cache" + ttl: 600 + # success_callback: + # - "langfuse" + # - "prometheus" + # failure_callback: + # - "langfuse" + # - "prometheus" + model_list: + # OpenAI + - model_name: gpt-3.5-turbo + litellm_params: + model: openai/gpt-3.5-turbo + api_key: os.environ/OPENAI_API_KEY + api_base: os.environ/OPENAI_API_BASE + - model_name: gpt-4 + litellm_params: + model: openai/gpt-4 + api_key: os.environ/OPENAI_API_KEY + api_base: os.environ/OPENAI_API_BASE + - model_name: gpt-4o + litellm_params: + model: openai/gpt-4o + api_key: os.environ/OPENAI_API_KEY + api_base: os.environ/OPENAI_API_BASE + - model_name: gpt-4o-mini + litellm_params: + model: openai/gpt-4o-mini + api_key: os.environ/OPENAI_API_KEY + api_base: os.environ/OPENAI_API_BASE + # Anthropic + - model_name: claude-3-haiku + litellm_params: + model: claude-3-haiku-20240307 + api_key: "os.environ/ANTHROPIC_API_KEY" + api_base: "os.environ/ANTHROPIC_API_BASE" + - model_name: claude-3.5-sonnet + litellm_params: + model: claude-3-5-sonnet-20240620 + api_key: "os.environ/ANTHROPIC_API_KEY" + api_base: "os.environ/ANTHROPIC_API_BASE" + # VoyageAI + - model_name: voyage-law-2 + model_info: + output_vector_size: 1024 + litellm_params: + model: voyage/voyage-law-2 + api_key: "os.environ/VOYAGE_API_KEY" + api_base: "os.environ/VOYAGE_API_BASE" + rpm: 300 + tpm: 1000000 + - model_name: voyage-multilingual-2 + model_info: + mode: embedding + max_tokens: 32000 + max_input_tokens: 32000 + output_vector_size: 1024 + litellm_params: + model: voyage/voyage-multilingual-2 + api_key: "os.environ/VOYAGE_API_KEY" + api_base: "os.environ/VOYAGE_API_BASE" + input_cost_per_token: 0.00000012 + output_cost_per_token: 0 + rpm: 300 + tpm: 1000000 + healthcheck: + test: + - CMD + - python + - "-c" + - "import requests as r;r.get('http://127.0.0.1:4000/health/liveliness').raise_for_status()" + interval: 5s + timeout: 5s + retries: 3 + command: + - "--config" + - /app/config.yaml + - "--port" + - "4000" + - "--num_workers" + - "8" + postgres: + image: "postgres:16-alpine" + environment: + - POSTGRES_DB=${POSTGRES_DB:-litellm} + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_USER=$SERVICE_USER_POSTGRES + volumes: + - "pg-data:/var/lib/postgresql/data" + healthcheck: + test: + - CMD-SHELL + - "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}" + interval: 5s + timeout: 5s + retries: 3 + redis: + image: redis:7-alpine + command: redis-server --appendonly yes + volumes: + - redis-data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 5s + retries: 3 From a6f457f2f3874179927180b37f3ef5fa803d1af7 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 17 Aug 2024 16:36:52 +0200 Subject: [PATCH 026/295] feat: add keycloak template --- public/svgs/keycloak.svg | 55 ++++++++++++++++++ templates/compose/keycloak-with-postgres.yaml | 58 +++++++++++++++++++ templates/compose/keycloak.yaml | 35 +++++++++++ 3 files changed, 148 insertions(+) create mode 100644 public/svgs/keycloak.svg create mode 100644 templates/compose/keycloak-with-postgres.yaml create mode 100644 templates/compose/keycloak.yaml diff --git a/public/svgs/keycloak.svg b/public/svgs/keycloak.svg new file mode 100644 index 000000000..849ac2759 --- /dev/null +++ b/public/svgs/keycloak.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/compose/keycloak-with-postgres.yaml b/templates/compose/keycloak-with-postgres.yaml new file mode 100644 index 000000000..a5cdd1646 --- /dev/null +++ b/templates/compose/keycloak-with-postgres.yaml @@ -0,0 +1,58 @@ +# documentation: https://www.keycloak.org +# slogan: Keycloak is an open-source Identity and Access Management tool. +# tags: keycloak,identity,access,management,iam,authentication,authorization,security,oauth2,openid-connect,sso,single-sign-on,saml,rbac,ldap,jwt,social-login +# logo: svgs/keycloak.svg +# port: 8080 + +services: + keycloak: + image: quay.io/keycloak/keycloak:25.0.2 + command: + - start + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + - KEYCLOAK_ADMIN=${KEYCLOAK_ADMIN:-admin} + - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD:-password} + - KC_DB=postgres + - KC_DB_USERNAME=${SERVICE_USER_DATABASE} + - KC_DB_PASSWORD=${SERVICE_PASSWORD_64_DATABASE} + - KC_DB_URL_PORT=5432 + - KC_DB_URL=jdbc:postgresql://postgres/${POSTGRESQL_DATABASE:-keycloak} + - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} + - KC_ENABLE_HTTPS=false + - KC_HTTP_ENABLED=true + - KC_HEALTH_ENABLED=true + - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} + - KC_DB_POOL_MIN_SIZE=${KEYCLOAK_DB_POOL_MIN_SIZE:-0} + - KC_DB_POOL_MAX_SIZE=${KEYCLOAK_DB_POOL_MAX_SIZE:-100} + - KC_METRICS_ENABLED=${KEYCLOAK_METRICS_ENABLED:-false} + - KC_DIR=${KEYCLOAK_DIR} + - KC_FILE=${KEYCLOAK_FILE} + - KC_OVERRIDE=${KEYCLOAK_OVERRIDE:-true} + volumes: + - keycloak-data:/opt/keycloak/data + depends_on: + postgres: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;"] + interval: 5s + timeout: 20s + retries: 10 + postgres: + image: postgres:16-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_DATABASE} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_DATABASE} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-keycloak} + healthcheck: + test: + - CMD-SHELL + - pg_isready -U $${SERVICE_USER_DATABASE} -d $${POSTGRESQL_DATABASE} + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/keycloak.yaml b/templates/compose/keycloak.yaml new file mode 100644 index 000000000..388d24d5b --- /dev/null +++ b/templates/compose/keycloak.yaml @@ -0,0 +1,35 @@ +# documentation: https://www.keycloak.org +# slogan: Keycloak is an open-source Identity and Access Management tool. +# tags: keycloak,identity,access,management,iam,authentication,authorization,security,oauth2,openid-connect,sso,single-sign-on,saml,rbac,ldap,jwt,social-login +# logo: svgs/keycloak.svg +# port: 8080 + +services: + keycloak: + image: quay.io/keycloak/keycloak:25.0.2 + command: + - start + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + - KEYCLOAK_ADMIN=${KEYCLOAK_ADMIN:-admin} + - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD:-password} + - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} + - KC_ENABLE_HTTPS=false + - KC_HTTP_ENABLED=true + - KC_HEALTH_ENABLED=true + - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} + - KC_DB_POOL_MIN_SIZE=${KEYCLOAK_DB_POOL_MIN_SIZE:-0} + - KC_DB_POOL_MAX_SIZE=${KEYCLOAK_DB_POOL_MAX_SIZE:-100} + - KC_METRICS_ENABLED=${KEYCLOAK_METRICS_ENABLED:-false} + - KC_DIR=${KEYCLOAK_DIR} + - KC_FILE=${KEYCLOAK_FILE} + - KC_OVERRIDE=${KEYCLOAK_OVERRIDE:-true} + volumes: + - keycloak-data:/opt/keycloak/data + healthcheck: + test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;"] + interval: 5s + timeout: 20s + retries: 10 From 2f356b16b66d15d65d108353094a5179243ce4e9 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 17 Aug 2024 16:41:21 +0200 Subject: [PATCH 027/295] feat: add onedev template --- public/svgs/onedev.svg | 51 +++++++++++++++++++++++++++++++++++ templates/compose/onedev.yaml | 41 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 public/svgs/onedev.svg create mode 100644 templates/compose/onedev.yaml diff --git a/public/svgs/onedev.svg b/public/svgs/onedev.svg new file mode 100644 index 000000000..fb9c9c060 --- /dev/null +++ b/public/svgs/onedev.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/onedev.yaml b/templates/compose/onedev.yaml new file mode 100644 index 000000000..87e719daf --- /dev/null +++ b/templates/compose/onedev.yaml @@ -0,0 +1,41 @@ +# documentation: https://docs.onedev.io/ +# slogan: Git server with CI/CD, kanban, and packages. Seamless integration. Unparalleled experience. +# tags: git, scm, ci, cd, kanban, packages, devops, collaboration, code, repository, management +# logo: svgs/onedev.svg +# port: 6610 +services: + onedev-app: + image: 1dev/server:latest + volumes: + - onedev-docker-sock:/var/run/docker.sock + - onedev-data:/opt/onedev + restart: unless-stopped + environment: + - hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect + - hibernate_connection_driver_class=org.postgresql.Driver + - hibernate_connection_url=jdbc:postgresql://postgres:5432/${POSTGRESQL_DATABASE:-onedev} + - hibernate_connection_username=${SERVICE_USER_DATABASE} + - hibernate_connection_password=${SERVICE_PASSWORD_64_DATABASE} + - initial_user=${SERVICE_USER_ONEDEV} + - initial_password=${SERVICE_PASSWORD_ONEDEV} + - initial_email=${ONEDEV_EMAIL:-mail@example.com} + - initial_server_url=${SERVICE_FQDN_ONEDEV_6610} + - initial_ssh_root_url=${SSH_ROOT_URL:-ssh://changeme:22} + depends_on: + postgres: + condition: service_healthy + healthcheck: + test: ["CMD", "true"] + postgres: + image: postgres:16-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_DATABASE} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_64_DATABASE} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-onedev} + healthcheck: + test: ["CMD-SHELL", "pg_isready"] + interval: 5s + timeout: 20s + retries: 10 \ No newline at end of file From 1653fcbddc1ea82275b5a1b17238a1216fa90264 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 11:58:55 +0200 Subject: [PATCH 028/295] feat: add ntfy template --- public/svgs/ntfy.svg | 1 + templates/compose/ntfy.yaml | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 public/svgs/ntfy.svg create mode 100644 templates/compose/ntfy.yaml diff --git a/public/svgs/ntfy.svg b/public/svgs/ntfy.svg new file mode 100644 index 000000000..9e5b5136f --- /dev/null +++ b/public/svgs/ntfy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml new file mode 100644 index 000000000..ec8c39d28 --- /dev/null +++ b/templates/compose/ntfy.yaml @@ -0,0 +1,26 @@ +# documentation: https://docs.ntfy.sh/ +# slogan: ntfy is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API. +# tags: ntfy, notification, push notification, pub-sub, notify +# logo: svgs/ntfy.svg +# port: 80 + +services: + ntfy: + image: binwiederhier/ntfy + container_name: ntfy + command: + - serve + environment: + - SERVICE_FQDN_NTFY + - TZ=Europe/Berlin + user: 1000:1000 + volumes: + - ntfy-cache:/var/cache/ntfy + - ntfy:/etc/ntfy + healthcheck: + test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] + interval: 60s + timeout: 10s + retries: 3 + start_period: 40s + restart: unless-stopped From dfb9081d4e9db3d93106dcefadadf2ea1030c26f Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 18 Aug 2024 12:32:20 +0200 Subject: [PATCH 029/295] Add traccar to service templates --- templates/compose/traccar.yml | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 templates/compose/traccar.yml diff --git a/templates/compose/traccar.yml b/templates/compose/traccar.yml new file mode 100644 index 000000000..d22385a75 --- /dev/null +++ b/templates/compose/traccar.yml @@ -0,0 +1,48 @@ +# documentation: https://www.traccar.org/documentation/ +# slogan: Traccar is a free and open source modern GPS tracking system. +# tags: traccar,gps,tracking,open,source +# logo: +# port: 8082 + +services: + traccar: + image: traccar/traccar + environment: + - SERVICE_FQDN_TRACCAR_8082 + - SERVICE_FQDN_TRACCAR_5159=/api + - CONFIG_USE_ENVIRONMENT_VARIABLES=true + - DATABASE_USER=$SERVICE_USER_POSTGRES + - DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES + volumes: + - type: bind + source: ./srv/traccar/conf/traccar.xml + target: /opt/traccar/conf/traccar.xml + content: | + + + + ./conf/default.xml + org.postgresql.Driver + jdbc:postgresql://postgres:5432/traccar + + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8082"] + interval: 5s + timeout: 20s + retries: 10 + depends_on: + postgres: + condition: service_healthy + postgres: + image: postgres:16-alpine + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=traccar + volumes: + - traccar-db-data:/var/lib/postgresql/data/ + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 From fd4316e2ed29bb9d6b44ce78d091d9ad3b3f22d1 Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 18 Aug 2024 13:10:19 +0200 Subject: [PATCH 030/295] Update traccar.yml --- templates/compose/traccar.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/templates/compose/traccar.yml b/templates/compose/traccar.yml index d22385a75..00ba1b699 100644 --- a/templates/compose/traccar.yml +++ b/templates/compose/traccar.yml @@ -9,7 +9,7 @@ services: image: traccar/traccar environment: - SERVICE_FQDN_TRACCAR_8082 - - SERVICE_FQDN_TRACCAR_5159=/api + - SERVICE_FQDN_TRACCAR_API_5159 - CONFIG_USE_ENVIRONMENT_VARIABLES=true - DATABASE_USER=$SERVICE_USER_POSTGRES - DATABASE_PASSWORD=$SERVICE_PASSWORD_POSTGRES @@ -25,11 +25,6 @@ services: org.postgresql.Driver jdbc:postgresql://postgres:5432/traccar - healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:8082"] - interval: 5s - timeout: 20s - retries: 10 depends_on: postgres: condition: service_healthy From 58831b89925b4d5cf26c46fb6324bce2e4059e00 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:11:24 +0200 Subject: [PATCH 031/295] fix: signup --- templates/compose/ntfy.yaml | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index ec8c39d28..850238427 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -11,14 +11,39 @@ services: command: - serve environment: - - SERVICE_FQDN_NTFY - - TZ=Europe/Berlin - user: 1000:1000 + - TZ=${TZ:-UTC} + - 'NTFY_BASE_URL=${SERVICE_FQDN_NTFY}' + - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db + - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db + - NTFY_AUTH_DEFAULT_ACCESS=read-write + - 'NTFY_UPSTREAM_BASE_URL=https://ntfy.sh' + - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} + - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} + - NTFY_CACHE_DURATION=${NTFY_CACHE_DURATION:-24h} + - NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=${NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT:-1G} + - NTFY_ATTACHMENT_FILE_SIZE_LIMIT=${NTFY_ATTACHMENT_FILE_SIZE_LIMIT:-10M} + - NTFY_ATTACHMENT_EXPIRY_DURATION=${NTFY_ATTACHMENT_EXPIRY_DURATION:-24h} + - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.deine-domain.de} + - NTFY_SMTP_SENDER_USER=${NTFY_SMTP_SENDER_USER:-no-reply@de} + - NTFY_SMTP_SENDER_PASS=${NTFY_SMTP_SENDER_PASS:-password} + - NTFY_SMTP_SENDER_FROM=${NTFY_SMTP_SENDER_FROM:-no-reply@de} + - NTFY_KEEPALIVE_INTERVAL=${NTFY_KEEPALIVE_INTERVAL:-5m} + - NTFY_MANAGER_INTERVAL=${NTFY_MANAGER_INTERVAL:-5m} + - NTFY_VISITOR_MESSAGE_DAILY_LIMIT=${NTFY_VISITOR_MESSAGE_DAILY_LIMIT:-100} + - NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT=${NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT:-1G} + - NTFY_UPSTREAM_BASE_URL=${SERVICE_FQDN_NTFY} + - NTFY_UPSTREAM_ACCESS_TOKEN=${UPSTREAM_ACCESS_TOKEN} + - NTFY_AUTH_DEFAULT_ACCESS=${NTFY_AUTH_DEFAULT_ACCESS:-read-write} + - NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY} + - NTFY_WEB_PUSH_PRIVATE_KEY=${NTFY_WEB_PUSH_PRIVATE_KEY} + - NTFY_WEB_PUSH_EMAIL_ADDRESS=${NTFY_WEB_PUSH_EMAIL_ADDRESS} volumes: - - ntfy-cache:/var/cache/ntfy - - ntfy:/etc/ntfy + - ./cache:/var/cache/ntfy + - ./db:/var/lib/ntfy/ healthcheck: - test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] + test: + - CMD-SHELL + - 'wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo ''"healthy"\s*:\s*true'' || exit 1' interval: 60s timeout: 10s retries: 3 From d5e6a643aaa0b9b3a67be1b556ccd1277f2b70bd Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:16:14 +0200 Subject: [PATCH 032/295] cleanup --- templates/compose/ntfy.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index 850238427..06187a368 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -12,11 +12,11 @@ services: - serve environment: - TZ=${TZ:-UTC} - - 'NTFY_BASE_URL=${SERVICE_FQDN_NTFY}' + - NTFY_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db - NTFY_AUTH_DEFAULT_ACCESS=read-write - - 'NTFY_UPSTREAM_BASE_URL=https://ntfy.sh' + - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh} - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} - NTFY_CACHE_DURATION=${NTFY_CACHE_DURATION:-24h} @@ -41,9 +41,7 @@ services: - ./cache:/var/cache/ntfy - ./db:/var/lib/ntfy/ healthcheck: - test: - - CMD-SHELL - - 'wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo ''"healthy"\s*:\s*true'' || exit 1' + test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] interval: 60s timeout: 10s retries: 3 From 2fc0ce172050e530b415463d15eccbfab8e68ff5 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sun, 18 Aug 2024 14:18:07 +0200 Subject: [PATCH 033/295] remove duplicated env --- templates/compose/ntfy.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml index 06187a368..3914136a5 100644 --- a/templates/compose/ntfy.yaml +++ b/templates/compose/ntfy.yaml @@ -15,7 +15,6 @@ services: - NTFY_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db - - NTFY_AUTH_DEFAULT_ACCESS=read-write - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh} - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true} - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true} @@ -23,7 +22,7 @@ services: - NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=${NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT:-1G} - NTFY_ATTACHMENT_FILE_SIZE_LIMIT=${NTFY_ATTACHMENT_FILE_SIZE_LIMIT:-10M} - NTFY_ATTACHMENT_EXPIRY_DURATION=${NTFY_ATTACHMENT_EXPIRY_DURATION:-24h} - - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.deine-domain.de} + - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.your-domain.de} - NTFY_SMTP_SENDER_USER=${NTFY_SMTP_SENDER_USER:-no-reply@de} - NTFY_SMTP_SENDER_PASS=${NTFY_SMTP_SENDER_PASS:-password} - NTFY_SMTP_SENDER_FROM=${NTFY_SMTP_SENDER_FROM:-no-reply@de} @@ -31,7 +30,6 @@ services: - NTFY_MANAGER_INTERVAL=${NTFY_MANAGER_INTERVAL:-5m} - NTFY_VISITOR_MESSAGE_DAILY_LIMIT=${NTFY_VISITOR_MESSAGE_DAILY_LIMIT:-100} - NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT=${NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT:-1G} - - NTFY_UPSTREAM_BASE_URL=${SERVICE_FQDN_NTFY} - NTFY_UPSTREAM_ACCESS_TOKEN=${UPSTREAM_ACCESS_TOKEN} - NTFY_AUTH_DEFAULT_ACCESS=${NTFY_AUTH_DEFAULT_ACCESS:-read-write} - NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY} From e1bcae7aafb83563e1b34aceef5d15d079c2211d Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:50:57 +0200 Subject: [PATCH 034/295] add resend.yaml --- templates/compose/resend.yaml | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 templates/compose/resend.yaml diff --git a/templates/compose/resend.yaml b/templates/compose/resend.yaml new file mode 100644 index 000000000..d72228747 --- /dev/null +++ b/templates/compose/resend.yaml @@ -0,0 +1,63 @@ +# documentation: https://docs.unsend.dev/get-started/self-hosting +# slogan: Unsend is an open-source alternative to Resend, Sendgrid, Mailgun and Postmark etc. +# tags: resend, mailer, marketing emails, transaction emails, self-hosting, postmark +# logo: svgs/unsend.svg +# port: 3000 + +services: + postgres: + image: postgres:16 + container_name: unsend-db-prod + restart: always + environment: + - POSTGRES_USER=${SERVICE_POSTGRES_USER:?err} + - POSTGRES_PASSWORD=${SERVICE_POSTGRES_PASSWORD:?err} + - POSTGRES_DB=${SERVICE_POSTGRES_DB:?err} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + interval: 10s + timeout: 5s + retries: 5 + # ports: + # - "5432:5432" + volumes: + - unsend-db:/var/lib/postgresql/data + + redis: + image: redis:7 + container_name: unsend-redis-prod + restart: always + # ports: + # - "6379:6379" + volumes: + - unsend-cache:/data + command: ["redis-server", "--maxmemory-policy", "noeviction"] + + unsend: + image: unsend/unsend:latest + container_name: unsend + restart: always + ports: + - ${PORT:-3000}:${PORT:-3000} + environment: + - PORT=${PORT:-3000} + - DATABASE_URL=postgresql://postgres:${SERVICE_POSTGRES_PASSWORD}@postgres:5432/resend + - NEXTAUTH_URL=${SERVICE_NEXTAUTH_URL:?err} + - NEXTAUTH_SECRET=${SERVICE_NEXTAUTH_SECRET:?err} + - AWS_ACCESS_KEY=${SERVICE_AWS_ACCESS_KEY:?err} + - AWS_SECRET_KEY=${SERVICE_AWS_SECRET_KEY:?err} + - AWS_DEFAULT_REGION=${SERVICE_AWS_DEFAULT_REGION:?err} + - GITHUB_ID=${SERVICE_GITHUB_ID:?err} + - GITHUB_SECRET=${SERVICE_GITHUB_SECRET:?err} + - REDIS_URL=redis://redis:6379 + - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false} + - API_RATE_LIMIT=${SERVICE_API_RATE_LIMIT:-1} + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_started + +volumes: + unsend-db: + unsend-cache: From 4b14c7e2205fab9fdcbf7673be301cb9d0a2dc57 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:52:11 +0200 Subject: [PATCH 035/295] remove comments --- templates/compose/resend.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/templates/compose/resend.yaml b/templates/compose/resend.yaml index d72228747..b8b528a75 100644 --- a/templates/compose/resend.yaml +++ b/templates/compose/resend.yaml @@ -18,8 +18,6 @@ services: interval: 10s timeout: 5s retries: 5 - # ports: - # - "5432:5432" volumes: - unsend-db:/var/lib/postgresql/data @@ -27,8 +25,6 @@ services: image: redis:7 container_name: unsend-redis-prod restart: always - # ports: - # - "6379:6379" volumes: - unsend-cache:/data command: ["redis-server", "--maxmemory-policy", "noeviction"] From cf99ec70e9a19487176e614e55bf2233bcbabb45 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:52:31 +0200 Subject: [PATCH 036/295] add svg --- public/svgs/unsend.svg | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 public/svgs/unsend.svg diff --git a/public/svgs/unsend.svg b/public/svgs/unsend.svg new file mode 100644 index 000000000..f5ff6fabc --- /dev/null +++ b/public/svgs/unsend.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From 1e46b6304138369be0ada20489492f8708eb2572 Mon Sep 17 00:00:00 2001 From: ayntk-ai <122374094+ayntk-ai@users.noreply.github.com> Date: Tue, 20 Aug 2024 18:32:35 +0200 Subject: [PATCH 037/295] Feat getoutline service --- public/svgs/getoutline.jpeg | Bin 0 -> 5651 bytes templates/compose/getoutline.yaml | 92 ++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 public/svgs/getoutline.jpeg create mode 100644 templates/compose/getoutline.yaml diff --git a/public/svgs/getoutline.jpeg b/public/svgs/getoutline.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..422e402f7e1351c864b55a619417ab2b5faab0c8 GIT binary patch literal 5651 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 tJ Date: Thu, 22 Aug 2024 16:38:36 +0200 Subject: [PATCH 038/295] feat: add cloudbeaver template --- public/svgs/cloudbeaver.svg | 7 +++++++ templates/compose/cloudbeaver.yaml | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 public/svgs/cloudbeaver.svg create mode 100644 templates/compose/cloudbeaver.yaml diff --git a/public/svgs/cloudbeaver.svg b/public/svgs/cloudbeaver.svg new file mode 100644 index 000000000..4a7634766 --- /dev/null +++ b/public/svgs/cloudbeaver.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/templates/compose/cloudbeaver.yaml b/templates/compose/cloudbeaver.yaml new file mode 100644 index 000000000..6ca82eecf --- /dev/null +++ b/templates/compose/cloudbeaver.yaml @@ -0,0 +1,18 @@ +# documentation: https://dbeaver.com/docs/cloudbeaver/ +# slogan: CloudBeaver is a lightweight web application designed for comprehensive data management. +# tags: dbeaver, data management, data, database, mysql, postgres, sqlite, sql, mongodb +# logo: svgs/cloudbeaver.svg + +services: + cloudbeaver: + restart: unless-stopped + image: dbeaver/cloudbeaver:24.1.5 + volumes: + - cloudbeaver:/opt/cloudbeaver/workspace + environment: + - SERVICE_FQDN_CLOUDBEAVER_8978 + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8978/"] + interval: 5s + timeout: 20s + retries: 10 From c1eb01fac596a9234dede2d5620208cce56952bb Mon Sep 17 00:00:00 2001 From: Franck Kerbiriou Date: Thu, 22 Aug 2024 22:21:13 +0200 Subject: [PATCH 039/295] Upgrade Authentik --- templates/compose/authentik.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/compose/authentik.yaml b/templates/compose/authentik.yaml index 4fa7a7617..5fdc216e5 100644 --- a/templates/compose/authentik.yaml +++ b/templates/compose/authentik.yaml @@ -6,7 +6,7 @@ services: postgresql: - image: docker.io/library/postgres:12-alpine + image: docker.io/library/postgres:16-alpine restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] @@ -31,7 +31,7 @@ services: volumes: - redis:/data authentik-server: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.2.2} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.6.3} restart: unless-stopped command: server environment: @@ -60,7 +60,7 @@ services: redis: condition: service_healthy authentik-worker: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.2.2} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.6.3} restart: unless-stopped command: worker environment: From a4dedb8369adb040259bbeae3b46e12aaa0957e1 Mon Sep 17 00:00:00 2001 From: Franck Kerbiriou Date: Thu, 22 Aug 2024 22:30:45 +0200 Subject: [PATCH 040/295] Add Nextcloud with Postgres --- .../compose/nextcloud-with-postgres.yaml | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 templates/compose/nextcloud-with-postgres.yaml diff --git a/templates/compose/nextcloud-with-postgres.yaml b/templates/compose/nextcloud-with-postgres.yaml new file mode 100644 index 000000000..15a2c97b6 --- /dev/null +++ b/templates/compose/nextcloud-with-postgres.yaml @@ -0,0 +1,52 @@ +# documentation: https://docs.nextcloud.com +# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. +# tags: cloud, collaboration, communication, filestorage, data +# logo: svgs/nextcloud.svg + +services: + nextcloud: + image: lscr.io/linuxserver/nextcloud:latest + environment: + - SERVICE_FQDN_NEXTCLOUD + - PUID=1000 + - PGID=1000 + - TZ=Europe/Paris + - POSTGRES_DB=${POSTGRES_DB:-nextcloud} + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_HOST=postgresql + - REDIS_HOST=redis + - REDIS_PORT=6379 + volumes: + - nextcloud-config:/config + - nextcloud-data:/data + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + postgresql: + image: postgres:16-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-nextcloud} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + redis: + image: "redis:7.4-alpine" + volumes: + - "redis-data:/data" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 20 From 15733eaa55fd1cfc307d3aa359b89e2e88f3bc82 Mon Sep 17 00:00:00 2001 From: Pilpin Date: Sat, 24 Aug 2024 12:49:33 +0200 Subject: [PATCH 041/295] Add freshrss to service templates --- templates/compose/freshrss.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 templates/compose/freshrss.yaml diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml new file mode 100644 index 000000000..607d44a2e --- /dev/null +++ b/templates/compose/freshrss.yaml @@ -0,0 +1,17 @@ +# documentation: https://docs.gitea.com +# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. +# tags: version control, collaboration, code, hosting, lightweight, postgresql +# logo: svgs/gitea.svg + +services: + freshrss: + image: freshrss/freshrss:latest + environment: + - SERVICE_FQDN_FRESHRSS_80 + - POSTGRES_DB=freshrss + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - 'CRON_MIN=1,31' + volumes: + - freshrss_data:/var/www/FreshRSS/data + - freshrss_extensions:/var/www/FreshRSS/extensions From 3c720357115aa2bc6ce35c228a1a19c9c11e6dfc Mon Sep 17 00:00:00 2001 From: Sylvain Autran Date: Sun, 25 Aug 2024 00:06:22 +0200 Subject: [PATCH 042/295] Update documentation part of yaml --- templates/compose/freshrss.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml index 607d44a2e..1c5eb0ce4 100644 --- a/templates/compose/freshrss.yaml +++ b/templates/compose/freshrss.yaml @@ -1,7 +1,6 @@ -# documentation: https://docs.gitea.com -# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. -# tags: version control, collaboration, code, hosting, lightweight, postgresql -# logo: svgs/gitea.svg +# documentation: https://freshrss.org/index.html +# slogan: A free, self-hostable feed aggregator. +# tags: rss, feed services: freshrss: From 135eb83da454d59178d48d8dbeff949b26fd561d Mon Sep 17 00:00:00 2001 From: givanz Date: Sun, 25 Aug 2024 16:27:02 +0300 Subject: [PATCH 043/295] Add Vvveb CMS template --- public/svgs/vvveb.svg | 1 + templates/compose/vvveb-with-mariadb.yml | 38 ++++++++++++++++++++ templates/compose/vvveb-without-database.yml | 18 ++++++++++ templates/compose/vvveb.yml | 38 ++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 public/svgs/vvveb.svg create mode 100644 templates/compose/vvveb-with-mariadb.yml create mode 100644 templates/compose/vvveb-without-database.yml create mode 100644 templates/compose/vvveb.yml diff --git a/public/svgs/vvveb.svg b/public/svgs/vvveb.svg new file mode 100644 index 000000000..2b66b3087 --- /dev/null +++ b/public/svgs/vvveb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/vvveb-with-mariadb.yml b/templates/compose/vvveb-with-mariadb.yml new file mode 100644 index 000000000..7e1d663fa --- /dev/null +++ b/templates/compose/vvveb-with-mariadb.yml @@ -0,0 +1,38 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=mysqli #sqlite,pgsql + - DB_HOST=mariadb + - DB_USER=$SERVICE_USER_VVVEB + - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB + - DB_NAME=vvveb + depends_on: + - mariadb + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 + mariadb: + image: mariadb:11 + volumes: + - mariadb-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=vvveb + - MYSQL_USER=$SERVICE_USER_VVVEB + - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/vvveb-without-database.yml b/templates/compose/vvveb-without-database.yml new file mode 100644 index 000000000..f1e92de63 --- /dev/null +++ b/templates/compose/vvveb-without-database.yml @@ -0,0 +1,18 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=sqlite #mysqli,pgsql + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 diff --git a/templates/compose/vvveb.yml b/templates/compose/vvveb.yml new file mode 100644 index 000000000..43ec27c1a --- /dev/null +++ b/templates/compose/vvveb.yml @@ -0,0 +1,38 @@ +# documentation: https://docs.vvveb.com +# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores. +# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql +# logo: svgs/vvveb.svg + +services: + vvveb: + image: vvveb/vvvebcms:latest + volumes: + - vvveb-files:/var/www/html + environment: + - SERVICE_FQDN_VVVEB + - DB_ENGINE=mysqli #sqlite,pgsql + - DB_HOST=mysql + - DB_USER=$SERVICE_USER_VVVEB + - DB_PASSWORD=$SERVICE_PASSWORD_VVVEB + - DB_NAME=vvveb + depends_on: + - mysql + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1"] + interval: 2s + timeout: 10s + retries: 10 + mysql: + image: mysql:8.4.2 + volumes: + - mysql-data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT + - MYSQL_DATABASE=vvveb + - MYSQL_USER=$SERVICE_USER_VVVEB + - MYSQL_PASSWORD=$SERVICE_PASSWORD_VVVEB + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] + interval: 5s + timeout: 20s + retries: 10 From 464769881fd1c6bd457bd96468c07e7af20e30b7 Mon Sep 17 00:00:00 2001 From: Amit Yadav Date: Tue, 27 Aug 2024 16:48:30 +0530 Subject: [PATCH 044/295] audiobookshelf added --- public/svgs/audiobookshelf.svg | 25 +++++++++++++++++++++++++ templates/compose/audiobookshelf.yaml | 17 +++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 public/svgs/audiobookshelf.svg create mode 100644 templates/compose/audiobookshelf.yaml diff --git a/public/svgs/audiobookshelf.svg b/public/svgs/audiobookshelf.svg new file mode 100644 index 000000000..d641b765b --- /dev/null +++ b/public/svgs/audiobookshelf.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/compose/audiobookshelf.yaml b/templates/compose/audiobookshelf.yaml new file mode 100644 index 000000000..81915676a --- /dev/null +++ b/templates/compose/audiobookshelf.yaml @@ -0,0 +1,17 @@ +# documentation: https://www.audiobookshelf.org/ +# slogan: Self-hosted audiobook, ebook, and podcast server +# tags: audiobooks, ebooks, podcasts, server, self-hosted +# logo: svgs/audiobookshelf.svg +# port: 80 + +services: + audiobookshelf: + image: ghcr.io/advplyr/audiobookshelf:latest + environment: + - SERVICE_FQDN_AUDIOBOOKSHELF_80 + - TZ=America/Toronto + volumes: + - audiobookshelf-audiobooks:/audiobooks + - audiobookshelf-podcasts:/podcasts + - audiobookshelf-config:/config + - audiobookshelf-metadata:/metadata From 918d8e783a7939b952c8fbb65e063eb132e766e3 Mon Sep 17 00:00:00 2001 From: Amit Yadav Date: Thu, 29 Aug 2024 09:40:50 +0530 Subject: [PATCH 045/295] added libreoffice --- public/svgs/libreoffice.svg | Bin 0 -> 1342 bytes templates/compose/libreoffice.yaml | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 public/svgs/libreoffice.svg create mode 100644 templates/compose/libreoffice.yaml diff --git a/public/svgs/libreoffice.svg b/public/svgs/libreoffice.svg new file mode 100644 index 0000000000000000000000000000000000000000..5111731e7fde6e4140567754c4a387d0139c3c13 GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0vp^w;321IXGB=teSAoe?W>Q-O<;Pfnj4m_n$;oAYUQb zBgmJ5p-PQ`p`nF=;TKS-;RORjsR0ASs{{rHs~HRo;stYd1=;{5n3BBRT^Rni_n+Ah z9LA&^^ZS_AJnBH%}MGkcwMx@A_xQq)HrnSZ#ESD^io=m*}mvdY4@f zwstx7n)Ysc6eMWh8SVS(SVnLTbLJy?FILBeA1CkVP~}*cJEy06l}EIC`Yq4Tb~9g3 zk1b+qe}1a^nXM<^7gy2$cVttzZA|vk?0_<~wsYZZ~MZn80@HzV4GK_DT0=SzQ0ev%bE1G4q`= z>E&IyHaq+`gtpv1m##Y}P2V{zIoB_(*pxdgdh6Mfabm?=A6_l9nf_2ge78@n@pJbz zJL;}&O4(|AZg27S&i=aI*BSl1bFOczyY{IpbBE^LNneV0n%ueaP9^)W??+yT)Ez7L z<*(*8Fa4hT-T&|1n$i!6=9?ziyZwkiS-E=cUeWJa>z*Is_|3hujaO#dV~+Nu$Zq{-sg`85@+k&(PlqX+q+ijPW0pkke=HYW3=`k4C8<2ch2@! z*Ws{FL7iw;BHJ&!<7iFyTDdzC`#&AJCKhvi|8a=3WVUr4j-A1B=f&BRc0gvWA?J?b zpLs{h-zQ~@zB?;eU|&7!OMujqy)l+QHq5rPe$;tIee=ZYazCaThuscbw`2O|(gR)9 z7qag>|H&Esx?uJ9nmp6@)lc^Q^-ld1WOwGJ&D{IN+Vh{avqbY+e9vXopL(N@8`)W? zVT4s?HPd&IZCwSk|F${-Je4|=a$V%qR_n>R!5Y`g^gr)RcptHiB=Yq?%MPy>Uf LtDnm{r-UW|NF!b) literal 0 HcmV?d00001 diff --git a/templates/compose/libreoffice.yaml b/templates/compose/libreoffice.yaml new file mode 100644 index 000000000..c82d76089 --- /dev/null +++ b/templates/compose/libreoffice.yaml @@ -0,0 +1,21 @@ +# documentation: https://docs.linuxserver.io/images/docker-libreoffice/ +# slogan: LibreOffice is a free and powerful office suite. +# tags: office,document,spreadsheet,presentation,open-source +# logo: svgs/libreoffice.svg +# port: 3000 + +services: + libreoffice: + image: lscr.io/linuxserver/libreoffice:latest + environment: + - SERVICE_FQDN_LIBREOFFICE_3000 + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + volumes: + - libreoffice-config:/config + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 From d53c1f99d6d49a0262e19a5ec09aa06099a7f9fa Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 31 Aug 2024 08:34:10 +0200 Subject: [PATCH 046/295] fix: remove env, change timezone --- templates/compose/keycloak-with-postgres.yaml | 13 ++++++++----- templates/compose/keycloak.yaml | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/templates/compose/keycloak-with-postgres.yaml b/templates/compose/keycloak-with-postgres.yaml index a5cdd1646..2d5bb8f2b 100644 --- a/templates/compose/keycloak-with-postgres.yaml +++ b/templates/compose/keycloak-with-postgres.yaml @@ -12,16 +12,15 @@ services: environment: - PUID=1000 - PGID=1000 - - TZ=Europe/Berlin - - KEYCLOAK_ADMIN=${KEYCLOAK_ADMIN:-admin} - - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD:-password} + - TZ=${TIMEZONE:-UTC} + - KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN} + - KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} - KC_DB=postgres - KC_DB_USERNAME=${SERVICE_USER_DATABASE} - KC_DB_PASSWORD=${SERVICE_PASSWORD_64_DATABASE} - KC_DB_URL_PORT=5432 - KC_DB_URL=jdbc:postgresql://postgres/${POSTGRESQL_DATABASE:-keycloak} - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - - KC_ENABLE_HTTPS=false - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} @@ -37,7 +36,11 @@ services: postgres: condition: service_healthy healthcheck: - test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;"] + test: + [ + "CMD-SHELL", + "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;", + ] interval: 5s timeout: 20s retries: 10 diff --git a/templates/compose/keycloak.yaml b/templates/compose/keycloak.yaml index 388d24d5b..ed141abd9 100644 --- a/templates/compose/keycloak.yaml +++ b/templates/compose/keycloak.yaml @@ -12,11 +12,10 @@ services: environment: - PUID=1000 - PGID=1000 - - TZ=Europe/Berlin - - KEYCLOAK_ADMIN=${KEYCLOAK_ADMIN:-admin} - - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD:-password} + - TZ=${TIMEZONE:-UTC} + - KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN} + - KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - - KC_ENABLE_HTTPS=false - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} @@ -29,7 +28,11 @@ services: volumes: - keycloak-data:/opt/keycloak/data healthcheck: - test: ["CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;"] + test: + [ + "CMD-SHELL", + "exec 3<>/dev/tcp/127.0.0.1/9000;echo -e 'GET /health/ready HTTP/1.1\r\nhost: http://localhost\r\nConnection: close\r\n\r\n' >&3;if [ $? -eq 0 ]; then echo 'Healthcheck Successful';exit 0;else echo 'Healthcheck Failed';exit 1;fi;", + ] interval: 5s timeout: 20s retries: 10 From 028c41b011ec85ce865dea12b9ddd24b4b989f2f Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 31 Aug 2024 09:32:28 +0200 Subject: [PATCH 047/295] fix: postgres healthcheck --- templates/compose/keycloak-with-postgres.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/keycloak-with-postgres.yaml b/templates/compose/keycloak-with-postgres.yaml index 2d5bb8f2b..c1198d0ac 100644 --- a/templates/compose/keycloak-with-postgres.yaml +++ b/templates/compose/keycloak-with-postgres.yaml @@ -55,7 +55,7 @@ services: healthcheck: test: - CMD-SHELL - - pg_isready -U $${SERVICE_USER_DATABASE} -d $${POSTGRESQL_DATABASE} + - pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} interval: 5s timeout: 20s retries: 10 From 48e4ebdb5d7fcb205a5fdb02310fb2575a449b52 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 31 Aug 2024 11:08:47 +0200 Subject: [PATCH 048/295] remove unnecessary variables --- templates/compose/keycloak-with-postgres.yaml | 9 --------- templates/compose/keycloak.yaml | 9 --------- 2 files changed, 18 deletions(-) diff --git a/templates/compose/keycloak-with-postgres.yaml b/templates/compose/keycloak-with-postgres.yaml index c1198d0ac..39f8bc731 100644 --- a/templates/compose/keycloak-with-postgres.yaml +++ b/templates/compose/keycloak-with-postgres.yaml @@ -10,8 +10,6 @@ services: command: - start environment: - - PUID=1000 - - PGID=1000 - TZ=${TIMEZONE:-UTC} - KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN} - KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} @@ -23,13 +21,6 @@ services: - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true - - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} - - KC_DB_POOL_MIN_SIZE=${KEYCLOAK_DB_POOL_MIN_SIZE:-0} - - KC_DB_POOL_MAX_SIZE=${KEYCLOAK_DB_POOL_MAX_SIZE:-100} - - KC_METRICS_ENABLED=${KEYCLOAK_METRICS_ENABLED:-false} - - KC_DIR=${KEYCLOAK_DIR} - - KC_FILE=${KEYCLOAK_FILE} - - KC_OVERRIDE=${KEYCLOAK_OVERRIDE:-true} volumes: - keycloak-data:/opt/keycloak/data depends_on: diff --git a/templates/compose/keycloak.yaml b/templates/compose/keycloak.yaml index ed141abd9..fe7c0cc75 100644 --- a/templates/compose/keycloak.yaml +++ b/templates/compose/keycloak.yaml @@ -10,21 +10,12 @@ services: command: - start environment: - - PUID=1000 - - PGID=1000 - TZ=${TIMEZONE:-UTC} - KEYCLOAK_ADMIN=${SERVICE_USER_ADMIN} - KEYCLOAK_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true - - KC_DB_POOL_INITIAL_SIZE=${KEYCLOAK_DB_POOL_INITIAL_SIZE} - - KC_DB_POOL_MIN_SIZE=${KEYCLOAK_DB_POOL_MIN_SIZE:-0} - - KC_DB_POOL_MAX_SIZE=${KEYCLOAK_DB_POOL_MAX_SIZE:-100} - - KC_METRICS_ENABLED=${KEYCLOAK_METRICS_ENABLED:-false} - - KC_DIR=${KEYCLOAK_DIR} - - KC_FILE=${KEYCLOAK_FILE} - - KC_OVERRIDE=${KEYCLOAK_OVERRIDE:-true} volumes: - keycloak-data:/opt/keycloak/data healthcheck: From 82f96fe6777669e911caffca64c579cb3d66e345 Mon Sep 17 00:00:00 2001 From: christiankolbow Date: Sat, 31 Aug 2024 17:04:42 +0200 Subject: [PATCH 049/295] add proxy-headers --- templates/compose/keycloak-with-postgres.yaml | 1 + templates/compose/keycloak.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/templates/compose/keycloak-with-postgres.yaml b/templates/compose/keycloak-with-postgres.yaml index 39f8bc731..91c97c75e 100644 --- a/templates/compose/keycloak-with-postgres.yaml +++ b/templates/compose/keycloak-with-postgres.yaml @@ -21,6 +21,7 @@ services: - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true + - KC_PROXY_HEADERS=xforwarded volumes: - keycloak-data:/opt/keycloak/data depends_on: diff --git a/templates/compose/keycloak.yaml b/templates/compose/keycloak.yaml index fe7c0cc75..7007d1fae 100644 --- a/templates/compose/keycloak.yaml +++ b/templates/compose/keycloak.yaml @@ -16,6 +16,7 @@ services: - KC_HOSTNAME=${SERVICE_FQDN_KEYCLOAK_8080} - KC_HTTP_ENABLED=true - KC_HEALTH_ENABLED=true + - KC_PROXY_HEADERS=xforwarded volumes: - keycloak-data:/opt/keycloak/data healthcheck: From 611e80c987b0cd2cba9ac7e8b615028b19c43869 Mon Sep 17 00:00:00 2001 From: Franck Kerbiriou Date: Thu, 5 Sep 2024 15:47:25 +0200 Subject: [PATCH 050/295] Update Authentik to 2024.8.0 --- templates/compose/authentik.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/authentik.yaml b/templates/compose/authentik.yaml index 5fdc216e5..4437e1038 100644 --- a/templates/compose/authentik.yaml +++ b/templates/compose/authentik.yaml @@ -31,7 +31,7 @@ services: volumes: - redis:/data authentik-server: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.6.3} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.8.0} restart: unless-stopped command: server environment: @@ -60,7 +60,7 @@ services: redis: condition: service_healthy authentik-worker: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.6.3} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2024.8.0} restart: unless-stopped command: worker environment: From d469f4bc8fb6c22e1ecb35df07553e7266abc94f Mon Sep 17 00:00:00 2001 From: Niccolo Borgioli Date: Thu, 5 Sep 2024 20:25:04 +0200 Subject: [PATCH 051/295] add cryptgeon template --- templates/compose/cryptgeon.yaml | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 templates/compose/cryptgeon.yaml diff --git a/templates/compose/cryptgeon.yaml b/templates/compose/cryptgeon.yaml new file mode 100644 index 000000000..f31b37f68 --- /dev/null +++ b/templates/compose/cryptgeon.yaml @@ -0,0 +1,37 @@ +# documentation: https://github.com/cupcakearmy/cryptgeon +# slogan: Secure note / file sharing service inspired by PrivNote. +# tags: cryptgeon, secure, note, sharing, privnote, file, sharing + +services: + redis: + image: "redis:7-alpine" + command: "redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru" + healthcheck: + test: + - CMD + - redis-cli + - PING + interval: 5s + timeout: 10s + retries: 2 + app: + image: "cupcakearmy/cryptgeon:latest" + depends_on: + - redis + environment: + - "SIZE_LIMIT=${SIZE_LIMIT:-4 MiB}" + - "MAX_VIEWS=${MAX_VIEWS:-100}" + - "MAX_EXPIRATION=${MAX_EXPIRATION:-360}" + - "ALLOW_ADVANCED=${ALLOW_ADVANCED:-true}" + - "ALLOW_FILES=${ALLOW_FILES:-true}" + - SERVICE_FQDN_CRYPTGEON_8000 + healthcheck: + test: + - CMD + - curl + - "--fail" + - "http://127.0.0.1:8000/api/live/" + interval: 1m + timeout: 3s + retries: 2 + start_period: 5s From 44ceb097f33bc23f9e5ae7facd5f373bf9557fa8 Mon Sep 17 00:00:00 2001 From: Darren Sisson Date: Thu, 5 Sep 2024 21:28:49 +0100 Subject: [PATCH 052/295] fix rabbit-mq --- templates/compose/rabbitmq.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/compose/rabbitmq.yaml b/templates/compose/rabbitmq.yaml index 92dbd698a..5cb8db5f3 100644 --- a/templates/compose/rabbitmq.yaml +++ b/templates/compose/rabbitmq.yaml @@ -7,6 +7,7 @@ services: rabbitmq: image: rabbitmq:3-management + hostname: "rabbitmq" environment: - SERVICE_FQDN_RABBITMQ_15672 - RABBITMQ_DEFAULT_USER=$SERVICE_USER_RABBITMQ From b8fcdf74e682eee7d1985821ae2875c219bf520c Mon Sep 17 00:00:00 2001 From: nizetic Date: Sat, 14 Sep 2024 12:45:03 +0200 Subject: [PATCH 053/295] Add kimai template --- public/svgs/kimai.svg | 67 ++++++++++++++++++++++++++++++++++++ templates/compose/kimai.yaml | 52 ++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 public/svgs/kimai.svg create mode 100644 templates/compose/kimai.yaml diff --git a/public/svgs/kimai.svg b/public/svgs/kimai.svg new file mode 100644 index 000000000..35b146972 --- /dev/null +++ b/public/svgs/kimai.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/compose/kimai.yaml b/templates/compose/kimai.yaml new file mode 100644 index 000000000..26cd3da1c --- /dev/null +++ b/templates/compose/kimai.yaml @@ -0,0 +1,52 @@ +# documentation: https://www.kimai.org/ +# slogan: Open source time-tracking app. +# tags: time-tracking, open-source +# logo: svgs/kimai.svg +# port: 8001 + +services: + mysql: + image: mysql:8.3 + container_name: kimai_db + volumes: + - mysql:/var/lib/mysql + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE:-kimai} + - MYSQL_USER=${MYSQL_USER:-kimaiuser} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQL_ROOT} + 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 + + kimai: + image: kimai/kimai2:apache-latest + container_name: kimai + depends_on: + mysql: + condition: service_healthy + volumes: + - data:/opt/kimai/var/data + environment: + - SERVICE_FQDN_KIMAI + - APP_SECRET=${SERVICE_PASSWORD_APP_SECRET} + - MAILER_FROM=${MAILER_FROM:-kimai@example.com} + - MAILER_URL=${MAILER_URL:-null://null} + - ADMINMAIL=${ADMINMAIL:-admin@kimai.local} + - ADMINPASS=${SERVICE_PASSWORD_ADMINPASS} + - DATABASE_URL=mysql://${MYSQL_USER}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0 + - TRUSTED_HOSTS=localhost + restart: unless-stopped + labels: + - traefik.enable=true + - traefik.http.routers.kimai.entryPoints=http + - traefik.http.services.kimai.loadbalancer.server.port=8001 + +volumes: + data: + mysql: From 8166163b00265d9014be80404bf8a8ce0666e6e5 Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 21:58:13 +0200 Subject: [PATCH 054/295] feat: add immich service --- public/svgs/immich.svg | 66 +++++++++++++++++++++++++ templates/compose/immich.yaml | 91 +++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 public/svgs/immich.svg create mode 100644 templates/compose/immich.yaml diff --git a/public/svgs/immich.svg b/public/svgs/immich.svg new file mode 100644 index 000000000..9d844a772 --- /dev/null +++ b/public/svgs/immich.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml new file mode 100644 index 000000000..de6e5fddf --- /dev/null +++ b/templates/compose/immich.yaml @@ -0,0 +1,91 @@ +# documentation: https://immich.app/docs/overview/introduction +# slogan: Self-hosted photo and video management solution. +# tags: photo,video,management,server,cloud,storage,sharing,metadata,face,recognition +# logo: svgs/immich.svg +# port: 2283 + +name: immich + +x-shared-env: &shared-env + environment: + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + # Uninitialized variables, editable in Coolify UI + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=${DB_PASSWORD:-postgres} # Default: "postgres", can be overridden + - DB_USERNAME=${DB_USERNAME:-postgres} # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + # Optional timezone variable, uninitialized, editable in Coolify UI\ + - TZ=${TZ:-Etc/UTC} + +services: + immich-server: + container_name: immich_server + image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} + # extends: + # file: hwaccel.transcoding.yml + # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding + volumes: + # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file + - ${UPLOAD_LOCATION}:/usr/src/app/upload + - /etc/localtime:/etc/localtime:ro + <<: *shared-env + ports: + - 2283:3001 + depends_on: + - redis + - database + restart: always + healthcheck: + disable: false + + immich-machine-learning: + container_name: immich_machine_learning + # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. + # Example tag: ${IMMICH_VERSION:-release}-cuda + image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} + # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration + # file: hwaccel.ml.yml + # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable + volumes: + - model-cache:/cache + <<: *shared-env + restart: always + healthcheck: + disable: false + + redis: + container_name: immich_redis + image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792 + healthcheck: + test: redis-cli ping || exit 1 + restart: always + + database: + container_name: immich_postgres + image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 + environment: + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_INITDB_ARGS: '--data-checksums' + volumes: + # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file + - ${DB_DATA_LOCATION}:/var/lib/postgresql/data + healthcheck: + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 + interval: 5m + start_interval: 30s + start_period: 5m + command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] + restart: always + +volumes: + model-cache: From c5fd7ba48ab8572b90ee46b065b8afd13c889471 Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 22:20:48 +0200 Subject: [PATCH 055/295] feat: auto generate url --- templates/compose/immich.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index de6e5fddf..047e8817b 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -18,15 +18,15 @@ x-shared-env: &shared-env - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify # Default values, editable in Coolify UI - - DB_PASSWORD=${DB_PASSWORD:-postgres} # Default: "postgres", can be overridden - - DB_USERNAME=${DB_USERNAME:-postgres} # Default: "postgres", can be overridden + - DB_PASSWORD=${SERVICE_PASSWORD_IMMICH} # Default: "postgres", can be overridden + - DB_USERNAME=${SERVICE_USER_IMMICH} # Default: "postgres", can be overridden - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden # Optional timezone variable, uninitialized, editable in Coolify UI\ - TZ=${TZ:-Etc/UTC} services: - immich-server: + immich: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: @@ -37,8 +37,10 @@ services: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro <<: *shared-env - ports: - - 2283:3001 + environment: + - SERVICE_FQDN_IMMICH=/ + - _APP_URL=$SERVICE_FQDN_IMMICH + - SERVICE_FQDN_IMMICH_3001 depends_on: - redis - database From dd8d0a62d84cef95ca690680da8bfce4016d6b7d Mon Sep 17 00:00:00 2001 From: OG-Jons Date: Sun, 15 Sep 2024 22:44:21 +0200 Subject: [PATCH 056/295] feat: refactored to work with coolify auto env vars --- templates/compose/immich.yaml | 51 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml index 047e8817b..2feed55ad 100644 --- a/templates/compose/immich.yaml +++ b/templates/compose/immich.yaml @@ -6,25 +6,6 @@ name: immich -x-shared-env: &shared-env - environment: - # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables - - # Hardcoded values, not editable in Coolify UI - - UPLOAD_LOCATION=./library # The location where your uploaded files are stored - - DB_DATA_LOCATION=./postgres # The location where your database files are stored - - # Uninitialized variables, editable in Coolify UI - - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify - - # Default values, editable in Coolify UI - - DB_PASSWORD=${SERVICE_PASSWORD_IMMICH} # Default: "postgres", can be overridden - - DB_USERNAME=${SERVICE_USER_IMMICH} # Default: "postgres", can be overridden - - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden - - # Optional timezone variable, uninitialized, editable in Coolify UI\ - - TZ=${TZ:-Etc/UTC} - services: immich: container_name: immich_server @@ -36,11 +17,21 @@ services: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro - <<: *shared-env environment: - - SERVICE_FQDN_IMMICH=/ - - _APP_URL=$SERVICE_FQDN_IMMICH - SERVICE_FQDN_IMMICH_3001 + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden + - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + - TZ=${TZ:-Etc/UTC} depends_on: - redis - database @@ -58,7 +49,21 @@ services: # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache - <<: *shared-env + environment: + # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables + + # Hardcoded values, not editable in Coolify UI + - UPLOAD_LOCATION=./library # The location where your uploaded files are stored + - DB_DATA_LOCATION=./postgres # The location where your database files are stored + + - IMMICH_VERSION=${IMMICH_VERSION:-release} # The Immich version to use, editable in Coolify + + # Default values, editable in Coolify UI + - DB_PASSWORD=$SERVICE_PASSWORD_DATABASE # Default: "postgres", can be overridden + - DB_USERNAME=$SERVICE_USER_DATABASE # Default: "postgres", can be overridden + - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich} # Default: "immich", can be overridden + + - TZ=${TZ:-Etc/UTC} restart: always healthcheck: disable: false From 1b8365d5595ee33b445e3d3ad93456cde6bf3cae Mon Sep 17 00:00:00 2001 From: Juan Felipe Date: Thu, 19 Sep 2024 12:07:00 -0300 Subject: [PATCH 057/295] fix code review reported issues - fix typo on healthcheck conditions - fix db connections - improve some default values - add plugins and update persistance --- templates/compose/mautic5.yaml | 124 ++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 55 deletions(-) diff --git a/templates/compose/mautic5.yaml b/templates/compose/mautic5.yaml index 309a619d2..4cf7eef54 100644 --- a/templates/compose/mautic5.yaml +++ b/templates/compose/mautic5.yaml @@ -9,103 +9,117 @@ services: image: 'mysql:8.0' environment: - 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_64_MYSQLROOT}' - - 'MYSQL_DATABASE=${MYSQL_DATABASE}' - - 'MYSQL_USER=${MYSQL_USER}' + - 'MYSQL_DATABASE=${MYSQL_DATABASE:-mautic}' + - 'MYSQL_USER=${SERVICE_USER_MYSQL}' - 'MYSQL_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' volumes: - 'mysql-data:/var/lib/mysql' healthcheck: - test: 'mysqladmin --user=$$MYSQL_USER --password=$$SERVICE_PASSWORD_64_MYSQL ping' - start_period: 5s - interval: 5s + test: 'mysqladmin ping --silent --user=$$SERVICE_USER_MYSQL --password=$$SERVICE_PASSWORD_64_MYSQL' + start_period: 30s + interval: 10s timeout: 5s - retries: 10 + retries: 5 rabbitmq: image: 'rabbitmq:3' environment: - - 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}' + - 'RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST:-mautic}' volumes: - 'rabbitmq-data:/var/lib/rabbitmq' mautic_web: image: 'mautic/mautic:latest' ports: - - 8880:80 + - '8880:80' volumes: - - './mautic/config:/var/www/html/config:z' - - './mautic/logs:/var/www/html/var/logs:z' - - './mautic/media/files:/var/www/html/docroot/media/files:z' - - './mautic/media/images:/var/www/html/docroot/media/images:z' - - './cron:/opt/mautic/cron:z' + - 'mautic_data/config:/var/www/html/config:z' + - 'mautic_data/logs:/var/www/html/var/logs:z' + - 'mautic_data/media/files:/var/www/html/docroot/media/files:z' + - 'mautic_data/media/images:/var/www/html/docroot/media/images:z' + - 'mautic_data/plugins:/var/www/html/docroot/plugins:z' + - 'mautic_data/vendor:/var/www/html/vendor:z' + - 'mautic_data/bin:/var/www/html/bin:z' + - 'mautic_data/cron:/opt/mautic/cron:z' environment: - SERVICE_FQDN_MAUTIC_80 - 'DOCKER_MAUTIC_LOAD_TEST_DATA=${MAUTIC_LOAD_TEST_DATA:-false}' - 'DOCKER_MAUTIC_RUN_MIGRATIONS=${MAUTIC_RUN_MIGRATIONS:-false}' - - 'MAUTIC_DB_HOST=${MYSQL_HOST}' - - 'MAUTIC_DB_PORT=${MYSQL_PORT}' - - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' - - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_HOST=${MYSQL_HOST:-db}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}' + - 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}' - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' - - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' - - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] - interval: 2s + test: + - CMD + - curl + - '-f' + - 'http://localhost' + interval: 15s timeout: 10s retries: 15 - depends_on: - db: - condition: service_healthy mautic_cron: image: 'mautic/mautic:latest' - links: - - 'db:mysql' volumes: - - './mautic/config:/var/www/html/config:z' - - './mautic/logs:/var/www/html/var/logs:z' - - './mautic/media/files:/var/www/html/docroot/media/files:z' - - './mautic/media/images:/var/www/html/docroot/media/images:z' - - './cron:/opt/mautic/cron:z' + - 'mautic_data/config:/var/www/html/config:z' + - 'mautic_data/logs:/var/www/html/var/logs:z' + - 'mautic_data/media/files:/var/www/html/docroot/media/files:z' + - 'mautic_data/media/images:/var/www/html/docroot/media/images:z' + - 'mautic_data/plugins:/var/www/html/docroot/plugins:z' + - 'mautic_data/vendor:/var/www/html/vendor:z' + - 'mautic_data/bin:/var/www/html/bin:z' + - 'mautic_data/cron:/opt/mautic/cron:z' environment: - DOCKER_MAUTIC_ROLE=mautic_cron - - 'MAUTIC_DB_HOST=${MYSQL_HOST}' - - 'MAUTIC_DB_PORT=${MYSQL_PORT}' - - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' - - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_HOST=${MYSQL_HOST:-db}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}' + - 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}' - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' - - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' - - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' depends_on: mautic_web: condition: service_healthy healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] - interval: 2s + test: + - CMD + - curl + - '-f' + - 'http://localhost' + interval: 15s timeout: 10s retries: 15 mautic_worker: image: 'mautic/mautic:latest' - links: - - 'db:mysql' volumes: - - './mautic/config:/var/www/html/config:z' - - './mautic/logs:/var/www/html/var/logs:z' - - './mautic/media/files:/var/www/html/docroot/media/files:z' - - './mautic/media/images:/var/www/html/docroot/media/images:z' - - './cron:/opt/mautic/cron:z' + - 'mautic_data/config:/var/www/html/config:z' + - 'mautic_data/logs:/var/www/html/var/logs:z' + - 'mautic_data/media/files:/var/www/html/docroot/media/files:z' + - 'mautic_data/media/images:/var/www/html/docroot/media/images:z' + - 'mautic_data/plugins:/var/www/html/docroot/plugins:z' + - 'mautic_data/vendor:/var/www/html/vendor:z' + - 'mautic_data/bin:/var/www/html/bin:z' + - 'mautic_data/cron:/opt/mautic/cron:z' environment: - DOCKER_MAUTIC_ROLE=mautic_worker - - 'MAUTIC_DB_HOST=${MYSQL_HOST}' - - 'MAUTIC_DB_PORT=${MYSQL_PORT}' - - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE}' - - 'MAUTIC_DB_USER=${MYSQL_USER}' + - 'MAUTIC_DB_HOST=${MYSQL_HOST:-db}' + - 'MAUTIC_DB_PORT=${MYSQL_PORT:-3306}' + - 'MAUTIC_DB_DATABASE=${MYSQL_DATABASE:-mautic}' + - 'MAUTIC_DB_USER=${SERVICE_USER_MYSQL}' - 'MAUTIC_DB_PASSWORD=${SERVICE_PASSWORD_64_MYSQL}' - - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}' - - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}' + - 'MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' + - 'MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT:-amqp://guest:guest@rabbitmq:5672/mautic/messages}' depends_on: mautic_web: - condition: service_health + condition: service_healthy healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] - interval: 2s + test: + - CMD + - curl + - '-f' + - 'http://localhost' + interval: 15s timeout: 10s retries: 15 From 2cf0f4facc18e2ebc15cce02fb3cf6144d9a89e6 Mon Sep 17 00:00:00 2001 From: Katja Lutz Date: Wed, 25 Sep 2024 21:10:05 +0200 Subject: [PATCH 058/295] chore: add Nitropage service template and logo --- public/svgs/nitropage.svg | 8 ++++ .../compose/nitropage-with-postgresql.yaml | 37 +++++++++++++++++++ templates/compose/nitropage.yaml | 21 +++++++++++ 3 files changed, 66 insertions(+) create mode 100644 public/svgs/nitropage.svg create mode 100644 templates/compose/nitropage-with-postgresql.yaml create mode 100644 templates/compose/nitropage.yaml diff --git a/public/svgs/nitropage.svg b/public/svgs/nitropage.svg new file mode 100644 index 000000000..67b2df17f --- /dev/null +++ b/public/svgs/nitropage.svg @@ -0,0 +1,8 @@ + + + NP + + + + + diff --git a/templates/compose/nitropage-with-postgresql.yaml b/templates/compose/nitropage-with-postgresql.yaml new file mode 100644 index 000000000..70aebb19b --- /dev/null +++ b/templates/compose/nitropage-with-postgresql.yaml @@ -0,0 +1,37 @@ +# documentation: https://nitropage.com +# slogan: Nitropage is an extensible visual website builder, offering a growing collection of versatile building blocks, focal-point image cropping and sovereign font management. +# tags: nitropage, builder, editor, wysiwyg, cms, content, management +# logo: svgs/nitropage.svg +# port: 3000 + +services: + nitropage: + image: codeberg.org/nitropage/nitropage + environment: + - SERVICE_FQDN_NITROPAGE_3000 + - NP_AUTH_SALT=${SERVICE_BASE64_SALT} + - NP_AUTH_PASSWORD=${SERVICE_PASSWORD_64_SESSION} + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRESQL}:${SERVICE_PASSWORD_POSTGRESQL}@postgresql:5432/${POSTGRESQL_DATABASE:-nitropage} + volumes: + - nitropage-data:/app/.data + depends_on: + postgresql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/admin"] + interval: 2s + timeout: 10s + retries: 15 + postgresql: + image: postgres:16-alpine + volumes: + - nitropage-postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-nitropage} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 diff --git a/templates/compose/nitropage.yaml b/templates/compose/nitropage.yaml new file mode 100644 index 000000000..f267a38cd --- /dev/null +++ b/templates/compose/nitropage.yaml @@ -0,0 +1,21 @@ +# documentation: https://nitropage.com +# slogan: Nitropage is an extensible visual website builder, offering a growing collection of versatile building blocks, focal-point image cropping and sovereign font management. +# tags: nitropage, builder, editor, wysiwyg, cms, content, management +# logo: svgs/nitropage.svg +# port: 3000 + +services: + nitropage: + image: codeberg.org/nitropage/nitropage:sqlite + environment: + - SERVICE_FQDN_NITROPAGE_3000 + - NP_AUTH_SALT=${SERVICE_BASE64_SALT} + - NP_AUTH_PASSWORD=${SERVICE_PASSWORD_64_SESSION} + - DATABASE_URL=file:../../.data/dev.db + volumes: + - nitropage-data:/app/.data + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/admin"] + interval: 2s + timeout: 10s + retries: 15 From 1b0e2e12573187560cb3b41c76033185baa41ade Mon Sep 17 00:00:00 2001 From: MarioZet <89627138+MarioZet23@users.noreply.github.com> Date: Sun, 29 Sep 2024 20:08:39 +0200 Subject: [PATCH 059/295] Feat. Apply all middlewares from labels to coolify router, instead of only basicauth and redirect --- bootstrap/helpers/docker.php | 81 +++++++++++------------------------- 1 file changed, 24 insertions(+), 57 deletions(-) diff --git a/bootstrap/helpers/docker.php b/bootstrap/helpers/docker.php index e252bda10..7e902fcdd 100644 --- a/bootstrap/helpers/docker.php +++ b/bootstrap/helpers/docker.php @@ -325,38 +325,16 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels->push('traefik.http.middlewares.gzip.compress=true'); $labels->push('traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'); - $basic_auth = false; - $basic_auth_middleware = null; - $redirect = false; - $redirect_middleware = null; + $middlewares_from_labels = collect([]); if ($serviceLabels) { - $basic_auth = $serviceLabels->contains(function ($value) { - return str_contains($value, 'basicauth'); - }); - if ($basic_auth) { - $basic_auth_middleware = $serviceLabels - ->map(function ($item) { - if (preg_match('/traefik\.http\.middlewares\.(.*?)\.basicauth\.users/', $item, $matches)) { - return $matches[1]; - } - }) - ->filter() - ->first(); - } - $redirect = $serviceLabels->contains(function ($value) { - return str_contains($value, 'redirectregex'); - }); - if ($redirect) { - $redirect_middleware = $serviceLabels - ->map(function ($item) { - if (preg_match('/traefik\.http\.middlewares\.(.*?)\.redirectregex\.regex/', $item, $matches)) { - return $matches[1]; - } - }) - ->filter() - ->first(); - } + $middlewares_from_labels = $serviceLabels->map(function ($item) { + if (preg_match('/traefik\.http\.middlewares\.(.*?)(\.|$)/', $item, $matches)) { + return $matches[1]; + } + return null; + })->filter() + ->unique(); } foreach ($domains as $loop => $domain) { try { @@ -404,20 +382,15 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port"); } if ($path !== '/') { + // Middleware handling $middlewares = collect([]); - if ($is_stripprefix_enabled && ! str($image)->contains('ghost')) { + if ($is_stripprefix_enabled && !str($image)->contains('ghost')) { $labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}"); $middlewares->push("{$https_label}-stripprefix"); } if ($is_gzip_enabled) { $middlewares->push('gzip'); } - if ($basic_auth && $basic_auth_middleware) { - $middlewares->push($basic_auth_middleware); - } - if ($redirect && $redirect_middleware) { - $middlewares->push($redirect_middleware); - } if (str($image)->contains('ghost')) { $middlewares->push('redir-ghost'); } @@ -425,10 +398,13 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels = $labels->merge($redirect_to_non_www); $middlewares->push($to_non_www_name); } - if ($redirect_direction === 'www' && ! str($host)->startsWith('www.')) { + if ($redirect_direction === 'www' && !str($host)->startsWith('www.')) { $labels = $labels->merge($redirect_to_www); $middlewares->push($to_www_name); } + $middlewares_from_labels->each(function ($middleware_name) use ($middlewares) { + $middlewares->push($middleware_name); + }); if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}"); @@ -437,13 +413,7 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $middlewares = collect([]); if ($is_gzip_enabled) { $middlewares->push('gzip'); - } - if ($basic_auth && $basic_auth_middleware) { - $middlewares->push($basic_auth_middleware); - } - if ($redirect && $redirect_middleware) { - $middlewares->push($redirect_middleware); - } + } if (str($image)->contains('ghost')) { $middlewares->push('redir-ghost'); } @@ -455,6 +425,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels = $labels->merge($redirect_to_www); $middlewares->push($to_www_name); } + $middlewares_from_labels->each(function ($middleware_name) use ($middlewares) { + $middlewares->push($middleware_name); + }); if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$https_label}.middlewares={$middlewares}"); @@ -490,12 +463,6 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($is_gzip_enabled) { $middlewares->push('gzip'); } - if ($basic_auth && $basic_auth_middleware) { - $middlewares->push($basic_auth_middleware); - } - if ($redirect && $redirect_middleware) { - $middlewares->push($redirect_middleware); - } if (str($image)->contains('ghost')) { $middlewares->push('redir-ghost'); } @@ -507,6 +474,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels = $labels->merge($redirect_to_www); $middlewares->push($to_www_name); } + $middlewares_from_labels->each(function ($middleware_name) use ($middlewares) { + $middlewares->push($middleware_name); + }); if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}"); @@ -516,12 +486,6 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ if ($is_gzip_enabled) { $middlewares->push('gzip'); } - if ($basic_auth && $basic_auth_middleware) { - $middlewares->push($basic_auth_middleware); - } - if ($redirect && $redirect_middleware) { - $middlewares->push($redirect_middleware); - } if (str($image)->contains('ghost')) { $middlewares->push('redir-ghost'); } @@ -533,6 +497,9 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_ $labels = $labels->merge($redirect_to_www); $middlewares->push($to_www_name); } + $middlewares_from_labels->each(function ($middleware_name) use ($middlewares) { + $middlewares->push($middleware_name); + }); if ($middlewares->isNotEmpty()) { $middlewares = $middlewares->join(','); $labels->push("traefik.http.routers.{$http_label}.middlewares={$middlewares}"); From 73e38ff951724fe6d6e187d3d229373a3ed07d69 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 08:13:49 +0200 Subject: [PATCH 060/295] chore: Update version numbers to 4.0.0-beta.350 in configuration files --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index 5e091b3ec..2fb257d2e 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.349', + 'release' => '4.0.0-beta.350', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index 91c58fdcd..fa3b3acbf 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Wed, 2 Oct 2024 08:15:03 +0200 Subject: [PATCH 061/295] fix: ipv6 scp should use -6 flag --- app/Helpers/SshMultiplexingHelper.php | 4 +++- app/Models/Server.php | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/Helpers/SshMultiplexingHelper.php b/app/Helpers/SshMultiplexingHelper.php index b0a832605..8a6856a2e 100644 --- a/app/Helpers/SshMultiplexingHelper.php +++ b/app/Helpers/SshMultiplexingHelper.php @@ -94,7 +94,9 @@ class SshMultiplexingHelper $muxPersistTime = config('constants.ssh.mux_persist_time'); $scp_command = "timeout $timeout scp "; - + if ($server->isIpv6()) { + $scp_command .= '-6 '; + } if (self::isMultiplexingEnabled()) { $scp_command .= "-o ControlMaster=auto -o ControlPath=$muxSocket -o ControlPersist={$muxPersistTime} "; self::ensureMultiplexedConnection($server); diff --git a/app/Models/Server.php b/app/Models/Server.php index f896541ad..54942f5fb 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -1221,4 +1221,9 @@ $schema://$host { return instant_remote_process($commands, $this, false); } + + public function isIpv6(): bool + { + return str($this->ip)->contains(':'); + } } From 024ad8e943c53757ff77302c4c234e73952e2d42 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 09:20:08 +0200 Subject: [PATCH 062/295] fix: cleanup stucked applicationdeploymentqueue --- app/Console/Commands/CleanupStuckedResources.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Console/Commands/CleanupStuckedResources.php b/app/Console/Commands/CleanupStuckedResources.php index dfd09d4b7..66c25ec27 100644 --- a/app/Console/Commands/CleanupStuckedResources.php +++ b/app/Console/Commands/CleanupStuckedResources.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use App\Jobs\CleanupHelperContainersJob; use App\Models\Application; +use App\Models\ApplicationDeploymentQueue; use App\Models\ApplicationPreview; use App\Models\ScheduledDatabaseBackup; use App\Models\ScheduledTask; @@ -47,6 +48,17 @@ class CleanupStuckedResources extends Command } catch (\Throwable $e) { echo "Error in cleaning stucked resources: {$e->getMessage()}\n"; } + try { + $applicationsDeploymentQueue = ApplicationDeploymentQueue::get(); + foreach ($applicationsDeploymentQueue as $applicationDeploymentQueue) { + if (is_null($applicationDeploymentQueue->application)) { + echo "Deleting stuck application deployment queue: {$applicationDeploymentQueue->id}\n"; + $applicationDeploymentQueue->delete(); + } + } + } catch (\Throwable $e) { + echo "Error in cleaning stuck application deployment queue: {$e->getMessage()}\n"; + } try { $applications = Application::withTrashed()->whereNotNull('deleted_at')->get(); foreach ($applications as $application) { From 8ca8ab82b04f3b4751e256dcb8cb3c00bfd0a0e4 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 09:20:49 +0200 Subject: [PATCH 063/295] refactor: Remove deployment queue when deleting an application --- app/Models/Application.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/Models/Application.php b/app/Models/Application.php index dfa875a5a..e4ab3918a 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -143,6 +143,9 @@ class Application extends BaseModel } $application->tags()->detach(); $application->previews()->delete(); + foreach ($application->deployment_queue as $deployment) { + $deployment->delete(); + } }); } @@ -710,6 +713,11 @@ class Application extends BaseModel return $this->hasMany(ApplicationPreview::class); } + public function deployment_queue() + { + return $this->hasMany(ApplicationDeploymentQueue::class); + } + public function destination() { return $this->morphTo(); From a530804a712a3078b2c53470dd6b631824c37777 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 09:21:28 +0200 Subject: [PATCH 064/295] feat: Add command to check application deployment queue --- .../CheckApplicationDeploymentQueue.php | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 app/Console/Commands/CheckApplicationDeploymentQueue.php diff --git a/app/Console/Commands/CheckApplicationDeploymentQueue.php b/app/Console/Commands/CheckApplicationDeploymentQueue.php new file mode 100644 index 000000000..9f66e058e --- /dev/null +++ b/app/Console/Commands/CheckApplicationDeploymentQueue.php @@ -0,0 +1,50 @@ +option('seconds'); + $deployments = ApplicationDeploymentQueue::whereIn('status', [ + ApplicationDeploymentStatus::IN_PROGRESS, + ApplicationDeploymentStatus::QUEUED, + ])->where('created_at', '>=', now()->subSeconds($seconds))->get(); + if ($deployments->isEmpty()) { + $this->info('No deployments found in the last '.$seconds.' seconds.'); + + return; + } + + $this->info('Found '.$deployments->count().' deployments created in the last '.$seconds.' seconds.'); + + foreach ($deployments as $deployment) { + if ($this->option('force')) { + $this->info('Deployment '.$deployment->id.' created at '.$deployment->created_at.' is older than '.$seconds.' seconds. Setting status to failed.'); + $this->cancelDeployment($deployment); + } else { + $this->info('Deployment '.$deployment->id.' created at '.$deployment->created_at.' is older than '.$seconds.' seconds. Setting status to failed.'); + if ($this->confirm('Do you want to cancel this deployment?', true)) { + $this->cancelDeployment($deployment); + } + } + } + } + + private function cancelDeployment(ApplicationDeploymentQueue $deployment) + { + $deployment->update(['status' => ApplicationDeploymentStatus::FAILED]); + if ($deployment->server?->isFunctional()) { + remote_process(['docker rm -f '.$deployment->deployment_uuid], $deployment->server, false); + } + } +} From bbd2748ad7395363d9a13bf9b3ec7bc606f31d4e Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 09:21:50 +0200 Subject: [PATCH 065/295] chore: Update command signature and description for cleanup application deployment queue --- app/Console/Commands/CleanupApplicationDeploymentQueue.php | 4 ++-- app/Livewire/Dashboard.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Console/Commands/CleanupApplicationDeploymentQueue.php b/app/Console/Commands/CleanupApplicationDeploymentQueue.php index f068e3eb2..3aae28ae6 100644 --- a/app/Console/Commands/CleanupApplicationDeploymentQueue.php +++ b/app/Console/Commands/CleanupApplicationDeploymentQueue.php @@ -7,9 +7,9 @@ use Illuminate\Console\Command; class CleanupApplicationDeploymentQueue extends Command { - protected $signature = 'cleanup:application-deployment-queue {--team-id=}'; + protected $signature = 'cleanup:deployment-queue {--team-id=}'; - protected $description = 'CleanupApplicationDeploymentQueue'; + protected $description = 'Cleanup application deployment queue.'; public function handle() { diff --git a/app/Livewire/Dashboard.php b/app/Livewire/Dashboard.php index 1f0b68dd3..d18a7689e 100644 --- a/app/Livewire/Dashboard.php +++ b/app/Livewire/Dashboard.php @@ -30,7 +30,7 @@ class Dashboard extends Component public function cleanup_queue() { - Artisan::queue('cleanup:application-deployment-queue', [ + Artisan::queue('cleanup:deployment-queue', [ '--team-id' => currentTeam()->id, ]); } From 97943db5f4941876af307b85df593f7ece9fbc29 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 09:21:54 +0200 Subject: [PATCH 066/295] chore: Add missing import for Attribute class in ApplicationDeploymentQueue model --- app/Models/ApplicationDeploymentQueue.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/Models/ApplicationDeploymentQueue.php b/app/Models/ApplicationDeploymentQueue.php index 90d7608cc..c261c30c6 100644 --- a/app/Models/ApplicationDeploymentQueue.php +++ b/app/Models/ApplicationDeploymentQueue.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Carbon; use OpenApi\Attributes as OA; @@ -39,6 +40,20 @@ class ApplicationDeploymentQueue extends Model { protected $guarded = []; + public function application(): Attribute + { + return Attribute::make( + get: fn () => Application::find($this->application_id), + ); + } + + public function server(): Attribute + { + return Attribute::make( + get: fn () => Server::find($this->server_id), + ); + } + public function setStatus(string $status) { $this->update([ From 2be2f0ac7900d4e8cc62a14e5009be3120afdd21 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 10:25:45 +0200 Subject: [PATCH 067/295] feat: support Hetzner S3 --- app/Livewire/Storage/Create.php | 18 ++++++++++-------- bootstrap/helpers/s3.php | 3 ++- .../views/livewire/storage/create.blade.php | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/Livewire/Storage/Create.php b/app/Livewire/Storage/Create.php index a05834ecc..c5250e1e3 100644 --- a/app/Livewire/Storage/Create.php +++ b/app/Livewire/Storage/Create.php @@ -43,15 +43,17 @@ class Create extends Component 'endpoint' => 'Endpoint', ]; - public function mount() + public function updatedEndpoint($value) { - if (isDev()) { - $this->name = 'Local MinIO'; - $this->description = 'Local MinIO'; - $this->key = 'minioadmin'; - $this->secret = 'minioadmin'; - $this->bucket = 'local'; - $this->endpoint = 'http://coolify-minio:9000'; + if (! str($value)->startsWith('https://') && ! str($value)->startsWith('http://')) { + $this->endpoint = 'https://'.$value; + $value = $this->endpoint; + } + + if (str($value)->contains('your-objectstorage.com') && ! isset($this->bucket)) { + $this->bucket = str($value)->after('//')->before('.'); + } elseif (str($value)->contains('your-objectstorage.com')) { + $this->bucket = $this->bucket ?: str($value)->after('//')->before('.'); } } diff --git a/bootstrap/helpers/s3.php b/bootstrap/helpers/s3.php index 4a2252016..e4469cd6b 100644 --- a/bootstrap/helpers/s3.php +++ b/bootstrap/helpers/s3.php @@ -8,6 +8,7 @@ function set_s3_target(S3Storage $s3) $is_digital_ocean = false; if ($s3->endpoint) { $is_digital_ocean = Str::contains($s3->endpoint, 'digitaloceanspaces.com'); + $is_hetzner = Str::contains($s3->endpoint, 'your-objectstorage.com'); } config()->set('filesystems.disks.custom-s3', [ 'driver' => 's3', @@ -17,7 +18,7 @@ function set_s3_target(S3Storage $s3) 'bucket' => $s3['bucket'], 'endpoint' => $s3['endpoint'], 'use_path_style_endpoint' => true, - 'bucket_endpoint' => $is_digital_ocean, + 'bucket_endpoint' => $is_digital_ocean || $is_hetzner, 'aws_url' => $s3->awsUrl(), ]); } diff --git a/resources/views/livewire/storage/create.blade.php b/resources/views/livewire/storage/create.blade.php index 107bec296..41d09e679 100644 --- a/resources/views/livewire/storage/create.blade.php +++ b/resources/views/livewire/storage/create.blade.php @@ -4,7 +4,7 @@ - +
From dd782e75f5a94a0ee469f96ac458b6d548249dee Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 2 Oct 2024 11:45:30 +0200 Subject: [PATCH 068/295] fix: local dev s3 uploads fix: hetzner s3 uploads (mc alias instead of mc host) --- app/Jobs/DatabaseBackupJob.php | 22 ++++++++++++++++--- app/Models/S3Storage.php | 10 +++++++++ bootstrap/helpers/s3.php | 8 ++----- .../components/modal-confirmation.blade.php | 7 +++--- .../database/backup-executions.blade.php | 19 +++++----------- .../create-scheduled-backup.blade.php | 20 +++++++++-------- 6 files changed, 50 insertions(+), 36 deletions(-) diff --git a/app/Jobs/DatabaseBackupJob.php b/app/Jobs/DatabaseBackupJob.php index 7109fda3b..9369eaaf9 100644 --- a/app/Jobs/DatabaseBackupJob.php +++ b/app/Jobs/DatabaseBackupJob.php @@ -237,7 +237,6 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue } } $this->backup_dir = backup_dir().'/databases/'.str($this->team->name)->slug().'-'.$this->team->id.'/'.$this->directory_name; - if ($this->database->name === 'coolify-db') { $databasesToBackup = ['coolify']; $this->directory_name = $this->container_name = 'coolify-db'; @@ -515,10 +514,27 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue $this->ensureHelperImageAvailable(); $fullImageName = $this->getFullImageName(); - $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $this->backup_location:$this->backup_location:ro {$fullImageName}"; - $commands[] = "docker exec backup-of-{$this->backup->uuid} mc config host add temporary {$endpoint} $key $secret"; + + if (isDev()) { + if ($this->database->name === 'coolify-db') { + $backup_location_from = '/var/lib/docker/volumes/coolify_dev_backups_data/_data/databases/coolify/coolify-db-'.$this->server->ip.$this->backup_file; + $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}"; + } else { + $backup_location_from = '/var/lib/docker/volumes/coolify_dev_backups_data/_data/databases/'.str($this->team->name)->slug().'-'.$this->team->id.'/'.$this->directory_name.$this->backup_file; + $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}"; + } + } else { + $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $this->backup_location:$this->backup_location:ro {$fullImageName}"; + } + if ($this->s3->isHetzner()) { + $endpointWithoutBucket = 'https://'.str($endpoint)->after('https://')->after('.')->value(); + $commands[] = "docker exec backup-of-{$this->backup->uuid} mc alias set --path=off --api=S3v4 temporary {$endpointWithoutBucket} $key $secret"; + } else { + $commands[] = "docker exec backup-of-{$this->backup->uuid} mc config host add temporary {$endpoint} $key $secret"; + } $commands[] = "docker exec backup-of-{$this->backup->uuid} mc cp $this->backup_location temporary/$bucket{$this->backup_dir}/"; instant_remote_process($commands, $this->server); + $this->add_to_backup_output('Uploaded to S3.'); } catch (\Throwable $e) { $this->add_to_backup_output($e->getMessage()); diff --git a/app/Models/S3Storage.php b/app/Models/S3Storage.php index 4c7faaa6f..a432a6e9c 100644 --- a/app/Models/S3Storage.php +++ b/app/Models/S3Storage.php @@ -40,6 +40,16 @@ class S3Storage extends BaseModel return "{$this->endpoint}/{$this->bucket}"; } + public function isHetzner() + { + return str($this->endpoint)->contains('your-objectstorage.com'); + } + + public function isDigitalOcean() + { + return str($this->endpoint)->contains('digitaloceanspaces.com'); + } + public function testConnection(bool $shouldSave = false) { try { diff --git a/bootstrap/helpers/s3.php b/bootstrap/helpers/s3.php index e4469cd6b..2ee7bf44a 100644 --- a/bootstrap/helpers/s3.php +++ b/bootstrap/helpers/s3.php @@ -1,15 +1,11 @@ endpoint) { - $is_digital_ocean = Str::contains($s3->endpoint, 'digitaloceanspaces.com'); - $is_hetzner = Str::contains($s3->endpoint, 'your-objectstorage.com'); - } + config()->set('filesystems.disks.custom-s3', [ 'driver' => 's3', 'region' => $s3['region'], @@ -18,7 +14,7 @@ function set_s3_target(S3Storage $s3) 'bucket' => $s3['bucket'], 'endpoint' => $s3['endpoint'], 'use_path_style_endpoint' => true, - 'bucket_endpoint' => $is_digital_ocean || $is_hetzner, + 'bucket_endpoint' => $s3->isHetzner() || $s3->isDigitalOcean(), 'aws_url' => $s3->awsUrl(), ]); } diff --git a/resources/views/components/modal-confirmation.blade.php b/resources/views/components/modal-confirmation.blade.php index d82a046d3..81a4b808b 100644 --- a/resources/views/components/modal-confirmation.blade.php +++ b/resources/views/components/modal-confirmation.blade.php @@ -296,9 +296,8 @@