From ea0804be93b72d6aa279850164a7ac1984d1d18d Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Fri, 17 Jan 2025 17:26:52 +0100 Subject: [PATCH] Added webinterface for bluesky --- group_vars/all | 3 +- playbook.servers.yml | 6 ++- roles/docker-bigbluebutton/handlers/main.yml | 2 +- roles/docker-bluesky/README.md | 12 ++++++ roles/docker-bluesky/tasks/main.yml | 29 ++++++++++--- .../templates/docker-compose.yml.j2 | 43 +++++++++++-------- roles/docker-bluesky/templates/env.j2 | 17 -------- roles/docker-bluesky/vars/main.yml | 3 +- roles/docker-compose/handlers/main.yml | 12 ++++++ 9 files changed, 81 insertions(+), 46 deletions(-) delete mode 100644 roles/docker-bluesky/templates/env.j2 diff --git a/group_vars/all b/group_vars/all index 130f5586..d5868f64 100644 --- a/group_vars/all +++ b/group_vars/all @@ -139,7 +139,8 @@ domain_akaunting: "accounting.{{top_domain}}" domain_attendize: "tickets.{{top_domain}}" domain_baserow: "baserow.{{top_domain}}" domain_bigbluebutton: "meet.{{top_domain}}" -domain_bluesky: "bluesky.{{top_domain}}" +domain_bluesky_api: "bluesky.{{top_domain}}" +domain_bluesky_web: "bskyweb.{{top_domain}}" domain_discourse: "forum.{{top_domain}}" domain_elk: "elk.{{top_domain}}" domain_friendica: "friendica.{{top_domain}}" diff --git a/playbook.servers.yml b/playbook.servers.yml index 72a4ac48..bfe9610d 100644 --- a/playbook.servers.yml +++ b/playbook.servers.yml @@ -292,8 +292,10 @@ roles: - role: docker-bluesky vars: - domain: "{{domain_bluesky}}" - http_port: 8030 + domain_api: "{{domain_bluesky_api}}" + domain_web: "{{domain_bluesky_web}}" + http_port_api: 8030 + http_port_web: 8031 # Native Webserver Roles - name: setup nginx-static-repositorys diff --git a/roles/docker-bigbluebutton/handlers/main.yml b/roles/docker-bigbluebutton/handlers/main.yml index e302291a..8e319fa0 100644 --- a/roles/docker-bigbluebutton/handlers/main.yml +++ b/roles/docker-bigbluebutton/handlers/main.yml @@ -51,7 +51,7 @@ - name: docker compose up bigbluebutton command: - cmd: docker-compose -p bigbluebutton up -d --force-recreate + cmd: docker-compose -p bigbluebutton up -d --force-recreate --build chdir: "{{docker_compose_instance_directory}}" environment: COMPOSE_HTTP_TIMEOUT: 600 diff --git a/roles/docker-bluesky/README.md b/roles/docker-bluesky/README.md index cef7bdc7..c8f2bf3c 100644 --- a/roles/docker-bluesky/README.md +++ b/roles/docker-bluesky/README.md @@ -17,6 +17,18 @@ openssl rand -base64 16 ### bluesky_database_password openssl rand -base64 32 +## create user +```bash +curl -X POST https://your-pds-domain/xrpc/com.atproto.server.createAccount \ + -H "Content-Type: application/json" \ + -d '{ + "email": "user@example.com", + "handle": "username", + "password": "securepassword123", + "inviteCode": "optional-invite-code" + }' +``` + ## more information - https://therobbiedavis.com/selfhosting-bluesky-with-docker-and-swag/ - https://cprimozic.net/notes/posts/notes-on-self-hosting-bluesky-pds-alongside-other-services/ diff --git a/roles/docker-bluesky/tasks/main.yml b/roles/docker-bluesky/tasks/main.yml index d094785c..3d5f0950 100644 --- a/roles/docker-bluesky/tasks/main.yml +++ b/roles/docker-bluesky/tasks/main.yml @@ -2,13 +2,28 @@ - name: "include docker/compose/database.yml" include_tasks: docker/compose/database.yml -- name: "include tasks nginx-docker-proxy-domain.yml" +- name: "Include tasks for API domain" include_tasks: nginx-docker-proxy-domain.yml + vars: + domain: "{{ domain_api }}" + http_port: "{{ http_port_api }}" + +- name: "Include tasks for Web domain" + include_tasks: nginx-docker-proxy-domain.yml + vars: + domain: "{{ domain_web }}" + http_port: "{{ http_port_web }}" + +- name: clone social app repository + git: + repo: "https://github.com/bluesky-social/social-app.git" + dest: "{{social_app_path}}" + version: "main" # Optional: spezifischer Branch oder Tag + update: yes # Aktualisiert das Repo, falls es schon existiert + notify: docker compose project build and setup - name: add docker-compose.yml - template: src=docker-compose.yml.j2 dest={{docker_compose_instance_directory}}docker-compose.yml - notify: docker compose project setup - -- name: configure run.env - template: src=env.j2 dest={{docker_compose_instance_directory}}/env - notify: docker compose project setup + template: + src: docker-compose.yml.j2 + dest: "{{docker_compose_instance_directory}}docker-compose.yml" + notify: docker compose project build and setup diff --git a/roles/docker-bluesky/templates/docker-compose.yml.j2 b/roles/docker-bluesky/templates/docker-compose.yml.j2 index e7d58f28..77523c78 100644 --- a/roles/docker-bluesky/templates/docker-compose.yml.j2 +++ b/roles/docker-bluesky/templates/docker-compose.yml.j2 @@ -6,12 +6,12 @@ services: - pds_data:/pds environment: # Geben Sie hier Ihre Domain und Konfigurationsdetails an - PDS_HOSTNAME: "{{domain}}" + PDS_HOSTNAME: "{{domain_api}}" PDS_ADMIN_EMAIL: "{{administrator_email}}" PDS_DB__POSTGRES__URL: "postgres://{{ database_username }}:{{ database_password }}@{{ database_host }}:5432/{{ database_name }}" - PDS_SERVICE_DID: "did:web:{{ domain }}" + PDS_SERVICE_DID: "did:web:{{domain_api}}" # See https://mattdyson.org/blog/2024/11/self-hosting-bluesky-pds/ - PDS_SERVICE_HANDLE_DOMAINS: ."{{domain}}" + PDS_SERVICE_HANDLE_DOMAINS: ".{{domain_api}}" PDS_JWT_SECRET: "{{bluesky_pds_jwt_secret}}" PDS_ADMIN_PASSWORD: "{{bluesky_pds_admin_password}}" PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX: "{{bluesky_pds_plc_rotation_key_k256_private_key_hex}}" @@ -29,7 +29,7 @@ services: # PDS_REPORT_SERVICE_URL=https://mod.bsky.app # PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac ports: - - "127.0.0.1:{{http_port}}:3000" + - "127.0.0.1:{{http_port_api}}:3000" healthcheck: test: ["CMD", "wget", "--spider", "http://127.0.0.1:3000"] interval: 1m @@ -39,19 +39,28 @@ services: {% include 'templates/docker/container/depends-on-just-database.yml.j2' %} # Deactivated for the moment @see https://github.com/bluesky-social/social-app -# bluesky-app: -# image: ghcr.io/bluesky-social/app:latest # Beispiel-App-Image -# restart: always -# ports: -# - "8080:8080" -# environment: -# # Verbindung zur PDS-Instanz -# REACT_APP_PDS_URL: "http://application:3000" # URL des PDS -# REACT_APP_API_URL: "http://application:3000" # API-URL des PDS -# REACT_APP_SITE_NAME: "Bluesky" -# REACT_APP_SITE_DESCRIPTION: "Dezentrales Soziales Netzwerk" -# depends_on: -# - application + web: + command: ["bskyweb","serve"] + build: + context: "{{ social_app_path }}" + dockerfile: Dockerfile # Standard-Dockerfile im Repository + args: + REACT_APP_PDS_URL: "http://{{domain_api}}" # URL des PDS + REACT_APP_API_URL: "http://{{domain_api}}" # API-URL des PDS + REACT_APP_SITE_NAME: "{{top_domain | upper}} - Bluesky" + REACT_APP_SITE_DESCRIPTION: "Decentral Social " + restart: {{docker_restart_policy}} + ports: + - "127.0.0.1:{{http_port_web}}:8100" + # Start already parallel to pds + #depends_on: + # - None + healthcheck: + test: ["CMD", "sh", "-c", "for pid in $(ls /proc | grep -E '^[0-9]+$'); do if cat /proc/$pid/cmdline 2>/dev/null | grep -q 'bskywebserve'; then exit 0; fi; done; exit 1"] + interval: 30s + timeout: 10s + retries: 3 + {% include 'templates/docker/services/' + database_type + '.yml.j2' %} diff --git a/roles/docker-bluesky/templates/env.j2 b/roles/docker-bluesky/templates/env.j2 deleted file mode 100644 index 136977a0..00000000 --- a/roles/docker-bluesky/templates/env.j2 +++ /dev/null @@ -1,17 +0,0 @@ -PDS_HOSTNAME= {{domain}} -PDS_JWT_SECRET= #openssl rand --hex 16 -PDS_ADMIN_PASSWORD= #openssl rand --hex 16 -PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX= #openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32 -PDS_EMAIL_SMTP_URL= #smtp://username@gmail.com:password@smtp.gmail.com:587 -PDS_EMAIL_FROM_ADDRESS= {{administrator_email}} -PDS_MODERATION_EMAIL_SMTP_URL= #smtp://username@gmail.com:password@smtp.gmail.com:587 -PDS_MODERATION_EMAIL_ADDRESS= {{administrator_email}} -PDS_DATA_DIRECTORY=/pds -PDS_BLOBSTORE_DISK_LOCATION=/pds/blocks -PDS_DID_PLC_URL=https://plc.directory -PDS_BSKY_APP_VIEW_URL=https://api.bsky.app -PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app -PDS_REPORT_SERVICE_URL=https://mod.bsky.app -PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac -PDS_CRAWLERS=https://bsky.network -LOG_ENABLED=true \ No newline at end of file diff --git a/roles/docker-bluesky/vars/main.yml b/roles/docker-bluesky/vars/main.yml index b3735407..638d2c49 100644 --- a/roles/docker-bluesky/vars/main.yml +++ b/roles/docker-bluesky/vars/main.yml @@ -1,3 +1,4 @@ docker_compose_project_name: "bluesky" database_password: "{{bluesky_database_password}}" -database_type: "postgres" \ No newline at end of file +database_type: "postgres" +social_app_path: "{{ docker_compose_instance_directory }}/social-app" \ No newline at end of file diff --git a/roles/docker-compose/handlers/main.yml b/roles/docker-compose/handlers/main.yml index 86371ba0..e1279572 100644 --- a/roles/docker-compose/handlers/main.yml +++ b/roles/docker-compose/handlers/main.yml @@ -8,6 +8,7 @@ # listen: docker compose project setup # when: mode_reset | bool +# default setup for docker compose files - name: docker compose project setup command: cmd: docker-compose -p "{{docker_compose_project_name}}" up -d --force-recreate @@ -16,3 +17,14 @@ COMPOSE_HTTP_TIMEOUT: 600 DOCKER_CLIENT_TIMEOUT: 600 listen: docker compose project setup + +# it's necessary to rebuild when a build in the docker compose files is defined +# for performance reasons it's not recommended to use this if there is no build tag specified +- name: docker compose project build and setup + command: + cmd: docker-compose -p "{{docker_compose_project_name}}" up -d --force-recreate --build + chdir: "{{docker_compose_instance_directory}}" + environment: + COMPOSE_HTTP_TIMEOUT: 600 + DOCKER_CLIENT_TIMEOUT: 600 + listen: docker compose project setup