Dan6erbond / share-me

An image and video hosting platform for your server, with rich embed support and API.
https://dan6erbond.github.io/share-me/
MIT License
145 stars 10 forks source link

500 Internal Server Error When Visiting /sign-up #9

Closed jimmybrancaccio closed 1 year ago

jimmybrancaccio commented 1 year ago

I've finally had a moment to try this out. I've setup the containers in my docker-compose.yml file and launched the server and frontend containers. Unfortunately when I click on the Sign Up button I get a lovely 500 ISE error. The frontend container logs:

ClientResponseError 404: Something went wrong while processing your request.
    at new ClientResponseError (file:///app/node_modules/pocketbase/dist/pocketbase.es.mjs:1:2306)
    at file:///app/node_modules/pocketbase/dist/pocketbase.es.mjs:1:45475
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async getServerSideProps (/app/.next/server/pages/sign-up.js:152:25) {
  url: 'https://share.mydomain.com/api/collections/users/auth-methods',
  status: 404,
  response: {},
  isAbort: false,
  originalError: null
}

which oddly enough seems to be a 404. My docker-compose.yml:

  share-me-frontend:
    image: ghcr.io/dan6erbond/share-me-frontend:latest
    container_name: share-me-frontend
    labels:
      - traefik.http.routers.share-me-frontend.rule=Host(`share.mydomain.com`)
      - traefik.http.routers.share-me-frontend.entrypoints=websecure
      - traefik.http.routers.share-me-frontend.service=share-me-frontend
      - traefik.http.routers.share-me-frontend.tls=true
      - traefik.http.routers.share-me-frontend.tls.certresolver=letsencrypt
      - traefik.http.routers.share-me-frontend.tls.domains[0].main=share.mydomain.com
      - traefik.http.services.share-me-frontend.loadbalancer.server.port=3000
    environment:
      - POCKETBASE_URL=${SHARE_ME_POCKETBASE_URL}
    networks:
      - production
    depends_on:
      - traefik
    restart: unless-stopped
  share-me-server:
    image: ghcr.io/dan6erbond/share-me-server:latest
    container_name: share-me-server
    labels:
      - traefik.enable=false
    volumes:
     - ${DOCKER_DATA_DIR}/share-me/pb_data:/pb/pb_data
    networks:
      - production
    depends_on:
      - traefik
    restart: unless-stopped

Any ideas! Thanks! 😁

Dan6erbond commented 1 year ago

Hi there! The Next.js server is most likely throwing a 500 internal server error because the 404 is caught as a generic error in the server-side rendering process.

My guess is you didn't setup PocketBase yet, which you can do by going to https://shareme.example.com/_/ and follow the installation wizard.

You can also use the PocketBase UI to manage settings like S3, SMTP and authentication providers.

Keep in mind, your PocketBase admin user isn't the same as the Share Me user which can be created on the sign-up page or in the PocketBase UI by going to the users collection.

Let me know if this solves the issue for you. I'll keep it open until then and turn it into a discussion if it has to do with setting up PocketBase, otherwise I might have to look into the bug.

Dan6erbond commented 1 year ago

Another point: Your config won't work. PocketBase's UI needs to be reachable at /_ and the API at /api so you need to configure Traefik for it.

jimmybrancaccio commented 1 year ago

Hey @Dan6erbond! Thanks for the follow up! I was able to get it working properly using:

share-me-frontend:
    image: ghcr.io/dan6erbond/share-me-frontend:latest
    container_name: share-me-frontend
    labels:
      - traefik.http.routers.share-me-frontend.rule=Host(`share.mydomain.com`)
      - traefik.http.routers.share-me-frontend.entrypoints=websecure
      - traefik.http.routers.share-me-frontend.service=share-me-frontend
      - traefik.http.routers.share-me-frontend.tls=true
      - traefik.http.routers.share-me-frontend.tls.certresolver=letsencrypt
      - traefik.http.routers.share-me-frontend.tls.domains[0].main=share.mydomain.com
      - traefik.http.services.share-me-frontend.loadbalancer.server.port=3000
    environment:
      - POCKETBASE_URL=${SHARE_ME_POCKETBASE_URL}
    networks:
      - production
    depends_on:
      - traefik
    restart: unless-stopped
  share-me-server:
    image: ghcr.io/dan6erbond/share-me-server:latest
    container_name: share-me-server
    labels:
      - traefik.http.routers.share-me-server.rule=Host(`share.mydomain.com`) && (PathPrefix(`/api`) || PathPrefix(`/_/`))
      - traefik.http.routers.share-me-server.entrypoints=websecure
      - traefik.http.routers.share-me-server.service=share-me-server
      - traefik.http.routers.share-me-server.tls=true
      - traefik.http.routers.share-me-server.tls.certresolver=letsencrypt
      - traefik.http.routers.share-me-server.tls.domains[0].main=share.mydomain.com
      - traefik.http.services.share-me-server.loadbalancer.server.port=8080
    volumes:
     - ${DOCKER_DATA_DIR}/share-me/pb_data:/pb/pb_data
    networks:
      - production
    depends_on:
      - traefik
    restart: unless-stopped

Once in, I was able to easily configure Vultr Object Storage and SMTP. I'd never heard of PocketBase before but I looked at their site and it definitely seems like a neat tool. Seems like it saves a lot of time! It kind of reminds me of Strapi.

I'll be keeping an eye on this project for sure 😄

Dan6erbond commented 1 year ago

Awesome, I'm glad it worked out! Your config looks much better now with the path-prefixes for PocketBase.

Yes, PocketBase is really nice. It has everything that I usually would want to implement manually, things like OIDC and S3 that make it harder to use other low-code tools like it. I also like that you can write your own Go logic with event hooks, commands, API routes, etc. which I leveraged in #11 to delete files when a post is deleted and am using on feat/search to automatically sync documents with Meilisearch.