Stack Docker para subir MariaDB com configuração local via .env.
Documentação específica de operação do MariaDB: mariadb.md
docker-compose.yml: stack base do banco.Dockerfile: imagem parametrizável para publicar no GHCR..env.example: valores de exemplo para copiar para.env..gitignore: impede versionamento de arquivos sensíveis e locais.
O repositório possui workflow em publish-ghcr.yml para buildar e publicar a imagem no GitHub Container Registry.
- Em
pushparamain, o workflow publicaghcr.io/librecodecoop/mysql:lateste uma tag com o SHA curto do commit. - Em execução manual, é possível informar
base_imagepara escolher a imagem de origem, por exemplomariadb:11.4ou outra tag compatível, eimage_tagpara publicar uma tag adicional.
Exemplo de uso no .env:
MYSQL_IMAGE=ghcr.io/librecodecoop/mysql:latest.env: customiza imagem, credenciais, portas e paths locais.docker-compose.override.yml: serviços auxiliares opcionais, como PHPMyAdmin.
-
Copie o arquivo de ambiente:
cp .env.example .env
-
Ajuste os valores do
.env. -
Suba o serviço:
docker compose up -d
-
Confira o status:
docker compose ps
Exemplo mínimo:
MYSQL_IMAGE=mariadb:11.4
MYSQL_CONTAINER_NAME=mysql
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=change-me
MYSQL_DATABASE=app
MYSQL_USER=app
MYSQL_PASSWORD=change-me-too
MYSQL_DATA_DIR=./data
MYSQL_CONF_DIR=./conf.d
TZ=UTCTroque MYSQL_IMAGE para ajustar a tag do MariaDB, por exemplo:
MYSQL_IMAGE=mariadb:11.8Observação: valide a tag escolhida antes de atualizar em produção.
O PHPMyAdmin deve ficar em um docker-compose.override.yml local, não versionado.
Crie o arquivo:
cat > docker-compose.override.yml <<'EOF'
services:
phpmyadmin:
image: phpmyadmin:5-apache
container_name: phpmyadmin
restart: unless-stopped
depends_on:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
UPLOAD_LIMIT: 256M
TZ: ${TZ:-UTC}
VIRTUAL_HOST: pma.example.com
LETSENCRYPT_HOST: pma.example.com
LETSENCRYPT_EMAIL: infra@example.com
networks:
- default
- reverse-proxy
networks:
reverse-proxy:
external: true
EOFO bloco reverse-proxy serve para integrar este stack a um proxy reverso externo, por exemplo o padrão usado em ambientes baseados no repositório nginx-proxy. Se este host não usar essa topologia, remova a network extra e publique a porta manualmente.
Depois suba normalmente:
docker compose up -d- Faça login com um usuário administrativo.
- Abra
Settings. - Vá em
Features. - Ative autenticação
Two-factor. - Cadastre o TOTP no aplicativo autenticador.
- Salve o segredo TOTP junto das credenciais em um arquivo
.kdbx.
Recomendação: no .kdbx, manter no mesmo registro a URL, usuário, senha, segredo TOTP e observações sobre o host.
Para estratégia de backup automatizado, usar este dump SQL e apontar o armazenamento/agenda central para o repositório do Duplicati da organização.
É recomendável manter sempre o mesmo nome de arquivo no dump local para ferramentas que deduplicam ou fazem incremental em cima de diferenças de arquivo.
Comando de dump:
set -a && . ./.env && set +a && docker compose exec -T mysql /usr/bin/mariadb-dump -u root --password="$MYSQL_ROOT_PASSWORD" --all-databases --add-drop-database > /root/projects/mysql/volumes/mysql/dump/dump.sqlNão coloque a senha de root diretamente no crontab. O job deve ler do .env.
Exemplo de crontab:
40 02 * * * export $(cat /root/projects/mysql/.env|grep MYSQL_ROOT_PASSWORD | xargs) && docker compose -f /root/projects/mysql/docker-compose.yml exec mysql /usr/bin/mariadb-dump -u root --password="$MYSQL_ROOT_PASSWORD" --all-databases --add-drop-database > /root/projects/mysql/volumes/mysql/dump/dump.sqlDepois, faça o backup desse dump.sql com a stack ou rotina central de Duplicati.
Procedimento conservador:
-
Validar a versão atual:
docker compose ps docker exec mysql mariadb --version -
Gerar backup completo antes da mudança:
cd /root/projects/mysql set -a && . ./.env && set +a && docker exec mysql /usr/bin/mariadb-dump -u root --password="$MYSQL_ROOT_PASSWORD" --all-databases > /root/projects/mysql/backup-before-upgrade.sql
-
Alterar a imagem no
.env:MYSQL_IMAGE=mariadb:11.4
-
Conferir notas oficiais da versão de origem e destino antes do upgrade.
-
Aplicar a nova imagem:
docker compose pull docker compose up -d
-
Validar logs e acesso:
set -a && . ./.env && set +a docker compose logs --tail=100 mysql docker exec mysql mariadb -u root --password="$MYSQL_ROOT_PASSWORD" -e 'SHOW DATABASES;'
-
Se o upgrade falhar e o banco não subir corretamente, restaurar usando o dump gerado antes da mudança.
Em ambiente crítico, o ideal é testar o upgrade em cópia do volume ou ambiente de homologação antes de aplicar em produção.