From 249ee97f646c20c7e00ae12fd14dac9eefd25609 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:45:35 -0300 Subject: [PATCH 01/15] Add inital deploy files --- .github/workflows/deploy-testing.yaml | 44 +++++++++++ ansible/inventory.yaml | 7 ++ ansible/playbooks/deployment.yaml | 79 +++++++++++++++++++ ansible/playbooks/templates/.env.j2 | 5 ++ .../templates/starknet_explorer.service.j2 | 15 ++++ 5 files changed, 150 insertions(+) create mode 100644 .github/workflows/deploy-testing.yaml create mode 100644 ansible/inventory.yaml create mode 100644 ansible/playbooks/deployment.yaml create mode 100644 ansible/playbooks/templates/.env.j2 create mode 100644 ansible/playbooks/templates/starknet_explorer.service.j2 diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml new file mode 100644 index 00000000..40a7e9bb --- /dev/null +++ b/.github/workflows/deploy-testing.yaml @@ -0,0 +1,44 @@ +name: Deploy to testing +on: + push: + branches: + - deploy +jobs: + + build-deploy: + name: Build and deploy to testing + runs-on: ubuntu-latest + environment: + name: testing + url: https://starknet-explorer.lambdaclass.com/ + steps: + + - name: Checkout + uses: actions/checkout@v3.3.0 + + - name: Create ssh private key file from env var + env: + SSH_KEY: ${{ secrets.SSH_KEY }} + run: | + set -ex + sed -E 's/(-+(BEGIN|END) OPENSSH PRIVATE KEY-+) *| +/\1\n/g' <<< "$SSH_KEY" > id_ed25519_testing + chmod 400 id_ed25519_testing + + - name: Test install ansible + run: | + pip install ansible + + - name: "Deploy with ansible" + env: + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_USERNAME: ${{ secrets.SSH_USERNAME }} + SSH_KEY: ${{ secrets.SSH_KEY }} + SSH_PORT: ${{ secrets.SSH_PORT }} + MIX_ENV: ${{ vars.MIX_ENV }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }} + PHX_HOST: ${{ vars.PHX_HOST }} + PHX_SERVER: ${{ vars.PHX_SERVER }} + ANSIBLE_SSH_PKEY_DIR: "./id_ed25519_testing" + run: | + ansible-playbook -i ansible/inventory.yml ansible/playbooks/deployment.yaml diff --git a/ansible/inventory.yaml b/ansible/inventory.yaml new file mode 100644 index 00000000..79ebd98c --- /dev/null +++ b/ansible/inventory.yaml @@ -0,0 +1,7 @@ +webservers: + hosts: + ordinals1: + ansible_host: "157.90.154.208" + ansible_user: starknet_explorer + ansible_python_interpreter: /usr/bin/python3 + ansible_ssh_private_key_file: "{{ lookup('ansible.builtin.env', 'ANSIBLE_SSH_PKEY_DIR') }}" diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml new file mode 100644 index 00000000..b7f93b24 --- /dev/null +++ b/ansible/playbooks/deployment.yaml @@ -0,0 +1,79 @@ +- name: Deploy new version + hosts: webservers + serial: 1 + gather_facts: false + any_errors_fatal: true + become: true + become_user: starknet_explorer + + pre_tasks: + + - name: Delete tmp repo + file: + state: absent + path: /home/starknet_explorer/tmp/starknet_explorer + + - name: Clone repo in tmp dir + ansible.builtin.git: + repo: git@github.com:lambdaclass/starknet_explorer.git + version: hot-fix-prod + dest: /home/starknet_explorer/tmp/starknet_explorer + ssh_opts: "-o StrictHostKeyChecking=no" + key_file: /home/starknet_explorer/.ssh/id_ed25519 + + - name: Build + ansible.builtin.shell: | + mix local.hex --force + mix local.rebar --force + mix deps.get --only $MIX_ENV + mix deps.compile + mix assets.deploy + mix compile + mix release + mix phx.gen.release + environment: + MIX_ENV: prod + args: + chdir: /home/starknet_explorer/tmp/starknet_explorer + register: build_output + + - debug: msg="{{ build_output.stdout_lines }}" + + - name: Delete old repo + ansible.builtin.file: + state: absent + path: /home/starknet_explorer/starknet_explorer + + - name: Copy repo from tmp dir + ansible.builtin.copy: + remote_src: true + src: /home/starknet_explorer/tmp/starknet_explorer + dest: /home/starknet_explorer/ + + - name: Create .env file + ansible.builtin.template: + src: .env.j2 + dest: /home/starknet_explorer/.env + vars: + phx_host: "{{ lookup('ansible.builtin.env', 'PHX_HOST') }}" + secret_key_base: "{{ lookup('ansible.builtin.env', 'SECRET_KEY_BASE') }}" + database_url: "{{ lookup('ansible.builtin.env', 'DATABASE_URL') }}" + rpc_api_host: "{{ lookup('ansible.builtin.env', 'RPC_API_HOST') }}" + + - name: Create user systemd directory + ansible.builtin.file: + state: directory + path: /home/starknet_explorer/.config/systemd/user + + - name: Install systemd service + ansible.builtin.template: + src: starknet_explorer.service.j2 + dest: /home/starknet_explorer/.config/systemd/user/starknet_explorer.service + + - name: Restart starknet_explorer service + ansible.builtin.systemd: + scope: user + state: restarted + daemon_reload: true + enabled: true + name: starknet_explorer diff --git a/ansible/playbooks/templates/.env.j2 b/ansible/playbooks/templates/.env.j2 new file mode 100644 index 00000000..19b8d1e1 --- /dev/null +++ b/ansible/playbooks/templates/.env.j2 @@ -0,0 +1,5 @@ +PHX_HOST={{ phx_host }} +PHX_SERVER=true +SECRET_KEY_BASE={{ secret_key_base }} +DATABASE_URL={{ database_url }} +RPC_API_HOST={{ rpc_api_host }} diff --git a/ansible/playbooks/templates/starknet_explorer.service.j2 b/ansible/playbooks/templates/starknet_explorer.service.j2 new file mode 100644 index 00000000..4ea87f44 --- /dev/null +++ b/ansible/playbooks/templates/starknet_explorer.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Starknet Explorer + +[Service] +WorkingDirectory=/home/starknet_explorer/starknet_explorer +Restart=on-failure +ExecStart=/home/starknet_explorer/starknet_explorer/entrypoint.sh +ExecReload=/bin/kill -HUP +KillSignal=SIGTERM +EnvironmentFile=/home/starknet_explorer/.env +StandardOutput=append:/home/starknet_explorer/logs/starknet_explorer.log +StandardError=append:/home/starknet_explorer/logs/starknet_explorer.log + +[Install] +WantedBy=multi-user.target From e2727bdcdb55cb48062bfae61a17a8e7ca2a4679 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:50:41 -0300 Subject: [PATCH 02/15] Rename step --- .github/workflows/deploy-testing.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml index 40a7e9bb..eae28731 100644 --- a/.github/workflows/deploy-testing.yaml +++ b/.github/workflows/deploy-testing.yaml @@ -24,7 +24,7 @@ jobs: sed -E 's/(-+(BEGIN|END) OPENSSH PRIVATE KEY-+) *| +/\1\n/g' <<< "$SSH_KEY" > id_ed25519_testing chmod 400 id_ed25519_testing - - name: Test install ansible + - name: Install ansible run: | pip install ansible From 0c0bd331371b2714a4f80a6945fa5bc789916c31 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 18:51:08 -0300 Subject: [PATCH 03/15] Fix inventory filename --- .github/workflows/deploy-testing.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml index eae28731..e5ae31c0 100644 --- a/.github/workflows/deploy-testing.yaml +++ b/.github/workflows/deploy-testing.yaml @@ -30,10 +30,6 @@ jobs: - name: "Deploy with ansible" env: - SSH_HOST: ${{ secrets.SSH_HOST }} - SSH_USERNAME: ${{ secrets.SSH_USERNAME }} - SSH_KEY: ${{ secrets.SSH_KEY }} - SSH_PORT: ${{ secrets.SSH_PORT }} MIX_ENV: ${{ vars.MIX_ENV }} DATABASE_URL: ${{ secrets.DATABASE_URL }} SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }} @@ -41,4 +37,4 @@ jobs: PHX_SERVER: ${{ vars.PHX_SERVER }} ANSIBLE_SSH_PKEY_DIR: "./id_ed25519_testing" run: | - ansible-playbook -i ansible/inventory.yml ansible/playbooks/deployment.yaml + ansible-playbook -i ansible/inventory.yaml ansible/playbooks/deployment.yaml From 2f4c2a150217304ddb35cda28704b4a17565ab39 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:00:37 -0300 Subject: [PATCH 04/15] Fix inventory hostname --- ansible/inventory.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/inventory.yaml b/ansible/inventory.yaml index 79ebd98c..722264da 100644 --- a/ansible/inventory.yaml +++ b/ansible/inventory.yaml @@ -1,6 +1,6 @@ webservers: hosts: - ordinals1: + starknet_testing: ansible_host: "157.90.154.208" ansible_user: starknet_explorer ansible_python_interpreter: /usr/bin/python3 From d24538ccc34155507dd3d52ad1d0e34d0cfc7d76 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:01:34 -0300 Subject: [PATCH 05/15] Add ssh flag in inventory --- ansible/inventory.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ansible/inventory.yaml b/ansible/inventory.yaml index 722264da..79a709ad 100644 --- a/ansible/inventory.yaml +++ b/ansible/inventory.yaml @@ -5,3 +5,4 @@ webservers: ansible_user: starknet_explorer ansible_python_interpreter: /usr/bin/python3 ansible_ssh_private_key_file: "{{ lookup('ansible.builtin.env', 'ANSIBLE_SSH_PKEY_DIR') }}" + ansible_ssh_extra_args: '-o StrictHostKeyChecking=no' From 7f640b368ca0b96a9de8c624b2fff7b41e8b4a11 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:07:55 -0300 Subject: [PATCH 06/15] Parametrize branch to deploy --- .github/workflows/deploy-testing.yaml | 1 + ansible/playbooks/deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml index e5ae31c0..23492904 100644 --- a/.github/workflows/deploy-testing.yaml +++ b/.github/workflows/deploy-testing.yaml @@ -36,5 +36,6 @@ jobs: PHX_HOST: ${{ vars.PHX_HOST }} PHX_SERVER: ${{ vars.PHX_SERVER }} ANSIBLE_SSH_PKEY_DIR: "./id_ed25519_testing" + GIT_BRANCH: ${{ github.head_ref || github.ref_name }} run: | ansible-playbook -i ansible/inventory.yaml ansible/playbooks/deployment.yaml diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index b7f93b24..ccf19f12 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -16,7 +16,7 @@ - name: Clone repo in tmp dir ansible.builtin.git: repo: git@github.com:lambdaclass/starknet_explorer.git - version: hot-fix-prod + version: "{{ lookup('ansible.builtin.env', 'GIT_BRANCH') }}" dest: /home/starknet_explorer/tmp/starknet_explorer ssh_opts: "-o StrictHostKeyChecking=no" key_file: /home/starknet_explorer/.ssh/id_ed25519 From 8cb99e0efe182f338e2d80a077daba11a3b73884 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:16:16 -0300 Subject: [PATCH 07/15] Add entrypoint --- entrypoint.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100755 entrypoint.sh diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 00000000..f70bbe85 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +/home/starknet_explorer/starknet_explorer/_build/prod/rel/starknet_explorer/bin/starknet_explorer start From 3a48e783be77dc02eabb60d08c7756c1a3467235 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:23:22 -0300 Subject: [PATCH 08/15] Add missing env var --- .github/workflows/deploy-testing.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml index 23492904..0f29eab6 100644 --- a/.github/workflows/deploy-testing.yaml +++ b/.github/workflows/deploy-testing.yaml @@ -35,6 +35,7 @@ jobs: SECRET_KEY_BASE: ${{ secrets.SECRET_KEY_BASE }} PHX_HOST: ${{ vars.PHX_HOST }} PHX_SERVER: ${{ vars.PHX_SERVER }} + RPC_API_HOST: ${{ secrets.RPC_API_HOST }} ANSIBLE_SSH_PKEY_DIR: "./id_ed25519_testing" GIT_BRANCH: ${{ github.head_ref || github.ref_name }} run: | From 1430da47681a222b99eac92787910abb2faf4fae Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:44:15 -0300 Subject: [PATCH 09/15] Add mix deploy command --- ansible/playbooks/deployment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index ccf19f12..eace068f 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -28,6 +28,7 @@ mix deps.get --only $MIX_ENV mix deps.compile mix assets.deploy + mix phx.digest mix compile mix release mix phx.gen.release From e2ac8e56060751a9f399a87dc98c2ad4b6abf193 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Mon, 10 Jul 2023 11:56:39 -0300 Subject: [PATCH 10/15] Add debugging command to ansible shell deploy script --- ansible/playbooks/deployment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index eace068f..77c2c385 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -23,6 +23,7 @@ - name: Build ansible.builtin.shell: | + set -ex mix local.hex --force mix local.rebar --force mix deps.get --only $MIX_ENV From aadd3ec8bcaf7b05f9e8e0823ecaabec62c0958c Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Mon, 10 Jul 2023 12:03:50 -0300 Subject: [PATCH 11/15] Also print stderr from build step --- ansible/playbooks/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index 77c2c385..217b5852 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -39,7 +39,7 @@ chdir: /home/starknet_explorer/tmp/starknet_explorer register: build_output - - debug: msg="{{ build_output.stdout_lines }}" + - debug: msg="{{ build_output.stdout_lines + [ build_output.stderr_lines ] }}" - name: Delete old repo ansible.builtin.file: From 257ceb8f247cacc325c3c08f774e9afc032f8de3 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Mon, 10 Jul 2023 12:20:02 -0300 Subject: [PATCH 12/15] Try npm run deploy --- ansible/playbooks/deployment.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index 217b5852..e4ed1a11 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -28,6 +28,7 @@ mix local.rebar --force mix deps.get --only $MIX_ENV mix deps.compile + npm run --prefix ./assets deploy mix assets.deploy mix phx.digest mix compile From 5adf5d6eeb0b2e6116bc7fc9e871ec2992e4c11f Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Tue, 11 Jul 2023 13:45:47 -0300 Subject: [PATCH 13/15] Revert "Try npm run deploy" This reverts commit 257ceb8f247cacc325c3c08f774e9afc032f8de3. --- ansible/playbooks/deployment.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index e4ed1a11..217b5852 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -28,7 +28,6 @@ mix local.rebar --force mix deps.get --only $MIX_ENV mix deps.compile - npm run --prefix ./assets deploy mix assets.deploy mix phx.digest mix compile From 4893162482e76e423b16a575d78c2d8a11e43e05 Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Tue, 11 Jul 2023 13:50:15 -0300 Subject: [PATCH 14/15] Print clone output --- ansible/playbooks/deployment.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ansible/playbooks/deployment.yaml b/ansible/playbooks/deployment.yaml index 217b5852..b38013e2 100644 --- a/ansible/playbooks/deployment.yaml +++ b/ansible/playbooks/deployment.yaml @@ -20,6 +20,10 @@ dest: /home/starknet_explorer/tmp/starknet_explorer ssh_opts: "-o StrictHostKeyChecking=no" key_file: /home/starknet_explorer/.ssh/id_ed25519 + register: clone_output + + - name: Print clone repo output + debug: msg="{{ clone_output }}" - name: Build ansible.builtin.shell: | From dbc51c3f63b743a6ad3f598ec0e809401e2d3d3e Mon Sep 17 00:00:00 2001 From: Klaus Lungwitz <18153834+klaus993@users.noreply.github.com> Date: Tue, 11 Jul 2023 13:55:24 -0300 Subject: [PATCH 15/15] Deploy on push to main, and manually --- .github/workflows/deploy-testing.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml index 0f29eab6..f6b09934 100644 --- a/.github/workflows/deploy-testing.yaml +++ b/.github/workflows/deploy-testing.yaml @@ -2,7 +2,9 @@ name: Deploy to testing on: push: branches: - - deploy + - main + workflow_dispatch: + jobs: build-deploy: