From ed3e3acbdfc2fe2ba26a6bc1711597dee5eef6d9 Mon Sep 17 00:00:00 2001 From: Jason Ross Date: Wed, 1 Apr 2026 20:06:38 -0500 Subject: [PATCH] MVP --- .github/workflows/deploy-stack.yml | 42 +++++++++-------------- README.md | 16 +++++---- compose/.env.example | 7 +--- compose/Caddyfile | 11 +++--- compose/docker-compose.yml | 10 +++--- compose/turnserver.conf | 3 ++ docker/coturn/Dockerfile | 1 + docker/coturn/entrypoint.sh | 54 +++++++++++++++++++++++++----- 8 files changed, 85 insertions(+), 59 deletions(-) diff --git a/.github/workflows/deploy-stack.yml b/.github/workflows/deploy-stack.yml index 0e7ef99..4c2ab81 100644 --- a/.github/workflows/deploy-stack.yml +++ b/.github/workflows/deploy-stack.yml @@ -8,14 +8,10 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - packages: read env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true' - AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} - TF_VAR_gcp_project: ${{ vars.GCP_PROJECT || 'stoat-burrow' }} - TF_VAR_gcp_region: ${{ vars.GCP_REGION || 'us-west1' }} - TF_VAR_gcp_zone: ${{ vars.GCP_ZONE || 'us-west1-b' }} + TF_VAR_gcp_project: ${{ secrets.GCP_PROJECT }} + TF_VAR_gcp_region: ${{ vars.GCP_REGION }} + TF_VAR_gcp_zone: ${{ vars.GCP_ZONE }} steps: - name: Checkout repository @@ -49,16 +45,12 @@ jobs: shell: bash run: | cat > backend.hcl <> "${GITHUB_ENV}" + echo "${{ secrets.STATIC_IP }}=$(tofu output -raw relay_ip)" >> "${GITHUB_ENV}" - name: Wait for SSH shell: bash run: | for attempt in {1..30}; do - if nc -z -w 5 "${STATIC_IP}" 22; then + if nc -z -w 5 "${${{ secrets.STATIC_IP }}}" 22; then exit 0 fi sleep 10 done - echo "SSH did not become reachable on ${STATIC_IP}" >&2 + echo "SSH did not become reachable on ${${{ secrets.STATIC_IP }}}" >&2 exit 1 - name: Run Ansible Playbook @@ -90,13 +82,13 @@ jobs: key: ${{ secrets.SSH_PRIVATE_KEY }} inventory: | [turn_nodes] - ${{ env.STATIC_IP }} ansible_user=ubuntu + ${{ secrets.STATIC_IP }} ansible_user=ubuntu options: --ssh-common-args='-o StrictHostKeyChecking=no' - name: SCP compose and config files uses: appleboy/scp-action@v0.1.7 with: - host: ${{ env.STATIC_IP }} + host: ${{ secrets.STATIC_IP }} username: ubuntu key: ${{ secrets.SSH_PRIVATE_KEY }} source: "compose/*" @@ -106,22 +98,18 @@ jobs: - name: Deploy Podman compose stack uses: appleboy/ssh-action@v1.0.3 with: - host: ${{ env.STATIC_IP }} + host: ${{ secrets.STATIC_IP }} username: ubuntu key: ${{ secrets.SSH_PRIVATE_KEY }} script: | set -eu cd /opt/stoat-turn cat > .env <&2 + sleep "${interval}" + elapsed=$((elapsed + interval)) + done + + echo "Timed out waiting for Caddy certificate files for ${TURN_REALM} in ${caddy_cert_root}." >&2 + return 1 +} + +tls_files=$(wait_for_tls_files) +tls_cert_file=$(printf '%s\n' "${tls_files}" | sed -n '1p') +tls_key_file=$(printf '%s\n' "${tls_files}" | sed -n '2p') + cp "${conf_source}" "${conf_rendered}" { echo echo "realm=${TURN_REALM}" echo "static-auth-secret=${TURN_SHARED_SECRET}" + echo "cert=${tls_cert_file}" + echo "pkey=${tls_key_file}" } >> "${conf_rendered}" -if [ -n "${TURN_TLS_CERT_FILE:-}" ] && [ -n "${TURN_TLS_KEY_FILE:-}" ]; then - { - echo "tls-listening-port=${TURN_TLS_LISTENING_PORT:-5349}" - echo "cert=${TURN_TLS_CERT_FILE}" - echo "pkey=${TURN_TLS_KEY_FILE}" - } >> "${conf_rendered}" -fi - set -- turnserver -n -c "${conf_rendered}" if [ -n "${EXTERNAL_IP:-}" ]; then -- 2.47.3