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:
commit
53695f4fff
411 files changed
+7817
No files matched your search
@@ -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`.
|
||||
@@ -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: []
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user