From 65facbf2baecabd925b7e56edd2f3c7e97d82307 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:23:20 -0300 Subject: [PATCH 01/27] Adapt elixir playbook to admin_user var usage --- infra/ansible/playbooks/elixir.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index b2d240d196..ff3ef0e989 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -1,10 +1,8 @@ - name: Elixir Setup - hosts: all - become: true + hosts: "{{ host }}" + vars: - user: "{{ user }}" - erlang_version: 26.0 - elixir_version: 1.16.2-otp-26 + ansible_ssh_user: "{{ admin_user }}" tasks: # Install required packages From 4f7a523677e0c6e3efdc84102a444a2eff23c38f Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:23:53 -0300 Subject: [PATCH 02/27] Use sudo and verbose builtin --- infra/ansible/playbooks/elixir.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index ff3ef0e989..dd4993fac2 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -7,7 +7,8 @@ tasks: # Install required packages - name: Update apt and install required system packages - apt: + become: true + ansible.builtin.apt: pkg: - build-essential - autoconf From 4d022eee34f016ede1bb55f21933cc7c57b8c9f8 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:24:16 -0300 Subject: [PATCH 03/27] Remove ubuntu packages --- infra/ansible/playbooks/elixir.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index dd4993fac2..b046a229c9 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -14,8 +14,6 @@ - autoconf - m4 - libncurses5-dev - - libwxgtk3.0-gtk3-dev - - libwxgtk-webview3.0-gtk3-dev - libgl1-mesa-dev - libglu1-mesa-dev - libpng-dev From 0f12ea5a2064c0c220392662c200beddecc02e37 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:24:43 -0300 Subject: [PATCH 04/27] Remove java --- infra/ansible/playbooks/elixir.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index b046a229c9..a3686f9038 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -23,7 +23,6 @@ - fop - libxml2-utils - libncurses-dev - - openjdk-11-jdk state: latest update_cache: true From 7f5e43bebefc401c5331319d61c893db98a42b26 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:25:35 -0300 Subject: [PATCH 05/27] Install libssl1.1 (erlang dependency) --- infra/ansible/playbooks/elixir.yaml | 37 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index a3686f9038..4aa6e887fb 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -26,25 +26,28 @@ state: latest update_cache: true - - name: Clone asdf repository into ~/.asdf - ansible.builtin.git: - name: https://github.com/asdf-vm/asdf.git - dest: ~/.asdf - single_branch: yes - version: v0.14.0 - become_user: "{{ user }}" + ########## Install libssl1.1 ########## + - name: Check if libssl1.1 is installed + become: true + ansible.builtin.shell: + cmd: dpkg -l | grep libssl1.1 + register: libssl_check + changed_when: false + failed_when: libssl_check.rc not in [0, 1] - - name: Insert lines to ~/.bashrc to source asdf - ansible.builtin.blockinfile: - path: "/home/{{ user }}/.bashrc" - block: | - . "$HOME/.asdf/asdf.sh" - . "$HOME/.asdf/completions/asdf.bash" - become_user: "{{ user }}" + - name: Download libssl1.1 + become: true + register: download_libssl + ansible.builtin.get_url: + url: http://ftp.de.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb + dest: /root/ + when: libssl_check.rc != 0 -# - name: Add asdf to the shell -# shell: export ASDF_DIR="$HOME/.asdf" && . ~/.asdf/asdf.sh -# become_user: "{{ user }}" + - name: Install libssl1.1 + become: true + ansible.builtin.apt: + deb: "{{ download_libssl.dest }}" + when: libssl_check.rc != 0 - name: Add Erlang plugin to asdf shell: asdf plugin add erlang From 17c13c7d3e2fa485d77f67387755034fa2e79db3 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:26:00 -0300 Subject: [PATCH 06/27] Install Erlang globally (without asdf) --- infra/ansible/playbooks/elixir.yaml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index 4aa6e887fb..551a9724cc 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -49,14 +49,28 @@ deb: "{{ download_libssl.dest }}" when: libssl_check.rc != 0 - - name: Add Erlang plugin to asdf - shell: asdf plugin add erlang + ########## Install Erlang 26.2.1-1 ########## + - name: Check if Erlang 26.2.1-1 is installed + become: true + ansible.builtin.shell: + cmd: dpkg -l | grep esl-erlang + register: erlang_check + changed_when: false + failed_when: erlang_check.rc not in [0, 1] - - name: Add Erlang version to asdf - shell: asdf install erlang {{ erlang_version }} + - name: Download Erlang 26.2.1-1 + become: true + register: download_erlang + ansible.builtin.get_url: + url: https://binaries2.erlang-solutions.com/debian/pool/contrib/e/esl-erlang/esl-erlang_26.2.1-1~debian~bullseye_amd64.deb + dest: /root/ + when: erlang_check.rc != 0 - - name: Set Erlang version as global - shell: asdf global erlang {{ erlang_version }} + - name: Install Erlang 26.2.1-1 + become: true + ansible.builtin.apt: + deb: "{{ download_erlang.dest }}" + when: erlang_check.rc != 0 - name: Add Elixir plugin to asdf shell: asdf plugin add elixir From 10ddfcf2a97b514a6baf46c344f02ae17c9465ec Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:26:30 -0300 Subject: [PATCH 07/27] Install Elixir globally (without asdf) --- infra/ansible/playbooks/elixir.yaml | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/infra/ansible/playbooks/elixir.yaml b/infra/ansible/playbooks/elixir.yaml index 551a9724cc..2c75439f7b 100644 --- a/infra/ansible/playbooks/elixir.yaml +++ b/infra/ansible/playbooks/elixir.yaml @@ -72,11 +72,27 @@ deb: "{{ download_erlang.dest }}" when: erlang_check.rc != 0 - - name: Add Elixir plugin to asdf - shell: asdf plugin add elixir + ########## Install Elixir v1.16.2-otp-26 ########## + - name: Check if Elixir v1.16.2 is installed + become: true + ansible.builtin.shell: + cmd: elixir --version | grep "Elixir 1.16.2" + register: elixir_check + changed_when: false + failed_when: elixir_check.rc not in [0, 1] - - name: Add Elixir version to asdf - shell: asdf install elixir {{ elixir_version }} + - name: Download Elixir v1.16.2-otp-26 + become: true + register: download_elixir + ansible.builtin.get_url: + url: https://github.com/elixir-lang/elixir/releases/download/v1.16.2/elixir-otp-26.zip + dest: /root/ + when: elixir_check.rc != 0 - - name: Set Elixir version as global - shell: asdf global elixir {{ elixir_version }} + - name: Install Elixir v1.16.2-otp-26 + become: true + ansible.builtin.unarchive: + remote_src: true + src: "{{ download_elixir.dest }}" + dest: /usr/local/ + when: elixir_check.rc != 0 From 31751924a3da4fb9d4bca71a18dcd933496ec9e5 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:26:44 -0300 Subject: [PATCH 08/27] Add name to setup.yaml playbook --- infra/ansible/playbooks/setup.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/infra/ansible/playbooks/setup.yaml b/infra/ansible/playbooks/setup.yaml index f5e79ee003..f924610aeb 100644 --- a/infra/ansible/playbooks/setup.yaml +++ b/infra/ansible/playbooks/setup.yaml @@ -1,4 +1,5 @@ -- hosts: "{{ host }}" +- name: Server setup + hosts: "{{ host }}" tasks: # Install required packages From a0e5cd79f70e2cfae4a106d6ab7946bb482553bd Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:27:04 -0300 Subject: [PATCH 09/27] Add Nodejs playbook --- infra/ansible/playbooks/nodejs.yaml | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 infra/ansible/playbooks/nodejs.yaml diff --git a/infra/ansible/playbooks/nodejs.yaml b/infra/ansible/playbooks/nodejs.yaml new file mode 100644 index 0000000000..cd33ac963f --- /dev/null +++ b/infra/ansible/playbooks/nodejs.yaml @@ -0,0 +1,37 @@ +- name: Nodejs Setup + hosts: "{{ host }}" + + vars: + ansible_ssh_user: "{{ admin_user }}" + node_version: "22.11.0" + node_archive: "node-v{{ node_version }}-linux-x64.tar.xz" + node_url: "https://nodejs.org/dist/v{{ node_version }}/{{ node_archive }}" + node_install_dir: "/usr/local/" + node_bin_path: "/usr/local/bin/node" + + + tasks: + + - name: Check if Node.js is already installed + ansible.builtin.shell: + cmd: "{{ node_bin_path }} --version" + register: node_check + changed_when: false + failed_when: node_check.rc not in [0, 1] + + - name: Download Node.js v{{ node_version }} + become: true + register: download_nodejs + ansible.builtin.get_url: + url: "{{ node_url }}" + dest: "/root/{{ node_archive }}" + mode: '0644' + when: node_check.rc != 0 + + - name: Install Node.js v{{ node_version }} + become: true + ansible.builtin.shell: + cmd: "tar --strip-components=1 --directory={{ node_install_dir }} -xf {{ download_nodejs.dest }}" + args: + creates: "{{ node_bin_path }}" + when: node_check.rc != 0 From c7048b0734e3ab947730d82d0ca8f8dc5d4ec531 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:27:28 -0300 Subject: [PATCH 10/27] Add PostgreSQL playbook --- infra/ansible/playbooks/postgres.yaml | 47 +++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 infra/ansible/playbooks/postgres.yaml diff --git a/infra/ansible/playbooks/postgres.yaml b/infra/ansible/playbooks/postgres.yaml new file mode 100644 index 0000000000..34b3955919 --- /dev/null +++ b/infra/ansible/playbooks/postgres.yaml @@ -0,0 +1,47 @@ +- name: Install PostgreSQL 16 + hosts: "{{ host }}" + + vars: + ansible_ssh_user: "{{ admin_user }}" + + tasks: + + - name: Update apt and install required system packages + become: true + ansible.builtin.apt: + pkg: + - curl + - ca-certificates + state: latest + update_cache: true + + - name: Ensure directory exists for postgres ca-certificates + become: true + ansible.builtin.file: + path: /usr/share/postgresql-common/pgdg + state: directory + mode: '0755' + + - name: Download postgres ca-certificates if not already present + become: true + ansible.builtin.get_url: + url: https://www.postgresql.org/media/keys/ACCC4CF8.asc + dest: /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc + mode: '0644' + force: no + + - name: Add postgres apt repository + become: true + ansible.builtin.lineinfile: + path: /etc/apt/sources.list.d/pgdg.list + line: "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt {{ ansible_distribution_release }}-pgdg main" + state: present + create: true + + - name: Install PostgreSQL 16 + become: true + ansible.builtin.apt: + pkg: + - postgresql-16 + state: latest + update_cache: true From 7e3b29c76077bebe92ded031be2f77bfa1b00fcc Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:28:56 -0300 Subject: [PATCH 11/27] Migrate to another way of importing playbooks --- infra/ansible/playbooks/explorer.yaml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 02d3991587..445e8827f6 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -1,10 +1,24 @@ -- import_playbook: setup.yaml -- import_playbook: webserver.yaml -#- import_playbook: elixir.yaml # Not working -#- import_playbook: docker.yaml +- name: Run setup playbook + ansible.builtin.import_playbook: setup.yaml + vars: + host: explorer + +- name: Run elixir playbook + ansible.builtin.import_playbook: elixir.yaml + vars: + host: explorer + +- name: Run nodejs playbook + ansible.builtin.import_playbook: nodejs.yaml + vars: + host: explorer + +- name: Run postgres playbook + ansible.builtin.import_playbook: postgres.yaml + vars: + host: explorer -- hosts: aligned-holesky-explorer - become: true +- hosts: explorer vars: user: "{{ user }}" From 8144463e688c14e24a42b4d388e011f89f6b9f8d Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 19 Nov 2024 19:29:33 -0300 Subject: [PATCH 12/27] Uncomment explorer in inventory And add admin_user variable --- infra/ansible/stage_inventory.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/infra/ansible/stage_inventory.yaml b/infra/ansible/stage_inventory.yaml index 2a4cc8d38c..55a2ff33c1 100644 --- a/infra/ansible/stage_inventory.yaml +++ b/infra/ansible/stage_inventory.yaml @@ -12,12 +12,13 @@ batcher: admin_user: admin ansible_user: app ansible_python_interpreter: /usr/bin/python3 -# explorer: -# hosts: -# aligned-holesky-explorer: -# ansible_host: aligned-holesky-explorer -# ansible_user: admin -# ansible_python_interpreter: /usr/bin/python3 +explorer: + hosts: + aligned-holesky-explorer: + ansible_host: aligned-holesky-explorer + admin_user: admin + ansible_user: app + ansible_python_interpreter: /usr/bin/python3 operator: hosts: operator-1: From 9686e283a54b667d897b11eb9d9e5af3a33276f9 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 26 Nov 2024 15:39:54 -0300 Subject: [PATCH 13/27] Fix gitignore --- explorer/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explorer/.gitignore b/explorer/.gitignore index 4b3fc91a10..f7c442ef2c 100644 --- a/explorer/.gitignore +++ b/explorer/.gitignore @@ -33,7 +33,7 @@ explorer-*.tar # In case you use Node.js/npm, you want to ignore these. npm-debug.log -/assets/node_modules/ +assets/node_modules/ # Environment Variables /.env From 33c70590c9c351fb1ca8dd0385ca5c4d93819bfc Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 26 Nov 2024 15:40:04 -0300 Subject: [PATCH 14/27] Ran mix phx.gen.release --- explorer/lib/explorer/release.ex | 28 +++++++++++++++++++++++++++ explorer/rel/overlays/bin/migrate | 5 +++++ explorer/rel/overlays/bin/migrate.bat | 1 + explorer/rel/overlays/bin/server | 5 +++++ explorer/rel/overlays/bin/server.bat | 2 ++ 5 files changed, 41 insertions(+) create mode 100644 explorer/lib/explorer/release.ex create mode 100755 explorer/rel/overlays/bin/migrate create mode 100755 explorer/rel/overlays/bin/migrate.bat create mode 100755 explorer/rel/overlays/bin/server create mode 100755 explorer/rel/overlays/bin/server.bat diff --git a/explorer/lib/explorer/release.ex b/explorer/lib/explorer/release.ex new file mode 100644 index 0000000000..e94507410b --- /dev/null +++ b/explorer/lib/explorer/release.ex @@ -0,0 +1,28 @@ +defmodule Explorer.Release do + @moduledoc """ + Used for executing DB release tasks when run in production without Mix + installed. + """ + @app :explorer + + def migrate do + load_app() + + for repo <- repos() do + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) + end + end + + def rollback(repo, version) do + load_app() + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) + end + + defp repos do + Application.fetch_env!(@app, :ecto_repos) + end + + defp load_app do + Application.load(@app) + end +end diff --git a/explorer/rel/overlays/bin/migrate b/explorer/rel/overlays/bin/migrate new file mode 100755 index 0000000000..5ef1ffa015 --- /dev/null +++ b/explorer/rel/overlays/bin/migrate @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd -P -- "$(dirname -- "$0")" +exec ./explorer eval Explorer.Release.migrate diff --git a/explorer/rel/overlays/bin/migrate.bat b/explorer/rel/overlays/bin/migrate.bat new file mode 100755 index 0000000000..01fc226284 --- /dev/null +++ b/explorer/rel/overlays/bin/migrate.bat @@ -0,0 +1 @@ +call "%~dp0\explorer" eval Explorer.Release.migrate diff --git a/explorer/rel/overlays/bin/server b/explorer/rel/overlays/bin/server new file mode 100755 index 0000000000..195d200183 --- /dev/null +++ b/explorer/rel/overlays/bin/server @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +cd -P -- "$(dirname -- "$0")" +PHX_SERVER=true exec ./explorer start diff --git a/explorer/rel/overlays/bin/server.bat b/explorer/rel/overlays/bin/server.bat new file mode 100755 index 0000000000..9bde81e193 --- /dev/null +++ b/explorer/rel/overlays/bin/server.bat @@ -0,0 +1,2 @@ +set PHX_SERVER=true +call "%~dp0\explorer" start From d01e9d102597005e2707b63735b635f84bd919f4 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 26 Nov 2024 15:40:54 -0300 Subject: [PATCH 15/27] Adapt to new way of sending user --- infra/ansible/playbooks/explorer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 445e8827f6..08592355b9 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -20,7 +20,7 @@ - hosts: explorer vars: - user: "{{ user }}" + service: "explorer" tasks: # Install required packages From efb20e5c6e9c62f20fbeff1a3f442aa8763061ba Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Tue, 26 Nov 2024 15:41:11 -0300 Subject: [PATCH 16/27] Clone aligned repository --- infra/ansible/playbooks/explorer.yaml | 34 ++++----------------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 08592355b9..ea68bf6cf0 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -23,35 +23,9 @@ service: "explorer" tasks: - # Install required packages - - name: Update apt and install required system packages - apt: - pkg: - - unzip - state: latest - update_cache: true - # Create directories for each service - - name: Create directories for each service if do not exist - ansible.builtin.file: - path: /home/{{ user }}/repos/{{ item }} - state: directory - mode: '0755' - become_user: "{{ user }}" - loop: - - explorer - - # Clone Aligned repository for each service - - name: Clone Aligned repository + - name: Clone the aligned_layer repository ansible.builtin.git: - repo: https://github.com/yetanotherco/aligned_layer.git - dest: /home/{{ user }}/repos/{{ item }}/aligned_layer - version: v0.10.2 - become_user: "{{ user }}" - loop: - - explorer - register: repo_clone - failed_when: - - repo_clone.failed - - not 'Local modifications exist in the destination' in repo_clone.msg - + repo: https://github.com/yetanotherco/aligned_layer + dest: "{{ ansible_env.HOME }}/aligned_layer" + update: yes From a9fac2c441297ac18896f6cfec9b1a208bf7fa2e Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz Date: Fri, 29 Nov 2024 15:04:41 -0300 Subject: [PATCH 17/27] Add pnpm and explorer build --- infra/ansible/playbooks/explorer.yaml | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index ea68bf6cf0..51214dac53 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -22,10 +22,35 @@ vars: service: "explorer" - tasks: + pre_tasks: + + - name: Install pnpm + ansible.builtin.shell: + cmd: npm install -g pnpm - name: Clone the aligned_layer repository + register: clone_repo ansible.builtin.git: repo: https://github.com/yetanotherco/aligned_layer dest: "{{ ansible_env.HOME }}/aligned_layer" update: yes + + + tasks: + + - name: Build the explorer release + args: + chdir: "{{ clone_repo.git_dir_now }}" + environment: + MIX_ENV: prod + ansible.builtin.shell: + cmd: | + set -ex + mix local.hex --force + mix local.rebar --force + mix deps.get --only $MIX_ENV + mix compile + pnpm --prefix=assets/ install + mix phx.digest + mix assets.deploy + mix release From beca81bf43fb6d5105b09baec46561d3d302e96a Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 2 Dec 2024 18:13:09 -0300 Subject: [PATCH 18/27] Added Caddyfile creation for explorer, added cloudflare API token. --- infra/ansible/playbooks/explorer.yaml | 25 +++++++++++++++++-- .../ini/config-register-explorer.ini.example | 4 +++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 infra/ansible/playbooks/ini/config-register-explorer.ini.example diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 51214dac53..bd637458ed 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -18,12 +18,16 @@ vars: host: explorer +- name: Run caddy playbook + ansible.builtin.import_playbook: caddy.yaml + vars: + host: explorer + - hosts: explorer vars: service: "explorer" pre_tasks: - - name: Install pnpm ansible.builtin.shell: cmd: npm install -g pnpm @@ -35,8 +39,25 @@ dest: "{{ ansible_env.HOME }}/aligned_layer" update: yes - tasks: + - name: Add reverse proxy configuration to Caddyfile + become: true + blockinfile: + path: /etc/caddy/Caddyfile + block: | + {{ caddy_explorer_url }} { + tls { + dns cloudflare {{ caddy_cloudflare_token }} + } + reverse_proxy localhost:{{ caddy_explorer_port }} + } + create: yes + prepend_newline: true + vars: + ansible_ssh_user: "{{ admin_user }}" + caddy_explorer_url: "{{ lookup('ini', 'caddy_explorer_url', file=ini_file) }}" + caddy_explorer_port: 4000 + caddy_cloudflare_token: "{{ lookup('ini', 'caddy_cloudflare_token', file=ini_file) }}" - name: Build the explorer release args: diff --git a/infra/ansible/playbooks/ini/config-register-explorer.ini.example b/infra/ansible/playbooks/ini/config-register-explorer.ini.example new file mode 100644 index 0000000000..b0e82a148d --- /dev/null +++ b/infra/ansible/playbooks/ini/config-register-explorer.ini.example @@ -0,0 +1,4 @@ +[global] +caddy_explorer_url= +caddy_explorer_port= +caddy_cloudflare_token= From 98a39b7d88d8fb11a7f3ce9272b2c47619baeabd Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 2 Dec 2024 17:10:51 -0300 Subject: [PATCH 19/27] Added caddy build with Cloudflare DNS module. --- infra/ansible/playbooks/caddy.yaml | 92 ++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 infra/ansible/playbooks/caddy.yaml diff --git a/infra/ansible/playbooks/caddy.yaml b/infra/ansible/playbooks/caddy.yaml new file mode 100644 index 0000000000..d47bc99d34 --- /dev/null +++ b/infra/ansible/playbooks/caddy.yaml @@ -0,0 +1,92 @@ +- name: Run Go playbook + ansible.builtin.import_playbook: go.yaml + vars: + host: "{{ host }}" + +- name: Caddy Setup + hosts: "{{ host }}" + + tasks: + - name: Allow http/https traffic on UFW + become: true + ufw: + rule: allow + state: enabled + port: '{{ item }}' + loop: + - http + - https + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Install dependencies for Caddy + become: true + apt: + name: + - debian-keyring + - debian-archive-keyring + - apt-transport-https + - curl + state: present + update_cache: yes + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Download and install Caddy GPG key + shell: + cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg + creates: /usr/share/keyrings/caddy-stable-archive-keyring.gpg + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Add Caddy repository + shell: + cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list + creates: /etc/apt/sources.list.d/caddy-stable.list + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Download and install XCaddy GPG key + shell: + cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg + creates: /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Add XCaddy repository + shell: + cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list + creates: /etc/apt/sources.list.d/caddy-xcaddy.list + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Install Caddy and XCaddy + become: true + apt: + update_cache: yes + name: + - caddy + - xcaddy + state: present + vars: + ansible_ssh_user: "{{ admin_user }}" + + - name: Build Cloudflare DNS module for caddy + shell: + cmd: | + xcaddy build --with github.com/caddy-dns/cloudflare + sudo mv /home/{{ ansible_ssh_user }}/caddy /usr/bin/caddy + chdir: /home/{{ ansible_ssh_user }}/ + vars: + ansible_ssh_user: "{{ admin_user }}" + environment: + PATH: "{{ ansible_env.PATH }}:/usr/local/go/bin" + + - name: Enable caddy + become: true + systemd_service: + name: caddy + enabled: true + state: started + vars: + ansible_ssh_user: "{{ admin_user }}" From 90115d605fd046e793e3a415b5fa9150e79ef8e8 Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Tue, 3 Dec 2024 17:07:13 -0300 Subject: [PATCH 20/27] Added small fixes to check if nodejs is installed. --- infra/ansible/playbooks/explorer.yaml | 3 +++ infra/ansible/playbooks/nodejs.yaml | 4 +--- infra/ansible/stage_inventory.yaml | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index bd637458ed..6bd3cd3631 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -29,8 +29,11 @@ pre_tasks: - name: Install pnpm + become: true ansible.builtin.shell: cmd: npm install -g pnpm + vars: + ansible_ssh_user: "{{ admin_user }}" - name: Clone the aligned_layer repository register: clone_repo diff --git a/infra/ansible/playbooks/nodejs.yaml b/infra/ansible/playbooks/nodejs.yaml index cd33ac963f..352d65ac7f 100644 --- a/infra/ansible/playbooks/nodejs.yaml +++ b/infra/ansible/playbooks/nodejs.yaml @@ -9,12 +9,10 @@ node_install_dir: "/usr/local/" node_bin_path: "/usr/local/bin/node" - tasks: - - name: Check if Node.js is already installed ansible.builtin.shell: - cmd: "{{ node_bin_path }} --version" + cmd: "which {{ node_bin_path }}" register: node_check changed_when: false failed_when: node_check.rc not in [0, 1] diff --git a/infra/ansible/stage_inventory.yaml b/infra/ansible/stage_inventory.yaml index 55a2ff33c1..74f0268499 100644 --- a/infra/ansible/stage_inventory.yaml +++ b/infra/ansible/stage_inventory.yaml @@ -15,9 +15,9 @@ batcher: explorer: hosts: aligned-holesky-explorer: - ansible_host: aligned-holesky-explorer + ansible_host: aligned-holesky-stage-2-explorer admin_user: admin - ansible_user: app + ansible_user: dev ansible_python_interpreter: /usr/bin/python3 operator: hosts: From b65d4258010ab890e32704c998367cc0b13574d5 Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 9 Dec 2024 19:05:28 -0300 Subject: [PATCH 21/27] Remoded Caddy. --- infra/ansible/playbooks/caddy.yaml | 92 --------------------------- infra/ansible/playbooks/explorer.yaml | 24 ------- 2 files changed, 116 deletions(-) delete mode 100644 infra/ansible/playbooks/caddy.yaml diff --git a/infra/ansible/playbooks/caddy.yaml b/infra/ansible/playbooks/caddy.yaml deleted file mode 100644 index d47bc99d34..0000000000 --- a/infra/ansible/playbooks/caddy.yaml +++ /dev/null @@ -1,92 +0,0 @@ -- name: Run Go playbook - ansible.builtin.import_playbook: go.yaml - vars: - host: "{{ host }}" - -- name: Caddy Setup - hosts: "{{ host }}" - - tasks: - - name: Allow http/https traffic on UFW - become: true - ufw: - rule: allow - state: enabled - port: '{{ item }}' - loop: - - http - - https - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Install dependencies for Caddy - become: true - apt: - name: - - debian-keyring - - debian-archive-keyring - - apt-transport-https - - curl - state: present - update_cache: yes - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Download and install Caddy GPG key - shell: - cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg - creates: /usr/share/keyrings/caddy-stable-archive-keyring.gpg - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Add Caddy repository - shell: - cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list - creates: /etc/apt/sources.list.d/caddy-stable.list - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Download and install XCaddy GPG key - shell: - cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg - creates: /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Add XCaddy repository - shell: - cmd: curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list - creates: /etc/apt/sources.list.d/caddy-xcaddy.list - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Install Caddy and XCaddy - become: true - apt: - update_cache: yes - name: - - caddy - - xcaddy - state: present - vars: - ansible_ssh_user: "{{ admin_user }}" - - - name: Build Cloudflare DNS module for caddy - shell: - cmd: | - xcaddy build --with github.com/caddy-dns/cloudflare - sudo mv /home/{{ ansible_ssh_user }}/caddy /usr/bin/caddy - chdir: /home/{{ ansible_ssh_user }}/ - vars: - ansible_ssh_user: "{{ admin_user }}" - environment: - PATH: "{{ ansible_env.PATH }}:/usr/local/go/bin" - - - name: Enable caddy - become: true - systemd_service: - name: caddy - enabled: true - state: started - vars: - ansible_ssh_user: "{{ admin_user }}" diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 6bd3cd3631..c7f2301158 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -18,11 +18,6 @@ vars: host: explorer -- name: Run caddy playbook - ansible.builtin.import_playbook: caddy.yaml - vars: - host: explorer - - hosts: explorer vars: service: "explorer" @@ -43,25 +38,6 @@ update: yes tasks: - - name: Add reverse proxy configuration to Caddyfile - become: true - blockinfile: - path: /etc/caddy/Caddyfile - block: | - {{ caddy_explorer_url }} { - tls { - dns cloudflare {{ caddy_cloudflare_token }} - } - reverse_proxy localhost:{{ caddy_explorer_port }} - } - create: yes - prepend_newline: true - vars: - ansible_ssh_user: "{{ admin_user }}" - caddy_explorer_url: "{{ lookup('ini', 'caddy_explorer_url', file=ini_file) }}" - caddy_explorer_port: 4000 - caddy_cloudflare_token: "{{ lookup('ini', 'caddy_cloudflare_token', file=ini_file) }}" - - name: Build the explorer release args: chdir: "{{ clone_repo.git_dir_now }}" From 44c81a1fb5cae5e0e62e27791f79c2f6501cc992 Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Tue, 10 Dec 2024 19:56:26 -0300 Subject: [PATCH 22/27] Improved explorer ansible. --- Makefile | 4 ++ infra/ansible/playbooks/explorer.yaml | 41 ++++++++++++++++--- .../playbooks/ini/config-explorer.ini.example | 12 ++++++ infra/ansible/playbooks/postgres.yaml | 14 ++++++- .../templates/explorer/explorer_env.j2 | 15 +++++++ infra/ansible/stage_inventory.yaml | 4 +- 6 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 infra/ansible/playbooks/ini/config-explorer.ini.example create mode 100644 infra/ansible/playbooks/templates/explorer/explorer_env.j2 diff --git a/Makefile b/Makefile index ea30814364..84879ea9b0 100644 --- a/Makefile +++ b/Makefile @@ -1207,3 +1207,7 @@ ansible_operator_deploy: ## Deploy the Operator. Parameters: INVENTORY -i $(INVENTORY) \ -e "ecdsa_keystore_path=$(ECDSA_KEYSTORE)" \ -e "bls_keystore_path=$(BLS_KEYSTORE)" + +ansible_explorer_deploy: + @ansible-playbook infra/ansible/playbooks/explorer.yaml \ + -i $(INVENTORY) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index c7f2301158..2f95650067 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -17,8 +17,10 @@ ansible.builtin.import_playbook: postgres.yaml vars: host: explorer + ini_file: ini/config-explorer.ini -- hosts: explorer +- name: Setup Explorer + hosts: explorer vars: service: "explorer" @@ -31,21 +33,40 @@ ansible_ssh_user: "{{ admin_user }}" - name: Clone the aligned_layer repository - register: clone_repo ansible.builtin.git: repo: https://github.com/yetanotherco/aligned_layer - dest: "{{ ansible_env.HOME }}/aligned_layer" + dest: "/home/{{ ansible_user }}/repos/explorer/aligned_layer" + version: explorer-ssl update: yes tasks: + - name: Add environment file for Explorer + template: + src: explorer/explorer_env.j2 + dest: /home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer/.env + vars: + RPC_URL: "{{ lookup('ini', 'RPC_URL file=ini/config-explorer.ini') }}" + ENVIRONMENT: "{{ lookup('ini', 'ENVIRONMENT file=ini/config-explorer.ini') }}" + ALIGNED_CONFIG_FILE: "{{ lookup('ini', 'ALIGNED_CONFIG_FILE file=ini/config-explorer.ini') }}" + PHX_HOST: "{{ lookup('ini', 'PHX_HOST file=ini/config-explorer.ini') }}" + ELIXIR_HOSTNAME: "{{ lookup('ini', 'ELIXIR_HOSTNAME file=ini/config-explorer.ini') }}" + DB_NAME: "{{ lookup('ini', 'DB_NAME file=ini/config-explorer.ini') }}" + DB_USER: "{{ lookup('ini', 'DB_USER file=ini/config-explorer.ini') }}" + DB_PASS: "{{ lookup('ini', 'DB_PASS file=ini/config-explorer.ini') }}" + DB_HOST: "{{ lookup('ini', 'DB_HOST file=ini/config-explorer.ini') }}" + TRACKER_API_URL: "{{ lookup('ini', 'TRACKER_API_URL file=ini/config-explorer.ini') }}" + SECRET_KEY_BASE: "{{ lookup('ini', 'SECRET_KEY_BASE file=ini/config-explorer.ini') }}" + - name: Build the explorer release args: - chdir: "{{ clone_repo.git_dir_now }}" + chdir: "/home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer" environment: MIX_ENV: prod - ansible.builtin.shell: + shell: + executable: /bin/bash cmd: | set -ex + source .env mix local.hex --force mix local.rebar --force mix deps.get --only $MIX_ENV @@ -53,4 +74,12 @@ pnpm --prefix=assets/ install mix phx.digest mix assets.deploy - mix release + mix release --overwrite + + - name: Set CAP_NET_BIND_SERVICE to beam + shell: + cmd: sudo setcap CAP_NET_BIND_SERVICE=+eip /home/app/repos/explorer/aligned_layer/explorer/_build/prod/rel/explorer/erts-14.2.1/bin/beam.smp + vars: + ansible_ssh_user: "{{ admin_user }}" + + # TODO: add systemd service diff --git a/infra/ansible/playbooks/ini/config-explorer.ini.example b/infra/ansible/playbooks/ini/config-explorer.ini.example new file mode 100644 index 0000000000..173709a998 --- /dev/null +++ b/infra/ansible/playbooks/ini/config-explorer.ini.example @@ -0,0 +1,12 @@ +[global] +RPC_URL= +ENVIRONMENT= +ALIGNED_CONFIG_FILE= +PHX_HOST= +ELIXIR_HOSTNAME= +DB_NAME= +DB_USER= +DB_PASS= +DB_HOST= +TRACKER_API_URL= +SECRET_KEY_BASE= diff --git a/infra/ansible/playbooks/postgres.yaml b/infra/ansible/playbooks/postgres.yaml index 34b3955919..0ef8ef61c5 100644 --- a/infra/ansible/playbooks/postgres.yaml +++ b/infra/ansible/playbooks/postgres.yaml @@ -5,7 +5,6 @@ ansible_ssh_user: "{{ admin_user }}" tasks: - - name: Update apt and install required system packages become: true ansible.builtin.apt: @@ -21,7 +20,7 @@ path: /usr/share/postgresql-common/pgdg state: directory mode: '0755' - + - name: Download postgres ca-certificates if not already present become: true ansible.builtin.get_url: @@ -45,3 +44,14 @@ - postgresql-16 state: latest update_cache: true + + - name: Create PostgreSQL credentials + shell: + cmd: | + sudo -u postgres psql -U postgres -c "CREATE USER {{ DB_USER }} WITH PASSWORD '{{ DB_PASS }}';" + sudo -u postgres psql -U postgres -c "CREATE DATABASE {{ DB_NAME }} OWNER {{ DB_USER }};" + vars: + DB_USER: "{{ lookup('ini', 'DB_USER', file=ini_file) }}" + DB_PASS: "{{ lookup('ini', 'DB_PASS', file=ini_file) }}" + DB_NAME: "{{ lookup('ini', 'DB_NAME', file=ini_file) }}" + ignore_errors: true diff --git a/infra/ansible/playbooks/templates/explorer/explorer_env.j2 b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 new file mode 100644 index 0000000000..ac5624aff1 --- /dev/null +++ b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 @@ -0,0 +1,15 @@ +export RPC_URL={{ RPC_URL }} +export ENVIRONMENT={{ ENVIRONMENT }} +export ALIGNED_CONFIG_FILE={{ ALIGNED_CONFIG_FILE }} +export PHX_HOST={{ PHX_HOST }} +export ELIXIR_HOSTNAME={{ ELIXIR_HOSTNAME }} + +# Database +export DB_NAME={{ DB_NAME }} +export DB_USER={{ DB_USER }} +export DB_PASS={{ DB_PASS }} +export DB_HOST={{ DB_HOST }} + +# Tracker API +export TRACKER_API_URL={{ TRACKER_API_URL }} +export SECRET_KEY_BASE={{ SECRET_KEY_BASE }} diff --git a/infra/ansible/stage_inventory.yaml b/infra/ansible/stage_inventory.yaml index 74f0268499..288ae8d772 100644 --- a/infra/ansible/stage_inventory.yaml +++ b/infra/ansible/stage_inventory.yaml @@ -15,9 +15,9 @@ batcher: explorer: hosts: aligned-holesky-explorer: - ansible_host: aligned-holesky-stage-2-explorer + ansible_host: aligned-holesky-stage-1-explorer admin_user: admin - ansible_user: dev + ansible_user: app ansible_python_interpreter: /usr/bin/python3 operator: hosts: From 6e64720f941de975bd5394f7e78e2a408b2c2efd Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 16 Dec 2024 15:56:57 -0300 Subject: [PATCH 23/27] Added systemd service to run the explorer. --- .gitignore | 1 + infra/ansible/playbooks/explorer.yaml | 40 ++++++++++++++++++- .../playbooks/ini/config-explorer.ini.example | 2 + infra/ansible/playbooks/postgres.yaml | 1 + .../templates/explorer/explorer_env.j2 | 4 ++ .../templates/services/explorer.service.j2 | 16 ++++++++ 6 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 infra/ansible/playbooks/templates/services/explorer.service.j2 diff --git a/.gitignore b/.gitignore index 2bfa8cf5b7..4944f23252 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ config-files/*.last_processed_batch.json nonce_*.bin infra/ansible/playbooks/ini/**.ini +infra/ansible/playbooks/files/**.pem diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 2f95650067..75b59c5a93 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -36,9 +36,23 @@ ansible.builtin.git: repo: https://github.com/yetanotherco/aligned_layer dest: "/home/{{ ansible_user }}/repos/explorer/aligned_layer" - version: explorer-ssl update: yes + - name: Create .ssl directory + file: + path: /home/{{ ansible_user }}/.ssl/ + state: directory + + - name: Upload SSL key to server (infra/ansible/playbooks/files/key.pem) + copy: + src: key.pem + dest: /home/{{ ansible_user }}/.ssl/key.pem + + - name: Upload SSL certificate to server (infra/ansible/playbooks/files/cert.pem) + copy: + src: cert.pem + dest: /home/{{ ansible_user }}/.ssl/cert.pem + tasks: - name: Add environment file for Explorer template: @@ -56,6 +70,9 @@ DB_HOST: "{{ lookup('ini', 'DB_HOST file=ini/config-explorer.ini') }}" TRACKER_API_URL: "{{ lookup('ini', 'TRACKER_API_URL file=ini/config-explorer.ini') }}" SECRET_KEY_BASE: "{{ lookup('ini', 'SECRET_KEY_BASE file=ini/config-explorer.ini') }}" + KEYFILE_PATH: "{{ lookup('ini', 'KEYFILE_PATH file=ini/config-explorer.ini') }}" + CERTFILE_PATH: "{{ lookup('ini', 'CERTFILE_PATH file=ini/config-explorer.ini') }}" + - name: Build the explorer release args: @@ -82,4 +99,23 @@ vars: ansible_ssh_user: "{{ admin_user }}" - # TODO: add systemd service + - name: Create .env for Explorer systemd service + shell: cat /home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer/.env | sed 's/export //g' > /home/{{ ansible_user }}/config/.env.explorer + + - name: Create systemd services directory + file: + path: "/home/{{ ansible_user }}/.config/systemd/user/" + state: directory + + - name: Add service to systemd + template: + src: services/explorer.service.j2 + dest: "/home/{{ ansible_user }}/.config/systemd/user/explorer.service" + force: no + + - name: Start explorer service + systemd_service: + name: explorer + state: started + enabled: true + scope: user diff --git a/infra/ansible/playbooks/ini/config-explorer.ini.example b/infra/ansible/playbooks/ini/config-explorer.ini.example index 173709a998..02a445c7c4 100644 --- a/infra/ansible/playbooks/ini/config-explorer.ini.example +++ b/infra/ansible/playbooks/ini/config-explorer.ini.example @@ -10,3 +10,5 @@ DB_PASS= DB_HOST= TRACKER_API_URL= SECRET_KEY_BASE= +KEYFILE_PATH= +CERTFILE_PATH= diff --git a/infra/ansible/playbooks/postgres.yaml b/infra/ansible/playbooks/postgres.yaml index 0ef8ef61c5..63c82228cf 100644 --- a/infra/ansible/playbooks/postgres.yaml +++ b/infra/ansible/playbooks/postgres.yaml @@ -55,3 +55,4 @@ DB_PASS: "{{ lookup('ini', 'DB_PASS', file=ini_file) }}" DB_NAME: "{{ lookup('ini', 'DB_NAME', file=ini_file) }}" ignore_errors: true + no_log: true diff --git a/infra/ansible/playbooks/templates/explorer/explorer_env.j2 b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 index ac5624aff1..7aa80e2e07 100644 --- a/infra/ansible/playbooks/templates/explorer/explorer_env.j2 +++ b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 @@ -3,6 +3,7 @@ export ENVIRONMENT={{ ENVIRONMENT }} export ALIGNED_CONFIG_FILE={{ ALIGNED_CONFIG_FILE }} export PHX_HOST={{ PHX_HOST }} export ELIXIR_HOSTNAME={{ ELIXIR_HOSTNAME }} +export PHX_SERVER=true # Database export DB_NAME={{ DB_NAME }} @@ -13,3 +14,6 @@ export DB_HOST={{ DB_HOST }} # Tracker API export TRACKER_API_URL={{ TRACKER_API_URL }} export SECRET_KEY_BASE={{ SECRET_KEY_BASE }} + +export KEYFILE_PATH={{ KEYFILE_PATH }} +export CERTFILE_PATH={{ CERTFILE_PATH }} diff --git a/infra/ansible/playbooks/templates/services/explorer.service.j2 b/infra/ansible/playbooks/templates/services/explorer.service.j2 new file mode 100644 index 0000000000..a4959d84f9 --- /dev/null +++ b/infra/ansible/playbooks/templates/services/explorer.service.j2 @@ -0,0 +1,16 @@ +[Unit] +Description=Explorer +After=network.target + +[Service] +Type=simple +WorkingDirectory=/home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer +EnvironmentFile=/home/{{ ansible_user }}/config/.env.explorer +ExecStart=/home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer/_build/prod/rel/explorer/bin/explorer start +Restart=always +RestartSec=1 +StartLimitBurst=100 +LimitNOFILE=100000 + +[Install] +WantedBy=multi-user.target From f170bbf5295ca3e57312d67e748f161822bec969 Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 16 Dec 2024 16:12:21 -0300 Subject: [PATCH 24/27] Removed extra whitespace. --- infra/ansible/playbooks/explorer.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index 75b59c5a93..bdc39917ca 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -73,7 +73,6 @@ KEYFILE_PATH: "{{ lookup('ini', 'KEYFILE_PATH file=ini/config-explorer.ini') }}" CERTFILE_PATH: "{{ lookup('ini', 'CERTFILE_PATH file=ini/config-explorer.ini') }}" - - name: Build the explorer release args: chdir: "/home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer" From 40c10ddc2f7f2480b4248bbb83a699e00e0cbf8f Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Fri, 3 Jan 2025 11:05:27 -0300 Subject: [PATCH 25/27] Removed file. --- .../playbooks/ini/config-register-explorer.ini.example | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 infra/ansible/playbooks/ini/config-register-explorer.ini.example diff --git a/infra/ansible/playbooks/ini/config-register-explorer.ini.example b/infra/ansible/playbooks/ini/config-register-explorer.ini.example deleted file mode 100644 index b0e82a148d..0000000000 --- a/infra/ansible/playbooks/ini/config-register-explorer.ini.example +++ /dev/null @@ -1,4 +0,0 @@ -[global] -caddy_explorer_url= -caddy_explorer_port= -caddy_cloudflare_token= From d6d7da8bc1452de63851b576dfe7f51eb503a4c9 Mon Sep 17 00:00:00 2001 From: samoht9277 Date: Mon, 6 Jan 2025 14:48:14 -0300 Subject: [PATCH 26/27] Added missing variables and UFW rule. --- infra/ansible/playbooks/explorer.yaml | 11 +++++++++++ .../playbooks/templates/explorer/explorer_env.j2 | 5 +++-- infra/ansible/stage_inventory.yaml | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index bdc39917ca..e10bd914aa 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -32,6 +32,15 @@ vars: ansible_ssh_user: "{{ admin_user }}" + - name: Allow all access to tcp port 443 + become: true + ufw: + rule: allow + port: 443 + proto: tcp + vars: + ansible_ssh_user: "{{ admin_user }}" + - name: Clone the aligned_layer repository ansible.builtin.git: repo: https://github.com/yetanotherco/aligned_layer @@ -72,6 +81,8 @@ SECRET_KEY_BASE: "{{ lookup('ini', 'SECRET_KEY_BASE file=ini/config-explorer.ini') }}" KEYFILE_PATH: "{{ lookup('ini', 'KEYFILE_PATH file=ini/config-explorer.ini') }}" CERTFILE_PATH: "{{ lookup('ini', 'CERTFILE_PATH file=ini/config-explorer.ini') }}" + BATCH_TTL_MINUTES: "{{ lookup('ini', 'BATCH_TTL_MINUTES file=ini/config-explorer.ini') }}" + SCHEDULED_BATCH_INTERVAL_MINUTES: "{{ lookup('ini', 'SCHEDULED_BATCH_INTERVAL_MINUTES file=ini/config-explorer.ini') }}" - name: Build the explorer release args: diff --git a/infra/ansible/playbooks/templates/explorer/explorer_env.j2 b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 index 7aa80e2e07..27ab0fb36a 100644 --- a/infra/ansible/playbooks/templates/explorer/explorer_env.j2 +++ b/infra/ansible/playbooks/templates/explorer/explorer_env.j2 @@ -5,15 +5,16 @@ export PHX_HOST={{ PHX_HOST }} export ELIXIR_HOSTNAME={{ ELIXIR_HOSTNAME }} export PHX_SERVER=true -# Database export DB_NAME={{ DB_NAME }} export DB_USER={{ DB_USER }} export DB_PASS={{ DB_PASS }} export DB_HOST={{ DB_HOST }} -# Tracker API export TRACKER_API_URL={{ TRACKER_API_URL }} export SECRET_KEY_BASE={{ SECRET_KEY_BASE }} export KEYFILE_PATH={{ KEYFILE_PATH }} export CERTFILE_PATH={{ CERTFILE_PATH }} + +export BATCH_TTL_MINUTES={{ BATCH_TTL_MINUTES }} +export SCHEDULED_BATCH_INTERVAL_MINUTES={{ SCHEDULED_BATCH_INTERVAL_MINUTES }} diff --git a/infra/ansible/stage_inventory.yaml b/infra/ansible/stage_inventory.yaml index 288ae8d772..ab8cc70d2c 100644 --- a/infra/ansible/stage_inventory.yaml +++ b/infra/ansible/stage_inventory.yaml @@ -15,7 +15,7 @@ batcher: explorer: hosts: aligned-holesky-explorer: - ansible_host: aligned-holesky-stage-1-explorer + ansible_host: aligned-holesky-stage-2-explorer admin_user: admin ansible_user: app ansible_python_interpreter: /usr/bin/python3 From 82e6a1da0d7fb5642617a26066d6c04801edb7da Mon Sep 17 00:00:00 2001 From: JuArce <52429267+JuArce@users.noreply.github.com> Date: Wed, 19 Mar 2025 14:33:30 -0300 Subject: [PATCH 27/27] fix: add ecto migrate --- infra/ansible/playbooks/explorer.yaml | 4 ++++ infra/ansible/playbooks/ini/config-explorer.ini.example | 3 +++ 2 files changed, 7 insertions(+) diff --git a/infra/ansible/playbooks/explorer.yaml b/infra/ansible/playbooks/explorer.yaml index e10bd914aa..dec8cb265b 100644 --- a/infra/ansible/playbooks/explorer.yaml +++ b/infra/ansible/playbooks/explorer.yaml @@ -68,10 +68,12 @@ src: explorer/explorer_env.j2 dest: /home/{{ ansible_user }}/repos/explorer/aligned_layer/explorer/.env vars: + MIX_ENV: prod RPC_URL: "{{ lookup('ini', 'RPC_URL file=ini/config-explorer.ini') }}" ENVIRONMENT: "{{ lookup('ini', 'ENVIRONMENT file=ini/config-explorer.ini') }}" ALIGNED_CONFIG_FILE: "{{ lookup('ini', 'ALIGNED_CONFIG_FILE file=ini/config-explorer.ini') }}" PHX_HOST: "{{ lookup('ini', 'PHX_HOST file=ini/config-explorer.ini') }}" + PHX_SERVER: true ELIXIR_HOSTNAME: "{{ lookup('ini', 'ELIXIR_HOSTNAME file=ini/config-explorer.ini') }}" DB_NAME: "{{ lookup('ini', 'DB_NAME file=ini/config-explorer.ini') }}" DB_USER: "{{ lookup('ini', 'DB_USER file=ini/config-explorer.ini') }}" @@ -83,6 +85,7 @@ CERTFILE_PATH: "{{ lookup('ini', 'CERTFILE_PATH file=ini/config-explorer.ini') }}" BATCH_TTL_MINUTES: "{{ lookup('ini', 'BATCH_TTL_MINUTES file=ini/config-explorer.ini') }}" SCHEDULED_BATCH_INTERVAL_MINUTES: "{{ lookup('ini', 'SCHEDULED_BATCH_INTERVAL_MINUTES file=ini/config-explorer.ini') }}" + LATEST_RELEASE: "{{ lookup('ini', 'LATEST_RELEASE file=ini/config-explorer.ini') }}" - name: Build the explorer release args: @@ -102,6 +105,7 @@ mix phx.digest mix assets.deploy mix release --overwrite + mix ecto.migrate - name: Set CAP_NET_BIND_SERVICE to beam shell: diff --git a/infra/ansible/playbooks/ini/config-explorer.ini.example b/infra/ansible/playbooks/ini/config-explorer.ini.example index 02a445c7c4..2d2d3a1f2c 100644 --- a/infra/ansible/playbooks/ini/config-explorer.ini.example +++ b/infra/ansible/playbooks/ini/config-explorer.ini.example @@ -12,3 +12,6 @@ TRACKER_API_URL= SECRET_KEY_BASE= KEYFILE_PATH= CERTFILE_PATH= +BATCH_TTL_MINUTES= +SCHEDULED_BATCH_INTERVAL_MINUTES= +LATEST_RELEASE=