-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
Grimnir Radio offers multiple installation methods to suit different environments and use cases.
| Method | Best For | Pros | Cons |
|---|---|---|---|
| Docker Compose | Production, quick start | Easy setup, isolated, portable | Requires Docker |
| Nix (Full Module) | NixOS systems | Reproducible, declarative | NixOS only |
| Nix (Basic) | Any Linux/macOS | Reproducible builds | Manual config |
| From Source | Development, custom builds | Full control, latest code | Complex setup |
- Docker 20.10+ and Docker Compose 2.0+
- 2GB RAM minimum
- 10GB disk space for media
The easiest method with automatic configuration:
git clone https://github.com/friendsincode/grimnir_radio.git
cd grimnir_radio
./scripts/docker-quick-start.shFeatures:
- Automatic port conflict detection
- Three deployment modes (Quick, Custom, Production)
- External storage configuration
- Multi-instance setup support
For custom deployments:
# Clone repository
git clone https://github.com/friendsincode/grimnir_radio.git
cd grimnir_radio
# Configure environment
cp .env.example .env
# Edit .env with your settings
# Start services
docker-compose up -d
# Check status
docker-compose ps
# View logs
docker-compose logs -f grimnirradioBasic Stack (docker-compose.yml):
- Grimnir Radio (control plane)
- PostgreSQL (metadata database)
- Redis (event bus, caching)
- Icecast2 (streaming server)
Environment Variables (.env):
# HTTP API
GRIMNIR_HTTP_PORT=8080
# Database
GRIMNIR_DB_BACKEND=postgres
GRIMNIR_DB_DSN=postgres://grimnir:password@postgres:5432/grimnir_radio?sslmode=disable
# Redis
GRIMNIR_REDIS_ADDR=redis:6379
# Storage
GRIMNIR_MEDIA_ROOT=/media
# Or S3:
GRIMNIR_S3_BUCKET=my-media
GRIMNIR_S3_REGION=us-east-1
# Security
GRIMNIR_JWT_SIGNING_KEY=your-secret-key-hereSee Configuration Guide for all options.
Required for all Nix installation methods:
# Install Nix (single-user)
sh <(curl -L https://nixos.org/nix/install) --no-daemon
# Or multi-user (recommended)
sh <(curl -L https://nixos.org/nix/install) --daemon
# Enable flakes (required)
mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.confFull turn-key installation with automatic service management:
/etc/nixos/configuration.nix:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
grimnir-radio.url = "github:friendsincode/grimnir_radio";
};
outputs = { self, nixpkgs, grimnir-radio }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
modules = [
grimnir-radio.nixosModules.default
{
services.grimnir-radio = {
enable = true;
httpPort = 8080;
mediaPath = "/var/lib/grimnir-radio/media";
# Optional: Use PostgreSQL
database = {
enable = true;
createDatabase = true;
};
# Optional: Use Redis
redis = {
enable = true;
};
# Optional: Use Icecast
icecast = {
enable = true;
password = "hackme";
};
};
}
];
};
};
}Apply configuration:
sudo nixos-rebuild switchWhat This Provides:
- Automatic systemd services for both binaries
- Auto-configured PostgreSQL with database/user creation
- Auto-configured Redis for event bus
- Auto-configured Icecast2 streaming server
- Automatic firewall rules
- Security hardening (PrivateTmp, ProtectSystem, etc.)
- Automatic service dependencies and ordering
Install binaries to your user profile:
# Install
nix profile install github:friendsincode/grimnir_radio
# Run
grimnirradio serveManual configuration required:
- PostgreSQL/MySQL database setup
- Redis installation (optional, for multi-instance)
- Icecast2 installation
- Environment variables
# Run directly without installing
nix run github:friendsincode/grimnir_radio
# Run media engine
nix run github:friendsincode/grimnir_radio#mediaengineFor development:
# Enter development shell
nix develop github:friendsincode/grimnir_radio
# Or clone and develop
git clone https://github.com/friendsincode/grimnir_radio.git
cd grimnir_radio
nix develop
# Build
make build
# Run tests
make testSee Development Guide for more details.
Required:
- Go 1.24 or later
- GStreamer 1.0 with plugins (base, good, bad, ugly)
- PostgreSQL 12+ (or MySQL 8+, SQLite 3.35+)
- Git
Optional:
- Redis 6+ (for multi-instance)
- NATS 2.9+ (alternative to Redis)
- Icecast2 (for streaming)
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y \
golang-1.24 \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
postgresql-client \
redis-serverFedora/RHEL:
sudo dnf install -y \
golang \
gstreamer1 \
gstreamer1-plugins-base \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free \
gstreamer1-plugins-ugly-free \
gstreamer1-libav \
gstreamer1-devel \
gstreamer1-plugins-base-devel \
postgresql \
redismacOS:
brew install go gstreamer gst-plugins-base gst-plugins-good \
gst-plugins-bad gst-plugins-ugly postgresql redis# Clone repository
git clone https://github.com/friendsincode/grimnir_radio.git
cd grimnir_radio
# Build control plane
go build -o grimnirradio ./cmd/grimnirradio
# Build media engine (optional, requires GStreamer)
go build -o mediaengine ./cmd/mediaengine
# Install (optional)
sudo cp grimnirradio /usr/local/bin/
sudo cp mediaengine /usr/local/bin/PostgreSQL:
# Create user and database
sudo -u postgres psql -c "CREATE USER grimnir WITH PASSWORD 'password';"
sudo -u postgres psql -c "CREATE DATABASE grimnir_radio OWNER grimnir;"
# Test connection
psql -h localhost -U grimnir -d grimnir_radioMySQL:
# Create user and database
mysql -u root -p <<EOF
CREATE DATABASE grimnir_radio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'grimnir'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON grimnir_radio.* TO 'grimnir'@'localhost';
FLUSH PRIVILEGES;
EOFSQLite:
# SQLite creates database automatically, just configure path
mkdir -p /var/lib/grimnir-radio# Copy environment template
cp .env.example .env
# Edit configuration
nano .envMinimum required settings:
GRIMNIR_DB_BACKEND=postgres
GRIMNIR_DB_DSN=postgres://grimnir:password@localhost:5432/grimnir_radio?sslmode=disable
GRIMNIR_JWT_SIGNING_KEY=$(openssl rand -base64 32)
GRIMNIR_MEDIA_ROOT=/var/lib/grimnir-radio/media# Run control plane
./grimnirradio serve
# In another terminal, run media engine (if built separately)
./mediaengineCreate /etc/systemd/system/grimnir-radio.service:
[Unit]
Description=Grimnir Radio Control Plane
After=network.target postgresql.service redis.service
[Service]
Type=simple
User=grimnir
WorkingDirectory=/opt/grimnir-radio
EnvironmentFile=/etc/grimnir-radio/config.env
ExecStart=/usr/local/bin/grimnirradio serve
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable grimnir-radio
sudo systemctl start grimnir-radio
sudo systemctl status grimnir-radio# Check API health
curl http://localhost:8080/health
# Expected response:
# {"status":"ok","version":"1.0.0"}
# Check logs
# Docker:
docker-compose logs grimnirradio
# Systemd:
journalctl -u grimnir-radio -f
# Direct:
# Check console output./grimnirradio user create \
--email admin@example.com \
--password yourpassword \
--role admin- Getting Started - Create your first station
- Configuration - Customize settings
- Production Deployment - Production checklist
See Upgrading Guide for version upgrade instructions.
See Troubleshooting Guide for common issues and solutions.
Getting Started
Core Concepts
Deployment
Integration
Operations
Development
Reference