Files
kevinveenbirkenbachandClaude Opus 5.5 1f72f59ec1 fix(web-app-nextcloud): size PHP's memory from the container, not the host
PHP_MEMORY_LIMIT and PHP_OPCACHE_MEMORY_CONSUMPTION were both the host's
RAM divided by 30, read from two keys in meta/services.yml: 533M on a
16 GB host, 2133M on a 64 GB one, beside a container limited to 3g either
way. They are now half and an eighth of that limit through
lookup('service_memory_mb'), which renders 1536M and 384M on every host.

The lookup sits in env.j2 and the two meta keys are gone. It reads the
applications payload, and meta/services.yml is part of that payload, so
a call from there would run back into the render that asked for it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 01:41:55 +02:00

79 lines
3.4 KiB
Django/Jinja

{% include 'roles/sys-svc-container/templates/env.j2' %}
MYSQL_DATABASE={{ lookup('database', application_id, 'name') }}
MYSQL_USER={{ lookup('database', application_id, 'username') }}
MYSQL_PASSWORD={{ lookup('database', application_id, 'password') | dotenv_quote }}
MYSQL_HOST={{ lookup('database', application_id, 'host') }}:{{ lookup('database', application_id, 'port') }}
PHP_MEMORY_LIMIT={{ lookup('service_memory_mb', application_id, 'nextcloud', 0.5) }}M
PHP_UPLOAD_LIMIT={{ lookup('config', application_id, 'services.nextcloud.performance.php.upload_limit') }}
PHP_OPCACHE_MEMORY_CONSUMPTION={{ lookup('service_memory_mb', application_id, 'nextcloud', 0.125) }}M
{% set email = lookup('email', application_id) %}
{% if email.enabled | bool %}
SMTP_HOST={{ email.host }}
SMTP_SECURE={{ 'ssl' if email.tls else '' }}
SMTP_PORT={{ email.port }}
SMTP_NAME={{ email.username }}
SMTP_PASSWORD={{ email.password | dotenv_quote }}
MAIL_FROM_ADDRESS={{ lookup('users', 'no-reply').username }}
MAIL_DOMAIN={{ email.domain }}
{% endif %}
NEXTCLOUD_ADMIN_USER={{ NEXTCLOUD_ADMINISTRATOR_USERNAME }}
NEXTCLOUD_ADMIN_PASSWORD={{ NEXTCLOUD_ADMINISTRATOR_PASSWORD | dotenv_quote }}
NEXTCLOUD_INIT_GATE_USER={{ NEXTCLOUD_DOCKER_USER }}
NEXTCLOUD_TRUSTED_DOMAINS={{ NEXTCLOUD_DOMAIN }}
TRUSTED_PROXIES={{ NEXTCLOUD_TRUSTED_PROXIES | join(',') }}
OVERWRITECLIURL={{ NEXTCLOUD_URL }}
OVERWRITEPROTOCOL={{ NEXTCLOUD_PROTOCOL }}
REDIS_HOST={{ lookup('engine', 'redis', application_id, 'host') }}
REDIS_PORT={{ lookup('engine', 'redis', application_id, 'port') }}
{% set _redis_user = lookup('engine', 'redis', application_id, 'username') %}
{% if _redis_user | length > 0 %}
REDIS_HOST_USER={{ _redis_user }}
{% endif %}
{% set _redis_password = lookup('engine', 'redis', application_id, 'password') %}
{% if _redis_password | length > 0 %}
REDIS_HOST_PASSWORD={{ _redis_password | dotenv_quote }}
{% endif %}
{% if lookup('objstore', application_id, 'enabled') | bool %}
OBJECTSTORE_S3_BUCKET={{ lookup('objstore', application_id, 'bucket') }}
OBJECTSTORE_S3_HOST={{ lookup('objstore', application_id, 'host') }}
OBJECTSTORE_S3_PORT={{ lookup('objstore', application_id, 'port') }}
OBJECTSTORE_S3_SSL=false
OBJECTSTORE_S3_USEPATH_STYLE=true
OBJECTSTORE_S3_REGION={{ lookup('objstore', application_id, 'region') }}
OBJECTSTORE_S3_KEY={{ lookup('objstore', application_id, 'access_key') }}
OBJECTSTORE_S3_SECRET={{ lookup('objstore', application_id, 'secret_key') | dotenv_quote }}
OBJECTSTORE_S3_AUTOCREATE=false
{% endif %}
{% if NEXTCLOUD_HPB_PLUGIN_ENABLED %}
NC_DOMAIN={{ NEXTCLOUD_DOMAIN }}
TALK_HOST={{ NEXTCLOUD_HPB_DOMAIN }}
SIGNALING_SECRET={{ NEXTCLOUD_HPB_SIGNALING_SECRET }}
INTERNAL_SECRET={{ NEXTCLOUD_HPB_INTERNAL_SECRET }}
TURN_SECRET={{ NEXTCLOUD_HPB_TURN_ONBOARD_SECRET }}
TALK_PORT={{ NEXTCLOUD_HPB_TURN_ONBOARD_PORT }}
TURN_MIN_PORT={{ NEXTCLOUD_HPB_TURN_ONBOARD_RELAY_PORT_START }}
TURN_MAX_PORT={{ NEXTCLOUD_HPB_TURN_ONBOARD_RELAY_PORT_END }}
COTURN_MIN_PORT={{ NEXTCLOUD_HPB_TURN_ONBOARD_RELAY_PORT_START }}
COTURN_MAX_PORT={{ NEXTCLOUD_HPB_TURN_ONBOARD_RELAY_PORT_END }}
{% endif %}
{% if NEXTCLOUD_WHITEBOARD_ENABLED %}
NEXTCLOUD_URL={{ NEXTCLOUD_URL }}
JWT_SECRET_KEY={{ NEXTCLOUD_WHITEBOARD_JWT }}
STORAGE_STRATEGY=redis
REDIS_URL={{ lookup('engine', 'redis', application_id, 'url') }}
CHROMIUM_FLAGS=--headless=new --no-sandbox --disable-gpu --disable-dev-shm-usage --use-gl=swiftshader --disable-software-rasterizer
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
PUPPETEER_SKIP_DOWNLOAD=true
{% endif %}