BoxVault is a cloud-based storage solution for Virtual Machine images and templates, designed to be self-hosted. It provides a platform similar to Vagrant Cloud, allowing organizations to securely store, manage, and share VM templates within their own infrastructure.
- User Authentication: Secure login and registration using JWT tokens.
- VM Template Management: Upload, update, and delete VM templates within boxes.
- Box Management: Create, update, and delete boxes with version control.
- Organization Management: Manage users and roles within organizations.
- Version Control: Track and manage different versions of VM templates.
- Role-Based Access: Platform admin plus per-organization owner, admin, and member roles with specific permissions.
- Public and Private Boxes: Control visibility of boxes within the organization.
- Architecture Management: Manage architectures and providers for different versions.
- Frontend: the STARTcloud UI, one build shared across the estate, fetched as a release artifact and served from
backend/ui; it renders whatGET /api/status(backend/app/controllers/status.controller.js) advertises:auth: ["backend"]whileauth.jwt.local_enabledis on, orauth: ["idp"]with anidpobject (issuer,client_id,scopes,storage_prefix) from the first enabledauth.oidc.providersentry while it is off,collections: ["boxes", "isos", "downloads"],config: ["app", "auth", "db", "mail"],events: { path: "/api/events", topics: ["session", "notifications", "health"] }and the feature tokenslocal-accounts(only whileauth.jwt.local_enabledis on),setup,admin,org-console,discover,invitations,uploads,watches,deploy,favorites,notifications,health,footer,sidebar,search,events; every JSON answer and every request body issnake_case - Backend: Node.js, Express.js
- Database: Sequelize ORM (Database configuration in
db.config.yaml) - Authentication: JWT tokens
- File Upload: Custom middleware for handling file uploads
- Version Control: Custom controllers and models for managing versions
-
Clone the repository:
git clone https://github.com/Makr91/BoxVault.git cd BoxVault -
Install dependencies and fetch the UI:
cd backend npm install UI_VERSION=$(node -p "require('./package.json').startcloudUiVersion") mkdir -p ui curl -fsSL "https://github.com/STARTcloud/startcloud-ui/releases/download/v${UI_VERSION}/startcloud-ui-${UI_VERSION}.tar.gz" | tar -xz -C ui
The UI version is pinned by
startcloudUiVersioninbackend/package.json; every STARTcloud UI release dispatchesdependency-updatehere and.github/workflows/dependency-bump.ymlanswers with abump/startcloud-uipull request for a human to merge. -
Configure the application:
- Development reads
backend/app/config/<name>.dev.config.yamlforapp,auth,dbandmail; the CI derives them frompackaging/config/*.yaml. - Production reads
<name>.config.yamlunderCONFIG_DIR(default/etc/boxvault), the one environment variable BoxVault reads.
- Development reads
-
Run the application:
cd backend npm start
BoxVault provides pre-built Debian packages for easy production deployment:
-
Download the latest release:
# Download from GitHub releases wget https://github.com/Makr91/BoxVault/releases/latest/download/boxvault_VERSION_amd64.deb -
Install BoxVault:
sudo gdebi -n boxvault_VERSION_amd64.deb sudo systemctl enable --now boxvault sudo systemctl status boxvaultSQLite is the packaged database (
database_type: sqlitein/etc/boxvault/db.config.yaml) and needs nothing else; MySQL is optional and configured on the setup page, see the Installation Guide. -
Access BoxVault:
- Open your browser to
https://localhost(the package listens on 443 and 80,boxvault.api_listen_port_encryptedandapi_listen_port_unencryptedinapp.config.yaml) - Complete the initial setup with the setup token
postinstprinted (/etc/boxvault/setup.token)
- Open your browser to
For detailed packaging and build instructions, see packaging/README.md.
- Register: Create a new account.
- Login: Access your account using your credentials.
- Create Box: Create a new box to store VM templates.
- Upload VM Templates: Upload VM templates to a specific box.
- Manage Versions: Add, update, or delete versions of VM templates.
- Manage Organizations: Administer users and roles within your organization.
POST /api/auth/signup: Register a new user.POST /api/auth/signin: Login a user.
GET /api/organization/:organization/box: Retrieve the boxes of an organization.GET /api/organization/:organization/box/:name: Retrieve a box.POST /api/organization/:organization/box: Create a new box.PUT /api/organization/:organization/box/:name: Update a box.DELETE /api/organization/:organization/box/:name: Delete a box.
POST /api/organization/:organization/box/:boxId/version/:versionNumber/provider/:providerName/architecture/:architectureName/file/upload: Upload a file.DELETE /api/organization/:organization/box/:boxId/version/:versionNumber/provider/:providerName/architecture/:architectureName/file/delete: Delete a file.
GET /api/organization: Retrieve the organizations of the caller.POST /api/organization: Create a new organization.GET /api/organizations/discover: Retrieve the discoverable organizations.
GET /api/events?topics=session,notifications,profile: The one server-sent event stream of the universal events contract;sessionsendssession-terminated,notificationssendsunread-count,profilesendsprofile-updatedwhen the person's record changed outside the tab.
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new branch (
git checkout -b feature/your-feature-name). - Commit your changes (
git commit -m 'Add some feature'). - Push to the branch (
git push origin feature/your-feature-name). - Open a pull request.
This project is licensed under the GPL-3.0 License. See the LICENSE.md file for details.