From 44eb1646dbd53a8934e3ef7988b5b246e87ed15c Mon Sep 17 00:00:00 2001 From: Romain de Laage Date: Wed, 26 Apr 2023 13:00:42 +0000 Subject: [PATCH] build(docker): use buildx to build AMD and ARM images --- docker/production/.gitlab-ci.yml | 48 ++-- docker/production/app/Dockerfile | 2 +- docker/production/app/entrypoint.sh | 197 +------------ .../production/common/prepare_environment.sh | 266 ++++++++++++++++++ docker/production/unit/Dockerfile | 1 + docker/production/unit/entrypoint.sh | 193 +------------ docker/production/video-clipper/Dockerfile | 2 +- docs/src/getting-started/docker.md | 56 ++-- 8 files changed, 333 insertions(+), 432 deletions(-) create mode 100644 docker/production/common/prepare_environment.sh diff --git a/docker/production/.gitlab-ci.yml b/docker/production/.gitlab-ci.yml index f55b96fa..d570d371 100644 --- a/docker/production/.gitlab-ci.yml +++ b/docker/production/.gitlab-ci.yml @@ -4,16 +4,18 @@ stages: docker-build-rolling: stage: build image: - name: gcr.io/kaniko-project/executor:debug - entrypoint: [""] + name: docker.io/docker:23.0.3-dind + services: + - docker:23.0.3-dind variables: TAG: $CI_COMMIT_BRANCH script: - - cp ${DOCKER_HUB_CONFIG} /kaniko/.docker/config.json - - /kaniko/executor --cleanup --context . --dockerfile docker/production/web-server/Dockerfile --destination ${DOCKER_IMAGE_WEB_SERVER}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/app/Dockerfile --destination ${DOCKER_IMAGE_APP}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/video-clipper/Dockerfile --destination ${DOCKER_IMAGE_VIDEO_CLIPPER}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/unit/Dockerfile --destination ${DOCKER_IMAGE_UNIT}:${TAG} + - mkdir -p /root/.docker + - cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/video-clipper/Dockerfile --tag=${DOCKER_IMAGE_VIDEO_CLIPPER}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/unit/Dockerfile --tag=${DOCKER_IMAGE_UNIT}:${TAG} . needs: - pipeline: $PARENT_PIPELINE_ID job: bundle @@ -24,15 +26,17 @@ docker-build-rolling: docker-build-main-release: stage: build image: - name: gcr.io/kaniko-project/executor:debug - entrypoint: [""] + name: docker.io/docker:23.0.3-dind + services: + - docker:23.0.3-dind script: - - cp ${DOCKER_HUB_CONFIG} /kaniko/.docker/config.json + - mkdir -p /root/.docker + - cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json - export CP_VERSION=$(cat CP_VERSION.env) - - /kaniko/executor --cleanup --context . --dockerfile docker/production/web-server/Dockerfile --destination ${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --destination ${DOCKER_IMAGE_WEB_SERVER}:latest - - /kaniko/executor --cleanup --context . --dockerfile docker/production/app/Dockerfile --destination ${DOCKER_IMAGE_APP}:${CP_VERSION} --destination ${DOCKER_IMAGE_APP}:latest - - /kaniko/executor --cleanup --context . --dockerfile docker/production/video-clipper/Dockerfile --destination ${DOCKER_IMAGE_VIDEO_CLIPPER}:${CP_VERSION} --destination ${DOCKER_IMAGE_VIDEO_CLIPPER}:latest - - /kaniko/executor --cleanup --context . --dockerfile docker/production/unit/Dockerfile --destination ${DOCKER_IMAGE_UNIT}:${CP_VERSION} --destination ${DOCKER_IMAGE_UNIT}:latest + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --tag={DOCKER_IMAGE_WEB_SERVER}:latest . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${CP_VERSION} --tag=${DOCKER_IMAGE_APP}:latest . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/video-clipper/Dockerfile --tag=${DOCKER_IMAGE_VIDEO_CLIPPER}:${CP_VERSION} --tag=${DOCKER_IMAGE_VIDEO_CLIPPER}:latest . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/unit/Dockerfile --tag=${DOCKER_IMAGE_UNIT}:${CP_VERSION} --tag=${DOCKER_IMAGE_UNIT}:latest . needs: - pipeline: $PARENT_PIPELINE_ID job: release @@ -43,17 +47,19 @@ docker-build-main-release: docker-build-alpha-beta-release: stage: build image: - name: gcr.io/kaniko-project/executor:debug - entrypoint: [""] + name: docker.io/docker:23.0.3-dind + services: + - docker:23.0.3-dind variables: TAG: $CI_COMMIT_BRANCH script: - - cp ${DOCKER_HUB_CONFIG} /kaniko/.docker/config.json + - mkdir -p /root/.docker + - cp ${DOCKER_HUB_CONFIG} /root/.docker/config.json - export CP_VERSION=$(cat CP_VERSION.env) - - /kaniko/executor --cleanup --context . --dockerfile docker/production/web-server/Dockerfile --destination ${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --destination ${DOCKER_IMAGE_WEB_SERVER}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/app/Dockerfile --destination ${DOCKER_IMAGE_APP}:${CP_VERSION} --destination ${DOCKER_IMAGE_APP}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/video-clipper/Dockerfile --destination ${DOCKER_IMAGE_VIDEO_CLIPPER}:${CP_VERSION} --destination ${DOCKER_IMAGE_VIDEO_CLIPPER}:${TAG} - - /kaniko/executor --cleanup --context . --dockerfile docker/production/unit/Dockerfile --destination ${DOCKER_IMAGE_UNIT}:${CP_VERSION} --destination ${DOCKER_IMAGE_UNIT}:${TAG} + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/web-server/Dockerfile --tag=${DOCKER_IMAGE_WEB_SERVER}:${CP_VERSION} --tag={DOCKER_IMAGE_WEB_SERVER}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/app/Dockerfile --tag=${DOCKER_IMAGE_APP}:${CP_VERSION} --tag=${DOCKER_IMAGE_APP}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/video-clipper/Dockerfile --tag=${DOCKER_IMAGE_VIDEO_CLIPPER}:${CP_VERSION} --tag=${DOCKER_IMAGE_VIDEO_CLIPPER}:${TAG} . + - docker buildx build --push --platform=linux/amd64,linux/arm64 --file=docker/production/unit/Dockerfile --tag=${DOCKER_IMAGE_UNIT}:${CP_VERSION} --tag=${DOCKER_IMAGE_UNIT}:${TAG} . needs: - pipeline: $PARENT_PIPELINE_ID job: release diff --git a/docker/production/app/Dockerfile b/docker/production/app/Dockerfile index 47117b94..771a87a8 100644 --- a/docker/production/app/Dockerfile +++ b/docker/production/app/Dockerfile @@ -1,7 +1,7 @@ FROM docker.io/php:8.1-fpm-alpine3.17 +COPY docker/production/common/prepare_environment.sh /prepare_environment.sh COPY docker/production/app/entrypoint.sh /entrypoint.sh - COPY docker/production/app/uploads.ini /usr/local/etc/php/conf.d/uploads.ini RUN echo "* * * * * /usr/local/bin/php /opt/castopod/public/index.php scheduled-activities" > /crontab.txt && \ diff --git a/docker/production/app/entrypoint.sh b/docker/production/app/entrypoint.sh index 623ef13d..e92dd10d 100644 --- a/docker/production/app/entrypoint.sh +++ b/docker/production/app/entrypoint.sh @@ -1,201 +1,8 @@ #!/bin/sh -if [ -z "${CP_BASEURL}" ] -then - echo "CP_BASEURL must be set" - exit 1 -fi +ENV_FILE_LOCATION=/opt/castopod/.env -if [ -z "${CP_MEDIA_BASEURL}" ] -then - echo "CP_MEDIA_BASEURL is empty, leaving empty by default" -fi - -if [ -z "${CP_ADMIN_GATEWAY}" ] -then - echo "CP_ADMIN_GATEWAY is empty, using default" - CP_ADMIN_GATEWAY="cp-admin" -fi - -if [ -z "${CP_AUTH_GATEWAY}" ] -then - echo "CP_AUTH_GATEWAY is empty, using default" - CP_AUTH_GATEWAY="cp-auth" -fi - -if [ -z "${CP_ANALYTICS_SALT}" ] -then - echo "CP_ANALYTICS_SALT is empty, this is mandatory, generate a new one with tr -dc \\!\\#-\\&\\(-\\[\\]-\\_a-\\~ /opt/castopod/.env -app.baseURL="${CP_BASEURL}" -media.baseURL="${CP_MEDIA_BASEURL}" -EOF - -if [ "${CP_DISABLE_HTTPS}" == "1" ] -then - echo "HTTPS redirection is disabled for test purpose, please enable it in production mode" - echo "app.forceGlobalSecureRequests=false" >> /opt/castopod/.env -else - echo "HTTPS redirection is enabled by default (mandatory to federate with the fediverse), use CP_DISABLE_HTTPS=1 to disable it for testing purposes" -fi - -cat << EOF >> /opt/castopod/.env -admin.gateway="${CP_ADMIN_GATEWAY}" -auth.gateway="${CP_AUTH_GATEWAY}" - -analytics.salt="${CP_ANALYTICS_SALT}" - -database.default.hostname="${CP_DATABASE_HOSTNAME}" -database.default.database="${CP_DATABASE_NAME}" -database.default.username="${CP_DATABASE_USERNAME}" -database.default.password="${CP_DATABASE_PASSWORD}" -database.default.DBPrefix="${CP_DATABASE_PREFIX}" - -cache.handler="${CP_CACHE_HANDLER}" -EOF - -if [ "${CP_CACHE_HANDLER}" == "redis" ] -then - cat << EOF >> /opt/castopod/.env -cache.redis.host="${CP_REDIS_HOST}" -cache.redis.password=${CP_REDIS_PASSWORD} -cache.redis.port=${CP_REDIS_PORT} -cache.redis.database=${CP_REDIS_DATABASE} -EOF -fi - -if [ ! -z "${CP_EMAIL_SMTP_HOST}" ] -then - if [ -z "${CP_EMAIL_SMTP_USERNAME}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_USERNAME must be set" - exit 1 - fi - - if [ -z "${CP_EMAIL_SMTP_PASSWORD}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_PASSWORD must be set" - exit 1 - fi - - if [ -z "${CP_EMAIL_FROM}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_FROM must be set" - exit 1 - fi - - cat << EOF >> /opt/castopod/.env -email.protocol="smtp" -email.SMTPHost="${CP_EMAIL_SMTP_HOST}" -email.SMTPUser=${CP_EMAIL_SMTP_USERNAME} -email.SMTPPass=${CP_EMAIL_SMTP_PASSWORD} -email.fromEmail=${CP_EMAIL_FROM} -EOF - - if [ ! -z "${CP_EMAIL_SMTP_PORT}" ] - then - cat << EOF >> /opt/castopod/.env -email.SMTPPort=${CP_EMAIL_SMTP_PORT} -EOF - fi - - if [ ! -z "${CP_EMAIL_SMTP_CRYPTO}" ] - then - if [ "${CP_EMAIL_SMTP_CRYPTO}" != "ssl" ] && [ "${CP_EMAIL_SMTP_CRYPTO}" != "tls" ] - then - echo "CP_EMAIL_SMTP_CRYPTO must be ssl or tls" - exit 1 - fi - cat << EOF >> /opt/castopod/.env -email.SMTPCrypto=${CP_EMAIL_SMTP_CRYPTO} -EOF - fi -fi - -echo "Using config:" -cat /opt/castopod/.env - -cd /opt/castopod -php spark castopod:database-update +. /prepare_environment.sh /usr/sbin/crond -f /crontab.txt -L /dev/stdout & /usr/local/sbin/php-fpm diff --git a/docker/production/common/prepare_environment.sh b/docker/production/common/prepare_environment.sh new file mode 100644 index 00000000..d038a4a4 --- /dev/null +++ b/docker/production/common/prepare_environment.sh @@ -0,0 +1,266 @@ +#!/bin/sh + +log_error() { + printf "\033[0;31mERROR:\033[0m $1\n" + exit 1 +} + +log_warning() { + printf "\033[0;33mWARNING:\033[0m $1\n" +} + +if [ -z "${CP_BASEURL}" ] +then + log_error "CP_BASEURL must be set" +fi + +if [ -z "${CP_MEDIA_BASEURL}" ] +then + echo "CP_MEDIA_BASEURL is empty, leaving empty by default" +fi + +if [ -z "${CP_ADMIN_GATEWAY}" ] +then + echo "CP_ADMIN_GATEWAY is empty, using default" + CP_ADMIN_GATEWAY="cp-admin" +fi + +if [ -z "${CP_AUTH_GATEWAY}" ] +then + echo "CP_AUTH_GATEWAY is empty, using default" + CP_AUTH_GATEWAY="cp-auth" +fi + +if [ -z "${CP_ANALYTICS_SALT}" ] +then + log_error "CP_ANALYTICS_SALT is empty, this is mandatory, generate a new one with tr -dc \\!\\#-\\&\\(-\\[\\]-\\_a-\\~ $ENV_FILE_LOCATION +app.baseURL="${CP_BASEURL}" +media.baseURL="${CP_MEDIA_BASEURL}" +EOF + +if [ "${CP_DISABLE_HTTPS}" = "1" ] +then + log_warning "HTTPS redirection is disabled for testing purposes, please enable it in production mode" + echo "app.forceGlobalSecureRequests=false" >> $ENV_FILE_LOCATION +else + echo "HTTPS redirection is enabled by default (mandatory to federate with the fediverse), use CP_DISABLE_HTTPS=1 to disable it for testing purposes" +fi + +cat << EOF >> $ENV_FILE_LOCATION +admin.gateway="${CP_ADMIN_GATEWAY}" +auth.gateway="${CP_AUTH_GATEWAY}" + +analytics.salt="${CP_ANALYTICS_SALT}" + +database.default.hostname="${CP_DATABASE_HOSTNAME}" +database.default.database="${CP_DATABASE_NAME}" +database.default.username="${CP_DATABASE_USERNAME}" +database.default.password="${CP_DATABASE_PASSWORD}" +database.default.DBPrefix="${CP_DATABASE_PREFIX}" + +cache.handler="${CP_CACHE_HANDLER}" +EOF + +if [ "${CP_CACHE_HANDLER}" = "redis" ] +then + cat << EOF >> $ENV_FILE_LOCATION +cache.redis.host="${CP_REDIS_HOST}" +cache.redis.password=${CP_REDIS_PASSWORD} +cache.redis.port=${CP_REDIS_PORT} +cache.redis.database=${CP_REDIS_DATABASE} +EOF +fi + +if [ "${CP_ENABLE_2FA}" = "true" ] +then + cat << EOF >> $ENV_FILE_LOCATION +auth.enable2FA=true +EOF +fi + +if [ "${CP_MEDIA_FILE_MANAGER}" = "s3" ] +then + cat << EOF >> $ENV_FILE_LOCATION +media.fileManager=s3 +media.s3.endpoint=${CP_MEDIA_S3_ENDPOINT} +media.s3.key=${CP_MEDIA_S3_KEY} +media.s3.secret=${CP_MEDIA_S3_SECRET} +media.s3.region=${CP_MEDIA_S3_REGION} +media.s3.bucket=${CP_MEDIA_S3_BUCKET} +EOF +fi + +if [ ! -z "${CP_MEDIA_S3_PROTOCOL}" ] +then + cat << EOF >> $ENV_FILE_LOCATION +media.s3.protocol=${CP_MEDIA_S3_PROTOCOL} +EOF +fi + +if [ ! -z "${CP_MEDIA_S3_PATH_STYLE_ENDPOINT}" ] +then + cat << EOF >> $ENV_FILE_LOCATION +media.s3.pathStyleEndpoint=${CP_MEDIA_S3_PATH_STYLE_ENDPOINT} +EOF +fi + +if [ ! -z "${CP_MEDIA_S3_KEY_PREFIX}" ] +then + cat << EOF >> $ENV_FILE_LOCATION +media.s3.keyPrefix=${CP_MEDIA_S3_KEY_PREFIX} +EOF +fi + +if [ ! -z "${CP_EMAIL_SMTP_HOST}" ] +then + if [ -z "${CP_EMAIL_SMTP_USERNAME}" ] + then + echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_USERNAME must be set" + exit 1 + fi + + if [ -z "${CP_EMAIL_SMTP_PASSWORD}" ] + then + echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_PASSWORD must be set" + exit 1 + fi + + if [ -z "${CP_EMAIL_FROM}" ] + then + echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_FROM must be set" + exit 1 + fi + + cat << EOF >> $ENV_FILE_LOCATION +email.protocol="smtp" +email.SMTPHost="${CP_EMAIL_SMTP_HOST}" +email.SMTPUser=${CP_EMAIL_SMTP_USERNAME} +email.SMTPPass=${CP_EMAIL_SMTP_PASSWORD} +email.fromEmail=${CP_EMAIL_FROM} +EOF + + if [ ! -z "${CP_EMAIL_SMTP_PORT}" ] + then + cat << EOF >> $ENV_FILE_LOCATION +email.SMTPPort=${CP_EMAIL_SMTP_PORT} +EOF + fi + + if [ ! -z "${CP_EMAIL_SMTP_CRYPTO}" ] + then + if [ "${CP_EMAIL_SMTP_CRYPTO}" != "ssl" ] && [ "${CP_EMAIL_SMTP_CRYPTO}" != "tls" ] + then + echo "CP_EMAIL_SMTP_CRYPTO must be ssl or tls" + exit 1 + fi + cat << EOF >> $ENV_FILE_LOCATION +email.SMTPCrypto=${CP_EMAIL_SMTP_CRYPTO} +EOF + fi +fi + +echo "Using config:" +cat $ENV_FILE_LOCATION + +#Run database migrations after 10 seconds (to wait for the database to be started) +(sleep 10 && php spark castopod:database-update) & diff --git a/docker/production/unit/Dockerfile b/docker/production/unit/Dockerfile index 8cf5d121..268ff2e6 100644 --- a/docker/production/unit/Dockerfile +++ b/docker/production/unit/Dockerfile @@ -33,6 +33,7 @@ COPY --from=UNIT_BUILDER /usr/sbin/unitd /usr/sbin/unitd COPY --from=UNIT_BUILDER /usr/lib/unit/ /usr/lib/unit/ COPY --from=CRON_BUILDER /usr/local/bin/supercronic /usr/local/bin/supercronic +COPY docker/production/common/prepare_environment.sh /prepare_environment.sh COPY docker/production/unit/entrypoint.sh /entrypoint.sh COPY castopod /var/www/castopod COPY docker/production/unit/config.json /config.json diff --git a/docker/production/unit/entrypoint.sh b/docker/production/unit/entrypoint.sh index 9526d7e1..544bda06 100644 --- a/docker/production/unit/entrypoint.sh +++ b/docker/production/unit/entrypoint.sh @@ -1,198 +1,9 @@ #!/bin/sh -if [ -z "${CP_BASEURL}" ] -then - echo "CP_BASEURL must be set" - exit 1 -fi +ENV_FILE_LOCATION=/var/www/castopod/.env -if [ -z "${CP_MEDIA_BASEURL}" ] -then - echo "CP_MEDIA_BASEURL is empty, leaving empty by default" -fi +. /prepare_environment.sh -if [ -z "${CP_ADMIN_GATEWAY}" ] -then - echo "CP_ADMIN_GATEWAY is empty, using default" - CP_ADMIN_GATEWAY="cp-admin" -fi - -if [ -z "${CP_AUTH_GATEWAY}" ] -then - echo "CP_AUTH_GATEWAY is empty, using default" - CP_AUTH_GATEWAY="cp-auth" -fi - -if [ -z "${CP_ANALYTICS_SALT}" ] -then - echo "CP_ANALYTICS_SALT is empty, this is mandatory, generate a new one with tr -dc \\!\\#-\\&\\(-\\[\\]-\\_a-\\~ /var/www/castopod/.env -app.baseURL="${CP_BASEURL}" -media.baseURL="${CP_MEDIA_BASEURL}" -EOF - -if [ "${CP_DISABLE_HTTPS}" = "1" ] -then - echo "HTTPS redirection is disabled for testing purposes, please enable it in production mode" - echo "app.forceGlobalSecureRequests=false" >> /var/www/castopod/.env -else - echo "HTTPS redirection is enabled by default (mandatory to federate with the fediverse), use CP_DISABLE_HTTPS=1 to disable it for testing purposes" -fi - -cat << EOF >> /var/www/castopod/.env -admin.gateway="${CP_ADMIN_GATEWAY}" -auth.gateway="${CP_AUTH_GATEWAY}" - -analytics.salt="${CP_ANALYTICS_SALT}" - -database.default.hostname="${CP_DATABASE_HOSTNAME}" -database.default.database="${CP_DATABASE_NAME}" -database.default.username="${CP_DATABASE_USERNAME}" -database.default.password="${CP_DATABASE_PASSWORD}" -database.default.DBPrefix="${CP_DATABASE_PREFIX}" - -cache.handler="${CP_CACHE_HANDLER}" -EOF - -if [ "${CP_CACHE_HANDLER}" = "redis" ] -then - cat << EOF >> /var/www/castopod/.env -cache.redis.host="${CP_REDIS_HOST}" -cache.redis.password=${CP_REDIS_PASSWORD} -cache.redis.port=${CP_REDIS_PORT} -cache.redis.database=${CP_REDIS_DATABASE} -EOF -fi - -if [ ! -z "${CP_EMAIL_SMTP_HOST}" ] -then - if [ -z "${CP_EMAIL_SMTP_USERNAME}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_USERNAME must be set" - exit 1 - fi - - if [ -z "${CP_EMAIL_SMTP_PASSWORD}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_SMTP_PASSWORD must be set" - exit 1 - fi - - if [ -z "${CP_EMAIL_FROM}" ] - then - echo "When CP_EMAIL_SMTP_HOST is provided, CP_EMAIL_FROM must be set" - exit 1 - fi - - cat << EOF >> /var/www/castopod/.env -email.protocol="smtp" -email.SMTPHost="${CP_EMAIL_SMTP_HOST}" -email.SMTPUser=${CP_EMAIL_SMTP_USERNAME} -email.SMTPPass=${CP_EMAIL_SMTP_PASSWORD} -email.fromEmail=${CP_EMAIL_FROM} -EOF - - if [ ! -z "${CP_EMAIL_SMTP_PORT}" ] - then - cat << EOF >> /var/www/castopod/.env -email.SMTPPort=${CP_EMAIL_SMTP_PORT} -EOF - fi - - if [ ! -z "${CP_EMAIL_SMTP_CRYPTO}" ] - then - if [ "${CP_EMAIL_SMTP_CRYPTO}" != "ssl" ] && [ "${CP_EMAIL_SMTP_CRYPTO}" != "tls" ] - then - echo "CP_EMAIL_SMTP_CRYPTO must be ssl or tls" - exit 1 - fi - cat << EOF >> /var/www/castopod/.env -email.SMTPCrypto=${CP_EMAIL_SMTP_CRYPTO} -EOF - fi -fi - -#Run database migrations after 10 seconds (to wait for the database to be started) -(sleep 10 && php spark castopod:database-update) & #Apply configuration after unit is started (sleep 2 && curl -X PUT --data-binary @/config.json --unix-socket /var/run/control.unit.sock http://localhost/config/) & supervisord diff --git a/docker/production/video-clipper/Dockerfile b/docker/production/video-clipper/Dockerfile index d01ee076..8f91f97b 100644 --- a/docker/production/video-clipper/Dockerfile +++ b/docker/production/video-clipper/Dockerfile @@ -4,7 +4,7 @@ ENV SUPERCRONIC_VERSION=v0.2.1 COPY docker/production/video-clipper/entrypoint.sh /entrypoint.sh -RUN echo "*/2 * * * * /usr/local/bin/php /opt/castopod/public/index.php scheduled-video-clips" >> /crontab.txt +RUN echo "* * * * * /usr/local/bin/php /opt/castopod/public/index.php scheduled-video-clips" >> /crontab.txt RUN apt update && \ apt install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libicu-dev && \ diff --git a/docs/src/getting-started/docker.md b/docs/src/getting-started/docker.md index 7b8b8d49..bae0d0d3 100644 --- a/docs/src/getting-started/docker.md +++ b/docs/src/getting-started/docker.md @@ -148,29 +148,39 @@ can be added as a cache handler. - **castopod/app** - | Variable name | Type (`default`) | Default | - | ---------------------------- | ----------------------- | ---------------- | - | **`CP_BASEURL`** | string | `undefined` | - | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | - | **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | - | **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | - | **`CP_ANALYTICS_SALT`** | string | `undefined` | - | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | - | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | - | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | - | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | - | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | - | **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | - | **`CP_REDIS_HOST`** | ?string | `"localhost"` | - | **`CP_REDIS_PASSWORD`** | ?string | `null` | - | **`CP_REDIS_PORT`** | ?number | `6379` | - | **`CP_REDIS_DATABASE`** | ?number | `0` | - | **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | - | **`CP_EMAIL_FROM`** | ?string | `undefined` | - | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | - | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | - | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | - | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | + | Variable name | Type (`default`) | Default | + | ------------------------------------- | ----------------------- | ---------------- | + | **`CP_BASEURL`** | string | `undefined` | + | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | + | **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | + | **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | + | **`CP_ANALYTICS_SALT`** | string | `undefined` | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + | **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | + | **`CP_REDIS_HOST`** | ?string | `"localhost"` | + | **`CP_REDIS_PASSWORD`** | ?string | `null` | + | **`CP_REDIS_PORT`** | ?number | `6379` | + | **`CP_REDIS_DATABASE`** | ?number | `0` | + | **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | + | **`CP_EMAIL_FROM`** | ?string | `undefined` | + | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | + | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | + | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | + | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | + | **`CP_ENABLE_2FA`** | ?boolean | `undefined` | + | **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` | + | **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` | + | **`CP_MEDIA_S3_KEY`** | ?string | `undefined` | + | **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` | + | **`CP_MEDIA_S3_REGION`** | ?string | `undefined` | + | **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` | + | **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` | + | **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` | + | **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` | - **castopod/web-server**