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:
- Schedule Trigger - Workflow jest odpalany w konkretnych odstępach czasu
- Execute command - Głowna komenda terminalowa, która łączy się z bazą danych i zrzuca wynik do pliku
- Przykład dla MySQL ->
mysqldump -h [host] -u [username] -p[password] [database_name] > [backup_file.sql]
`
- Przykład dla MySQL ->
- Read/Write Files from the Disk - Wczytanie pliku utworzonego przez poprzednią komendę z dysku
- 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.