diff options
| author | Luke Hoersten <[email protected]> | 2026-04-25 19:54:49 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2026-04-25 19:54:49 -0500 |
| commit | 6a8cb5f10557733f1521035d57a191b12832d634 (patch) | |
| tree | 159e102eb03c7c04e7f51844fd4da136b9185fdd /pleroma | |
| parent | 5d5b976e379487e8b1eccc4fc96d5920a930ff0f (diff) | |
Build all roles from source with versioned artifacts
- Add pleroma/build role to compile from source (OTP binaries no longer published)
- Install Elixir 1.18.3 manually on Ubuntu Noble (ships 1.14, needs 1.15+)
- Standardize all build roles to produce versioned .tar.gz artifacts
- Add version defaults to all server roles (bin, dendrite, nostr/relayer)
- Switch server roles from get_url to unarchive for .tar.gz installs
- Add build_srv_dir variable to all build roles
- Deploy pleroma styles.json so custom FE themes appear in picker
- Fix pleroma OTP install: version check, root ownership, auto-cleanup old releases
- Fix pleroma config: log level :warn -> :warning, remove availableStyles
- Add wait_for grafana readiness before dashboard install
- Set minecraft ops changed_when: false
Diffstat (limited to 'pleroma')
| -rw-r--r-- | pleroma/build/defaults/main.yaml | 9 | ||||
| -rw-r--r-- | pleroma/build/tasks/main.yaml | 88 | ||||
| -rw-r--r-- | pleroma/otp/defaults/main.yaml | 7 | ||||
| -rw-r--r-- | pleroma/otp/tasks/install.yaml | 19 | ||||
| -rw-r--r-- | pleroma/otp/tasks/instance.yaml | 24 | ||||
| -rw-r--r-- | pleroma/otp/tasks/main.yaml | 5 | ||||
| -rw-r--r-- | pleroma/otp/tasks/soapbox.yaml | 36 | ||||
| -rw-r--r-- | pleroma/otp/templates/config.exs.j2 | 5 |
8 files changed, 133 insertions, 60 deletions
diff --git a/pleroma/build/defaults/main.yaml b/pleroma/build/defaults/main.yaml new file mode 100644 index 0000000..2d16436 --- /dev/null +++ b/pleroma/build/defaults/main.yaml @@ -0,0 +1,9 @@ +--- + +pleroma_version: "2.10.0" +pleroma_elixir_version: "1.18.3" +pleroma_erlang_otp_version: "25" +# https://git.pleroma.social/pleroma/pleroma/releases +pleroma_tar: "https://git.pleroma.social/pleroma/pleroma/archive/v{{pleroma_version}}.tar.gz" +pleroma_build_dir: "/tmp/pleroma" +pleroma_srv_dir: "{{build_srv_dir}}" diff --git a/pleroma/build/tasks/main.yaml b/pleroma/build/tasks/main.yaml new file mode 100644 index 0000000..ae3e35d --- /dev/null +++ b/pleroma/build/tasks/main.yaml @@ -0,0 +1,88 @@ +--- + +- name: install elixir build dependencies + become: yes + apt: + name: + - erlang + - erlang-dev + - build-essential + - cmake + - libmagic-dev + - libvips-dev + +# TODO: Ubuntu Noble (24.04) only ships Elixir 1.14, which is too old for Pleroma. +# When the next Ubuntu LTS (26.04) is available, check if elixir >=1.15 is in the +# official repos and replace the two tasks below with a simple apt install. +- name: download elixir release + become: yes + get_url: + url: "https://github.com/elixir-lang/elixir/releases/download/v{{pleroma_elixir_version}}/elixir-otp-{{pleroma_erlang_otp_version}}.zip" + dest: "/tmp/elixir-{{pleroma_elixir_version}}.zip" + force: false + +- name: install elixir + become: yes + unarchive: + remote_src: yes + src: "/tmp/elixir-{{pleroma_elixir_version}}.zip" + dest: "/usr/local" + creates: "/usr/local/bin/elixir" + +- name: install hex package manager + command: mix local.hex --force + changed_when: false + +- name: install rebar + command: mix local.rebar --force + changed_when: false + +- name: unarchive pleroma source + unarchive: + remote_src: yes + src: "{{pleroma_tar}}" + dest: "/tmp/" + creates: "{{pleroma_build_dir}}" + +- name: check if pleroma release exists + stat: + path: "{{pleroma_srv_dir}}/pleroma-{{pleroma_version}}.tar.gz" + register: build_file + +- name: fetch mix dependencies + command: mix deps.get --only prod + args: + chdir: "{{pleroma_build_dir}}" + environment: + MIX_ENV: prod + when: not build_file.stat.exists + +- name: build pleroma release + command: mix release + args: + chdir: "{{pleroma_build_dir}}" + environment: + MIX_ENV: prod + when: not build_file.stat.exists + +- name: create build server dir + become: yes + file: + path: "{{pleroma_srv_dir}}" + mode: "0755" + state: "directory" + +- name: copy release to staging directory + copy: + remote_src: yes + src: "{{pleroma_build_dir}}/_build/prod/rel/pleroma/" + dest: "/tmp/release/" + when: not build_file.stat.exists + +- name: create gz archive of pleroma release + become: yes + archive: + path: "/tmp/release" + dest: "{{pleroma_srv_dir}}/pleroma-{{pleroma_version}}.tar.gz" + format: "gz" + when: not build_file.stat.exists diff --git a/pleroma/otp/defaults/main.yaml b/pleroma/otp/defaults/main.yaml index 86dac13..827661e 100644 --- a/pleroma/otp/defaults/main.yaml +++ b/pleroma/otp/defaults/main.yaml @@ -23,9 +23,6 @@ pleroma_db: "pleroma_{{pleroma_instance}}" pleroma_db_user: "pleroma_{{pleroma_instance}}" pleroma_data_dir: "/var/lib/pleroma/instance_data" -pleroma_download_url: "https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job={{pleroma_arch}}" +pleroma_version: "2.10.0" +pleroma_download_url: "http://{{build_server_host}}:{{build_server_port}}/pleroma-{{pleroma_version}}.tar.gz" -pleroma_soapbox: false -# https://gitlab.com/soapbox-pub/soapbox/-/releases -pleroma_soapbox_version: "v3.2.0" -pleroma_soapbox_download_url: "https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/{{pleroma_soapbox_version}}/download?job=build-production" diff --git a/pleroma/otp/tasks/install.yaml b/pleroma/otp/tasks/install.yaml index 2759729..65ab2c1 100644 --- a/pleroma/otp/tasks/install.yaml +++ b/pleroma/otp/tasks/install.yaml @@ -1,25 +1,24 @@ --- +- name: check if pleroma version already installed + stat: + path: "/opt/pleroma/releases/{{pleroma_version}}" + register: installed_version + - name: download and unarchive pleroma release become: yes unarchive: src: "{{pleroma_download_url}}" dest: "/tmp/" remote_src: yes - register: pleroma_download - ignore_errors: true - -- name: warn if pleroma download failed - debug: - msg: "WARNING: Could not download Pleroma release from {{pleroma_download_url}} — skipping install, existing binary unchanged." - when: pleroma_download is failed + when: not installed_version.stat.exists - name: delete old pleroma release become: yes file: path: "/opt/pleroma/" state: "absent" - when: pleroma_download is succeeded + when: not installed_version.stat.exists - name: install pleroma release become: yes @@ -27,7 +26,5 @@ remote_src: true src: "/tmp/release/" dest: "/opt/pleroma/" - owner: "pleroma" - group: "pleroma" - when: pleroma_download is succeeded + when: not installed_version.stat.exists notify: restart all pleroma instances diff --git a/pleroma/otp/tasks/instance.yaml b/pleroma/otp/tasks/instance.yaml index d8983e4..3a48991 100644 --- a/pleroma/otp/tasks/instance.yaml +++ b/pleroma/otp/tasks/instance.yaml @@ -22,6 +22,8 @@ - "{{pleroma_data_dir}}/{{pleroma_instance}}" - "{{pleroma_data_dir}}/{{pleroma_instance}}/uploads" - "{{pleroma_data_dir}}/{{pleroma_instance}}/static" + - "{{pleroma_data_dir}}/{{pleroma_instance}}/static/static" + - "{{pleroma_data_dir}}/{{pleroma_instance}}/static/static/themes" - name: install pleroma db schema file become: yes @@ -40,8 +42,25 @@ changed_when: false no_log: true -- include_tasks: soapbox.yaml - when: pleroma_soapbox +- name: install pleroma fe theme + become: yes + copy: + src: "files/{{pleroma_link_host}}/{{pleroma_fe_theme}}.json" + dest: "{{pleroma_data_dir}}/{{pleroma_instance}}/static/static/themes/{{pleroma_fe_theme}}.json" + owner: "pleroma" + group: "pleroma" + mode: "0644" + when: pleroma_fe_theme is defined + +- name: install pleroma styles index + become: yes + copy: + src: "files/{{pleroma_link_host}}/styles.json" + dest: "{{pleroma_data_dir}}/{{pleroma_instance}}/static/styles.json" + owner: "pleroma" + group: "pleroma" + mode: "0644" + when: pleroma_fe_theme is defined - name: ensure pleroma instance is enabled and started become: yes @@ -49,7 +68,6 @@ - name: migrate db become: yes - become_user: "pleroma" command: "/opt/pleroma/bin/pleroma_ctl migrate" args: chdir: "/opt/pleroma/" diff --git a/pleroma/otp/tasks/main.yaml b/pleroma/otp/tasks/main.yaml index 1052644..6f8427e 100644 --- a/pleroma/otp/tasks/main.yaml +++ b/pleroma/otp/tasks/main.yaml @@ -30,11 +30,6 @@ dest: "/lib/systemd/system/[email protected]" notify: restart pleroma instance -- name: check if pleroma release exists - stat: path="/tmp/release/" - register: release - - include_tasks: install.yaml - when: not release.stat.exists - include_tasks: instance.yaml diff --git a/pleroma/otp/tasks/soapbox.yaml b/pleroma/otp/tasks/soapbox.yaml deleted file mode 100644 index d004aec..0000000 --- a/pleroma/otp/tasks/soapbox.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- - -- name: download and unarchive soapbox frontend - unarchive: - src: "{{pleroma_soapbox_download_url}}" - dest: "/tmp/" - creates: "/tmp/static" - remote_src: yes - -- name: delete old soapbox frontend - become: yes - file: - path: "{{pleroma_data_dir}}/{{pleroma_instance}}/static/" - state: "absent" - changed_when: false - -- name: install soapbox frontend - become: yes - copy: - remote_src: true - src: "/tmp/static/" - dest: "{{pleroma_data_dir}}/{{pleroma_instance}}/static/" - owner: "pleroma" - group: "pleroma" - mode: "0755" - changed_when: false - -- name: install soapbox config - become: yes - copy: - src: "files/{{pleroma_link_host}}/soapbox.json" - dest: "{{pleroma_data_dir}}/{{pleroma_instance}}/static/instance/soapbox.json" - owner: "pleroma" - group: "pleroma" - mode: "0755" - changed_when: false diff --git a/pleroma/otp/templates/config.exs.j2 b/pleroma/otp/templates/config.exs.j2 index 0db1828..eb1be5b 100644 --- a/pleroma/otp/templates/config.exs.j2 +++ b/pleroma/otp/templates/config.exs.j2 @@ -55,6 +55,11 @@ config :pleroma, Pleroma.PromEx, ], datasource: "Prometheus" +{% if pleroma_fe_theme is defined %} +config :pleroma, :frontend_configurations, + pleroma_fe: %{theme: "{{pleroma_fe_theme}}"} +{% endif %} + config :logger, backends: [{ExSyslogger, :ex_syslogger}] |
