Immich Public Proxy
Build and run Immich Public Proxy, optionally with the visitor-upload service, as systemd services.
immich-public-proxy.sh builds alangrainger/immich-public-proxy from its
release source with Node.js 24 and points it at your Immich server.
| Run it | On any system that can reach your Immich server. The script has no Proxmox VE host check |
| Supported OS | Debian or Ubuntu (require_debian_like: Alpine and systems without apt-get exit with code 238) |
| Ports | 3000 (proxy), 3001 (visitor uploads, optional) |
| Source | tools/addon/immich-public-proxy.sh |
Run
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/immich-public-proxy.sh)"Prompts
| Prompt | Answer |
|---|---|
Install Immich Public Proxy? (y/N): | y installs. Anything else exits |
Enter your LOCAL Immich IP or domain (ex. 192.168.1.100 or immich.local.lan): | An IPv4 address, a domain name or localhost. Invalid input asks again. An empty answer on the third attempt or later uses the system's own IP |
Enable visitor uploads (second service on port 3001)? <y/N> | y enables the upload service. Skipped when var_ipp_uploads is set |
When the proxy is already installed:
| Prompt | Answer |
|---|---|
Uninstall Immich Public Proxy? (y/N): | y removes it |
Update Immich Public Proxy? (y/N): | y updates |
Enable visitor uploads (second service on port 3001)? (y/N): | Asked only when the upload service does not exist yet. y enables it |
To answer the upload question in advance, set var_ipp_uploads to y, yes
or true (any other non-empty value means no):
var_ipp_uploads=yes bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/immich-public-proxy.sh)"What it creates
| Item | Value |
|---|---|
| Node.js | Version 24 through setup_nodejs |
| Application | /opt/immich-proxy, built with npm ci and npm run build |
| Configuration | /opt/immich-proxy/app/.env (mode 600) with NODE_ENV=production and IMMICH_URL=http://<your answer>:2283 |
| Further settings | /opt/immich-proxy/app/config.json |
| Service | immich-proxy (/etc/systemd/system/immich-proxy.service), runs as root |
| Upload service | immich-proxy-upload (/etc/systemd/system/immich-proxy-upload.service), started with IPP_PORT=3001. Only when enabled |
| Update helper | /usr/local/bin/update_immich-public-proxy |
| Address | http://<ip>:3000 |
The script always writes IMMICH_URL with http:// and port 2283. Edit
.env if your Immich server listens elsewhere.
After enabling uploads, route /upload/* on your reverse proxy to port 3001
and turn on "Allow public user to upload" for the share in Immich.
Update
Run update_immich-public-proxy, answer y to the update prompt, or let the
container's update command offer it (see
how update finds add-ons).
If a newer release exists, the services are stopped, .env, config.json
and (with uploads enabled) upload-app/config.json are backed up to
/opt/immich-public-proxy_backup, the installation directory is replaced, the
backup is restored, the application is rebuilt, the service files are
rewritten and the services are started.
Remove
The uninstall prompt stops and disables both services and deletes their unit
files, /opt/immich-proxy and the update helper. Node.js stays installed.
Limits
- Visitor uploads need Immich Public Proxy 4.0 or newer; on an older installation the script asks you to update first.
- The script does not set up a reverse proxy or TLS.