Ralloc is a web-based tool designed for fast, ephemeral group allocation.
If you are interested in self-hosting Ralloc, follow these steps.
Requirements: pnpm
- Clone the repository using
git clone https://github.com/tomasvana10/ralloc cd ralloc- If you are using docker, install dev dependencies using
pnpm i --dev. Otherwise, install all dependencies usingpnpm i. - Prevent
redisbackground replications from failling under low memory conditions by runningsysctl vm.overcommit_memory=1. - Set up the environment by running
./scripts/setup. This script will also inform you howRalloccan be started in development/production. - Add your OAuth providers by running
./scripts/add-provider.
apps/web/.env.local:
- Used solely for global authentication secret/id pairs and the
NextAuthauthentication secret.
apps/web/.env.development and apps/web/.env.production:
- Authentication secret/id pairs
AUTH_URL:NextAuthbase URL for callbacks and redirects.REDIS_URL: URL of the redis database.ENABLE_RATELIMITING: A value of either0or1which determines ifnextAPI routes are protected by a token-bucket rate limiter.ENABLE_GUEST_AUTH: A value of either0or1which determines if the signing in as a "guest" is enabled. Signing in as a guest generates a random user ID, meaning the user cannot access their data once they sign out (and so it is deleted).
- (!!!) Write tests
- (!!) Use renovate for dependency management (after writing tests)
- Create
CONTRIBUTING.md - Create /about and/or /faq
- Create support/help page (on the website or on github)
- Create privacy and usage related markdown documents
- Improve page metadata in general and possibly add sitemap
-
generateMetadatafor group sessions (potentially a custom opengraph/twitter image?) - (!!!) TOKEN BUCKET RATE LIMITS FOR: websocket AND REST api
- (not planned) Implement forced group session expiry (and listen to expiring keys potentially?)
- Implement UI features for adding, removing and clearing group members (server-side + hook related stuff is already done)
- Create a logo
- Implement group control - UI, websockets, etc.
- Document info for installation and usage on
README.md - Add redis publishers in REST api for deletion and patching, and redis subscribers in ws UPGRADE() (and send new sync payloads to all clients)
- Lua scripting to ensure atomicity when joining/leaving a group
- Revise Redis DB structure for optimisations and removal of redundant keys
- Add reverse mapping for the group a user is in (probably like
host:<hostId>:session:<code>:user:<userId>:<groupName>) - Add alternative authentication methods (
GitHub) - Containerise - include redis image
- Configure Cloudflare tunnel and security
- Buy domain
ralloc.xyz - Implement home and session viewer
- Implement REST API for sessions
- Add basic Google authentication
- i18n through
next-intl(probably - consider using POEditor from the github education pack. aim to support japanese, czech, french and korean) - Make a wiki
- Support joining multiple groups (probably not)
- Individual group freezing (should be pretty easy if I need to do it)
- Support for deleting and adding groups