...
registry.brandbox.host/runtime/asset:1.0.0
Enthaltene Software
Software | Version |
---|---|
nginx | 1.25.3 |
Konfiguration für docker-compose
Das Image kann in einer docker-compose.yml wie folgt eingebunden werden:
Codeblock | ||
---|---|---|
| ||
mariadbassets: image: mariadb:10.11registry.brandbox.host/runtime/asset:1.0.0 volumes: - db_data:/varmnt/lib/mysql - ./config/mariadb:/etc/mysql/conf.dnfsstorage/{PROJECT}/share:/usr/share/nginx/html env_filenetworks: - brandbox.docker.env environmentinternal: MYSQL_HOST: database.${COMPOSE_PROJECT_NAME} MARIADB_AUTO_UPGRADE: 1 MARIADB_INITDB_SKIP_TZINFO: 1 labels: aliases: traefik.enable: "false" healthcheck: test: ["CMD", "mysql", "-u", "root", "-proot", "-e", "SELECT version();"] interval: 1m timeout: 10s retries: 3 ports: - "3306" cpus: 0.75 mem_limit: 1000M networks: internal: aliases: - database. assets.${COMPOSE_PROJECT_NAME} volumes: db_data: |
Konfigurationsdateien müssen per Bind-Mount in den Container gemountet werden. Dazu muss der Ordner mariadb/conf parallel zu docker-compose.yml vor dem Ausführen von "up" angelegt werden.
Der Ordner muss folgende Dateien enthalten:
- MariaDB-Konfiguration my.cnf
- SSL-Zertifikate im PEM-Format:
- ca.crt.pem
- ca.key.pem
- server.crt.pem
- server.key.pem
Codeblock | ||||
---|---|---|---|---|
| ||||
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
sort_buffer_size=1M
innodb_buffer_pool_size=512M
innodb_lru_scan_depth=128
innodb_ft_max_token_size=84
innodb_ft_result_cache_limit=2000000000
innodb_ft_total_cache_size=640000000
innodb_io_capacity=150000
innodb_io_capacity_max=150000
innodb_open_files=40M
open_files_limit=40M
tmp_table_size=256M
max_allowed_packet=1024M
max_heap_table_size=256M
query_cache_limit=16M
query_cache_size=128M
ssl=1
ssl-ca=/etc/mysql/conf.d/ca.crt.pem
ssl-cert=/etc/mysql/conf.d/server.crt.pem
ssl-key=/etc/mysql/conf.d/server.key.pem |
In der brandbox.docker.env müssen die Pfade zu den Zertifikaten für die Verwendung in der Anwendung korrekt gesetzt werden:
Codeblock | ||
---|---|---|
| ||
MYSQL_SSL_KEY=/etc/mysql/conf.d/server.key.pem
MYSQL_SSL_CRT=/etc/mysql/conf.d/server.crt.pem
MYSQL_SSL_CA_CRT=/etc/mysql/conf.d/ca.crt.pem |
Logging
Es ist möglich, über Einträge in der my.cnf das Query-Log und das Slow-Log zu aktivieren:
Codeblock | ||||
---|---|---|---|---|
| ||||
general_log=1
general_log_file=/var/log/mysql/query.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes |
Über einen Custom-Entrypoint können diese Logdateien in die Standardausgabe (stdout) geschrieben werden, damit sie über docker logs bzw. Graylog ausgewertet werden können:
Codeblock | ||||
---|---|---|---|---|
| ||||
database:
image: mariadb:10.11
volumes:
- db_data:/var/lib/mysql
- ./config/mariadb:/etc/mysql/conf.d
env_file:
- brandbox.docker.env
environment:
MYSQL_HOST: database.${COMPOSE_PROJECT_NAME}
entrypoint: /etc/mysql/conf.d/entrypoint.sh # >> Custom-Entrypoint definieren
labels:
traefik.enable: "false"
healthcheck:
test: ["CMD", "mysql", "-u", "root", "-proot", "-e", "SELECT version();"]
interval: 1m
timeout: 10s
retries: 3
ports:
- "3306"
cpus: 0.75
mem_limit: 1000M
networks:
internal:
aliases:
- database.${COMPOSE_PROJECT_NAME} |
Die Datei entrypoint.sh muss dazu im definierten Bind-Mount-Ordner abgelegt werden (mariadb/conf) und wie folgt aussehen:
Codeblock | ||
---|---|---|
| ||
#!/usr/bin/env bash
set -euo pipefail
##
# This script exists to work-around the fact that
# mysql does not support logging to stdout
#
# This will tail the file logs configured in ./my.cnf
##
LOG_PATHS=(
'/var/log/mysql/slow.log'
'/var/log/mysql/query.log'
)
for LOG_PATH in "${LOG_PATHS[@]}"; do
( umask 0 && truncate -s0 "$LOG_PATH" )
tail --pid $$ -n0 -F "$LOG_PATH" &
done
/usr/local/bin/docker-entrypoint.sh mariadbd |
Wichtig: Die Datei entrypoint.sh benötigt Ausführungsrechte für "other":
Codeblock |
---|
chmod o+x ./entrypoint.sh |
...
Folgende Umgebungsvariablen müssen gesetzt werden (brandbox.docker.env):
Umgebungsvariable | Wert |
---|---|
ASSETS_HOST | assets.$COMPOSE_PROJECT_NAME.local.brandbox.de (wie in docker-compose.yml definiert) |
ASSETS_PROTOCOL | http |
brandbox.docker.env
Codeblock | ||
---|---|---|
| ||
ASSETS_HOST=assets.{PROJEKTKUERZEL} # muss manuell eingetragen werden, keine Variablen möglich
ASSETS_PROTOCOL=http |
Cluster-Konfiguration (Kubernetes)
Die Konfiguration im Kubernetes-Cluster wird über den brandbox-HelmChart geregelt. Dieser deployed folgende Ressourcen:
Deployment
Einstellung | Wert |
---|---|
Image | registry.brandbox.host/runtime/asset:1.0.0 |
ImagePullSecret | Das Registry-Secret für registry.brandbox.host/brandbox-product/utility/ |
Volumes | Das für Application konfigurierte Volume mit folgenden Mountpoints: |
Labels | purpose: deployment-#NAMESPACE#-assets #NAMESPACE# = Kubernetes-Namespace |
Service
Einstellung | Wert |
---|---|
Name | assets |
Selektor | purpose: deployment-#NAMESPACE#-assets(s.o.) |
Port-Mapping | Der TCP-Port 80 muss nach außen geöffnet werden |