---
title: PhotoStructure for Servers
url: https://photostructure.com/server/photostructure-for-servers/
description: Choose the right PhotoStructure server edition: Docker, npx, or Node.
date: 2023-11-15
keywords: Docker, Node.js, installation, NAS, sync, metadata
---


All server editions share the same UI and are interoperable with each other (and
with [PhotoStructure for Desktops](/install)). You can move your
[library](/library) between any edition on any OS.

Server editions require comfort with the command line. If you want
point-and-click, use [PhotoStructure for Desktops](/install).

## Which edition should I use?

- **Uncomfortable with the command line**: use [PhotoStructure for Desktops](/install)

- **NAS or container host** (Synology, UnRAID, TrueNAS, or Docker host): use [Docker](#docker)

<!-- - **Linux or macOS server** where you just want to get running: use [npx](#npx) -->

- **Need full control** over dependencies, or running on Windows: use [Node](#node)

<a id="photostructure-for-docker"></a>

## Docker

**[Set up Docker with the wizard](/server/docker-compose-wizard/)** | [Docker reference](/server/photostructure-for-docker/)

Runs on any `linux/amd64` or `linux/arm64` Docker host. You only need Docker installed.

**Pros:**

- Nothing to install besides Docker
- Container [security isolation](https://docs.docker.com/engine/security/security/) (especially with [non-root user](/server/photostructure-for-docker/#puid))
- Straightforward upgrades: `docker compose pull && docker compose up --build -d`

**Cons:**

- You must explicitly bind-mount directories you want to import
- Docker may need VT-x or AMD-V enabled in BIOS
- Old AMD64 CPUs (e.g. AMD Phenom II) may not work; use Node instead
- No access to physical [volume UUIDs](/faq/what-is-a-volume/)

<!--
## npx

**Run `npx photostructure` in a terminal.**

The simplest server option if you already have [Node.js](https://nodejs.org/) 22.3+ installed. No global install, no package management.

**Pros:**

- One command to start
- Automatic volume UUID detection
- Always runs the latest published version

**Cons:**

- Requires Node.js 22.3+
- You'll still need to install [FFmpeg and libheif](/getting-started/media-codec-support/) for video and HEIC support -->

<a id="photostructure-for-node"></a>

## Node

**[Full Node installation instructions](/server/photostructure-for-node/)** | [systemd wizard](/server/systemd-wizard/)

The advanced option for headless servers where you want full control over the runtime.

**Pros:**

- "Scan all volumes" works automatically (no bind-mount management)
- [Volume UUIDs](/faq/what-is-a-volume) are supported
- [Automatic upgrade checks on restart](/server/photostructure-for-node/#upgrading-photostructure)

**Cons:**

- You'll need to manually install Node.js along with [FFmpeg and libheif](/getting-started/media-codec-support/) for video and HEIC support

## ⚙️ Service architecture

{{< figure src="/img/2026/02/arch.svg" caption="PhotoStructure process architecture" >}}

- **`phstr-main`** supervises `phstr-web` and `phstr-sync`, restarting them if
  they crash or are unresponsive

- **`phstr-web`** hosts the Express HTTP API, Vue SPA, and serves image previews

- **`phstr-sync`** scans directories for potential library assets, manages the
  import pipeline and task queue

- **`phstr-worker`** processes (scaled to CPU count) handle CPU-intensive tasks
  offloaded from the web and sync event loops: metadata extraction, preview
  generation, and file hashing

All three services spawn external processes as needed:

- **exiftool** reads and writes photo and video metadata
- **ffmpeg** / **ffprobe** extract video frames and probe codec information
- **dcraw** extracts previews from RAW camera files
- **heif-dec** / **heif-thumbnail** decode HEIF/HEIC images
- **sips** converts images on macOS

## See also

- [PhotoStructure User Guide](/user-guide)
- [Command-line tools](/tools)
- [Temperature monitoring on Linux](/server/temperature-monitoring/)
- [Server hardening for beginners](https://forum.photostructure.com/t/server-hardening-for-beginners/1027)

