Cleaned up bridgy fed

This commit is contained in:
2025-09-04 17:09:35 +02:00
parent 904040589e
commit 00c99e58e9
9 changed files with 39 additions and 106 deletions

View File

@@ -9,7 +9,7 @@ This role builds and runs Bridgy Fed as a Docker container and (optionally) star
Upstream docs & dev notes:
- User & developer docs: https://fed.brid.gy and https://bridgy-fed.readthedocs.io/
- Source: https://github.com/snarfed/bridgy-fed
- Local run (reference): `flask run -p 8080` with APPVIEW_HOST/PLC_HOST/BGS_HOST/PDS_HOST set, and Datastore emulator envs
- Local run (reference): `flask run -p 8080` with BRIDGY_APPVIEW_HOST/BRIDGY_PLC_HOST/BRIDGY_BGS_HOST/BRIDGY_PDS_HOST set, and Datastore emulator envs
## Features
- Dockerized Flask app (gunicorn)

View File

@@ -17,18 +17,13 @@ server:
docker:
services:
database:
enabled: false
emulator:
enabled: true
image: 'gcr.io/google.com/cloudsdktool/google-cloud-cli:latest'
enabled: false
application:
image: "python"
version: "3.12-bookworm"
name: "web-app-bridgy-fed"
image: "python"
version: "3.12-bookworm"
name: "web-app-bridgy-fed"
repository: "https://github.com/snarfed/bridgy-fed.git"
branch: "main"
rbac:
roles: {}
source:
repo: "https://github.com/snarfed/bridgy-fed.git"
ref: "main"

View File

@@ -3,7 +3,7 @@ ARG PY_BASE="python:3.12-bookworm"
FROM ${PY_BASE} AS build
ARG BRIDGY_REPO_URL
ARG BRIDGY_REPO_REF
ARG BRIDGY_REPO_BRANCH
# System deps: git, build tools, curl for healthchecks, and gunicorn
RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -11,7 +11,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN git clone --depth=1 --branch "${BRIDGY_REPO_REF}" "${BRIDGY_REPO_URL}" ./
RUN git clone --depth=1 --branch "${BRIDGY_REPO_BRANCH}" "${BRIDGY_REPO_URL}" ./
# Python deps
RUN pip install --upgrade pip && \
@@ -35,7 +35,7 @@ PY
FROM ${PY_BASE}
ARG CONTAINER_PORT
ENV PORT=${CONTAINER_PORT:-8080}
ENV PORT=${CONTAINER_PORT}
WORKDIR /app
COPY --from=build /app /app

View File

View File

@@ -2,20 +2,8 @@
include_role:
name: sys-stk-full-stateless
- name: "Include front proxy for {{ container_hostname }}:{{ ports.localhost.http[application_id] }}"
- name: "Include front proxy for {{ container_hostname}}:{{ ports.localhost.http[application_id] }}"
include_role:
name: sys-stk-front-proxy
vars:
domain: "{{ container_hostname }}"
http_port: "{{ ports.localhost.http[application_id] }}"
- name: "Provide Dockerfile"
copy:
src: "Dockerfile"
dest: "{{ docker_compose.directories.instance }}/Dockerfile"
notify:
- docker compose build
- name: "Run once marker"
set_fact:
run_once_web_app_bridgy_fed: true
- include_tasks: utils/run_once.yml

View File

@@ -1,20 +0,0 @@
# Administration
## Local dev shell (inside container)
```bash
docker compose exec application bash
```
## Logs
```bash
docker compose logs -f application
docker compose logs -f emulator # if enabled
```
## Notes
- Upstream dev run example:
```bash
export APPVIEW_HOST=api.bsky.app PLC_HOST=plc.directory BGS_HOST=bsky.network PDS_HOST=atproto.brid.gy
flask --debug run -p 8080
```
(We run via gunicorn in this role.)

View File

@@ -6,38 +6,15 @@
dockerfile: Dockerfile
args:
BRIDGY_REPO_URL: "{{ BRIDGY_REPO_URL }}"
BRIDGY_REPO_REF: "{{ BRIDGY_REPO_REF }}"
BRIDGY_REPO_BRANCH: "{{ BRIDGY_REPO_BRANCH }}"
CONTAINER_PORT: "{{ container_port | string }}"
image: "{{ BRIDGY_IMAGE }}"
image: "{{ BRIDGY_IMAGE }}:{{ BRIDGY_VERSION }}"
container_name: "{{ BRIDGY_CONTAINER }}"
hostname: "{{ container_hostname }}"
env_file:
- "{{ docker_compose.files.env }}"
ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
- "127.0.0.1:{{ http_port }}:{{ container_port }}"
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
{% include 'roles/docker-container/templates/base.yml.j2' %}
depends_on:
{% if EMULATOR_ENABLED | bool %}
- emulator
{% endif %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% if EMULATOR_ENABLED | bool %}
emulator:
image: "{{ EMULATOR_IMAGE }}"
container_name: "{{ BRIDGY_CONTAINER }}_emulator"
command: >
gcloud emulators firestore start
--host-port=0.0.0.0:{{ EMULATOR_PORT }}
--database-mode=datastore-mode
--quiet
ports:
- "127.0.0.1:{{ EMULATOR_PORT }}:{{ EMULATOR_PORT }}"
environment:
- CLOUDSDK_CORE_DISABLE_PROMPTS=1
restart: unless-stopped
{% include 'roles/docker-container/templates/networks.yml.j2' %}
{% endif %}
{% include 'roles/docker-compose/templates/networks.yml.j2' %}

View File

@@ -1,18 +1,13 @@
# Flask / Gunicorn basics
FLASK_ENV="{{ ENVIRONMENT | default('production') }}"
FLASK_ENV="{{ ENVIRONMENT }}"
PORT="{{ container_port }}"
BRIDGY_ADMIN_EMAIL="{{ BRIDGY_ADMIN_EMAIL }}"
# Bridgy Fed upstream knobs (see README @ GitHub)
APPVIEW_HOST="{{ APPVIEW_HOST }}"
PLC_HOST="{{ PLC_HOST }}"
BGS_HOST="{{ BGS_HOST }}"
PDS_HOST="{{ PDS_HOST }}"
# Datastore emulator (Datastore-mode Firestore). If sidecar enabled, point here.
GOOGLE_CLOUD_PROJECT="{{ EMULATOR_PROJECT_ID }}"
DATASTORE_EMULATOR_HOST="{{ EMULATOR_ENABLED | ternary(EMULATOR_HOST_INTERNAL, '') }}"
# DATASTORE_DATASET not needed when GOOGLE_CLOUD_PROJECT is set
BRIDGY_APPVIEW_HOST="{{ BRIDGY_APPVIEW_HOST }}"
BRIDGY_PLC_HOST="{{ BRIDGY_PLC_HOST }}"
BRIDGY_BGS_HOST="{{ BRIDGY_BGS_HOST }}"
BRIDGY_PDS_HOST="{{ BRIDGY_PDS_HOST }}"
# Optional:
# GUNICORN_CMD_ARGS="--log-level info"

View File

@@ -1,27 +1,25 @@
# General
application_id: "web-app-bridgy-fed"
application_id: "web-app-bridgy-fed"
# Container
container_port: 8080
domain: "{{ container_hostname }}"
http_port: "{{ ports.localhost.http[application_id] }}"
container_hostname: "{{ domains | get_domain(application_id) }}"
# App container
BRIDGY_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.application.name') }}"
BRIDGY_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.application.image') }}"
#BRIDGY_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.application.version')}}"
container_port: 8080
container_hostname: "{{ domains | get_domain(application_id) }}"
BRIDGY_ADMIN_EMAIL: "{{ users.administrator.email }}"
BRIDGY_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.application.name') }}"
BRIDGY_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.application.image') }}"
BRIDGY_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.application.version')}}"
BRIDGY_ADMIN_EMAIL: "{{ users.administrator.email }}"
# Source
BRIDGY_REPO_URL: "{{ applications | get_app_conf(application_id, 'source.repo') }}"
BRIDGY_REPO_REF: "{{ applications | get_app_conf(application_id, 'source.ref') }}"
# Emulator sidecar (Datastore-mode Firestore)
EMULATOR_ENABLED: "{{ applications | get_app_conf(application_id, 'docker.services.emulator.enabled') }}"
EMULATOR_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.emulator.image') }}"
EMULATOR_PORT: 8089
EMULATOR_HOST_INTERNAL: "emulator:8089"
EMULATOR_PROJECT_ID: "bridgy-federated-local"
BRIDGY_REPO_URL: "{{ applications | get_app_conf(application_id, 'docker.services.application.repository') }}"
BRIDGY_REPO_BRANCH: "{{ applications | get_app_conf(application_id, 'docker.services.application.branch') }}"
# Runtime env defaults for Bridgy Fed (see upstream README)
APPVIEW_HOST: "api.bsky.app"
PLC_HOST: "plc.directory"
BGS_HOST: "bsky.network"
PDS_HOST: "atproto.brid.gy"
BRIDGY_APPVIEW_HOST: "api.bsky.app"
BRIDGY_PLC_HOST: "plc.directory"
BRIDGY_BGS_HOST: "bsky.network"
BRIDGY_PDS_HOST: "atproto.brid.gy"