> For the complete documentation index, see [llms.txt](https://wiki.crosswatch.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.crosswatch.app/related-information/community/install-scripts/synology-with-portainer-or-dockhand.md).

# Synology with Portainer or Dockhand

Maintainer: <https://github.com/doctorjz>

{% hint style="warning" %}
Community pages and scripts are **not maintained, reviewed, or supported by CrossWatch**.

Read them before you run them.

Fixes, updates, and support depend on the original author.
{% endhint %}

### Overview

This setup runs CrossWatch on Synology with Container Manager, Portainer, or Dockhand.

It uses a persistent bind mount for `/config`.

It also aligns container file ownership with your Synology user.

### Why this setup is needed

Synology bind mounts can fail when the container user cannot write to the shared folder.

Set the container user to your Synology `UID:GID`.

If you use `PUID` and `PGID` variables in your stack, keep them aligned with that same `UID:GID`.

### Prerequisites

1. A Synology NAS with Container Manager, Portainer, or Dockhand working
2. A folder for CrossWatch config data
   * Example: `/volume1/docker/crosswatch`
3. Your Synology user ID and group ID
4. A free port for the web UI
   * Default: `8787`

### Installation

1. Create a folder for CrossWatch data on your NAS.
2. Find your Synology `UID` and `GID`.
3. Create a new stack in Portainer or Dockhand.
4. Use the official CrossWatch image.
5. Mount your Synology folder to `/config`.
6. Set the container user to your Synology `UID:GID`.
7. Expose port `8787`.
8. Deploy the stack.

Use a stack like this as the baseline:

```yaml
services:
  crosswatch:
    image: cenodude/crosswatch:latest
    container_name: crosswatch
    user: "1000:100"  # This forces the container to start as this user, change to your values
    environment:
      - TZ=America/Los_Angeles
      - PUID=1000 # changeme
      - PGID=100 # changeme
    volumes:
      - /volume1/docker/crosswatch:/config:rw # Added :rw for explicit Read/Write
    ports:
      - 8787:8787 
    restart: unless-stopped
```

After deployment completes, open CrossWatch in your browser:

```
http://<synology-ip>:8787
```

### Recommended container settings

Use these values unless you have a reason to change them:

1. Network port, `8787`
2. Persistent config path, `/config`
3. Restart policy, `unless-stopped`
4. Container user, your Synology `UID:GID`

### Important paths

1. Synology config folder, `/volume1/docker/crosswatch` example
2. Container config path, `/config`

### Notes

This is a container deployment, not a native Synology package.

Permission issues are the most common problem on Synology.

If CrossWatch cannot write to `/config`, check the folder owner, ACLs, and the container user.

Use [Docker setup](/getting-started/docker-setup.md) if you want the official baseline first.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://wiki.crosswatch.app/related-information/community/install-scripts/synology-with-portainer-or-dockhand.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
