Back-ups
Nachtelijke back-ups, wat ze bevatten, terugzetten, en wat je verder moet bewaren
- Nachtelijke back-ups
- Databaserechten
- Wat een back-up bevat
- Een back-up terugzetten
- Wat je verder moet back-uppen
Nachtelijke back-ups
AnsibleForms maakt elke nacht om middernacht een back-up van zichzelf, in de tijdzone van LOG_TZ (standaard UTC). Deze instellingen sturen dat:
| Variabele | Standaard | Betekenis |
|---|---|---|
BACKUP_PATH | %PERSISTENT_FOLDER%/backups | Waar back-ups worden geschreven, elk in een map met tijdstempel |
NIGHTLY_BACKUP_RETENTION | 7 | Hoeveel nachtelijke back-ups worden bewaard, 0 bewaart ze allemaal |
MYSQLDUMP_COMMAND | mariadb-dump --ssl-verify-server-cert=OFF | De opdracht die de database dumpt |
MYSQL_COMMAND | mariadb --ssl-verify-server-cert=OFF | De opdracht die bij het terugzetten een dump afspeelt |
BACKUP_COMMAND_TIMEOUT_SECONDS | 3600 | Hoe lang de dump en het terugzetten mogen duren |
Gebruikers met de rolinstelling allowBackupOps kunnen op de pagina Back-ups ook op elk moment een back-up maken. Alleen nachtelijke back-ups worden door de bewaartermijn verwijderd, en alleen back-ups met een bruikbare dump tellen daarvoor mee, zodat een reeks mislukte nachten nooit de laatste goede verdringt.
Voordat een upgrade de database wijzigt, maakt de worker eerst een gewone back-up, één keer per release, met de naam Before the upgrade to <version>. Die verschijnt op de pagina Back-ups en wordt nooit door de nachtelijke bewaartermijn verwijderd. Als ze mislukt (geen dumptool, BACKUP_PATH niet schrijfbaar), stopt de upgrade en zegt waarom, zodat de app nooit start op een half bijgewerkte database. UPGRADE_BACKUP=0 voert de upgrade uit zonder back-up.
De opdrachten mogen wrappers zijn zoals docker exec <container> mysqldump, als hun eerste woord lokaal bestaat. Vanaf 7.3.0 draaien ze zonder shell: aanhalingstekens en $NAME uit de omgeving van de opdracht werken, maar ;, |, &&, > en < worden geweigerd.
Databaserechten
De dump draait als DB_USER, en heeft niet meer rechten nodig dan de applicatie zelf:
CREATE USER 'ansibleforms'@'%' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON `AnsibleForms`.* TO 'ansibleforms'@'%';
De dump wordt gemaakt met --no-tablespaces, zodat het serverbrede recht PROCESS niet nodig is, en slaat de tabellen over die de draaiende processen beschrijven (nodes, cache_epochs, designer_lock, runner_leases). Het terugzetten speelt hem af als dezelfde gebruiker. De pagina Status toont een waarschuwing bij de controle Databasegebruiker als de gebruiker rechten heeft op elke database, zoals root.
Wat een back-up bevat
Elke back-up is een map onder BACKUP_PATH, genoemd naar de UTC-tijdstempel (YYYYMMDDHHmmss), met daarin:
| Bestand | Inhoud |
|---|---|
ansibleforms.sql | De dump van de database AnsibleForms: gebruikers, groepen, referenties, jobs, instellingen, het audittrail |
config.yaml | Het bestand op CONFIG_PATH |
forms/ | De map op FORMS_FOLDER_PATH |
managed.env | Het omgevingsbestand dat de instellingenpagina’s schrijven, zonder ENCRYPTION_SECRET, ENCRYPTION_SECRET_PREVIOUS en ACCESS_TOKEN_SECRET |
meta.yaml | De beschrijving van de back-up |
Een back-up waarvan de dump mislukt, wordt weer verwijderd en als fout gelogd. De pagina Status waarschuwt als er geen back-up is, als de nieuwste meer dan twee dagen oud is, of als die geen bruikbare dump heeft, en controleert of het dumptool bestaat.
OLD_BACKUP_DAYS bewaart in plaats daarvan de herstelpunten van de designer (standaard 60 dagen).
Een back-up terugzetten
Zet terug vanaf de pagina Back-ups, met Maak eerst een nieuwe back-up aan voor het herstellen aangevinkt. Bij het terugzetten:
- wordt
ansibleforms.sqlafgespeeld, wat de hele database vervangt; vanaf 7.3.0 wordt een back-up van een oudere release daarna opnieuw bijgewerkt, zoals bij de start van een nieuwe release, en wordt een patch die mislukt gemeld - wordt
config.yamlteruggekopieerd en de mapforms/vervangen door die van de back-up: vanaf 7.3.0 worden formulieren die niet in de back-up staan verwijderd in plaats van bewaard, blijven de links en de modus van de map behouden, en draait een mislukte kopie de map terug - wordt
managed.envniet teruggezet, omdat die de host beschrijft waar de back-up vandaan kwam. De knop Omgeving herstellen zet hem op verzoek terug, bewaart het huidige bestand als.env.bak, en vereist een herstart.
Een back-up zonder bruikbare dump wordt geweigerd; los na een onderbroken terugzetting de oorzaak op en zet opnieuw terug.
Stel op een nieuwe host hetzelfde ENCRYPTION_SECRET in voordat je terugzet, anders kunnen de opgeslagen referenties niet worden ontsleuteld.
Wat je verder moet back-uppen
De nachtelijke back-up dekt de database, de configuratie en de formulieren, maar verder niets in de persistente map:
ENCRYPTION_SECRETenACCESS_TOKEN_SECRET: nooit in een back-up, bewust. Bewaar ze in je secret manager; zonder het versleutelingsgeheim is een databasedump nutteloos voor referenties.- de back-ups zelf : die staan op hetzelfde volume als de instantie. Kopieer
BACKUP_PATHnaar een andere host. - de rest van de persistente map : playbooks, uploads, vars-bestanden, gekloonde repositories, certificaten en logs. Maak met het docker-compose-project een back-up van de hele map
data/, die ook de SSH-sleutel, de eigen functies en de Ansible-rollen en -collecties bevat.
Inhoud die uit git komt (repositories, formulieren in een repository) kan opnieuw worden gekloond, dus de back-up ervan is minder belangrijk.