forked from toolshed/docs.coopcloud.tech
		
	docs: override entrypoint
This commit is contained in:
		| @ -39,7 +39,7 @@ After docker creates the filesystem and copies files into a new container it run | |||||||
|  |  | ||||||
| For a simple example check the [entrypoint.sh for `croc`](https://git.coopcloud.tech/coop-cloud/croc/src/commit/2f06e8aac52a3850d527434a26de0a242bea0c79/entrypoint.sh). In this case, `croc` needs the password to be exported as an environmental variable called `CROC_PASS`, and that is exactly what the entrypoint does before running vendor entrypoint. | For a simple example check the [entrypoint.sh for `croc`](https://git.coopcloud.tech/coop-cloud/croc/src/commit/2f06e8aac52a3850d527434a26de0a242bea0c79/entrypoint.sh). In this case, `croc` needs the password to be exported as an environmental variable called `CROC_PASS`, and that is exactly what the entrypoint does before running vendor entrypoint. | ||||||
|  |  | ||||||
| If you write your own entrypoint, it needs to be specified in the `config` section of compose.yml. See [this handbook entry](http://localhost:8000/maintainers/handbook/#entrypoints) for more. | If you write your own entrypoint, it needs to be specified in the `config` section of compose.yml. See [this handbook entry](/maintainers/handbook/#how-do-i-set-a-custom-entrypoint) for more. | ||||||
|  |  | ||||||
| ### `releases/` directory | ### `releases/` directory | ||||||
|  |  | ||||||
| @ -548,3 +548,91 @@ You can use [this `docker-compose` trick](https://docs.docker.com/compose/extend | |||||||
| If you have a recipe that is using a `mysql` service and you'd like to use `postgresql` instead, you can create a `compose.psql.yml`! | If you have a recipe that is using a `mysql` service and you'd like to use `postgresql` instead, you can create a `compose.psql.yml`! | ||||||
|  |  | ||||||
| An example of this is the [`selfoss`](https://git.coopcloud.tech/coop-cloud/selfoss) recipe. The default is `sqlite` but there is a `postgresql` compose configuration there too. | An example of this is the [`selfoss`](https://git.coopcloud.tech/coop-cloud/selfoss) recipe. The default is `sqlite` but there is a `postgresql` compose configuration there too. | ||||||
|  |  | ||||||
|  | ## How do I set a custom entrypoint? | ||||||
|  |  | ||||||
|  | Ripped from the [`coop-cloud/peertube`](https://git.coopcloud.tech/coop-cloud/peertube) recipe but shortened down, here are more or the steps you need to take: | ||||||
|  |  | ||||||
|  | Define a config: | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  |   app: | ||||||
|  |     ... | ||||||
|  |     configs: | ||||||
|  |       - source: app_entrypoint | ||||||
|  |         target: /docker-entrypoint.sh | ||||||
|  |         mode: 0555 | ||||||
|  |     ... | ||||||
|  |  | ||||||
|  | configs: | ||||||
|  |   app_entrypoint: | ||||||
|  |     name: ${STACK_NAME}_app_entrypoint_${APP_ENTRYPOINT_VERSION} | ||||||
|  |     file: entrypoint.sh.tmpl | ||||||
|  |     template_driver: golang | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Define a `entrypoint.sh.tmpl`: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | set -e | ||||||
|  |  | ||||||
|  | file_env() { | ||||||
|  |    local var="$1" | ||||||
|  |    local fileVar="${var}_FILE" | ||||||
|  |    local def="${2:-}" | ||||||
|  |  | ||||||
|  |    if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then | ||||||
|  |       echo >&2 "error: both $var and $fileVar are set (but are exclusive)" | ||||||
|  |       exit 1 | ||||||
|  |    fi | ||||||
|  |  | ||||||
|  |    local val="$def" | ||||||
|  |  | ||||||
|  |    if [ "${!var:-}" ]; then | ||||||
|  |       val="${!var}" | ||||||
|  |    elif [ "${!fileVar:-}" ]; then | ||||||
|  |       val="$(< "${!fileVar}")" | ||||||
|  |    fi | ||||||
|  |  | ||||||
|  |    export "$var"="$val" | ||||||
|  |    unset "$fileVar" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | file_env "PEERTUBE_DB_PASSWORD" | ||||||
|  |  | ||||||
|  | {{ if eq (env "PEERTUBE_SMTP_ENABLED") "1" }} | ||||||
|  | file_env "PEERTUBE_SMTP_PASSWORD" | ||||||
|  | {{ end }} | ||||||
|  |  | ||||||
|  | {{ if eq (env "PEERTUBE_LIVE_CHAT_ENABLED") "1" }} | ||||||
|  | apt -y update && apt install -y prosody && apt -y clean | ||||||
|  | mkdir -p /run/prosody && chown prosody:prosody /run/prosody | ||||||
|  | {{ end }} | ||||||
|  |  | ||||||
|  | # Copy the client files over to a named volume | ||||||
|  | # so that they may be served by nginx directly | ||||||
|  | cp -ar /app/client/dist /srv/client | ||||||
|  |  | ||||||
|  | # upstream entrypoint | ||||||
|  | # https://github.com/Chocobozzz/PeerTube/blob/66f77f63437c6774acbd72584a9839a7636ea167/support/docker/production/entrypoint.sh | ||||||
|  | /usr/local/bin/entrypoint.sh "$@" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Please note: | ||||||
|  |  | ||||||
|  | 1. The `file_env` // `_FILE` hack is to pass secrets into the container runtime without exposing them in plaintext in the configuration. | ||||||
|  |  | ||||||
|  | 1. In order to pass execution back to the original entrypoint, it's a good idea to find the original entrypoint script and run it from your own entrypoint script. If there is none, you may want to reference the `CMD` definition or if that isn't working, try to actually specify `cmd: ...` in the `compose.yml` definition (there are other recipes which do this). | ||||||
|  |  | ||||||
|  | 1. If you're feeling reckless, you can also use the Golang templating engine to do things conditionally. | ||||||
|  |  | ||||||
|  | Then, wire up the vendored config version: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | # abra.sh | ||||||
|  | export APP_ENTRYPOINT_VERSION=v5 | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | You should be able to deploy this overriden configuration now. | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user