Initialise repository structure and placeholder files. Generic functionality works i guess, need to come up with a better solution for compose templates

This commit is contained in:
boris committed 2026-07-08 10:29:51 +01:00
commit 53695f4fff
411 files changed
+7817

No files matched your search

+22
View File
@@ -0,0 +1,22 @@
# pelican_server
Deploys a Pelican server/node daemon directly on a VM with systemd.
This is intentionally separate from `pelican_panel`: the panel is the web
control plane, while this role installs the Wings daemon on a game node VM and
opens SFTP plus game allocation firewall ports. Docker is still required because the daemon uses Docker to run game server containers.
Default ports:
- Daemon API: `8080/tcp`
- SFTP: `2022/tcp`
- Game allocations: `25565:25575/tcp`
By default the role downloads the latest binary from GitHub using the host
architecture. Override `pelican_server_binary_url` to pin a release.
The role does not create the panel-provided `config.yml`; put it at
`pelican_server_config_file`. Set `pelican_server_require_config: false` only
when staging the node before the panel config exists.
Tags: `pelican_server`.
+29
View File
@@ -0,0 +1,29 @@
---
pelican_server_architecture_map:
x86_64: amd64
amd64: amd64
aarch64: arm64
arm64: arm64
pelican_server_architecture: "{{ pelican_server_architecture_map.get(ansible_architecture, 'arm64') }}"
pelican_server_binary_url: "https://github.com/pelican-dev/wings/releases/latest/download/wings_linux_{{ pelican_server_architecture }}"
pelican_server_binary_path: /usr/local/bin/wings
pelican_server_binary_mode: "0755"
pelican_server_config_file: /etc/pelican/config.yml
pelican_server_require_config: true
pelican_server_config_dir: /etc/pelican
pelican_server_runtime_dir: /var/run/wings
pelican_server_daemon_port: 8080
pelican_server_sftp_port: 2022
pelican_server_allocation_ports:
- { port: "25565:25575", proto: tcp }
pelican_server_firewall_ports:
- { port: "{{ pelican_server_daemon_port }}", proto: tcp }
- { port: "{{ pelican_server_sftp_port }}", proto: tcp }
pelican_server_service_name: wings
pelican_server_service_enabled: true
pelican_server_service_state: started
pelican_server_extra_args: []
+1
View File
@@ -0,0 +1 @@
+10
View File
@@ -0,0 +1,10 @@
---
- name: reload systemd
ansible.builtin.systemd:
daemon_reload: true
- name: restart pelican server
ansible.builtin.service:
name: "{{ pelican_server_service_name }}"
state: restarted
+100
View File
@@ -0,0 +1,100 @@
---
- name: Install Pelican server daemon packages
ansible.builtin.apt:
name:
- ca-certificates
- curl
- tar
state: present
update_cache: true
tags: [pelican_server, packages]
- name: Create Pelican server directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
loop:
- "{{ pelican_server_config_dir }}"
- "{{ pelican_server_runtime_dir }}"
tags: [pelican_server, directories]
- name: Install Pelican server daemon binary
ansible.builtin.get_url:
url: "{{ pelican_server_binary_url }}"
dest: "{{ pelican_server_binary_path }}"
owner: root
group: root
mode: "{{ pelican_server_binary_mode }}"
notify: restart pelican server
tags: [pelican_server, install]
- name: Check Pelican server daemon binary
ansible.builtin.stat:
path: "{{ pelican_server_binary_path }}"
register: pelican_server_binary
tags: [pelican_server, install]
- name: Require Pelican server daemon binary
ansible.builtin.assert:
that:
- pelican_server_binary.stat.exists
- pelican_server_binary.stat.executable
fail_msg: >-
Pelican server daemon binary was not found at {{ pelican_server_binary_path }}.
Set pelican_server_binary_url or install the daemon binary before enabling this role.
tags: [pelican_server, install]
- name: Check Pelican server config file
ansible.builtin.stat:
path: "{{ pelican_server_config_file }}"
register: pelican_server_config
when: pelican_server_require_config | bool
tags: [pelican_server, config]
- name: Require Pelican server config file
ansible.builtin.assert:
that:
- pelican_server_config.stat.exists
fail_msg: >-
Pelican server config was not found at {{ pelican_server_config_file }}.
Create it from the Pelican panel node configuration before starting the daemon.
when: pelican_server_require_config | bool
tags: [pelican_server, config]
- name: Install Pelican server systemd unit
ansible.builtin.template:
src: wings.service.j2
dest: "/etc/systemd/system/{{ pelican_server_service_name }}.service"
owner: root
group: root
mode: "0644"
notify:
- reload systemd
- restart pelican server
tags: [pelican_server, systemd]
- name: Open Pelican server daemon and SFTP ports
community.general.ufw:
rule: allow
port: "{{ item.port }}"
proto: "{{ item.proto | default('tcp') }}"
loop: "{{ pelican_server_firewall_ports }}"
tags: [pelican_server, firewall]
- name: Open Pelican server allocation ports
community.general.ufw:
rule: allow
port: "{{ item.port }}"
proto: "{{ item.proto | default('tcp') }}"
loop: "{{ pelican_server_allocation_ports }}"
tags: [pelican_server, firewall]
- name: Enable Pelican server service
ansible.builtin.service:
name: "{{ pelican_server_service_name }}"
enabled: "{{ pelican_server_service_enabled }}"
state: "{{ pelican_server_service_state }}"
tags: [pelican_server, services]
@@ -0,0 +1,20 @@
[Unit]
Description=Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory={{ pelican_server_config_dir }}
LimitNOFILE=4096
RuntimeDirectory=wings
PIDFile={{ pelican_server_runtime_dir }}/daemon.pid
ExecStart={{ pelican_server_binary_path }}{% for arg in pelican_server_extra_args %} {{ arg }}{% endfor %}
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target