Repository navigation
Closed
Labels
🐛bugSomething isn't workingSomething isn't working
Description
Is there an existing issue for this?
- I have searched the existing issues
Current behavior
When I upload a profile image, It's being uploaded successfully, I can see it from the minio backet, but I can't see it from the web application.
After inspecting I observed that the localhost value is hardcoded, And I can't change to my domain even with setting a different value to the WEB_URL env variable.

Here's my docker compose file:
x-app-env: &app-env
environment:
- NGINX_PORT=${NGINX_PORT:-99}
- DEBUG=${DEBUG:-0}
- SENTRY_DSN=${SENTRY_DSN}
- SENTRY_ENVIRONMENT=${SENTRY_ENVIRONMENT:-"production"}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
# Gunicorn Workers
- GUNICORN_WORKERS=${GUNICORN_WORKERS:-1}
#DB SETTINGS
- PGHOST=${PGHOST:-plane-db}
- PGDATABASE=${PGDATABASE:-plane}
- POSTGRES_USER=${POSTGRES_USER:-plane}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-plane}
- POSTGRES_DB=${POSTGRES_DB:-plane}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- PGDATA=${PGDATA:-/var/lib/postgresql/data}
- DATABASE_URL=${DATABASE_URL:-postgresql://plane:plane@plane-db/plane}
# REDIS SETTINGS
- REDIS_HOST=${REDIS_HOST:-plane-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_URL=${REDIS_URL:-redis://plane-redis:6379/}
# Application secret
- SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
# DATA STORE SETTINGS
- USE_MINIO=${USE_MINIO:-1}
- AWS_REGION=${AWS_REGION:-""}
- AWS_ACCESS_KEY_ID=minioadmin
- AWS_SECRET_ACCESS_KEY=minioadmin
- AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000}
- AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads}
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin
- BUCKET_NAME=${BUCKET_NAME:-uploads}
- FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880}
# Admin and Space URLs
- WEB_URL=${WEB_URL:-"https://plane.example.ma"}
- APP_BASE_URL=${WEB_URL:-"https://plane.example.ma"}
- ADMIN_BASE_URL=${WEB_URL:-"https://plane.example.ma"}
- SPACE_BASE_URL=${WEB_URL:-"https://plane.example.ma"}
services:
web:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-frontend:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: node web/server.js web
deploy:
replicas: ${WEB_REPLICAS:-1}
depends_on:
- api
- worker
space:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-space:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: node space/server.js space
deploy:
replicas: ${SPACE_REPLICAS:-1}
depends_on:
- api
- worker
- web
admin:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-admin:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: node admin/server.js admin
deploy:
replicas: ${ADMIN_REPLICAS:-1}
depends_on:
- api
- web
api:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: ./bin/docker-entrypoint-api.sh
deploy:
replicas: ${API_REPLICAS:-1}
volumes:
- logs_api:/code/plane/logs
depends_on:
- plane-db
- plane-redis
worker:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: ./bin/docker-entrypoint-worker.sh
volumes:
- logs_worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
beat-worker:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: unless-stopped
command: ./bin/docker-entrypoint-beat.sh
volumes:
- logs_beat-worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
migrator:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
restart: "no"
command: ./bin/docker-entrypoint-migrator.sh
volumes:
- logs_migrator:/code/plane/logs
depends_on:
- plane-db
- plane-redis
plane-db:
<<: *app-env
image: postgres:15.5-alpine
pull_policy: if_not_present
restart: unless-stopped
command: postgres -c 'max_connections=1000'
volumes:
- pgdata:/var/lib/postgresql/data
plane-redis:
<<: *app-env
image: valkey/valkey:7.2.5-alpine
pull_policy: if_not_present
restart: unless-stopped
volumes:
- redisdata:/data
plane-minio:
<<: *app-env
image: minio/minio:latest
pull_policy: if_not_present
restart: unless-stopped
ports:
- 9090:9090
command: server /export --console-address ":9090"
volumes:
- uploads:/export
# Comment this if you already have a reverse proxy running
proxy:
<<: *app-env
image: ${DOCKERHUB_USER:-makeplane}/plane-proxy:${APP_RELEASE:-stable}
platform: ${DOCKER_PLATFORM:-}
pull_policy: ${PULL_POLICY:-always}
ports:
- ${NGINX_PORT}:80
depends_on:
- web
- api
- space
volumes:
pgdata:
redisdata:
uploads:
logs_api:
logs_worker:
logs_beat-worker:
logs_migrator:
Steps to reproduce
- use the master branch.
- navigate to deploy/self-host/docker-compose.yaml
- change the WEB_URL env variable value.
4 docker compose up --build. - navigate to your profile and change the profile picture and inspect.
Environment
Production
Browser
Google Chrome
Variant
Self-hosted
Version
v0.22.0
Metadata
Metadata
Assignees
Labels
🐛bugSomething isn't workingSomething isn't working
Type
Fields
No fields configured for issues without a type.
Activity
alexsanderp commentedon Sep 24, 2024
Same problem here, looks like the plane is using AWS_S3_ENDPOINT_URL to assemble the URL instead of WEB_URL...
Problem URL:
https://storage.googleapis.com/hurb_plane_stg/c68bc313-94af-4d75-8fda-aa3c273cadc0/b1e3cbcb6c3c4786b399639fecc06f4d-icons8-youtube-64-_OGkUTrK.png
Correct URL:
https://plane-stg.hurb-data.com/hurb_plane_stg/c68bc313-94af-4d75-8fda-aa3c273cadc0/b1e3cbcb6c3c4786b399639fecc06f4d-icons8-youtube-64-_OGkUTrK.png
alexsanderp commentedon Sep 24, 2024
The upload is being done correctly, but the GET of the file is not.
alexsanderp commentedon Sep 24, 2024
This happens not only with profile images, but with images in issue comments and attachments in issues.
saadsb20 commentedon Sep 25, 2024
Can you share your env file ?
for plane to take the minio container as its storage bucket , AWS_S3_ENDPOINT_URL should have the plane-minio service name in the url.
AWS_S3_ENDPOINT_URL=http://plane-minio:9000.
plane-minio is the name of the minio service.
alexsanderp commentedon Sep 26, 2024
@saadsb20 I don't use Minio; I use Google Storage with S3 compatibility for storage...
envs:
USE_MINIO=0
AWS_S3_ENDPOINT_URL=https://storage.googleapis.com/
The upload works well... However, when I try to do a GET, it puts https://storage.googleapis.com/bucket_name in the URL. Previously, it used to pass WEB_URL/bucket_name, allowing me to use an S3 proxy to serve images from Google Storage (which worked well that way).
akshat5302 commentedon Sep 27, 2024
Hey @alexsanderp, could you please try with
USE_MINIO=1alexsanderp commentedon Oct 8, 2024
@akshat5302 Even without using MINIO?
akshat5302 commentedon Oct 14, 2024
yes please, try it once and let me know the outcome
alexsanderp commentedon Oct 17, 2024
@akshat5302 ok, I'll try
akshat5302 commentedon Feb 6, 2025
Hey @alexsanderp, did the above suggestion worked?
akshat5302 commentedon Apr 21, 2025
Closing this issue for now. Feel free to reopen it if needed!