diff --git a/CloudronManifest.json b/CloudronManifest.json new file mode 100644 index 0000000..030f37a --- /dev/null +++ b/CloudronManifest.json @@ -0,0 +1,20 @@ +{ + "id": "jellyseerr.com", + "title": "Jellyseerr", + "author": "Jellyseerr", + "description": "Jellyseerr is a free and open source software application for managing requests for your media library. It works with Jellyfin, Plex, and Emby.", + "tagline": "Request and discover media", + "version": "1.0.0", + "healthCheckPath": "/", + "httpPort": 5055, + "addons": { + "localstorage": {} + }, + "manifestVersion": 2, + "website": "https://github.com/Fallenbagel/jellyseerr", + "contactEmail": "support@jellyseerr.com", + "icon": "file://icon.png", + "tags": [ "media", "jellyfin", "plex", "emby", "requests" ], + "mediaLinks": [] +} + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5c09075 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,78 @@ +# build stage +FROM cloudron/base:5.0.0@sha256:6bec2b5246567ef8b5b13ca0af756e2e596941e440d76b46635211cd84383922 AS build_image + +WORKDIR /app + +# Install Node.js 22 (required by Jellyseerr) +# Remove old Node.js installation and install Node.js 22 binary directly +RUN apt-get update && \ + apt-get install -y curl xz-utils && \ + rm -rf /usr/local/node-* && \ + NODE_VERSION="22.11.0" && \ + ARCH="x64" && \ + curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${ARCH}.tar.xz" -o /tmp/node.tar.xz && \ + tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \ + rm /tmp/node.tar.xz && \ + ln -sf /usr/local/bin/node /usr/bin/node && \ + ln -sf /usr/local/bin/npm /usr/bin/npm && \ + node --version && \ + npm --version && \ + which node + +# Install pnpm +RUN npm install --global pnpm + +RUN git clone https://github.com/Fallenbagel/jellyseerr.git && cd jellyseerr + +WORKDIR /app/jellyseerr + +# Verify Node.js version before installing +RUN node --version && \ + which node && \ + CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile + +RUN pnpm build + +# remove development dependencies +RUN pnpm prune --prod --ignore-scripts + +RUN rm -rf src server .next/cache + +# runtime stage +FROM cloudron/base:5.0.0@sha256:6bec2b5246567ef8b5b13ca0af756e2e596941e440d76b46635211cd84383922 + +WORKDIR /app/code/jellyseerr + +# Install Node.js 22 for runtime as well +# Remove old Node.js installation and install Node.js 22 binary directly +RUN apt-get update && \ + apt-get install -y curl xz-utils && \ + rm -rf /usr/local/node-* && \ + NODE_VERSION="22.11.0" && \ + ARCH="x64" && \ + curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${ARCH}.tar.xz" -o /tmp/node.tar.xz && \ + tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \ + rm /tmp/node.tar.xz && \ + ln -sf /usr/local/bin/node /usr/bin/node && \ + ln -sf /usr/local/bin/npm /usr/bin/npm && \ + node --version && \ + npm --version && \ + which node + +# Install pnpm +RUN npm install -g pnpm + +RUN mkdir -p /app/code/jellyseerr + +COPY --from=build_image /app/jellyseerr /app/code/jellyseerr + +# Remove the read-only config directory from source and create symlink to persistent storage +# The symlink points to /app/data/config which will be mounted by Cloudron at runtime +RUN rm -rf /app/code/jellyseerr/config && \ + ln -s /app/data/config /app/code/jellyseerr/config + +COPY start.sh /app/code/start.sh +RUN chmod +x /app/code/start.sh + +CMD [ "/app/code/start.sh" ] + diff --git a/LICENSE b/LICENSE index b083747..ef7d91e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 bradinfluence +Copyright (c) 2026 BradInfluence Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including diff --git a/README.md b/README.md index 9c1207b..37db0df 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,107 @@ # cloudron-jellyseer -Open-source media request and discovery manager for Jellyfin, Plex, and Emby. Packaged for Cloudron. \ No newline at end of file +Jellyseerr packaged for Cloudron. Jellyseerr is a free and open source software application for managing requests for your media library. It works with Jellyfin, Plex, and Emby. + +## Introduction + +This repository provides a Cloudron package for [Jellyseerr](https://github.com/Fallenbagel/jellyseerr), allowing you to easily deploy and manage Jellyseerr on your Cloudron instance. + +## Prerequisites + +You need to install Cloudron CLI: [here](https://docs.cloudron.io/packaging/cli/). +After installation, connect the CLI to your Cloudron instance. + +## Installation + +### Build the App + +To build the Docker image for Jellyseerr: + +```bash +cloudron build +``` + +This will create a Docker image for Jellyseerr tailored for Cloudron. + +### Install the App + +To install Jellyseerr on your Cloudron instance: + +```bash +cloudron install --image /cloudron-jellyseerr: +``` + +Replace `` with your Docker registry (e.g., `yourusername` for Docker Hub) and `` with the version tag (e.g., `1.0.0`). + +**Note**: Always install the application with a specific version tag (not `latest`). Cloudron's internal registry needs a tagged image version to be able to update when new images are available. + +### Using Pre-built Images + +If you're using pre-built images from a registry: + +```bash +cloudron install --image yourregistry/cloudron-jellyseerr:1.0.0 +``` + +## Configuration + +Jellyseerr will store its configuration in `/app/data/config` which is automatically persisted by Cloudron's localstorage addon. + +### First Run + +1. After installation, access Jellyseerr through your Cloudron dashboard +2. Complete the initial setup wizard +3. Connect Jellyseerr to your Jellyfin, Plex, or Emby server +4. Configure your media request settings + +## Features + +- **Media Request Management**: Users can request movies and TV shows +- **Multi-Server Support**: Works with Jellyfin, Plex, and Emby +- **User Management**: Built-in user authentication and permissions +- **Automated Workflows**: Integrates with automation tools like Radarr and Sonarr +- **Beautiful UI**: Modern, responsive interface + +## Updating + +To update Jellyseerr: + +1. Build a new version: + ```bash + cloudron build + ``` + +2. Push the new image to your registry: + ```bash + docker push yourregistry/cloudron-jellyseerr: + ``` + +3. Update the app on Cloudron: + ```bash + cloudron update --image yourregistry/cloudron-jellyseerr: + ``` + +## Troubleshooting + +### App Won't Start + +- Check the app logs in Cloudron dashboard +- Ensure the config directory has proper permissions +- Verify that port 5055 is available + +### Configuration Issues + +- Configuration is stored in `/app/data/config` +- You can access the file manager through Cloudron's app settings +- Ensure Jellyseerr has write permissions to the config directory + +## Resources + +- [Jellyseerr GitHub](https://github.com/Fallenbagel/jellyseerr) +- [Jellyseerr Documentation](https://docs.jellyseerr.dev/) +- [Cloudron Documentation](https://docs.cloudron.io/) +- [Cloudron Packaging Guide](https://docs.cloudron.io/packaging/) + +## License + +MIT License - See [LICENSE](LICENSE) file for details. diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..78f902a Binary files /dev/null and b/icon.png differ diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..19071f8 --- /dev/null +++ b/start.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -eu + +echo "Starting Jellyseerr..." + +# Set environment variables for Cloudron +# Cloudron provides PORT, but Jellyseerr may use PORT_NUMBER +export PORT=${PORT:-5055} +export PORT_NUMBER=${PORT:-5055} +export NODE_ENV=production + +# Ensure config directory and required subdirectories exist +mkdir -p /app/data/config/logs +mkdir -p /app/data/config/db + +# Start Jellyseerr +cd /app/code/jellyseerr +exec pnpm start +