Depois de instalar a nossa aplicação PHP vamos criar uma base de dados MariaDB e ligá-la à nossa aplicação no Dokku v0.4.5 a correr no DigitalOcean.
MariaDB é um "drop-in replacement" do MySQL, o que significa que se tiverem uma aplicação que usa o MySQL podem exportar a base de dados e importá-la na MariaDB que tudo continua a funcionar.
As instruções neste artigo são para o plugin de MariaDB mas é basicamente igual para outros plugins de bases de dados.
Criar a base de dados
Começem por instalar o plugin:
dokku plugin:install https://github.com/dokku/dokku-mariadb.git mariadb
Agora criem a base de dados:
dokku mariadb:create db_name
Liguem o serviço da base de dados à vossa aplicação:
dokku mariadb:link db_name app_name
Ligar à base de dados a partir da vossa aplicação
Ao ligar o serviço da base de dados a uma aplicação é criada uma variável de ambiente chamada DATABASE_URL
. Esta variável contém a informação necessária para estabelecer a ligação à base de dados.
A variável está no seguinte formato:
service://user:pass@host:port/db_name
Para estabelecer a ligação à base de dados no PHP podem extrair a informação desta variável ambiente sem terem de guardar informação sensível no vosso repositório:
$url = getenv('DATABASE_URL');
$components = parse_url($url);
if ($components) {
$host = $components['host'];
$username = $components['user'];
$password = $components['pass'];
$dbname = substr($components['path'], 1);
$port = $components['port'];
}
Agora podem usar estas variáveis para se ligarem à base de dados.
Importar uma base de dados existente
Se querem importar uma base de dados existente podem fazê-lo através do seguinte comando:
dokku mariadb:import db_name < file_name
Podem usar SFTP para transferir o ficheiro da vossa máquina local.
Por exemplo, uso o FileZilla no Windows e no Site Manager apenas tenho que:
- Seleccionar o protocolo SFTP
- Definir o tipo de logon como "Key file"
- Definir "root" como utilizador
- Escolher a chave privada
Fazer backup da base de dados
De forma semelhante é possível criar um dump da base de dados com o comando:
dokku mariadb:export db_name > file_name
Agendar uma tarefa
Podem criar um script bash para gerir os backups da vossa aplicação.
Este script é adaptado de dommmel:
#! /bin/bash
# directory to save backups in, must be rwx
BASE_DIR="/var/backups/$1"
YMD=$(date "+%Y-%m-%d")
DIR="$BASE_DIR/$YMD"
mkdir -p $DIR
cd $DIR
# make database backup
dokku mariadb:export $1 | gzip -9 > "$DIR/$1.sql.gz"
# delete backup files older than 31 days
OLD=$(find $BASE_DIR -type d -mtime +31)
if [ -n "$OLD" ] ; then
echo deleting old backup files: $OLD
echo $OLD | xargs rm -rfv
fi
Isto cria um dump da base de dados com o gzip para uma pasta com o nome da base de dados e apaga os ficheiros mais antigos do que 31 dias. É necessário passar o nome da base de dados como argumento.
Tornem o script executável:
chmod +x /path/to/script
Corram-no para se certificarem que funciona:
/path/to/script db_name
Criem uma tarefa cron
Agora precisam de criar uma tarefa cron:
crontab -e
Isto vai abrir a crontab do utilizador para edição. Se perguntar para escolher um editor, escolham um.
Agora adicionem uma linha no fim do ficheiro para chamar o vosso script de backup:
0 0 * * 0 /path/to/script db_name
Isto agenda o script para ser executado todos os Domingos à meia-noite. Leiam mais informação sobre o formato cron para saberem como personalizar o horário.
Conclusão
Agora dêem uma palmadinha nas vossas costas. Está tudo feito!