--- title: N8n emoji: 💡🌀✨ colorFrom: green colorTo: indigo sdk: docker pinned: false --- # Project: Dockerized PostgreSQL with WebDAV Backup and Node.js Integration This Docker image is built on top of **PostgreSQL 15** and provides an integrated environment for running PostgreSQL, performing automated database backups via WebDAV, and executing custom scripts written in **Node.js** and **Python**. This image is tailored for use with **n8n**, an open-source workflow automation tool, and it supports automatic backup management and webhook communication. ## Features - **PostgreSQL Database**: Provides a fully functional PostgreSQL 15 database instance. - **Automated Backups**: Includes automated backup functionality to a WebDAV server using custom scripts. - **Node.js Environment**: Installs Node.js (default version 20) to allow running workflows or services that depend on Node.js. - **Python Integration**: Python 3 is pre-installed, and Python packages can be managed through a virtual environment (`venv`). - **Webhook Integration**: Allows interaction with external services via a webhook URL. - **Configurable Environment**: Fully customizable through build-time arguments and environment variables. - **WebDAV Support**: Automatic interaction with a WebDAV server for file backup and retrieval. - **Custom Script Support**: Ships with custom shell scripts to manage database backups and data imports. ## Environment Variables The Docker image uses the following environment variables for configuration. You can modify these variables at runtime to customize behavior: | Variable | Default Value | Description | |-----------------------|---------------------------------------|-------------| | `POSTGRES_USER` | `n8n` | PostgreSQL user. | | `POSTGRES_PASSWORD` | `n8n` | PostgreSQL password. | | `POSTGRES_DB` | `n8n` | PostgreSQL database name. | | `WEBHOOK_URL` | `https://aigenai-db.hf.space/` | Webhook URL for external communication. | | `DB_IMPORT` | `yes` | If set to `yes`, imports the database on startup. | | `NODEJS_VER` | `20` | Version of Node.js to install. | | `WEBDAV_URL` | `https://cfr2.n8n.us.kg/` | URL of the WebDAV server for backups. | | `WEBDAV_USER` | `your_username` | WebDAV username for authentication. | | `WEBDAV_PASSWORD` | `your_password` | WebDAV password for authentication. | | `N8N_PORT` | `7860` | Port on which n8n will be accessible. | | `GENERIC_TIMEZONE` | `Asia/Shanghai` | Timezone for the Docker container. | | `DB_TYPE` | `postgresdb` | Specifies the database type. | | `DB_POSTGRESDB_HOST` | `localhost` | Hostname for the PostgreSQL database. | | `DB_POSTGRESDB_PORT` | `5432` | Port for PostgreSQL. | | `VIRTUAL_ENV` | `/app/venv` | Location of the Python virtual environment. | ## Build-Time Arguments These build-time arguments can be provided during the image build to customize the resulting Docker image: | Argument | Default Value | Description | |--------------------|-----------------------------------------|-------------| | `DUMP_URL` | `""` | URL for the initial database dump (optional). | | `DUMP_PASSWORD` | `""` | Password for accessing the database dump (if necessary). | | `POSTGRES_USER` | `n8n` | PostgreSQL user. | | `POSTGRES_PASSWORD`| `n8n` | PostgreSQL password. | | `POSTGRES_DB` | `n8n` | PostgreSQL database name. | | `WEBHOOK_URL` | `https://aigenai-db.hf.space/` | Webhook URL for external services. | | `NODEJS_VER` | `20` | Node.js version to install. | | `WEBDAV_URL` | `https://cfr2.n8n.us.kg/` | WebDAV URL for backups. | | `WEBDAV_USER` | `your_username` | WebDAV user. | | `WEBDAV_PASSWORD` | `your_password` | WebDAV password. | ## Usage ### Build the Docker Image To build the Docker image, use the following command, passing in any custom arguments as needed: ```bash docker build --build-arg POSTGRES_USER=myuser \ --build-arg POSTGRES_PASSWORD=mypassword \ --build-arg WEBDAV_URL=https://mywebdavserver.com \ --build-arg WEBDAV_USER=mywebdavuser \ --build-arg WEBDAV_PASSWORD=mywebdavpassword \ -t custom-postgres-n8n:latest . ``` ### Run the Docker Container To run the container with customized environment variables: ```bash docker run -d \ -e POSTGRES_USER=n8n \ -e POSTGRES_PASSWORD=n8n \ -e POSTGRES_DB=n8n \ -e WEBHOOK_URL=https://your-webhook.url/ \ -e WEBDAV_URL=https://your-webdav.url/ \ -e WEBDAV_USER=your_username \ -e WEBDAV_PASSWORD=your_password \ -p 7860:7860 \ custom-postgres-n8n:latest ``` ### Backup and Restore The image includes scripts for backing up and restoring the PostgreSQL database to and from a WebDAV server: - **Backup**: The `backup.sh` script uploads a PostgreSQL database dump to the WebDAV server. - **Import**: The `import-db.sh` script retrieves the latest database dump from the WebDAV server and imports it into PostgreSQL. To manually trigger a backup or import, connect to the running container: ```bash docker exec -it bash ``` Then run: ```bash # Backup the database ./backup.sh # Import the database ./import-db.sh ``` ### Webhook Integration The `WEBHOOK_URL` can be configured to send and receive webhooks. This can be useful for triggering automated workflows or notifying external systems about database changes. ### Python and Node.js Environment This image includes both **Python** and **Node.js**. Python packages are managed through a `requirements.txt` file, and Node.js packages through `package.txt`. You can install and run additional scripts using either Python or Node.js. ### Exposed Port - **n8n**: Accessible on port `7860` by default. ## Custom Scripts Three key scripts are provided: - `run.sh`: Main entry point script. - `import-db.sh`: Handles database imports from WebDAV. - `backup.sh`: Manages automated backups to WebDAV. ## License This project is licensed under the MIT License. See the LICENSE file for details. --- This setup is ideal for environments where database management, automation, and cloud backups are required. It is especially suited for **n8n** users who want a robust and flexible system for managing their PostgreSQL database in conjunction with other automation workflows.