plane
plane copied to clipboard
[bug]: Can't get my uploaded images or attachements.
Is there an existing issue for this?
- [X] 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
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
The upload is being done correctly, but the GET of the file is not.
This happens not only with profile images, but with images in issue comments and attachments in issues.
This happens not only with profile images, but with images in issue comments and attachments in issues.
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.
@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).
Hey @alexsanderp, could you please try with USE_MINIO=1
@akshat5302 Even without using MINIO?
yes please, try it once and let me know the outcome
@akshat5302 ok, I'll try
Hey @alexsanderp, did the above suggestion worked?
Closing this issue for now. Feel free to reopen it if needed!