From 6f137b7a1b4fbcd61bd28e14996106baef2196b1 Mon Sep 17 00:00:00 2001 From: jaydee Date: Sun, 30 Nov 2025 16:29:53 +0100 Subject: [PATCH] build --- __swarm/n8n/n8n-swarm.yml | 4 +-- __swarm/regsync/regsync-swarm.yml | 26 ++++++++++++++ copu_to_volume.py | 58 +++++++++++++++++++++++++++++++ n8n/docker-compose.yml | 7 ++-- requirements.txt | 1 + 5 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 __swarm/regsync/regsync-swarm.yml create mode 100644 copu_to_volume.py diff --git a/__swarm/n8n/n8n-swarm.yml b/__swarm/n8n/n8n-swarm.yml index e65b865..13fb7af 100644 --- a/__swarm/n8n/n8n-swarm.yml +++ b/__swarm/n8n/n8n-swarm.yml @@ -27,12 +27,12 @@ services: stop_grace_period: 60s deploy: labels: - homepage.container: n8n + homepage.container: n8n_n8n homepage.description: Workflow management homepage.group: Utils homepage.href: https://${APPNAME}.sectorq.eu homepage.icon: /icons/n8n.svg - homepage.name: n8n_n8n + homepage.name: n8n homepage.server: my-docker-swarm wud.watch: 'true' wud.watch.digest: 'true' diff --git a/__swarm/regsync/regsync-swarm.yml b/__swarm/regsync/regsync-swarm.yml new file mode 100644 index 0000000..2191138 --- /dev/null +++ b/__swarm/regsync/regsync-swarm.yml @@ -0,0 +1,26 @@ +volumes: + regsync: + driver: local +services: + regsync: + command: -c /home/appuser/regsync.yml server + env_file: + - stack.env + image: ${DOCKER_REGISTRY:-}ghcr.io/regclient/regsync:latest + logging: + driver: loki + options: + loki-url: http://192.168.77.101:3100/loki/api/v1/push + network_mode: host + stdin_open: true + volumes: + - regsync:/home/appuser/ + - /etc/localtime:/etc/localtime + deploy: + labels: + wud.watch: 'true' + wud.watch.digest: 'true' + replicas: 1 + placement: + constraints: + - node.role == manager diff --git a/copu_to_volume.py b/copu_to_volume.py new file mode 100644 index 0000000..9b1c7f8 --- /dev/null +++ b/copu_to_volume.py @@ -0,0 +1,58 @@ +import docker +import os +import argparse + +parser = argparse.ArgumentParser(description="Portainer helper - use env vars or pass credentials.") + +parser.add_argument("--volume_name","-v", type=str, default=None, help="Volume name") +parser.add_argument("--source_dir","-s", type=str, default=None, help="Source directory to copy from") +args = parser.parse_args() + + +def copy_to_volume(volume_name, source_dir, container_path="/data", image="busybox:latest"): + """ + Copy all files from source_dir into a Docker volume using a temporary container. + Creates the volume if it does not exist. + + :param volume_name: Name of the Docker volume + :param source_dir: Local directory to copy + :param container_path: Path inside the container where volume is mounted + :param image: Temporary container image + """ + client = docker.from_env() + + if not os.path.isdir(source_dir): + raise ValueError(f"Source directory {source_dir} does not exist") + + # Check if volume exists + try: + volume = client.volumes.get(volume_name) + print(f"Volume '{volume_name}' exists.") + except docker.errors.NotFound: + print(f"Volume '{volume_name}' does not exist. Creating...") + volume = client.volumes.create(name=volume_name) + print(f"Volume '{volume_name}' created.") + + print(f"Copying files from {source_dir} to volume '{volume_name}'...") + + # Run temporary container to copy files + client.containers.run( + image, + command=f"sh -c 'cp -r /tmp/* {container_path}/'", + volumes={ + volume_name: {"bind": container_path, "mode": "rw"}, + os.path.abspath(source_dir): {"bind": "/tmp", "mode": "ro"} + }, + remove=True, + detach=False + ) + + print("Files copied successfully.") + +if __name__ == "__main__": + # Example usage + copy_to_volume( + volume_name=args.volume_name, + source_dir=args.source_dir, + container_path="/data" + ) \ No newline at end of file diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml index b556ff0..2f9b2c2 100755 --- a/n8n/docker-compose.yml +++ b/n8n/docker-compose.yml @@ -18,7 +18,7 @@ services: - N8N_SECURE_COOKIE=false - WEBHOOK_URL=https://n8n.sectorq.eu volumes: - - /share/docker_data/n8n/n8n-data:/home/node/.n8n + - n8n-data:/home/node/.n8n restart: ${RESTART:-unless-stopped} stop_grace_period: 60s labels: @@ -30,4 +30,7 @@ services: homepage.name: n8n homepage.server: my-docker wud.watch: true - wud.watch.digest: true \ No newline at end of file + wud.watch.digest: true +volumes: + n8n-data: + driver: local \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c3726e8..75d9842 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ pyyaml +docker