mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-06-17 07:44:12 +00:00
196 lines
5.6 KiB
Plaintext
196 lines
5.6 KiB
Plaintext
# Deployment Guide for Contributors
|
|
|
|
How Orama releases are built, tested, and deployed to the network. Understanding this process is important for contributors who need to test changes against live infrastructure or participate in the release cycle.
|
|
|
|
## Release Process Overview
|
|
|
|
1. **Feature development** on feature branches
|
|
2. **Code review and merge** to the main branch
|
|
3. **Binary building** — Cross-compile for target architectures
|
|
4. **Rolling deployment** — One node at a time across the environment
|
|
|
|
## Building Binaries
|
|
|
|
The `orama build` command cross-compiles all Go binaries into a deployment archive:
|
|
|
|
```bash
|
|
# Build for Linux amd64 (default, target platform for VPS nodes)
|
|
orama build
|
|
|
|
# Build for a specific architecture
|
|
orama build --arch arm64
|
|
|
|
# Custom output path
|
|
orama build --output ./release/orama-v1.0.0.tar.gz
|
|
|
|
# Verbose output
|
|
orama build --verbose
|
|
```
|
|
|
|
| Flag | Default | Description |
|
|
|------|---------|-------------|
|
|
| `--arch` | `amd64` | Target architecture (`amd64`, `arm64`) |
|
|
| `--output` | `/tmp/orama-<version>-linux-<arch>.tar.gz` | Output archive path |
|
|
| `--verbose` | `false` | Verbose output |
|
|
|
|
The build pipeline:
|
|
1. Cross-compiles all Go binaries for `linux/<arch>` (CLI, gateway, node, SFU, TURN, identity)
|
|
2. Bundles third-party dependencies (RQLite, Olric, IPFS, CoreDNS, Caddy)
|
|
3. Includes systemd service templates
|
|
4. Packages everything into a tar.gz archive with a `manifest.json` (checksums)
|
|
|
|
## Deploying to Nodes
|
|
|
|
### Push (Upload Only)
|
|
|
|
Upload the binary archive to nodes without restarting services:
|
|
|
|
```bash
|
|
# Push to all nodes in an environment
|
|
orama node push --env devnet
|
|
|
|
# Push to a single node
|
|
orama node push --env devnet --node 1.2.3.4
|
|
|
|
# Direct upload (no hub fanout)
|
|
orama node push --env devnet --direct
|
|
```
|
|
|
|
### Rollout (Build + Deploy)
|
|
|
|
Build and deploy in one step with automatic rolling restart:
|
|
|
|
```bash
|
|
# Build and deploy to all nodes
|
|
orama node rollout --env devnet
|
|
|
|
# Skip the build step (use existing archive)
|
|
orama node rollout --env devnet --no-build
|
|
|
|
# Skip confirmation
|
|
orama node rollout --env devnet --yes
|
|
```
|
|
|
|
### Upgrade (Restart Only)
|
|
|
|
When the binary is already on the node, restart services with the new code:
|
|
|
|
```bash
|
|
# Rolling upgrade of all nodes in an environment
|
|
orama node upgrade --env devnet
|
|
|
|
# Upgrade a single node
|
|
orama node upgrade --env devnet --node 1.2.3.4
|
|
|
|
# Also restart services after upgrade
|
|
orama node upgrade --env devnet --restart
|
|
```
|
|
|
|
## Other Node Management Commands
|
|
|
|
```bash
|
|
# Diagnose common node issues (8 automated checks)
|
|
orama node doctor
|
|
|
|
# Generate invite tokens for new nodes to join the cluster
|
|
orama node invite --expiry 24h
|
|
|
|
# Wipe a node for reinstallation
|
|
orama node clean --env devnet --node 1.2.3.4
|
|
orama node clean --env devnet --nuclear # Also removes shared binaries
|
|
|
|
# Recover RQLite from a cluster split
|
|
orama node recover-raft --env devnet --leader 1.2.3.4
|
|
|
|
# Service management (on-node)
|
|
orama node start
|
|
orama node stop
|
|
orama node restart
|
|
orama node status
|
|
```
|
|
|
|
## Cluster Inspection and Monitoring
|
|
|
|
Two tools for verifying cluster health:
|
|
|
|
```bash
|
|
# Deep SSH-based health inspection (runs checks on each node)
|
|
orama inspect --env devnet
|
|
orama inspect --env devnet --subsystem rqlite # Specific subsystem
|
|
orama inspect --env devnet --format json # JSON output
|
|
|
|
# Real-time cluster monitoring (interactive TUI)
|
|
orama monitor --env devnet
|
|
|
|
# One-shot reports
|
|
orama monitor cluster --env devnet # Cluster overview
|
|
orama monitor node --env devnet # Per-node health
|
|
orama monitor service --env devnet # Service status
|
|
orama monitor mesh --env devnet # WireGuard mesh
|
|
orama monitor dns --env devnet # DNS health
|
|
orama monitor namespaces --env devnet # Namespace usage
|
|
orama monitor alerts --env devnet # Active alerts
|
|
orama monitor report --env devnet # Full JSON report
|
|
```
|
|
|
|
## Rolling Upgrade Process
|
|
|
|
Deploying to the network follows a strict rolling upgrade process to maintain cluster availability:
|
|
|
|
1. Verify cluster health (all nodes, quorum OK)
|
|
2. Upload new binary to the node
|
|
3. Stop services (reverse dependency order: Gateway -> Olric -> RQLite)
|
|
4. Replace binary
|
|
5. Start services (correct dependency order: WireGuard -> RQLite -> Olric -> Gateway)
|
|
6. Verify node health
|
|
7. Verify cluster health
|
|
8. Proceed to next node
|
|
|
|
### Deployment Order
|
|
|
|
1. **Followers first** — Upgrade RQLite follower nodes before the leader
|
|
2. **Leader last** — Upgrading the leader triggers a leader election; do this last
|
|
3. **One at a time** — Never upgrade multiple nodes simultaneously
|
|
|
|
## Health Verification Between Nodes
|
|
|
|
After each node upgrade, both node-level and cluster-level health must be confirmed:
|
|
|
|
```bash
|
|
# Node health
|
|
orama monitor report --env <environment> --node <node-ip>
|
|
|
|
# Cluster health
|
|
orama monitor report --env <environment>
|
|
```
|
|
|
|
Do not proceed to the next node until:
|
|
|
|
- All services on the upgraded node are `active`
|
|
- RQLite shows `Leader` or `Follower` state
|
|
- Raft log indices are in sync across the cluster
|
|
- WireGuard peers are all connected
|
|
|
|
## Environment Promotion
|
|
|
|
Changes flow through environments in this order:
|
|
|
|
```
|
|
devnet → testnet → production
|
|
```
|
|
|
|
- **devnet** — First deployment target, used for active development and testing
|
|
- **testnet** — Staging environment, mirrors production configuration
|
|
- **production** — Production (`dbrs.space`), requires extra verification and approval
|
|
|
|
## CI/CD Pipeline
|
|
|
|
The CI pipeline runs on every push and PR:
|
|
|
|
| Stage | What It Does |
|
|
|-------|-------------|
|
|
| Lint | Code style and static analysis (`go vet`, `go fmt`) |
|
|
| Test | Unit tests via `make test` |
|
|
| Build | Compile all 6 binaries for target platforms |
|
|
| E2E | Run against a test environment |
|