Jak robić backup baz danych przy pomocy n8n?

Hostuję coraz więcej narzędzi na swoim serwerze i zawsze z tyłu głowy mam niepokojącą myśl:

A co się stanie z tymi danymi, jak mi serwer padnie?…

Można oczywiście tworzyć skrypty, które będą robiły automatyczne backupy, ale jest to irytujące w utrzymaniu. Ja chciałem coś łatwiejszego i najlepiej z łatwym interfejsem, w którym można wszystko wyklikać.

Korzystam już u siebie z platformy n8n do różnych automatyzacji i wiedziałem, że to będzie idealne rozwiązanie.

Własny obraz dockerowy n8n

Po pierwszych próbach integracji, szybko odkryłem, że problemem podstawowego obrazu n8n, jest brak dostępnych komend do backupu. Ja głównie potrzebowałem pg_dump albo mysqldump. Na szczęści po krótkim śledztwie online i małej pomocy Claude AI, udało mi się przygotować obraz dockerowy, rozbudowany o te komendy:

FROM n8nio/n8n:latest

USER root

# Install necessary clients and tools
RUN apk add --no-cache \
    postgresql-client \
    mysql-client \
    mariadb-client \
    mariadb-connector-c \
    sqlite \
    mongodb-tools \
    gzip \
    tar

# Create a directory for backups
RUN mkdir /backups && chown node:node /backups

USER node

# Set the entrypoint back to the original
ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"]

Następnie wystarczyło zbudować ten obraz do użycia na serwerze linuxowym i wypchnąć na Dockerhub:

`docker buildx build --no-cache --platform linux/amd64 -t marekbrze/custom-n8n:latest --push .`

A ostatecznie, podmienić tylko obraz w mojej aplikacji na serwerze Caprover. Na początku bałem się tej zabawy z Dockerem, ale wszystko przebiegło bezboleśnie. Jeśli chcesz użyć mojego obrazu, to śmiało -> Link do repozytorium na Dockerhub .

Workflow n8n

Sam workflow w n8n jest bardzo prosty i używam następujących elementów:

  1. Schedule Trigger - Workflow jest odpalany w konkretnych odstępach czasu
  2. Execute command - Głowna komenda terminalowa, która łączy się z bazą danych i zrzuca wynik do pliku
    1. Przykład dla MySQL -> mysqldump -h [host] -u [username] -p[password] [database_name] > [backup_file.sql] `
  3. Read/Write Files from the Disk - Wczytanie pliku utworzonego przez poprzednią komendę z dysku
  4. Google Drive: Upload file - Upload pliku do wybranego folderu na Google Drive.

I to by było na tyle. Będę dodawał w przyszłości kolejne opcje, jak na przykład powiadomienia o udanym/nieudanym backupie wysyłane na Slacka/Discorada/Telegram, lub odpalanie backupów na żadanie przez Webhooka, lub komendę bota na telgramie. Na razie podstawowa funkcjonalność mi zdecydowanie wystarcza.