No Public Share Links?

Hey all. I'm selfhosting ente using a single stack in docker with the museum.yaml in the same directory as the compose file. i have everything up and running but the issue I am running into is when I click on the button to create a public share link for an album, nothing is happening. I can't see a link getting created and when I click "copy link" nothing is copied. My docker compose is below with my museum.yaml:
services:
museum:
image: ghcr.io/ente-io/server
ports:
- "${PORT}:8080" # API
depends_on:
postgres:
condition: service_healthy
volumes:
- "./museum.yaml:/museum.yaml"
- "${CONFIG_DIR}/data:/data"
healthcheck:
test: ["CMD", "curl", "--fail", "http://127.0.0.1:8080/ping"]
interval: 60s
timeout: 5s
retries: 3
start_period: 5s

# Resolve "localhost:3200" in the museum container to the minio container.
socat:
image: alpine/socat
network_mode: service:museum
depends_on:
- museum
command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200"

web:
image: ghcr.io/ente-io/web
ports:
- "3000:3000" # Photos web app
- "3002:3002" # Public albums
environment:
ENTE_API_ORIGIN: "http://${IP}:${PORT}"
ENTE_ALBUMS_ORIGIN: "https://${IP}:3002"

postgres:
image: postgres:15
environment:
POSTGRES_USER: pguser
POSTGRES_PASSWORD:
POSTGRES_DB: ente_db
healthcheck:
test: ["CMD-SHELL", "pg_isready -q -d ente_db -U pguser"]
interval: 10s
timeout: 5s
retries: 5
start_period: 40s
volumes:
- "${CONFIG_DIR}/postgres-data:/var/lib/postgresql/data"

minio:
image: minio/minio
ports:
- 3200:3200 # MinIO API
environment:
MINIO_ROOT_USER: minio-user-Av/ztrFm
MINIO_ROOT_PASSWORD:
command: server /data --address ":3200" --console-address ":3201"
volumes:
- ${CONFIG_DIR}/minio-data:/data
post_start:
- command: |
sh -c '
#!/bin/sh

while ! mc alias set h0 http://minio:3200 minio-user-Av/ztrFm Jczt/BEywUms1wRKJ8BbaMmaxyGy 2>/dev/null
do
echo "Waiting for minio..."
sleep 0.5
done

cd /data

mc mb -p b2-eu-cen
mc mb -p wasabi-eu-central-2-v3
mc mb -p scw-eu-fr-v3
'
services:
museum:
image: ghcr.io/ente-io/server
ports:
- "${PORT}:8080" # API
depends_on:
postgres:
condition: service_healthy
volumes:
- "./museum.yaml:/museum.yaml"
- "${CONFIG_DIR}/data:/data"
healthcheck:
test: ["CMD", "curl", "--fail", "http://127.0.0.1:8080/ping"]
interval: 60s
timeout: 5s
retries: 3
start_period: 5s

# Resolve "localhost:3200" in the museum container to the minio container.
socat:
image: alpine/socat
network_mode: service:museum
depends_on:
- museum
command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200"

web:
image: ghcr.io/ente-io/web
ports:
- "3000:3000" # Photos web app
- "3002:3002" # Public albums
environment:
ENTE_API_ORIGIN: "http://${IP}:${PORT}"
ENTE_ALBUMS_ORIGIN: "https://${IP}:3002"

postgres:
image: postgres:15
environment:
POSTGRES_USER: pguser
POSTGRES_PASSWORD:
POSTGRES_DB: ente_db
healthcheck:
test: ["CMD-SHELL", "pg_isready -q -d ente_db -U pguser"]
interval: 10s
timeout: 5s
retries: 5
start_period: 40s
volumes:
- "${CONFIG_DIR}/postgres-data:/var/lib/postgresql/data"

minio:
image: minio/minio
ports:
- 3200:3200 # MinIO API
environment:
MINIO_ROOT_USER: minio-user-Av/ztrFm
MINIO_ROOT_PASSWORD:
command: server /data --address ":3200" --console-address ":3201"
volumes:
- ${CONFIG_DIR}/minio-data:/data
post_start:
- command: |
sh -c '
#!/bin/sh

while ! mc alias set h0 http://minio:3200 minio-user-Av/ztrFm Jczt/BEywUms1wRKJ8BbaMmaxyGy 2>/dev/null
do
echo "Waiting for minio..."
sleep 0.5
done

cd /data

mc mb -p b2-eu-cen
mc mb -p wasabi-eu-central-2-v3
mc mb -p scw-eu-fr-v3
'
db:
host: postgres
port: 5432
name: ente_db
user: pguser
password:

s3:
are_local_buckets: true
# Set this to false if using subdomain-style URL. This is set to true for ensuring compatibility with MinIO when SSL is enabled.
use_path_style_urls: true
b2-eu-cen:
# Uncomment the below configuration to override the top-level configuration
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret:
endpoint: ${IP}:3200
region: eu-central-2
bucket: b2-eu-cen
wasabi-eu-central-2-v3:
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret: J
endpoint: ${IP}:3200
region: eu-central-2
bucket: wasabi-eu-central-2-v3
compliance: false
scw-eu-fr-v3:
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret:
endpoint: ${IP}:3200
region: eu-central-2
bucket: scw-eu-fr-v3

# Specify the base endpoints for various web apps
apps:
# If you're running a self hosted instance and wish to serve public links,
# set this to the URL where your albums web app is running.
public-albums: http://${IP}:3002
cast: http://${IP}:3004
# Set this to the URL where your accounts web app is running, primarily used for
# passkey based 2FA.
accounts: http://${IP}:3001

key:
encryption:
hash:

jwt:
secret:
db:
host: postgres
port: 5432
name: ente_db
user: pguser
password:

s3:
are_local_buckets: true
# Set this to false if using subdomain-style URL. This is set to true for ensuring compatibility with MinIO when SSL is enabled.
use_path_style_urls: true
b2-eu-cen:
# Uncomment the below configuration to override the top-level configuration
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret:
endpoint: ${IP}:3200
region: eu-central-2
bucket: b2-eu-cen
wasabi-eu-central-2-v3:
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret: J
endpoint: ${IP}:3200
region: eu-central-2
bucket: wasabi-eu-central-2-v3
compliance: false
scw-eu-fr-v3:
# are_local_buckets: true
# use_path_style_urls: true
key: minio-user-Av/ztrFm
secret:
endpoint: ${IP}:3200
region: eu-central-2
bucket: scw-eu-fr-v3

# Specify the base endpoints for various web apps
apps:
# If you're running a self hosted instance and wish to serve public links,
# set this to the URL where your albums web app is running.
public-albums: http://${IP}:3002
cast: http://${IP}:3004
# Set this to the URL where your accounts web app is running, primarily used for
# passkey based 2FA.
accounts: http://${IP}:3001

key:
encryption:
hash:

jwt:
secret:
7 Replies
Ducky
Ducky2w ago
Ente allows you to share your photos via links that anyone can access without an app or account. The contents remain end-to-end encrypted, with decryption keys embedded in the link. If you're running a self-hosted instance and wish to serve public links, ensure that the public-albums setting in your museum.yaml file is set to the URL where your albums web app is running. In your provided configuration, this is set to http://${IP}:3002. -# If your issue is resolved, feel free to use the /solved command to close this thread. If you'd like to ask me another question use /docsearch
Ducky
Ducky2w ago
🔍 Similar Solved Posts
Found some similar posts that might help:
Searched 55 solved posts
Josh
Josh2w ago
environment:
ENTE_API_ORIGIN: "http://${IP}:${PORT}"
ENTE_ALBUMS_ORIGIN: "https://${IP}:3002"
environment:
ENTE_API_ORIGIN: "http://${IP}:${PORT}"
ENTE_ALBUMS_ORIGIN: "https://${IP}:3002"
- Your web environment block Side note - If you are self-hosting this publicly I suggest getting a domain and a certificate so you can use https. You can get one for free via. letsencrypt / certbot The actual content of your photos is safe due to e2e, but a lot else won't be oops i forgot to say what i actually thought the problem was. one is http and one is https... I think https is a mistake as you can't connect to an IP over https but if the IP is actually a domain name... then API_ORIGIN being http will not play nicely with most browsers if the main domain is served over https
Gr0p3r
Gr0p3r2w ago
Yes, I agree with Josh. You should use a domain and reverse proxy. Make the proxy to the SSL. You cant just put https in the compose file if its not actually running https, and it wont be running https on port 3002.
Servers@Home
Servers@HomeOP2w ago
thats a great catch! i didnt even see the s in the https. i corrected that issue and now when i try to create the public share link and copy it this is what the F12 Console logs show (since it still isnt working)
[error] Failed to open thumbnail cache, will continue without it: ReferenceError: caches is not defined
s@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644133
A@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644110
o@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644080
initThumbnailCacheIfNeeded@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1005936
thumbnailData@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1007185
renderableThumbnailURL@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1006828
89667/Y/<@http://10.99.0.242:3000/_next/static/chunks/3508-25efc3598e59a8aa.js:1:5528
oq@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:97648
iy@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:113144
ig@http://10.99.0.242:3000/_next/static/chunks/framew…
_app-dd1f8b4708fda456.js:196:64538
[error] Unhandled error: TypeError: can't access property "writeText", navigator.clipboard is undefined
onCopyLink@http://10.99.0.242:3000/_next/static/chunks/pages/gallery-adcae79c1df7fb19.js:1:20098
onClick@http://10.99.0.242:3000/_next/static/chunks/pages/gallery-adcae79c1df7fb19.js:1:8314
uY@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:142746
31914/u1/<@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:148825
tS@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:29752
u1@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:143980
s9@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:170030
s6@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:169850
_app-dd1f8b4708fda456.js:196:64538
Uncaught TypeError: can't access property "writeText", navigator.clipboard is undefined
NextJS 8
[error] Failed to open thumbnail cache, will continue without it: ReferenceError: caches is not defined
s@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644133
A@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644110
o@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:28:644080
initThumbnailCacheIfNeeded@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1005936
thumbnailData@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1007185
renderableThumbnailURL@http://10.99.0.242:3000/_next/static/chunks/pages/_app-dd1f8b4708fda456.js:171:1006828
89667/Y/<@http://10.99.0.242:3000/_next/static/chunks/3508-25efc3598e59a8aa.js:1:5528
oq@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:97648
iy@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:113144
ig@http://10.99.0.242:3000/_next/static/chunks/framew…
_app-dd1f8b4708fda456.js:196:64538
[error] Unhandled error: TypeError: can't access property "writeText", navigator.clipboard is undefined
onCopyLink@http://10.99.0.242:3000/_next/static/chunks/pages/gallery-adcae79c1df7fb19.js:1:20098
onClick@http://10.99.0.242:3000/_next/static/chunks/pages/gallery-adcae79c1df7fb19.js:1:8314
uY@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:142746
31914/u1/<@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:148825
tS@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:29752
u1@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:143980
s9@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:170030
s6@http://10.99.0.242:3000/_next/static/chunks/framework-8f5a6dac2900ffd5.js:1:169850
_app-dd1f8b4708fda456.js:196:64538
Uncaught TypeError: can't access property "writeText", navigator.clipboard is undefined
NextJS 8
Gr0p3r
Gr0p3r2w ago
How are you going to share a public link when you dont have a public address? I dont think it will work, but even if you do get it to generate a link wit that IP, noone will be able to access it unless on your private LAN. Also, you wouldnt want to share that or expose your instance directly to the interent. Set up your reverse proxy so there is SSL on at least before thinking about internet connecting this.
Servers@Home
Servers@HomeOP6d ago
this is just for demo purposes. im not worried that the link wont be world-accessible. i just need it to generate a link.

Did you find this page helpful?