Galene
Galene is a self-hosted video conferencing server. It features advanced networking and video algorithms and automatic subtitling.
Try the service in a VM
-
Install Nix
- Arch Linux
-
- Bash
-
$ pacman --sync --refresh --noconfirm curl git jq nix
- Debian
-
- Bash
-
$ apt install --yes curl git jq nix
- Ubuntu
-
- Bash
-
$ apt install --yes curl git jq nix
-
Download a configuration file
# default.nix { ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { }, }: ngipkgs.demo-vm ( { lib, pkgs, ... }: let galeneTestGroupsDir = "/var/lib/galene/groups"; galeneTestGroupFile = "galene-test-config.json"; galenePort = 8443; galeneTestGroupAdminName = "admin"; galeneTestGroupAdminPassword = "1234"; in { services.galene = { enable = true; insecure = true; openFirewall = true; httpPort = galenePort; groupsDir = galeneTestGroupsDir; }; # https://galene.org/INSTALL.html environment.etc.${galeneTestGroupFile}.source = (pkgs.formats.json { }).generate galeneTestGroupFile { op = [ { username = galeneTestGroupAdminName; password = galeneTestGroupAdminPassword; } ]; other = [ { } ]; }; environment.systemPackages = with pkgs; [ ffmpeg galene-stream ]; } )
-
Enable binary substituters
- Bash
-
$ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/ trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
-
Build and run a virtual machine
- Arch Linux, Debian Sid and Ubuntu 25.04
-
- Bash
-
$ nix-build ./default.nix && ./result
- Debian 12 and Ubuntu 24.04/24.10
-
- Bash
-
$ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
$ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"
-
Usage Instructions
A demo VM for testing Galène.
To use Galène, you have to set up a group, and permissions & users within this group. For full details, take a look at: https://galene.org/README.html#group-definitions
After Galène has finished starting up, the on-screen text in the VM will inform you about the exact directory that your group configs need to be put into.
An example config is available within the VM under
/etc/galene-test-config.json
. If you copy this file to the group directory and name ittest.json
, then a group namedtest
will be available in the web interface for you to use.A known issue with specifically this demo is that WebRTC doesn't seem to be working: You can join the group and get familiar with the interface, but audio and video is unlikely to work. Installing Galène properly on a local system will get rid of this issue.
Options
services.galene
- services.galene.certFile
-
Path to the server's certificate. The file is copied at runtime to Galene's data directory where it needs to reside.
- Type:
null or absolute path
- Default:
null
- services.galene.dataDir
-
Data directory.
- Type:
absolute path
- Default:
"${config.services.galene.stateDir}/data"
- services.galene.enable
-
Whether to enable Galene Service.
- Type:
boolean
- Default:
false
- services.galene.group
-
Group under which galene runs.
- Type:
string
- Default:
"galene"
- services.galene.groupsDir
-
Web server directory.
- Type:
absolute path
- Default:
"${config.services.galene.stateDir}/groups"
- services.galene.httpAddress
-
HTTP listen address for galene.
- Type:
string
- Default:
""
- services.galene.httpPort
-
HTTP listen port.
- Type:
16 bit unsigned integer; between 0 and 65535 (both inclusive)
- Default:
8443
- services.galene.insecure
-
Whether Galene should listen in http or in https. If left as the default value (false), Galene needs to be fed a private key and a certificate.
- Type:
boolean
- Default:
false
- services.galene.keyFile
-
Path to the server's private key. The file is copied at runtime to Galene's data directory where it needs to reside.
- Type:
null or absolute path
- Default:
null
- services.galene.openFirewall
-
Whether to open the service's ports in the firewall.
- Type:
boolean
- Default:
false
- services.galene.package
-
The galene package to use.
- Type:
package
- Default:
pkgs.galene
- services.galene.recordingsDir
-
Recordings directory.
- Type:
absolute path
- Default:
"${config.services.galene.stateDir}/recordings"
- services.galene.stateDir
-
The directory where Galene stores its internal state. If left as the default value this directory will automatically be created before the Galene server starts, otherwise the sysadmin is responsible for ensuring the directory exists with appropriate ownership and permissions.
- Type:
absolute path
- Default:
"/var/lib/galene"
- services.galene.staticDir
-
Web server directory.
- Type:
absolute path
- Default:
"${package.static}/static"
- services.galene.turnAddress
-
Built-in TURN server listen address and port. Set to "" to disable.
- Type:
string
- Default:
"auto"
- services.galene.user
-
User account under which galene runs.
- Type:
string
- Default:
"galene"
Examples
Enable Galene
{ lib, pkgs, ... }: let galeneTestGroupsDir = "/var/lib/galene/groups"; galeneTestGroupFile = "galene-test-config.json"; galenePort = 8443; galeneTestGroupAdminName = "admin"; galeneTestGroupAdminPassword = "1234"; in { services.galene = { enable = true; insecure = true; openFirewall = true; httpPort = galenePort; groupsDir = galeneTestGroupsDir; }; # https://galene.org/INSTALL.html environment.etc.${galeneTestGroupFile}.source = (pkgs.formats.json { }).generate galeneTestGroupFile { op = [ { username = galeneTestGroupAdminName; password = galeneTestGroupAdminPassword; } ]; other = [ { } ]; }; environment.systemPackages = with pkgs; [ ffmpeg galene-stream ]; }
This project is funded by NLnet through these subgrants: