From fa543662eda3f63bf844e6a179601c5444c85c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yeifer=20Alexander=20Mu=C3=B1oz=20Torres?= <149745077+yeifer-co@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:51:17 -0500 Subject: [PATCH] #1402 Environment variables for custom image (#1403) * chore: enhance compose.yaml with variables for customize * chore: use default blank values for db and redis variables in compose.yaml * chore: Use env var for HTTP(S) publish ports in overrides * docs: explain use of environment variables for image customization * chore: use ERPNEXT_VERSION as default * docs: fixed spelling errors --- CODE_OF_CONDUCT.md | 2 +- compose.yaml | 11 ++++++----- docs/custom-apps.md | 30 +++++++++++++++++++++++++----- overrides/compose.https.yaml | 4 ++-- overrides/compose.noproxy.yaml | 2 +- overrides/compose.proxy.yaml | 2 +- overrides/compose.traefik-ssl.yaml | 2 +- overrides/compose.traefik.yaml | 2 +- 8 files changed, 38 insertions(+), 17 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 55c27d81..0e01dd85 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -6,7 +6,7 @@ In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal +level of experience, education, socioeconomic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards diff --git a/compose.yaml b/compose.yaml index be9fe7ea..d9aa6ee1 100644 --- a/compose.yaml +++ b/compose.yaml @@ -2,7 +2,8 @@ x-customizable-image: &customizable_image # By default the image used only contains the `frappe` and `erpnext` apps. # See https://github.com/frappe/frappe_docker/blob/main/docs/custom-apps.md # about using custom images. - image: frappe/erpnext:${ERPNEXT_VERSION:?No ERPNext version set} + image: ${CUSTOM_IMAGE:-frappe/erpnext}:${CUSTOM_TAG:-${ERPNEXT_VERSION:?No ERPNext version or tag set}} + pull_policy: ${PULL_POLICY:-always} x-depends-on-configurator: &depends_on_configurator depends_on: @@ -32,10 +33,10 @@ services: bench set-config -g redis_socketio "redis://$$REDIS_QUEUE"; bench set-config -gp socketio_port $$SOCKETIO_PORT; environment: - DB_HOST: ${DB_HOST} - DB_PORT: ${DB_PORT} - REDIS_CACHE: ${REDIS_CACHE} - REDIS_QUEUE: ${REDIS_QUEUE} + DB_HOST: ${DB_HOST:-} + DB_PORT: ${DB_PORT:-} + REDIS_CACHE: ${REDIS_CACHE:-} + REDIS_QUEUE: ${REDIS_QUEUE:-} SOCKETIO_PORT: 9000 depends_on: {} diff --git a/docs/custom-apps.md b/docs/custom-apps.md index bc5194dd..f33aa3c7 100644 --- a/docs/custom-apps.md +++ b/docs/custom-apps.md @@ -104,14 +104,34 @@ More about [kaniko](https://github.com/GoogleContainerTools/kaniko) ### Use Images -On the [compose.yaml](../compose.yaml) replace the image reference to the `tag` you used when you built it. Then, if you used a tag like `custom_erpnext:staging` the `x-customizable-image` section will look like this: +In the [compose.yaml](../compose.yaml), you can set the image name and tag through environment variables, making it easier to customize. -``` +```yaml x-customizable-image: &customizable_image - image: custom_erpnext:staging - pull_policy: never + image: ${CUSTOM_IMAGE:-frappe/erpnext}:${CUSTOM_TAG:-${ERPNEXT_VERSION:?No ERPNext version or tag set}} + pull_policy: ${PULL_POLICY:-always} ``` -The `pull_policy` above is optional and prevents `docker` to try to download the image when that one has been built locally. +The environment variables can be set in the shell or in the .env file as [setup-options.md](setup-options.md) describes. + +- `CUSTOM_IMAGE`: The name of your custom image. Defaults to `frappe/erpnext` if not set. +- `CUSTOM_TAG`: The tag for your custom image. Must be set if `CUSTOM_IMAGE` is used. Defaults to the value of `ERPNEXT_VERSION` if not set. +- `PULL_POLICY`: The Docker pull policy. Defaults to `always`. Recommended set to `never` for local images, so prevent `docker` from trying to download the image when it has been built locally. +- `HTTP_PUBLISH_PORT`: The port to publish through no SSL channel. Default depending on deployment, it may be `80` if SSL activated or `8080` if not. +- `HTTPS_PUBLISH_PORT`: The secure port to publish using SSL. Default is `443`. Make sure image name is correct to be pushed to registry. After the images are pushed, you can pull them to servers to be deployed. If the registry is private, additional auth is needed. + +#### Example + +If you built an image with the tag `ghcr.io/user/repo/custom:1.0.0`, you would set the environment variables as follows: + +```bash +export CUSTOM_IMAGE='ghcr.io/user/repo/custom' +export CUSTOM_TAG='1.0.0' +docker compose -f compose.yaml \ + -f overrides/compose.mariadb.yaml \ + -f overrides/compose.redis.yaml \ + -f overrides/compose.https.yaml \ + config > ~/gitops/docker-compose.yaml +``` diff --git a/overrides/compose.https.yaml b/overrides/compose.https.yaml index a34e2d3c..aa17a68e 100644 --- a/overrides/compose.https.yaml +++ b/overrides/compose.https.yaml @@ -21,8 +21,8 @@ services: - --certificatesResolvers.main-resolver.acme.email=${LETSENCRYPT_EMAIL:?No Let's Encrypt email set} - --certificatesResolvers.main-resolver.acme.storage=/letsencrypt/acme.json ports: - - 80:80 - - 443:443 + - ${HTTP_PUBLISH_PORT:-80}:80 + - ${HTTPS_PUBLISH_PORT:-443}:443 volumes: - cert-data:/letsencrypt - /var/run/docker.sock:/var/run/docker.sock:ro diff --git a/overrides/compose.noproxy.yaml b/overrides/compose.noproxy.yaml index 5c4f83c0..23239ff2 100644 --- a/overrides/compose.noproxy.yaml +++ b/overrides/compose.noproxy.yaml @@ -1,4 +1,4 @@ services: frontend: ports: - - 8080:8080 + - ${HTTP_PUBLISH_PORT:-8080}:8080 diff --git a/overrides/compose.proxy.yaml b/overrides/compose.proxy.yaml index d2dc319a..c887ffa5 100644 --- a/overrides/compose.proxy.yaml +++ b/overrides/compose.proxy.yaml @@ -13,7 +13,7 @@ services: - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 ports: - - 80:80 + - ${HTTP_PUBLISH_PORT:-80}:80 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro userns_mode: host diff --git a/overrides/compose.traefik-ssl.yaml b/overrides/compose.traefik-ssl.yaml index 0c0a9b84..be996f54 100644 --- a/overrides/compose.traefik-ssl.yaml +++ b/overrides/compose.traefik-ssl.yaml @@ -40,7 +40,7 @@ services: # Enable the Dashboard and API - --api ports: - - 443:443 + - ${HTTPS_PUBLISH_PORT:-443}:443 volumes: - cert-data:/certificates diff --git a/overrides/compose.traefik.yaml b/overrides/compose.traefik.yaml index f3e64f6c..1e4432ff 100644 --- a/overrides/compose.traefik.yaml +++ b/overrides/compose.traefik.yaml @@ -35,7 +35,7 @@ services: # Enable the Dashboard and API - --api ports: - - 80:80 + - ${HTTP_PUBLISH_PORT:-80}:80 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: