This guide provides an Ansible playbook to deploy Galène via source build on Linux servers.
| Attribute | Details |
|---|---|
| License | MIT |
| Technical Stack | Go (server), JavaScript (client) |
| Deployment | Source build (binary) |
| Docker Support | Community images only (no official images) |
| GitHub | jech/galene |
- name: Deploy Galène Videoconference Server
hosts: galene-servers
become: true
vars:
galene_version: master
galene_user: galene
galene_group: galene
galene_data_dir: /var/lib/galene
galene_group_dir: /etc/galene/groups
galene_log_dir: /var/log/galene
galene_binary: /usr/local/bin/galene
go_version: "1.21"
# Initial group configuration
galene_groups:
- name: main
public: true
description: "Main meeting room"
users:
- username: admin
password: "change-me-immediately"
permissions: op
tasks:
- name: Install Go
block:
- name: Install Go on Debian/Ubuntu
apt:
name: golang-go
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install Go on RHEL family
dnf:
name: golang
state: present
when: ansible_os_family == "RedHat"
rescue:
- name: Install Go from source (fallback)
include_tasks: install-go-from-source.yml
- name: Verify Go installation
command: go version
register: go_version_check
changed_when: false
- name: Display Go version
debug:
var: go_version_check.stdout
- name: Create Galène user and group
group:
name: "{{ galene_group }}"
state: present
system: true
user:
name: "{{ galene_user }}"
group: "{{ galene_group }}"
shell: /bin/false
system: true
create_home: false
- name: Create directory structure
file:
path: "{{ item }}"
state: directory
owner: "{{ galene_user }}"
group: "{{ galene_group }}"
mode: '0755'
loop:
- "{{ galene_data_dir }}"
- "{{ galene_data_dir }}/recordings"
- "{{ galene_group_dir }}"
- "{{ galene_log_dir }}"
- name: Clone Galène repository
git:
repo: https://github.com/jech/galene
dest: /tmp/galene-build
version: "{{ galene_version }}"
force: true
- name: Build Galène binary
command: CGO_ENABLED=0 go build -ldflags='-s -w'
args:
chdir: /tmp/galene-build
environment:
CGO_ENABLED: "0"
- name: Install Galène binary
copy:
src: /tmp/galene-build/galene
dest: "{{ galene_binary }}"
owner: root
group: root
mode: '0755'
remote_src: true
- name: Create initial group configuration
copy:
dest: "{{ galene_group_dir }}/{{ item.name }}.json"
content: |
{
"public": {{ item.public | default(true) | lower }},
"description": "{{ item.description | default('Meeting room') }}",
"users": {
{% for user in item.users | default([]) %}
"{{ user.username }}": {
"password": "{{ user.password }}",
"permissions": "{{ user.permissions | default('view') }}"
}{{ "," if not loop.last else "" }}
{% endfor %}
}
}
owner: "{{ galene_user }}"
group: "{{ galene_group }}"
mode: '0640'
loop: "{{ galene_groups }}"
no_log: true
- name: Create systemd service file
copy:
dest: /etc/systemd/system/galene.service
content: |
[Unit]
Description=Galène Videoconference Server
After=network.target
[Service]
Type=simple
User={{ galene_user }}
Group={{ galene_group }}
ExecStart={{ galene_binary }} -data-dir {{ galene_data_dir }} -group-dir {{ galene_group_dir }}
Restart=on-failure
LimitNOFILE=65535
WorkingDirectory={{ galene_data_dir }}
[Install]
WantedBy=multi-user.target
mode: '0644'
- name: Enable and start Galène service
systemd:
name: galene
enabled: true
state: started
daemon_reload: true
- name: Verify Galène is running
command: systemctl status galene
register: galene_status
changed_when: false
failed_when: false
- name: Display service status
debug:
var: galene_status.stdout_lines
- name: Clean up build directory
file:
path: /tmp/galene-build
state: absent
[galene-servers]
galene.example.com ansible_user=deploy ansible_python_interpreter=/usr/bin/python3
[galene-servers:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
# Run the playbook
ansible-playbook -i inventory.ini galene.yml
# With custom variables
ansible-playbook -i inventory.ini galene.yml \
-e galene_version=master \
-e '"galene_groups=[{\"name\": \"main\", \"public\": true, \"users\": [{\"username\": \"admin\", \"password\": \"secure-pass\", \"permissions\": \"op\"}]}]"'
# Check service status
sudo systemctl status galene
# View logs
sudo journalctl -u galene -f
# Test connection
curl -k https://localhost:8443
Open browser to https://<server-ip>:8443/group/main/
admin| Variable | Default | Description |
|---|---|---|
galene_version |
master |
Git branch/tag to build |
galene_user |
galene |
System user for service |
galene_data_dir |
/var/lib/galene |
Data directory |
galene_group_dir |
/etc/galene/groups |
Group config directory |
galene_groups |
[] |
Initial group definitions |
For production, configure a reverse proxy with Let’s Encrypt. See Galène Configuration for nginx examples.
Any questions?
Feel free to contact us. Find all contact information on our contact page.