diff --git a/group_vars/peertuberunners.yml b/group_vars/peertuberunners.yml new file mode 100644 index 0000000..b06c63f --- /dev/null +++ b/group_vars/peertuberunners.yml @@ -0,0 +1,10 @@ +--- + +peertube_runner_token: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 32653563393232666430313330373861396232323037343165303138333664623835656331343164 + 3061313466396463326461663739393832313737623935640a613535343336353766613938366431 + 35313536343934346232626561363965363463353138343733383866353432343339366633396230 + 3634383433613263390a616162613530393330313539343136386531396666616263363936303939 + 33656330663962326435626430646536336162373664303265373262616162343437333737646361 + 6536643161333732343661396364666233393865316261616239 diff --git a/playbooks/peertube_runner.yml b/playbooks/peertube_runner.yml new file mode 100644 index 0000000..ed61e46 --- /dev/null +++ b/playbooks/peertube_runner.yml @@ -0,0 +1,9 @@ +--- + +- name: Deploy peertube runner + hosts: peertuberunners + gather_facts: true + diff: true + roles: + - nodejs + - peertube_runner diff --git a/roles/peertube_runner/handlers/main.yml b/roles/peertube_runner/handlers/main.yml new file mode 100644 index 0000000..30f3abc --- /dev/null +++ b/roles/peertube_runner/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: Restart PeerTube Runner + ansible.builtin.service: + name: prunner + state: restarted diff --git a/roles/peertube_runner/tasks/main.yml b/roles/peertube_runner/tasks/main.yml new file mode 100644 index 0000000..b7c602b --- /dev/null +++ b/roles/peertube_runner/tasks/main.yml @@ -0,0 +1,52 @@ +--- + +- name: Install prerequisites + ansible.builtin.package: + name: + - ffmpeg + state: present + +- name: Install peertube-runner via npm + community.general.npm: + name: "@peertube/peertube-runner" + global: true + +- name: Create PeerTube Runner user + ansible.builtin.user: + comment: PeerTube Runner + home: "{{ peertube_runner_homedir }}" + name: prunner + password: '!' + shell: /bin/bash + state: present + +- name: Create PeerTube Runner dir struct + ansible.builtin.file: + path: "{{ peertube_runner_configdir }}" + owner: prunner + group: prunner + mode: "0o750" + state: directory + +- name: Create PeerTube Runner config file + ansible.builtin.template: + src: config.toml.j2 + dest: "{{ peertube_runner_configdir }}config.toml" + owner: prunner + group: prunner + mode: "0o640" + notify: Restart PeerTube Runner + +- name: Put systemd PeerTube Runner service + ansible.builtin.template: + src: prunner.service.j2 + dest: /etc/systemd/system/prunner.service + owner: root + group: root + mode: "0o644" + +- name: Start PeerTube Runner service + ansible.builtin.systemd_service: + name: prunner + state: started + daemon_reload: true diff --git a/roles/peertube_runner/templates/config.toml.j2 b/roles/peertube_runner/templates/config.toml.j2 new file mode 100644 index 0000000..1c737d1 --- /dev/null +++ b/roles/peertube_runner/templates/config.toml.j2 @@ -0,0 +1,15 @@ +[jobs] +concurrency = 2 + +[ffmpeg] +threads = 0 +nice = 20 + +[transcription] +engine = "whisper-ctranslate2" +model = "small" + +[[registeredInstances]] +url = "https://p.nintendojo.fr" +runnerToken = "{{ peertube_runner_token }}" +runnerName = "pt-runner1" diff --git a/roles/peertube_runner/templates/prunner.service.j2 b/roles/peertube_runner/templates/prunner.service.j2 new file mode 100644 index 0000000..30e0b9d --- /dev/null +++ b/roles/peertube_runner/templates/prunner.service.j2 @@ -0,0 +1,32 @@ +[Unit] +Description=PeerTube runner daemon +After=network.target + +[Service] +Type=simple +Environment=NODE_ENV=production +User=prunner +Group=prunner +ExecStart=peertube-runner server +WorkingDirectory={{ prunner_homedir }} +SyslogIdentifier=prunner +Restart=always + +; Some security directives. +; Mount /usr, /boot, and /etc as read-only for processes invoked by this service. +ProtectSystem=full +; Sets up a new /dev mount for the process and only adds API pseudo devices +; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled +; by default because it may not work on devices like the Raspberry Pi. +PrivateDevices=false +; Ensures that the service process and all its children can never gain new +; privileges through execve(). +NoNewPrivileges=true +; This makes /home, /root, and /run/user inaccessible and empty for processes invoked +; by this unit. Make sure that you do not depend on data inside these folders. +ProtectHome=true +; Drops the sys admin capability from the daemon. +CapabilityBoundingSet=~CAP_SYS_ADMIN + +[Install] +WantedBy=multi-user.target diff --git a/roles/peertube_runner/vars/main.yml b/roles/peertube_runner/vars/main.yml new file mode 100644 index 0000000..37a60de --- /dev/null +++ b/roles/peertube_runner/vars/main.yml @@ -0,0 +1,4 @@ +--- + +peertube_runner_homedir: /srv/prunner/ +peertube_runner_configdir: "{{ peertube_runner_homedir }}.config/peertube-runner-nodejs/default/"