build(docker): add ability to configure timeouts, max body size and max memory limit
This commit is contained in:
parent
108fdf84b8
commit
7c02774924
|
@ -2,13 +2,13 @@ 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
|
||||
COPY docker/production/app/uploads.template.ini /uploads.template.ini
|
||||
|
||||
RUN echo "* * * * * /usr/local/bin/php /opt/castopod/public/index.php scheduled-activities" > /crontab.txt && \
|
||||
echo "* * * * * /usr/local/bin/php /opt/castopod/public/index.php scheduled-websub-publish" >> /crontab.txt
|
||||
|
||||
# TODO: remove freetype (package and gd support) and ffmpeg
|
||||
RUN apk add --no-cache libpng icu-libs freetype libwebp libjpeg-turbo libxpm ffmpeg && \
|
||||
RUN apk add --no-cache libpng icu-libs freetype libwebp libjpeg-turbo libxpm ffmpeg coreutils gettext && \
|
||||
apk add --no-cache --virtual .php-ext-build-dep freetype-dev libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev icu-dev && \
|
||||
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm && \
|
||||
docker-php-ext-install gd intl mysqli exif && \
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
ENV_FILE_LOCATION=/opt/castopod/.env
|
||||
|
||||
. /prepare_environment.sh
|
||||
cat /uploads.template.ini | envsubst '$CP_MAX_BODY_SIZE$CP_MAX_BODY_SIZE_BYTES$CP_TIMEOUT$CP_PHP_MEMORY_LIMIT' > /usr/local/etc/php/conf.d/uploads.ini
|
||||
|
||||
/usr/sbin/crond -f /crontab.txt -L /dev/stdout &
|
||||
/usr/local/sbin/php-fpm
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
file_uploads = On
|
||||
memory_limit = 512M
|
||||
upload_max_filesize = 500M
|
||||
post_max_size = 512M
|
||||
max_execution_time = 300
|
||||
max_input_time = 300
|
|
@ -0,0 +1,6 @@
|
|||
file_uploads = On
|
||||
memory_limit = $CP_PHP_MEMORY_LIMIT
|
||||
upload_max_filesize = $CP_MAX_BODY_SIZE
|
||||
post_max_size = $CP_MAX_BODY_SIZE
|
||||
max_execution_time = $CP_TIMEOUT
|
||||
max_input_time = $CP_TIMEOUT
|
|
@ -34,14 +34,14 @@ 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 docker/production/castopod/entrypoint.sh /entrypoint.sh
|
||||
COPY castopod /var/www/castopod
|
||||
COPY docker/production/unit/config.json /config.json
|
||||
COPY docker/production/unit/crontab.txt /crontab.txt
|
||||
COPY docker/production/unit/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY docker/production/castopod/config.template.json /config.template.json
|
||||
COPY docker/production/castopod/crontab.txt /crontab.txt
|
||||
COPY docker/production/castopod/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y supervisor ffmpeg curl libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libpcre2-8-0 libicu-dev && \
|
||||
apt-get install -y supervisor ffmpeg curl gettext-base libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev libxpm-dev libpcre2-8-0 libicu-dev && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
pecl install -o -f redis && \
|
||||
rm -rf /tmp/pear && \
|
|
@ -22,11 +22,11 @@
|
|||
"options": {
|
||||
"admin": {
|
||||
"file_uploads": "On",
|
||||
"memory_limit": "512M",
|
||||
"upload_max_filesize": "500M",
|
||||
"post_max_size": "512M",
|
||||
"max_execution_time": "300",
|
||||
"max_input_time": "300"
|
||||
"memory_limit": "$CP_PHP_MEMORY_LIMIT",
|
||||
"upload_max_filesize": "$CP_MAX_BODY_SIZE",
|
||||
"post_max_size": "$CP_MAX_BODY_SIZE",
|
||||
"max_execution_time": "$CP_TIMEOUT",
|
||||
"max_input_time": "$CP_TIMEOUT"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,8 +36,8 @@
|
|||
},
|
||||
"settings": {
|
||||
"http": {
|
||||
"body_read_timeout": 300,
|
||||
"max_body_size": 536870912
|
||||
"body_read_timeout": $CP_TIMEOUT,
|
||||
"max_body_size": $CP_MAX_BODY_SIZE_BYTES
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
ENV_FILE_LOCATION=/var/www/castopod/.env
|
||||
|
||||
. /prepare_environment.sh
|
||||
cat /config.template.json | envsubst '$CP_MAX_BODY_SIZE$CP_MAX_BODY_SIZE_BYTES$CP_TIMEOUT$CP_PHP_MEMORY_LIMIT' > /config.json
|
||||
|
||||
#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/) &
|
|
@ -16,7 +16,8 @@ fi
|
|||
|
||||
if [ -z "${CP_MEDIA_BASEURL}" ]
|
||||
then
|
||||
echo "CP_MEDIA_BASEURL is empty, leaving empty by default"
|
||||
echo "CP_MEDIA_BASEURL is empty, using CP_BASEURL by default"
|
||||
CP_MEDIA_BASEURL=$CP_BASEURL
|
||||
fi
|
||||
|
||||
if [ -z "${CP_ADMIN_GATEWAY}" ]
|
||||
|
@ -133,6 +134,28 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${CP_PHP_MEMORY_LIMIT}" ]
|
||||
then
|
||||
export CP_PHP_MEMORY_LIMIT="512M"
|
||||
fi
|
||||
|
||||
if [ -z "${CP_MAX_BODY_SIZE}" ]
|
||||
then
|
||||
export CP_MAX_BODY_SIZE="512M"
|
||||
fi
|
||||
|
||||
CP_MAX_BODY_SIZE_BYTES=$(numfmt --from=iec "$CP_MAX_BODY_SIZE")
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
log_error "Failed to parse CP_MAX_BODY_SIZE ($CP_MAX_BODY_SIZE) as human readable number"
|
||||
fi
|
||||
export CP_MAX_BODY_SIZE_BYTES=$CP_MAX_BODY_SIZE_BYTES
|
||||
|
||||
if [ -z "${CP_TIMEOUT}" ]
|
||||
then
|
||||
export CP_TIMEOUT=900
|
||||
fi
|
||||
|
||||
cat << EOF > $ENV_FILE_LOCATION
|
||||
app.baseURL="${CP_BASEURL}"
|
||||
media.baseURL="${CP_MEDIA_BASEURL}"
|
||||
|
|
|
@ -9,11 +9,11 @@ WORKDIR /var/www/html
|
|||
COPY docker/production/web-server/entrypoint.sh /entrypoint.sh
|
||||
|
||||
RUN chmod +x /entrypoint.sh && \
|
||||
apk add --no-cache curl
|
||||
apk add --no-cache curl gettext
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=3s CMD curl --fail http://localhost || exit 1
|
||||
|
||||
COPY docker/production/web-server/nginx.conf /etc/nginx/nginx.conf
|
||||
COPY docker/production/web-server/nginx.template.conf /nginx.template.conf
|
||||
|
||||
COPY castopod/public /var/www/html
|
||||
|
||||
|
|
|
@ -2,8 +2,19 @@
|
|||
if [ -z "${CP_APP_HOSTNAME}" ]
|
||||
then
|
||||
echo "CP_APP_HOSTNAME is empty, using default"
|
||||
CP_APP_HOSTNAME="app"
|
||||
export CP_APP_HOSTNAME="app"
|
||||
fi
|
||||
|
||||
sed -i "s/CP_APP_HOSTNAME/${CP_APP_HOSTNAME}/" /etc/nginx/nginx.conf
|
||||
if [ -z "${CP_MAX_BODY_SIZE}" ]
|
||||
then
|
||||
export CP_MAX_BODY_SIZE=512M
|
||||
fi
|
||||
|
||||
if [ -z "${CP_TIMEOUT}" ]
|
||||
then
|
||||
export CP_TIMEOUT=900
|
||||
fi
|
||||
|
||||
cat /nginx.template.conf | envsubst '$CP_APP_HOSTNAME$CP_MAX_BODY_SIZE$CP_TIMEOUT' > /etc/nginx/nginx.conf
|
||||
|
||||
nginx -g "daemon off;"
|
||||
|
|
|
@ -27,7 +27,7 @@ http {
|
|||
real_ip_header X-Real-IP;
|
||||
|
||||
upstream php-handler {
|
||||
server CP_APP_HOSTNAME:9000;
|
||||
server $CP_APP_HOSTNAME:9000;
|
||||
}
|
||||
|
||||
server {
|
||||
|
@ -40,8 +40,8 @@ http {
|
|||
add_header Permissions-Policy interest-cohort=();
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;";
|
||||
client_max_body_size 512M;
|
||||
client_body_timeout 300s;
|
||||
client_max_body_size $CP_MAX_BODY_SIZE;
|
||||
client_body_timeout ${CP_TIMEOUT}s;
|
||||
|
||||
fastcgi_buffers 64 4K;
|
||||
|
|
@ -42,29 +42,20 @@ can be added as a cache handler.
|
|||
image: castopod/app:latest
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
- castopod-media:/var/www/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_BASEURL: "https://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:latest
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
- 8000:8000
|
||||
restart: unless-stopped
|
||||
|
||||
mariadb:
|
||||
|
@ -89,21 +80,6 @@ can be added as a cache handler.
|
|||
networks:
|
||||
- castopod-app
|
||||
|
||||
# this container is optional
|
||||
# add this if you want to use the videoclips feature
|
||||
video-clipper:
|
||||
image: castopod/video-clipper:latest
|
||||
container_name: "castopod-video-clipper"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
networks:
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
castopod-media:
|
||||
castopod-db:
|
||||
|
@ -125,7 +101,7 @@ can be added as a cache handler.
|
|||
```
|
||||
#castopod
|
||||
castopod.example.com {
|
||||
reverse_proxy localhost:8080
|
||||
reverse_proxy localhost:8000
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -146,7 +122,7 @@ can be added as a cache handler.
|
|||
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
|
||||
|
||||
- **castopod/app**
|
||||
- **castopod/castopod** and **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) | Default |
|
||||
| ------------------------------------- | ----------------------- | ---------------- |
|
||||
|
@ -181,9 +157,15 @@ can be added as a cache handler.
|
|||
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
|
||||
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
|
||||
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
|
||||
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
|
||||
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
|
||||
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
|
||||
| **`CP_TIMEOUT`** | ?number | `900` |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type | Default |
|
||||
| --------------------- | ------- | ------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
|
||||
| Variable name | Type | Default |
|
||||
| ---------------------- | --------------------- | ------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
|
||||
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
|
||||
| **`CP_TIMEOUT`** | ?number | `900` |
|
||||
|
|
Loading…
Reference in New Issue