From a0f08c22e1e6a1c2cf7efd134cd9b6250a8abb36 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Mon, 29 Jul 2024 17:03:28 +0200 Subject: [PATCH 01/20] add dev-postgres-powersync environment --- dev-postgres-powersync/.env | 20 ++++ .../config-powersync/powersync.yaml | 97 +++++++++++++++++++ .../config-powersync/sync_rules.yaml | 11 +++ dev-postgres-powersync/docker-compose.yml | 66 +++++++++++++ .../powersync-services/mongo.yaml | 24 +++++ .../powersync-services/powersync.yaml | 73 ++++++++++++++ 6 files changed, 291 insertions(+) create mode 100644 dev-postgres-powersync/.env create mode 100644 dev-postgres-powersync/config-powersync/powersync.yaml create mode 100644 dev-postgres-powersync/config-powersync/sync_rules.yaml create mode 100644 dev-postgres-powersync/docker-compose.yml create mode 100644 dev-postgres-powersync/powersync-services/mongo.yaml create mode 100644 dev-postgres-powersync/powersync-services/powersync.yaml diff --git a/dev-postgres-powersync/.env b/dev-postgres-powersync/.env new file mode 100644 index 0000000..fff5f23 --- /dev/null +++ b/dev-postgres-powersync/.env @@ -0,0 +1,20 @@ +# ==================== Postgres credentials ================================ +PG_DATABASE_NAME=wger +PG_DATABASE_PORT=5432 +PG_DATABASE_USER=wger +PG_DATABASE_PASSWORD=wger + +# ==================== Demo config ========================================= +DEMO_BACKEND_PORT=6061 +# The front-end demo application is accessible at this port on the host machine +DEMO_CLIENT_PORT=3030 +PS_JWKS_URL=http://demo-backend:${DEMO_BACKEND_PORT}/api/get_keys/ + +# These can be generated by following the instructions in the `key-generator` folder +# A temporary key will be used if these are not specified +DEMO_JWKS_PUBLIC_KEY= +DEMO_JWKS_PRIVATE_KEY= + +# ==================== PowerSync variables ==================== +# The PowerSync API is accessible via this port +PS_PORT=8080 diff --git a/dev-postgres-powersync/config-powersync/powersync.yaml b/dev-postgres-powersync/config-powersync/powersync.yaml new file mode 100644 index 0000000..4ff1479 --- /dev/null +++ b/dev-postgres-powersync/config-powersync/powersync.yaml @@ -0,0 +1,97 @@ +# yaml-language-server: $schema=../schema/schema.json + +# Note that this example uses YAML custom tags for environment variable substitution. +# Using `!env [variable name]` will substitute the value of the environment variable named +# [variable name]. +# +# Only environment variables with names starting with `PS_` can be substituted. +# +# e.g. With the environment variable `export PS_MONGO_URI=mongodb://localhost:27017` +# and YAML code: +# uri: !env PS_MONGO_URI +# The YAML will resolve to: +# uri: mongodb://localhost:27017 +# +# If using VS Code see the `.vscode/settings.json` definitions which define custom tags. + +# migrations: +# # Migrations run automatically by default. +# # Setting this to true will skip automatic migrations. +# # Migrations can be triggered externally by altering the container `command`. +# disable_auto_migration: true + +# Settings for telemetry reporting +# See https://docs.powersync.com/self-hosting/telemetry +telemetry: + # Opt out of reporting anonymized usage metrics to PowerSync telemetry service + disable_telemetry_sharing: false + +# Settings for source database replication +replication: + # Specify database connection details + # Note only 1 connection is currently supported + # Multiple connection support is on the roadmap + connections: + - type: postgresql + # The PowerSync server container can access the Postgres DB via the DB's service name. + # In this case the hostname is db + + # The connection URI or individual parameters can be specified. + # Individual params take precedence over URI params + uri: !env PS_PG_URI + + # Or use individual params + + # hostname: db # From the Docker Compose service name + # port: 5432 + # database: postgres + # username: postgres + # password: mypassword + + # SSL settings + sslmode: disable # 'verify-full' (default) or 'verify-ca' or 'disable' + # 'disable' is OK for local/private networks, not for public networks + + # Required for verify-ca, optional for verify-full + # cacert: ${PS_PG_CA_CERT} + + # Include a certificate here for HTTPs + # client_certificate: ${PS_PG_CLIENT_CERT} + # client_private_key: ${PS_PG_CLIENT_PRIVATE_KEY} + +# This is valid if using the `mongo` service defined in `ps-mongo.yaml` + +# Connection settings for sync bucket storage +storage: + type: mongodb + uri: !env PS_MONGO_URI + # Use these if authentication is required. The user should have `readWrite` and `dbAdmin` roles + # username: my-mongo-user + # password: my-password + +# The port which the PowerSync API server will listen on +port: !env PS_PORT + +# Specify sync rules +sync_rules: + path: sync_rules.yaml + +# Client (application end user) authentication settings +client_auth: + # Enable this if using Supabase Auth + # supabase: true + + # JWKS URIs can be specified here + jwks_uri: !env PS_JWKS_URL + + # Optional static collection of public keys for JWT verification + # jwks: + # keys: + # - kty: 'RSA' + # n: '${PS_JWK_N}' + # e: '${PS_JWK_E}' + # alg: 'RS256' + # kid: '${PS_JWK_KID}' + + # JWKS audience + audience: ["powersync-dev", "powersync"] diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml new file mode 100644 index 0000000..6a1cc21 --- /dev/null +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -0,0 +1,11 @@ +# See Documentation for more information: +# https://docs.powersync.com/usage/sync-rules +# Note that changes to this file are not watched. +# The service needs to be restarted for changes to take effect. +bucket_definitions: + user_lists: + # Separate bucket per todo list + parameters: select id as list_id from lists where owner_id = token_parameters.user_id + data: + - select * from lists where id = bucket.list_id + - select * from todos where list_id = bucket.list_id diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml new file mode 100644 index 0000000..b8bfd29 --- /dev/null +++ b/dev-postgres-powersync/docker-compose.yml @@ -0,0 +1,66 @@ +name: wger-dev-postgres-powersync + +services: + web: + image: wger/server:powersync + depends_on: + db: + condition: service_healthy + env_file: + - ../config/prod.env + - ../config/dev.env + # django backend should do some powersync stuff.. + environment: + # From the PowerSync service name + # This is just used to populate the JWT audience + POWERSYNC_URL: powersync-dev + + # Keys here for demonstration + POWERSYNC_PUBLIC_KEY: ${DEMO_JWKS_PUBLIC_KEY} + POWERSYNC_PRIVATE_KEY: ${DEMO_JWKS_PRIVATE_KEY} + volumes: + - type: bind + source: /home/dieter/code/wger-wger + target: /home/wger/src + ports: + - "8000:8000" + + cache: + image: redis + expose: + - 6379 + healthcheck: + test: redis-cli ping + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + restart: unless-stopped + + db: + image: postgres:15-alpine + environment: + - POSTGRES_USER=wger + - POSTGRES_PASSWORD=wger + - POSTGRES_DB=wger + volumes: + - postgres-data:/var/lib/postgresql/data/ + ports: + - "5432:5432" + expose: + - 5432 + command: ["postgres", "-c", "wal_level=logical"] + healthcheck: + test: pg_isready -U wger + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + restart: unless-stopped + +volumes: + postgres-data: + +include: + - path: powersync-services/mongo.yaml + - path: powersync-services/powersync.yaml diff --git a/dev-postgres-powersync/powersync-services/mongo.yaml b/dev-postgres-powersync/powersync-services/mongo.yaml new file mode 100644 index 0000000..e012836 --- /dev/null +++ b/dev-postgres-powersync/powersync-services/mongo.yaml @@ -0,0 +1,24 @@ +services: + # MongoDB Service used internally + mongo: + image: mongo:7.0 + command: --replSet rs0 --bind_ip_all --quiet + restart: unless-stopped + ports: + - 27017:27017 + volumes: + - mongo_storage:/data/db + + # Initializes the MongoDB replica set. This service will not usually be actively running + mongo-rs-init: + image: mongo:7.0 + depends_on: + - mongo + restart: on-failure + entrypoint: + - bash + - -c + - 'mongosh --host mongo:27017 --eval ''try{rs.status().ok && quit(0)} catch {} rs.initiate({_id: "rs0", version: 1, members: [{ _id: 0, host : "mongo:27017" }]})''' + +volumes: + mongo_storage: diff --git a/dev-postgres-powersync/powersync-services/powersync.yaml b/dev-postgres-powersync/powersync-services/powersync.yaml new file mode 100644 index 0000000..85212dc --- /dev/null +++ b/dev-postgres-powersync/powersync-services/powersync.yaml @@ -0,0 +1,73 @@ +services: + powersync: + depends_on: + mongo-rs-init: + condition: service_completed_successfully + restart: unless-stopped + image: journeyapps/powersync-service:latest + # The unified service runs an API server and replication worker in the same container. + # These services can be executed in different containers by using individual entry commands e.g. + # Start only the API server with + # command: ['start', '-r', 'api'] + # Start only the replication worker with + # command: ['start', '-r', 'sync'] + + # Migations occur automatically by default. Default migrations can be disabled in `powersync.yaml`: + # migrations: + # disable_auto_migration: true + # + # Service migrations can be manually triggered by starting a container with the + # following command: + # command: ['migrate', 'up'] + # Note that this container must finish executing before starting the sync or unified container. + command: ["start", "-r", "unified"] + volumes: + # Mounts the specified config folder to the container + # This folder should contain `powersync.yaml and sync_rules.yaml + - ../config-powersync:/config + environment: + # This is the path (inside the container) to the YAML config file + # Alternatively the config path can be specified in the command + # e.g: + # command: ['start', '-r', 'unified', '-c', '/config/powersync.yaml'] + # + # The config file can also be specified in Base 64 encoding + # e.g.: Via an environment variable + # POWERSYNC_CONFIG_B64: [base64 encoded content] + # or e.g.: Via a command line parameter + # command: ['start', '-r', 'unified', '-c64', '[base64 encoded content]'] + POWERSYNC_CONFIG_PATH: /config/powersync.yaml + + # Sync rules can be specified as base 64 encoded YAML + # e.g: Via an environment variable + # POWERSYNC_SYNC_RULES_B64: "[base64 encoded sync rules]" + # or e.g.: Via a command line parameter + # command: ['start', '-r', 'unified', '-sync64', '[base64 encoded content]'] + + # The following will be inserted into the powersync.yaml file via templating + # Templates are used for filesystem and base64 configuration files + PS_PG_URI: postgres://${PG_DATABASE_USER}:${PG_DATABASE_PASSWORD}@db:${PG_DATABASE_PORT}/${PG_DATABASE_NAME} + PS_MONGO_URI: mongodb://mongo:27017/powersync_demo + + # Note that powersync.yaml->client_auth->allow_local_jwks must be true for local URLs to work + PS_JWKS_URL: ${PS_JWKS_URL} + + # The port which the PowerSync API server should run on + PS_PORT: ${PS_PORT} + + # CA certificate for Postgres connection + # PS_PG_CA_CERT: + + # Client certificate for Postgres connection + # PS_PG_CLIENT_CERT: + + # Client private key for Postgres connection + # PS_PG_CLIENT_PRIVATE_KEY: + + # Potential JWKs public key template + # PS_JWK_N: + # PS_JWK_E: + # PS_JWK_KID: + + ports: + - ${PS_PORT}:${PS_PORT} From 6a23da8f6108b2583b0db847ac002d098d813712 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 11 Aug 2024 17:12:24 +0200 Subject: [PATCH 02/20] Add a test powersync key pair --- dev-postgres-powersync/.env | 11 ++++------- .../config-powersync/powersync.yaml | 11 ----------- .../config-powersync/sync_rules.yaml | 14 +++++++++----- dev-postgres-powersync/docker-compose.yml | 8 ++------ .../powersync-services/powersync.yaml | 9 --------- 5 files changed, 15 insertions(+), 38 deletions(-) diff --git a/dev-postgres-powersync/.env b/dev-postgres-powersync/.env index fff5f23..cf902a9 100644 --- a/dev-postgres-powersync/.env +++ b/dev-postgres-powersync/.env @@ -4,16 +4,13 @@ PG_DATABASE_PORT=5432 PG_DATABASE_USER=wger PG_DATABASE_PASSWORD=wger -# ==================== Demo config ========================================= -DEMO_BACKEND_PORT=6061 -# The front-end demo application is accessible at this port on the host machine -DEMO_CLIENT_PORT=3030 -PS_JWKS_URL=http://demo-backend:${DEMO_BACKEND_PORT}/api/get_keys/ +PS_JWKS_URL=http://web:8000/api/v2/powersync-keys # These can be generated by following the instructions in the `key-generator` folder # A temporary key will be used if these are not specified -DEMO_JWKS_PUBLIC_KEY= -DEMO_JWKS_PRIVATE_KEY= +# --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md +POWERSYNC_JWKS_PUBLIC_KEY=eyJrdHkiOiJSU0EiLCJuIjoienNsem9lajhpdFZIR3BWRXYySUtqSU5ORmVUZ1R4X0NRcF9lc2Q4S0VrQ3ZjQXMtSXVpNmw5WXQ1VUNKb2Vmemo5Nmp5Z3FxS0JzUFdLSC1hOXlHdnd6NmRZZ1hqWkdlRUozUXc0UWxxYjhoNlotVU1FeXFGWlVUNUN6d0RiTTBkM1BiVEVJTGJhNnRldHhHNlN2cldwVU5HVnBZczN0SXdVaEdEcGd0RnM5UV91YXRhb0dhcUpRa0pXWTJ1SkhqRHFOQVpEVjliazBzYmhYcnI3dnZoeXVaYVRBZngtNWVCZktSd1FWcGtCRzhabWZHbVNGMnVtWmhpVUhNOUhRYW5zN1ZoWS1ISm5CbFpoNjVhMGpkbncwaHFiX0REaDJSRWNfZktmSmg1UkloZ19zQzBrT29hWjZNS29GOXl0QUNsN0FxdXFlNHZBcEJDUG1aV21KVTZ3IiwiZSI6IkFRQUIiLCJhbGciOiJSUzI1NiIsImtpZCI6InBvd2Vyc3luYy1iNGUwMTMzN2Q3In0= +POWERSYNC_JWKS_PRIVATE_KEY=eyJrdHkiOiJSU0EiLCJuIjoienNsem9lajhpdFZIR3BWRXYySUtqSU5ORmVUZ1R4X0NRcF9lc2Q4S0VrQ3ZjQXMtSXVpNmw5WXQ1VUNKb2Vmemo5Nmp5Z3FxS0JzUFdLSC1hOXlHdnd6NmRZZ1hqWkdlRUozUXc0UWxxYjhoNlotVU1FeXFGWlVUNUN6d0RiTTBkM1BiVEVJTGJhNnRldHhHNlN2cldwVU5HVnBZczN0SXdVaEdEcGd0RnM5UV91YXRhb0dhcUpRa0pXWTJ1SkhqRHFOQVpEVjliazBzYmhYcnI3dnZoeXVaYVRBZngtNWVCZktSd1FWcGtCRzhabWZHbVNGMnVtWmhpVUhNOUhRYW5zN1ZoWS1ISm5CbFpoNjVhMGpkbncwaHFiX0REaDJSRWNfZktmSmg1UkloZ19zQzBrT29hWjZNS29GOXl0QUNsN0FxdXFlNHZBcEJDUG1aV21KVTZ3IiwiZSI6IkFRQUIiLCJkIjoiUTJtUEpjaGpsQXNGZkJnUGFtalcwWW40ZGx1Xy1HdDlFLVUwWHo0NzlVbGJLQ2F5SWdWRzF6ci1pVThwenp0anZwSXhTU3VDMzBJN0ZZVHlBVTNLSzd4YVpqaHduVGxNazFRdmU1MjNfWWVPMGEteFNyR2pmUmUxZlZ4ZEFjcGJIMW9Jc3VxUS1UZkozRlMxVlV4NUZIV2s2SV80Zk1LRExHZVlWeWVyQTFVS1NXZUoxYThjeUhLSTVCOUVyNkhKaGVYb1NDTVhYeS1rRFd1em1Sclp3TGVzd0g3SHI4d00wRXdfTUN4MnA3NUU2bU8zZnBlcUZKV1dwSGZqV2ZoVGp0RkVBOHVPMGd6dGdJSzlhbkVSV1FhMEx4b29NZ2E0TDczRFFYMFNyczFZdTQwYlJ2WWZJY3k2ZThFc2M2eFFjYkZtV29mVWlneEZJODZ1bXdIQktRIiwicCI6Ijl2aVNpOE9ueG1nVlVFZW5aLVhoa0haVHh2V2NGZjI5YWVYYVhHVGtMTlBzMHBMRFFZd01lWGFTandaUk5FQngxR2tPQ1I5dEFoV3JRNWxBaW5MeHNxX1JFT2VQajA0QTJ2U2RNQnIybWJuM2lxT0htaE9iQXhPOUd4OHdWNWt4V255YnJkeGE0dkRtdmV6QkJqaEdfYS1XenhMSUZSNUw4Q3dPd1R2UkRNMCIsInEiOiIxbGpLMWh6Nzh1aGYyWHBjNmw4T0FueFRxbnlYQ1pkM3VJQ1hTSW9wMXlXaVlSVWxVZk9EVW1XWG8yVE93RHIzM0Joc091YktBT3FSTm1Gc0ZWaTgzM1JVMjFXeFBOVHRqUllSRzYteHFId0NfYlBFQTAzbExYNkM0aVo3R254aHRpN2JEX0UxRy1OaXBRZFNHOEVwTEFwYnFzTmUzWTA0NUVSbzdaaGk2SmMiLCJkcCI6InZmQ1FyR01PanA0UF9rME5aLS01bWVRWExJWkt3X01CRVFmUTk0dzBuSEZreXRKS3p3ZUp0SVRIMUszVUdDNlVIUHVxNnNNN2tBWGdVTDMxa0VVMHMtdGFDX2s3Uk1pR0NkOWxZTkRyNVhETC05a20tZzJvQXliVUlwN0xEQ1BxZkNBbmp3QlEtZ2F5UDFGdFpuNHp3dm1mTDZUUE1zYTVPbjUzM285RmlPVSIsImRxIjoicmRTU292UWNpOUZTTWxBZTNGLThQOTNPQ0Z4RUxSNHVsRzJNd3VKeHJpNnlNbU53d2JabjBNSGRLVUNPdjZ6UzZDYlNWeTVsc2pxSkMzNFVwbmN4clZKdG92Y3E1cmVUOHpCckxYWGQ4VktwSmxETWJSV1ZfOEF5cXU4a05NV2NoS0FaUGlPU3U0dzdxclIyTFZZSWF0UDNwVlFPTWtUZVY1ajNNNEM2N2Y4IiwicWkiOiJOM3RDNm1RbHZkcVdEVVh1b2MtT1Mteno0ZEtKaHFxZl9FX1RNY0tIaUwzXzB2YWpGb1BMTlMxVXNnclFXa2RQUTQxd0RnYmZnS0JINGQyT29GamV6VVJPVmJTSHhjV2R1YUVjWmVJRVZDUnB1bHpKTGxnOGd5dGZ3Ty1TcXRoOE1YTkxPRGVhNHdQNzlYLXM3M2ZVZTVvRTFlQ19uUGlpR1diMlpsYmt4Z3MiLCJhbGciOiJSUzI1NiIsImtpZCI6InBvd2Vyc3luYy1iNGUwMTMzN2Q3In0= # ==================== PowerSync variables ==================== # The PowerSync API is accessible via this port diff --git a/dev-postgres-powersync/config-powersync/powersync.yaml b/dev-postgres-powersync/config-powersync/powersync.yaml index 4ff1479..81643ba 100644 --- a/dev-postgres-powersync/config-powersync/powersync.yaml +++ b/dev-postgres-powersync/config-powersync/powersync.yaml @@ -52,22 +52,11 @@ replication: sslmode: disable # 'verify-full' (default) or 'verify-ca' or 'disable' # 'disable' is OK for local/private networks, not for public networks - # Required for verify-ca, optional for verify-full - # cacert: ${PS_PG_CA_CERT} - - # Include a certificate here for HTTPs - # client_certificate: ${PS_PG_CLIENT_CERT} - # client_private_key: ${PS_PG_CLIENT_PRIVATE_KEY} - -# This is valid if using the `mongo` service defined in `ps-mongo.yaml` # Connection settings for sync bucket storage storage: type: mongodb uri: !env PS_MONGO_URI - # Use these if authentication is required. The user should have `readWrite` and `dbAdmin` roles - # username: my-mongo-user - # password: my-password # The port which the PowerSync API server will listen on port: !env PS_PORT diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 6a1cc21..17493b2 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -3,9 +3,13 @@ # Note that changes to this file are not watched. # The service needs to be restarted for changes to take effect. bucket_definitions: - user_lists: - # Separate bucket per todo list - parameters: select id as list_id from lists where owner_id = token_parameters.user_id + global: data: - - select * from lists where id = bucket.list_id - - select * from todos where list_id = bucket.list_id + - select * from exercises_muscle + +# user_lists: +# Separate bucket per todo list +# parameters: select id as list_id from lists where owner_id = token_parameters.user_id +# data: +# - select * from lists where id = bucket.list_id +# - select * from todos where list_id = bucket.list_id diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index b8bfd29..1fb4857 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -2,7 +2,7 @@ name: wger-dev-postgres-powersync services: web: - image: wger/server:powersync + image: wger/server:latest depends_on: db: condition: service_healthy @@ -14,13 +14,9 @@ services: # From the PowerSync service name # This is just used to populate the JWT audience POWERSYNC_URL: powersync-dev - - # Keys here for demonstration - POWERSYNC_PUBLIC_KEY: ${DEMO_JWKS_PUBLIC_KEY} - POWERSYNC_PRIVATE_KEY: ${DEMO_JWKS_PRIVATE_KEY} volumes: - type: bind - source: /home/dieter/code/wger-wger + source: /Users/roland/Entwicklung/wger/server target: /home/wger/src ports: - "8000:8000" diff --git a/dev-postgres-powersync/powersync-services/powersync.yaml b/dev-postgres-powersync/powersync-services/powersync.yaml index 85212dc..03c89bb 100644 --- a/dev-postgres-powersync/powersync-services/powersync.yaml +++ b/dev-postgres-powersync/powersync-services/powersync.yaml @@ -55,15 +55,6 @@ services: # The port which the PowerSync API server should run on PS_PORT: ${PS_PORT} - # CA certificate for Postgres connection - # PS_PG_CA_CERT: - - # Client certificate for Postgres connection - # PS_PG_CLIENT_CERT: - - # Client private key for Postgres connection - # PS_PG_CLIENT_PRIVATE_KEY: - # Potential JWKs public key template # PS_JWK_N: # PS_JWK_E: From d82403734f02fc374cb5478cf58134db819d3755 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 8 Sep 2024 20:52:18 +0200 Subject: [PATCH 03/20] Update JWT powersync keys --- dev-postgres-powersync/.env | 4 ++-- dev-postgres-powersync/config-powersync/powersync.yaml | 10 +--------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/dev-postgres-powersync/.env b/dev-postgres-powersync/.env index cf902a9..5a89c2b 100644 --- a/dev-postgres-powersync/.env +++ b/dev-postgres-powersync/.env @@ -9,8 +9,8 @@ PS_JWKS_URL=http://web:8000/api/v2/powersync-keys # These can be generated by following the instructions in the `key-generator` folder # A temporary key will be used if these are not specified # --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md -POWERSYNC_JWKS_PUBLIC_KEY=eyJrdHkiOiJSU0EiLCJuIjoienNsem9lajhpdFZIR3BWRXYySUtqSU5ORmVUZ1R4X0NRcF9lc2Q4S0VrQ3ZjQXMtSXVpNmw5WXQ1VUNKb2Vmemo5Nmp5Z3FxS0JzUFdLSC1hOXlHdnd6NmRZZ1hqWkdlRUozUXc0UWxxYjhoNlotVU1FeXFGWlVUNUN6d0RiTTBkM1BiVEVJTGJhNnRldHhHNlN2cldwVU5HVnBZczN0SXdVaEdEcGd0RnM5UV91YXRhb0dhcUpRa0pXWTJ1SkhqRHFOQVpEVjliazBzYmhYcnI3dnZoeXVaYVRBZngtNWVCZktSd1FWcGtCRzhabWZHbVNGMnVtWmhpVUhNOUhRYW5zN1ZoWS1ISm5CbFpoNjVhMGpkbncwaHFiX0REaDJSRWNfZktmSmg1UkloZ19zQzBrT29hWjZNS29GOXl0QUNsN0FxdXFlNHZBcEJDUG1aV21KVTZ3IiwiZSI6IkFRQUIiLCJhbGciOiJSUzI1NiIsImtpZCI6InBvd2Vyc3luYy1iNGUwMTMzN2Q3In0= -POWERSYNC_JWKS_PRIVATE_KEY=eyJrdHkiOiJSU0EiLCJuIjoienNsem9lajhpdFZIR3BWRXYySUtqSU5ORmVUZ1R4X0NRcF9lc2Q4S0VrQ3ZjQXMtSXVpNmw5WXQ1VUNKb2Vmemo5Nmp5Z3FxS0JzUFdLSC1hOXlHdnd6NmRZZ1hqWkdlRUozUXc0UWxxYjhoNlotVU1FeXFGWlVUNUN6d0RiTTBkM1BiVEVJTGJhNnRldHhHNlN2cldwVU5HVnBZczN0SXdVaEdEcGd0RnM5UV91YXRhb0dhcUpRa0pXWTJ1SkhqRHFOQVpEVjliazBzYmhYcnI3dnZoeXVaYVRBZngtNWVCZktSd1FWcGtCRzhabWZHbVNGMnVtWmhpVUhNOUhRYW5zN1ZoWS1ISm5CbFpoNjVhMGpkbncwaHFiX0REaDJSRWNfZktmSmg1UkloZ19zQzBrT29hWjZNS29GOXl0QUNsN0FxdXFlNHZBcEJDUG1aV21KVTZ3IiwiZSI6IkFRQUIiLCJkIjoiUTJtUEpjaGpsQXNGZkJnUGFtalcwWW40ZGx1Xy1HdDlFLVUwWHo0NzlVbGJLQ2F5SWdWRzF6ci1pVThwenp0anZwSXhTU3VDMzBJN0ZZVHlBVTNLSzd4YVpqaHduVGxNazFRdmU1MjNfWWVPMGEteFNyR2pmUmUxZlZ4ZEFjcGJIMW9Jc3VxUS1UZkozRlMxVlV4NUZIV2s2SV80Zk1LRExHZVlWeWVyQTFVS1NXZUoxYThjeUhLSTVCOUVyNkhKaGVYb1NDTVhYeS1rRFd1em1Sclp3TGVzd0g3SHI4d00wRXdfTUN4MnA3NUU2bU8zZnBlcUZKV1dwSGZqV2ZoVGp0RkVBOHVPMGd6dGdJSzlhbkVSV1FhMEx4b29NZ2E0TDczRFFYMFNyczFZdTQwYlJ2WWZJY3k2ZThFc2M2eFFjYkZtV29mVWlneEZJODZ1bXdIQktRIiwicCI6Ijl2aVNpOE9ueG1nVlVFZW5aLVhoa0haVHh2V2NGZjI5YWVYYVhHVGtMTlBzMHBMRFFZd01lWGFTandaUk5FQngxR2tPQ1I5dEFoV3JRNWxBaW5MeHNxX1JFT2VQajA0QTJ2U2RNQnIybWJuM2lxT0htaE9iQXhPOUd4OHdWNWt4V255YnJkeGE0dkRtdmV6QkJqaEdfYS1XenhMSUZSNUw4Q3dPd1R2UkRNMCIsInEiOiIxbGpLMWh6Nzh1aGYyWHBjNmw4T0FueFRxbnlYQ1pkM3VJQ1hTSW9wMXlXaVlSVWxVZk9EVW1XWG8yVE93RHIzM0Joc091YktBT3FSTm1Gc0ZWaTgzM1JVMjFXeFBOVHRqUllSRzYteHFId0NfYlBFQTAzbExYNkM0aVo3R254aHRpN2JEX0UxRy1OaXBRZFNHOEVwTEFwYnFzTmUzWTA0NUVSbzdaaGk2SmMiLCJkcCI6InZmQ1FyR01PanA0UF9rME5aLS01bWVRWExJWkt3X01CRVFmUTk0dzBuSEZreXRKS3p3ZUp0SVRIMUszVUdDNlVIUHVxNnNNN2tBWGdVTDMxa0VVMHMtdGFDX2s3Uk1pR0NkOWxZTkRyNVhETC05a20tZzJvQXliVUlwN0xEQ1BxZkNBbmp3QlEtZ2F5UDFGdFpuNHp3dm1mTDZUUE1zYTVPbjUzM285RmlPVSIsImRxIjoicmRTU292UWNpOUZTTWxBZTNGLThQOTNPQ0Z4RUxSNHVsRzJNd3VKeHJpNnlNbU53d2JabjBNSGRLVUNPdjZ6UzZDYlNWeTVsc2pxSkMzNFVwbmN4clZKdG92Y3E1cmVUOHpCckxYWGQ4VktwSmxETWJSV1ZfOEF5cXU4a05NV2NoS0FaUGlPU3U0dzdxclIyTFZZSWF0UDNwVlFPTWtUZVY1ajNNNEM2N2Y4IiwicWkiOiJOM3RDNm1RbHZkcVdEVVh1b2MtT1Mteno0ZEtKaHFxZl9FX1RNY0tIaUwzXzB2YWpGb1BMTlMxVXNnclFXa2RQUTQxd0RnYmZnS0JINGQyT29GamV6VVJPVmJTSHhjV2R1YUVjWmVJRVZDUnB1bHpKTGxnOGd5dGZ3Ty1TcXRoOE1YTkxPRGVhNHdQNzlYLXM3M2ZVZTVvRTFlQ19uUGlpR1diMlpsYmt4Z3MiLCJhbGciOiJSUzI1NiIsImtpZCI6InBvd2Vyc3luYy1iNGUwMTMzN2Q3In0= +POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 +POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 # ==================== PowerSync variables ==================== # The PowerSync API is accessible via this port diff --git a/dev-postgres-powersync/config-powersync/powersync.yaml b/dev-postgres-powersync/config-powersync/powersync.yaml index 81643ba..7b0008c 100644 --- a/dev-postgres-powersync/config-powersync/powersync.yaml +++ b/dev-postgres-powersync/config-powersync/powersync.yaml @@ -69,18 +69,10 @@ sync_rules: client_auth: # Enable this if using Supabase Auth # supabase: true + allow_local_jwks: true # JWKS URIs can be specified here jwks_uri: !env PS_JWKS_URL - # Optional static collection of public keys for JWT verification - # jwks: - # keys: - # - kty: 'RSA' - # n: '${PS_JWK_N}' - # e: '${PS_JWK_E}' - # alg: 'RS256' - # kid: '${PS_JWK_KID}' - # JWKS audience audience: ["powersync-dev", "powersync"] From ff6216318f3fc5428a657316f58a671482c4b89b Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Fri, 2 Aug 2024 22:59:22 +0300 Subject: [PATCH 04/20] add more startup options --- config/dev.env | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/dev.env b/config/dev.env index 0cad326..7f70db3 100644 --- a/config/dev.env +++ b/config/dev.env @@ -1,5 +1,12 @@ DJANGO_DEBUG=True WGER_USE_GUNICORN=False EXERCISE_CACHE_TTL=30 +DJANGO_PERFORM_MIGRATIONS=True SYNC_EXERCISES_ON_STARTUP=False +DOWNLOAD_EXERCISE_IMAGES_ON_STARTUP=False +DOWNLOAD_EXERCISE_VIDEOS_ON_STARTUP=False +LOAD_ONLINE_FIXTURES_ON_STARTUP=True # a couple of ingredients +SYNC_INGREDIENTS_ON_STARTUP=False # lots of ingredients. expensive AXES_ENABLED=False + + From aa16ad81fe73e9d47ccbea440f072a8d72d97c16 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Mon, 16 Sep 2024 12:38:38 +0300 Subject: [PATCH 05/20] fixes/tweaks --- config/dev.env | 2 ++ dev-postgres-powersync/.env | 1 + .../config-powersync/sync_rules.yaml | 21 ++++++++++++------- dev-postgres-powersync/docker-compose.yml | 2 +- .../powersync-services/powersync.yaml | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/config/dev.env b/config/dev.env index 7f70db3..a79869c 100644 --- a/config/dev.env +++ b/config/dev.env @@ -9,4 +9,6 @@ LOAD_ONLINE_FIXTURES_ON_STARTUP=True # a couple of ingredients SYNC_INGREDIENTS_ON_STARTUP=False # lots of ingredients. expensive AXES_ENABLED=False +POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 +POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 diff --git a/dev-postgres-powersync/.env b/dev-postgres-powersync/.env index 5a89c2b..2b89503 100644 --- a/dev-postgres-powersync/.env +++ b/dev-postgres-powersync/.env @@ -9,6 +9,7 @@ PS_JWKS_URL=http://web:8000/api/v2/powersync-keys # These can be generated by following the instructions in the `key-generator` folder # A temporary key will be used if these are not specified # --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md +# TODO: do we need these here? at least django needs them POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 17493b2..79beaca 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -6,10 +6,17 @@ bucket_definitions: global: data: - select * from exercises_muscle - -# user_lists: -# Separate bucket per todo list -# parameters: select id as list_id from lists where owner_id = token_parameters.user_id -# data: -# - select * from lists where id = bucket.list_id -# - select * from todos where list_id = bucket.list_id + nutrition_plan: + parameters: SELECT token_parameters.user_id as user_id + data: + - select * from nutrition_nutritionplan where user_id = bucket.user_id + by_plan_table: + parameters: SELECT id as plan_id FROM nutrition_nutritionplan WHERE user_id = token_parameters.user_id + data: + - SELECT * FROM nutrition_meal WHERE nutrition_meal.plan_id = bucket.plan_id + - select * from nutrition_logitem WHERE nutrition_logitem.plan_id = bucket.plan_id + # ingredient 1<->N log N-1 plan N-1 user + # post N-1 board N-1 user + # also + # mealItem has a meal_id and ingredient_id + # diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index 1fb4857..e5590c4 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -16,7 +16,7 @@ services: POWERSYNC_URL: powersync-dev volumes: - type: bind - source: /Users/roland/Entwicklung/wger/server + source: ${WGER_CODEPATH} target: /home/wger/src ports: - "8000:8000" diff --git a/dev-postgres-powersync/powersync-services/powersync.yaml b/dev-postgres-powersync/powersync-services/powersync.yaml index 03c89bb..c2369b5 100644 --- a/dev-postgres-powersync/powersync-services/powersync.yaml +++ b/dev-postgres-powersync/powersync-services/powersync.yaml @@ -47,7 +47,7 @@ services: # The following will be inserted into the powersync.yaml file via templating # Templates are used for filesystem and base64 configuration files PS_PG_URI: postgres://${PG_DATABASE_USER}:${PG_DATABASE_PASSWORD}@db:${PG_DATABASE_PORT}/${PG_DATABASE_NAME} - PS_MONGO_URI: mongodb://mongo:27017/powersync_demo + PS_MONGO_URI: mongodb://mongo:27017/powersync_wger # Note that powersync.yaml->client_auth->allow_local_jwks must be true for local URLs to work PS_JWKS_URL: ${PS_JWKS_URL} From 0768da6ac223e7d6b75868223efd21eacc626df5 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 25 Sep 2024 18:39:38 +0200 Subject: [PATCH 06/20] Build pg_ivm postgres extension to be used with powersync --- dev-postgres-powersync/docker-compose.yml | 13 +++++++++--- postgres/Dockerfile | 24 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 postgres/Dockerfile diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index e5590c4..b6a7f3e 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -34,17 +34,20 @@ services: restart: unless-stopped db: - image: postgres:15-alpine + build: + context: ../postgres + dockerfile: Dockerfile environment: - POSTGRES_USER=wger - POSTGRES_PASSWORD=wger - POSTGRES_DB=wger volumes: - - postgres-data:/var/lib/postgresql/data/ + - postgres-dev-data:/var/lib/postgresql/data/ ports: - "5432:5432" expose: - 5432 + # "-c", "log_statement=all", "-c", "log_min_error_statement=DEBUG1" command: ["postgres", "-c", "wal_level=logical"] healthcheck: test: pg_isready -U wger @@ -55,7 +58,11 @@ services: restart: unless-stopped volumes: - postgres-data: + postgres-dev-data: + +networks: + default: + name: wger-dev-network include: - path: powersync-services/mongo.yaml diff --git a/postgres/Dockerfile b/postgres/Dockerfile new file mode 100644 index 0000000..013057b --- /dev/null +++ b/postgres/Dockerfile @@ -0,0 +1,24 @@ +FROM postgres:15-bookworm AS builder + +ENV VERSION=1.9 + +RUN apt-get update && \ + apt-get install -y \ + git \ + build-essential \ + postgresql-server-dev-15 + +WORKDIR /tmp +RUN git clone -b v${VERSION} https://github.com/sraoss/pg_ivm.git + +WORKDIR /tmp/pg_ivm +RUN make + +# Create the final image +FROM postgres:15-bookworm + +COPY --from=builder /tmp/pg_ivm/pg_ivm*.sql /usr/share/postgresql/15/extension +COPY --from=builder /tmp/pg_ivm/pg_ivm.control /usr/share/postgresql/15/extension +COPY --from=builder /tmp/pg_ivm/pg_ivm.so /usr/lib/postgresql/15/lib + +EXPOSE 5432 \ No newline at end of file From 8af9a6860ec19fe621ec2e1d77f6a4d4b26a40f1 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Thu, 26 Sep 2024 10:30:55 +0200 Subject: [PATCH 07/20] Simplify powersync docker-compose.yml file Now the .env file only has local configurations like the path to the wger backend checkout --- .gitignore | 1 + config/dev.env | 4 +++- config/prod.env | 9 ++++++++- dev-postgres-powersync/.env | 18 ----------------- dev-postgres-powersync/.env.example | 3 +++ dev-postgres-powersync/docker-compose.yml | 7 +------ .../powersync-services/powersync.yaml | 20 +++++-------------- 7 files changed, 21 insertions(+), 41 deletions(-) delete mode 100644 dev-postgres-powersync/.env create mode 100644 dev-postgres-powersync/.env.example diff --git a/.gitignore b/.gitignore index c949afd..ab9062e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /config/Caddyfile /docker-compose.override.yml +/dev-postgres-powersync/.env diff --git a/config/dev.env b/config/dev.env index a79869c..5a31537 100644 --- a/config/dev.env +++ b/config/dev.env @@ -9,6 +9,8 @@ LOAD_ONLINE_FIXTURES_ON_STARTUP=True # a couple of ingredients SYNC_INGREDIENTS_ON_STARTUP=False # lots of ingredients. expensive AXES_ENABLED=False +# These can be generated by following the instructions in the `key-generator` folder +# A temporary key will be used if these are not specified +# --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 - diff --git a/config/prod.env b/config/prod.env index 276f7b9..01b047b 100644 --- a/config/prod.env +++ b/config/prod.env @@ -92,6 +92,9 @@ DJANGO_DB_HOST=db DJANGO_DB_PORT=5432 DJANGO_PERFORM_MIGRATIONS=True # Perform any new database migrations on startup +# postgres://:@:/ +PS_PG_URI=postgres://wger:wger@db:5432/wger + # # Cache DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache @@ -151,4 +154,8 @@ FROM_EMAIL='wger Workout Manager ' # Set your name and email to be notified if an internal server error occurs. # Needs a working email configuration -# DJANGO_ADMINS=your name,email@example.com \ No newline at end of file +# DJANGO_ADMINS=your name,email@example.com + +# +# Powersync +PS_PORT=8080 \ No newline at end of file diff --git a/dev-postgres-powersync/.env b/dev-postgres-powersync/.env deleted file mode 100644 index 2b89503..0000000 --- a/dev-postgres-powersync/.env +++ /dev/null @@ -1,18 +0,0 @@ -# ==================== Postgres credentials ================================ -PG_DATABASE_NAME=wger -PG_DATABASE_PORT=5432 -PG_DATABASE_USER=wger -PG_DATABASE_PASSWORD=wger - -PS_JWKS_URL=http://web:8000/api/v2/powersync-keys - -# These can be generated by following the instructions in the `key-generator` folder -# A temporary key will be used if these are not specified -# --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md -# TODO: do we need these here? at least django needs them -POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 -POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 - -# ==================== PowerSync variables ==================== -# The PowerSync API is accessible via this port -PS_PORT=8080 diff --git a/dev-postgres-powersync/.env.example b/dev-postgres-powersync/.env.example new file mode 100644 index 0000000..a814d23 --- /dev/null +++ b/dev-postgres-powersync/.env.example @@ -0,0 +1,3 @@ +# Copy to .env + +WGER_CODEPATH=/path/to/wger/server \ No newline at end of file diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index b6a7f3e..6ec9b67 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -9,14 +9,9 @@ services: env_file: - ../config/prod.env - ../config/dev.env - # django backend should do some powersync stuff.. - environment: - # From the PowerSync service name - # This is just used to populate the JWT audience - POWERSYNC_URL: powersync-dev volumes: - type: bind - source: ${WGER_CODEPATH} + source: ${WGER_CODEPATH:?set the absolute path to the wger backend code in the .env file or env variable} target: /home/wger/src ports: - "8000:8000" diff --git a/dev-postgres-powersync/powersync-services/powersync.yaml b/dev-postgres-powersync/powersync-services/powersync.yaml index c2369b5..3f95700 100644 --- a/dev-postgres-powersync/powersync-services/powersync.yaml +++ b/dev-postgres-powersync/powersync-services/powersync.yaml @@ -25,6 +25,9 @@ services: # Mounts the specified config folder to the container # This folder should contain `powersync.yaml and sync_rules.yaml - ../config-powersync:/config + env_file: + - ../../config/prod.env + - ../../config/dev.env environment: # This is the path (inside the container) to the YAML config file # Alternatively the config path can be specified in the command @@ -44,21 +47,8 @@ services: # or e.g.: Via a command line parameter # command: ['start', '-r', 'unified', '-sync64', '[base64 encoded content]'] - # The following will be inserted into the powersync.yaml file via templating - # Templates are used for filesystem and base64 configuration files - PS_PG_URI: postgres://${PG_DATABASE_USER}:${PG_DATABASE_PASSWORD}@db:${PG_DATABASE_PORT}/${PG_DATABASE_NAME} PS_MONGO_URI: mongodb://mongo:27017/powersync_wger - - # Note that powersync.yaml->client_auth->allow_local_jwks must be true for local URLs to work - PS_JWKS_URL: ${PS_JWKS_URL} - - # The port which the PowerSync API server should run on - PS_PORT: ${PS_PORT} - - # Potential JWKs public key template - # PS_JWK_N: - # PS_JWK_E: - # PS_JWK_KID: + PS_JWKS_URL: http://web:8000/api/v2/powersync-keys ports: - - ${PS_PORT}:${PS_PORT} + - 8080:8080 From da8b0a7ea0e1c9e8dfea07894bce4a523a623ff0 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 16 Oct 2024 09:14:57 +0200 Subject: [PATCH 08/20] Add dockerfile for development --- dev-postgres-powersync/docker-compose.yml | 3 ++- dev/.env.example | 3 +++ dev/docker-compose.yml | 5 +++-- dev/server.dev.Dockerfile | 21 +++++++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 dev/.env.example create mode 100644 dev/server.dev.Dockerfile diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index 6ec9b67..984605f 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -2,7 +2,8 @@ name: wger-dev-postgres-powersync services: web: - image: wger/server:latest + build: + dockerfile: ../dev/server.dev.Dockerfile depends_on: db: condition: service_healthy diff --git a/dev/.env.example b/dev/.env.example new file mode 100644 index 0000000..a814d23 --- /dev/null +++ b/dev/.env.example @@ -0,0 +1,3 @@ +# Copy to .env + +WGER_CODEPATH=/path/to/wger/server \ No newline at end of file diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index 3f36e9a..74e7f6e 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -2,14 +2,15 @@ name: wger-dev services: web: - image: wger/server:latest + build: + dockerfile: server.dev.Dockerfile env_file: - ../config/prod.env - ../config/dev.env - ../config/dev-sqlite.env volumes: - type: bind - source: /home/dieter/code/wger-wger + source: ${WGER_CODEPATH:?set the absolute path to the wger backend code in the .env file or env variable} target: /home/wger/src ports: - "8000:8000" diff --git a/dev/server.dev.Dockerfile b/dev/server.dev.Dockerfile new file mode 100644 index 0000000..450eb01 --- /dev/null +++ b/dev/server.dev.Dockerfile @@ -0,0 +1,21 @@ +# +# Installs some additional packages needed for development +# + +FROM wger/server:latest + +USER root +WORKDIR /home/wger/src +RUN apt-get update && \ + apt-get install -y \ + git \ + vim \ + yarnpkg \ + sassc + +RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn \ + && ln -s /usr/bin/sassc /usr/bin/sass \ + && pip3 install --break-system-packages --user -r requirements.txt \ + && pip3 install --break-system-packages --user -r requirements_dev.txt + +USER wger From 5e4bc42947a8d6e569eb447ef7d88a0bc69c6018 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 16 Oct 2024 10:42:17 +0200 Subject: [PATCH 09/20] Move development file to the server repo Building it here was not really possible due to the way docker handles its build context --- dev-postgres-powersync/docker-compose.yml | 4 +++- dev/docker-compose.yml | 4 +++- dev/server.dev.Dockerfile | 21 --------------------- 3 files changed, 6 insertions(+), 23 deletions(-) delete mode 100644 dev/server.dev.Dockerfile diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index 984605f..a5aff29 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -3,7 +3,9 @@ name: wger-dev-postgres-powersync services: web: build: - dockerfile: ../dev/server.dev.Dockerfile + pull: true + context: ${WGER_CODEPATH} + dockerfile: ./extras/docker/development/Dockerfile depends_on: db: condition: service_healthy diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index 74e7f6e..99032ce 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -3,7 +3,9 @@ name: wger-dev services: web: build: - dockerfile: server.dev.Dockerfile + pull: true + context: ${WGER_CODEPATH} + dockerfile: ./extras/docker/development/Dockerfile env_file: - ../config/prod.env - ../config/dev.env diff --git a/dev/server.dev.Dockerfile b/dev/server.dev.Dockerfile deleted file mode 100644 index 450eb01..0000000 --- a/dev/server.dev.Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# -# Installs some additional packages needed for development -# - -FROM wger/server:latest - -USER root -WORKDIR /home/wger/src -RUN apt-get update && \ - apt-get install -y \ - git \ - vim \ - yarnpkg \ - sassc - -RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn \ - && ln -s /usr/bin/sassc /usr/bin/sass \ - && pip3 install --break-system-packages --user -r requirements.txt \ - && pip3 install --break-system-packages --user -r requirements_dev.txt - -USER wger From 88848c4c68395e4188a8a828fe7996c0a4e7313f Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sat, 12 Oct 2024 11:10:29 +0300 Subject: [PATCH 10/20] cleanup --- config/prod.env | 3 ++- dev-postgres-powersync/powersync-services/powersync.yaml | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/prod.env b/config/prod.env index 01b047b..c4aeff4 100644 --- a/config/prod.env +++ b/config/prod.env @@ -92,8 +92,9 @@ DJANGO_DB_HOST=db DJANGO_DB_PORT=5432 DJANGO_PERFORM_MIGRATIONS=True # Perform any new database migrations on startup -# postgres://:@:/ +# postgres://:@:/ PS_PG_URI=postgres://wger:wger@db:5432/wger +PS_MONGO_URI: mongodb://mongo:27017/powersync_wger # # Cache diff --git a/dev-postgres-powersync/powersync-services/powersync.yaml b/dev-postgres-powersync/powersync-services/powersync.yaml index 3f95700..14096cc 100644 --- a/dev-postgres-powersync/powersync-services/powersync.yaml +++ b/dev-postgres-powersync/powersync-services/powersync.yaml @@ -46,8 +46,6 @@ services: # POWERSYNC_SYNC_RULES_B64: "[base64 encoded sync rules]" # or e.g.: Via a command line parameter # command: ['start', '-r', 'unified', '-sync64', '[base64 encoded content]'] - - PS_MONGO_URI: mongodb://mongo:27017/powersync_wger PS_JWKS_URL: http://web:8000/api/v2/powersync-keys ports: From 024dc14b475b1ccb55ee28956b78c41bb655c4ab Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sat, 12 Oct 2024 11:13:36 +0300 Subject: [PATCH 11/20] update sync rules --- .../config-powersync/sync_rules.yaml | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 79beaca..d9ac923 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -2,21 +2,26 @@ # https://docs.powersync.com/usage/sync-rules # Note that changes to this file are not watched. # The service needs to be restarted for changes to take effect. +# Warning, parameter queries have a limit of 1000 rows (before filtering)! bucket_definitions: global: data: - select * from exercises_muscle - nutrition_plan: + by_user_id: parameters: SELECT token_parameters.user_id as user_id data: - select * from nutrition_nutritionplan where user_id = bucket.user_id - by_plan_table: - parameters: SELECT id as plan_id FROM nutrition_nutritionplan WHERE user_id = token_parameters.user_id - data: - - SELECT * FROM nutrition_meal WHERE nutrition_meal.plan_id = bucket.plan_id - - select * from nutrition_logitem WHERE nutrition_logitem.plan_id = bucket.plan_id - # ingredient 1<->N log N-1 plan N-1 user - # post N-1 board N-1 user - # also - # mealItem has a meal_id and ingredient_id - # + - select * from ivm_nutrition_meal where user_id = bucket.user_id + - select * from ivm_nutrition_mealitem where user_id = bucket.user_id + - select * from ivm_nutrition_logitem where user_id = bucket.user_id + # "too many buckets" errors + # meal_item_ingredients: # note: we are restricted by <=1000 distinct ingredient_id values here + # parameters: select ingredient_id as ingredient_id FROM ivm_nutrition_mealitem WHERE user_id = token_parameters.user_id + # data: + # - select * from nutrition_ingredient WHERE ingredient_id = bucket.ingredient_id + # - select * from nutrition_image WHERE ingredient_id = bucket.ingredient_id + # log_item_ingredients: + # parameters: select ingredient_id as ingredient_id FROM ivm_nutrition_logitem WHERE user_id = token_parameters.user_id + # data: + # - select * from nutrition_ingredient WHERE ingredient_id = bucket.ingredient_id + # - select * from nutrition_image WHERE ingredient_id = bucket.ingredient_id From ecda257b4f111a43448649211c45c123576a83bd Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Thu, 17 Oct 2024 14:52:27 +0300 Subject: [PATCH 12/20] ivm aliases --- dev-postgres-powersync/config-powersync/sync_rules.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index d9ac923..7a563e8 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -11,9 +11,9 @@ bucket_definitions: parameters: SELECT token_parameters.user_id as user_id data: - select * from nutrition_nutritionplan where user_id = bucket.user_id - - select * from ivm_nutrition_meal where user_id = bucket.user_id - - select * from ivm_nutrition_mealitem where user_id = bucket.user_id - - select * from ivm_nutrition_logitem where user_id = bucket.user_id + - select * from ivm_nutrition_meal as nutrition_meal where user_id = bucket.user_id + - select * from ivm_nutrition_mealitem as nutrition_mealitem where user_id = bucket.user_id + - select * from ivm_nutrition_logitem as nutrition_logitem where user_id = bucket.user_id # "too many buckets" errors # meal_item_ingredients: # note: we are restricted by <=1000 distinct ingredient_id values here # parameters: select ingredient_id as ingredient_id FROM ivm_nutrition_mealitem WHERE user_id = token_parameters.user_id From a0c83079d0b984329669b7e9642fc0fb07ac6377 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Thu, 31 Oct 2024 22:36:00 +0200 Subject: [PATCH 13/20] fix --- dev-postgres-powersync/config-powersync/sync_rules.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 7a563e8..91c27cb 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -10,7 +10,7 @@ bucket_definitions: by_user_id: parameters: SELECT token_parameters.user_id as user_id data: - - select * from nutrition_nutritionplan where user_id = bucket.user_id + - select * from ivm_nutrition_nutritionplan as nutrition_nutritionplan where user_id = bucket.user_id - select * from ivm_nutrition_meal as nutrition_meal where user_id = bucket.user_id - select * from ivm_nutrition_mealitem as nutrition_mealitem where user_id = bucket.user_id - select * from ivm_nutrition_logitem as nutrition_logitem where user_id = bucket.user_id From 36d6b1eb74299e122357eb55dea20d6f42300310 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 19 Oct 2025 15:56:49 +0200 Subject: [PATCH 14/20] Post merge fixes... --- config/prod.env | 17 +++++++++++++++++ dev/docker-compose.yml | 4 ---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/config/prod.env b/config/prod.env index f17dd08..72394ae 100644 --- a/config/prod.env +++ b/config/prod.env @@ -184,6 +184,23 @@ FROM_EMAIL='wger Workout Manager ' # Needs a working email configuration # DJANGO_ADMINS=your name,email@example.com +# +# Django Rest Framework +# The number of proxies in front of the application. In the default configuration +# only nginx is. Change as approtriate if your setup differs. Also note that this +# is only used when throttling API requests. +NUMBER_OF_PROXIES=1 + +# +# Gunicorn +# +# Additional gunicorn options, change as needed. +# For the number of workers to spawn, a usually recommended value is (2 x $num_cores) + 1 +# see: +# - https://docs.gunicorn.org/en/stable/settings.html +# - https://github.com/wger-project/wger/blob/master/extras/docker/production/entrypoint.sh#L95 +GUNICORN_CMD_ARGS="--workers 3 --threads 2 --worker-class gthread --proxy-protocol True --timeout 240" + # # Powersync PS_PORT=8080 \ No newline at end of file diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index 2dc3c31..2ea7041 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -19,10 +19,6 @@ services: - ../config/prod.env - ../config/dev.env - ../config/dev-sqlite.env - volumes: - - type: bind - source: ${WGER_CODEPATH:?set the absolute path to the wger backend code in the .env file or env variable} - target: /home/wger/src ports: - "8000:8000" From 964909eb299dad2f06a887269010c5755b014d54 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 19 Oct 2025 15:58:01 +0200 Subject: [PATCH 15/20] Bump ivm version --- postgres/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postgres/Dockerfile b/postgres/Dockerfile index 013057b..0a2b15e 100644 --- a/postgres/Dockerfile +++ b/postgres/Dockerfile @@ -1,6 +1,6 @@ FROM postgres:15-bookworm AS builder -ENV VERSION=1.9 +ENV VERSION=1.12 RUN apt-get update && \ apt-get install -y \ From bb518ec6a0a08fecef299dfe6ecb42ce7b1b4940 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 24 Oct 2025 14:05:04 +0200 Subject: [PATCH 16/20] Add exercise tables to sync rules --- config/dev.env | 2 +- .../config-powersync/sync_rules.yaml | 29 +++++++++++++++---- dev-postgres-powersync/docker-compose.yml | 3 ++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/config/dev.env b/config/dev.env index 5a31537..479e76b 100644 --- a/config/dev.env +++ b/config/dev.env @@ -5,7 +5,7 @@ DJANGO_PERFORM_MIGRATIONS=True SYNC_EXERCISES_ON_STARTUP=False DOWNLOAD_EXERCISE_IMAGES_ON_STARTUP=False DOWNLOAD_EXERCISE_VIDEOS_ON_STARTUP=False -LOAD_ONLINE_FIXTURES_ON_STARTUP=True # a couple of ingredients +LOAD_ONLINE_FIXTURES_ON_STARTUP=False # a couple of ingredients SYNC_INGREDIENTS_ON_STARTUP=False # lots of ingredients. expensive AXES_ENABLED=False diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 91c27cb..32c4b7c 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -6,14 +6,31 @@ bucket_definitions: global: data: - - select * from exercises_muscle + # Core tables + - SELECT * FROM core_language + - SELECT * FROM core_license + + # Exercises + - SELECT * FROM exercises_exercise + - SELECT * FROM exercises_translation + - SELECT * FROM exercises_alias + - SELECT * FROM exercises_muscle + - SELECT * FROM exercises_exercise_muscles + - SELECT * FROM exercises_exercise_muscles_secondary + - SELECT * FROM exercises_equipment + - SELECT * FROM exercises_exercise_equipment + - SELECT * FROM exercises_exercisecategory + - SELECT * FROM exercises_exerciseimage + - SELECT * FROM exercises_exercisevideo + - SELECT * FROM exercises_variation by_user_id: - parameters: SELECT token_parameters.user_id as user_id + parameters: SELECT token_parameters.user_id AS user_id data: - - select * from ivm_nutrition_nutritionplan as nutrition_nutritionplan where user_id = bucket.user_id - - select * from ivm_nutrition_meal as nutrition_meal where user_id = bucket.user_id - - select * from ivm_nutrition_mealitem as nutrition_mealitem where user_id = bucket.user_id - - select * from ivm_nutrition_logitem as nutrition_logitem where user_id = bucket.user_id + - SELECT uuid AS id, * FROM weight_weightentry WHERE user_id = bucket.user_id +# - select * from ivm_nutrition_nutritionplan as nutrition_nutritionplan where user_id = bucket.user_id +# - select * from ivm_nutrition_meal as nutrition_meal where user_id = bucket.user_id +# - select * from ivm_nutrition_mealitem as nutrition_mealitem where user_id = bucket.user_id +# - select * from ivm_nutrition_logitem as nutrition_logitem where user_id = bucket.user_id # "too many buckets" errors # meal_item_ingredients: # note: we are restricted by <=1000 distinct ingredient_id values here # parameters: select ingredient_id as ingredient_id FROM ivm_nutrition_mealitem WHERE user_id = token_parameters.user_id diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index a5aff29..8897afc 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -41,6 +41,9 @@ services: - POSTGRES_DB=wger volumes: - postgres-dev-data:/var/lib/postgresql/data/ + # automatically import dump + #- ../wger-2025-09-09_19-25.dump:/docker-entrypoint-initdb.d/00-init-db.sql + #- ../wger-reset-password.sql:/docker-entrypoint-initdb.d/01-reset-pw.sql ports: - "5432:5432" expose: From ac59782b8cb91eb56c0d5ebdc667f43920b52ef0 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 25 Oct 2025 13:27:43 +0200 Subject: [PATCH 17/20] Update sync rules --- .../config-powersync/sync_rules.yaml | 3 +++ dev-postgres-powersync/docker-compose.yml | 20 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index 32c4b7c..a40884f 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -27,6 +27,9 @@ bucket_definitions: parameters: SELECT token_parameters.user_id AS user_id data: - SELECT uuid AS id, * FROM weight_weightentry WHERE user_id = bucket.user_id + - SELECT uuid AS id, * FROM manager_workoutlog WHERE user_id = bucket.user_id + - SELECT * FROM measurements_category WHERE user_id = bucket.user_id + # - select * from ivm_nutrition_nutritionplan as nutrition_nutritionplan where user_id = bucket.user_id # - select * from ivm_nutrition_meal as nutrition_meal where user_id = bucket.user_id # - select * from ivm_nutrition_mealitem as nutrition_mealitem where user_id = bucket.user_id diff --git a/dev-postgres-powersync/docker-compose.yml b/dev-postgres-powersync/docker-compose.yml index 8897afc..2cb73fa 100644 --- a/dev-postgres-powersync/docker-compose.yml +++ b/dev-postgres-powersync/docker-compose.yml @@ -4,7 +4,7 @@ services: web: build: pull: true - context: ${WGER_CODEPATH} + context: ${WGER_CODEPATH:?set the absolute path to the wger backend code in the .env file or env variable} dockerfile: ./extras/docker/development/Dockerfile depends_on: db: @@ -12,10 +12,15 @@ services: env_file: - ../config/prod.env - ../config/dev.env - volumes: - - type: bind - source: ${WGER_CODEPATH:?set the absolute path to the wger backend code in the .env file or env variable} - target: /home/wger/src + develop: + watch: + - action: sync + path: ${WGER_CODEPATH} + target: /home/wger/src + - action: rebuild + path: ${WGER_CODEPATH}/pyproject.toml + - action: rebuild + path: ${WGER_CODEPATH}/package.json ports: - "8000:8000" @@ -42,8 +47,9 @@ services: volumes: - postgres-dev-data:/var/lib/postgresql/data/ # automatically import dump - #- ../wger-2025-09-09_19-25.dump:/docker-entrypoint-initdb.d/00-init-db.sql - #- ../wger-reset-password.sql:/docker-entrypoint-initdb.d/01-reset-pw.sql +# - ../wger-2025-09-09_19-25.dump:/docker-entrypoint-initdb.d/00-init-db.sql:ro +# - ../wger-reset-password.sql:/docker-entrypoint-initdb.d/01-reset-pw.sql:ro +# - ../wger-cleanup.sql:/docker-entrypoint-initdb.d/02-cleanup.sql:ro ports: - "5432:5432" expose: From 9caca8dcf662009f7adfef6066f66f3b8ef8de00 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 5 Nov 2025 00:01:14 +0100 Subject: [PATCH 18/20] Configure the powersync URL This will get sent to the client along with the token --- config/dev.env | 1 + 1 file changed, 1 insertion(+) diff --git a/config/dev.env b/config/dev.env index 479e76b..0bda3b4 100644 --- a/config/dev.env +++ b/config/dev.env @@ -14,3 +14,4 @@ AXES_ENABLED=False # --> keys generated with https://github.com/powersync-ja/powersync-jwks-example/blob/main/README.md POWERSYNC_JWKS_PUBLIC_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAia2lkIjogInBvd2Vyc3luYyJ9 POWERSYNC_JWKS_PRIVATE_KEY=eyJhbGciOiAiUlMyNTYiLCAia3R5IjogIlJTQSIsICJuIjogInFhdVVnb0ZXenRNcjVEYks3bFIxZXUxazJrdllyblJkRGh1NDFyWnFLeWhDWkJya0FTS0d0N25KbVUwVEpKb1d0cFF2eHVvc0ZGeW1BMUhXQnNaY0dtVlcxdlowdDJlazl4THg5bjg2UWRIVWc1MktsRG9ZUzNtRTFaWW5BYzJfRDM3UmxyQkVxRXpuSnBNeDJ3VkpLcVdRZHlWSWh6Q082YzRnOWN3VExGbUhkVXVURXMzdDNBN1MyNENrUkM2TE1KSFFvRTJzay1uWlJyZE9fTHVNNUJJcVp2b1dWUC1Salp4OWk4OGdaaDhvOEcyWW1xZnMwczRzYW1fam85bmFaYlo4aFBFQ0FZdnZUZ29ObzRHMGpXZERZeGdPWHlXTE80bTk1SEdMSFJMZjZ5M29vdkZad2QwN2FFbThEU3dBX3hsY1V4WHNNZ0ZlYVVVZkp2NEV4USIsICJlIjogIkFRQUIiLCAiZCI6ICJQZXVwNjhUakZ1RVhaQmFoRWNDT0RWcEUwNndaZkhWb0hvVjhmQk9maEhlUlh6STNJcmprZkhtWHV0UlhsNlNLaElCcFBVbHA0OVo2R2IwTWhIVncySXRDV1hvaFYydkNWdzg1Y2RHMXc1NmQxWml4b2UzZnZ1LXV6RG9icXp0WXJvR0VZTi1jZHVWMS1HeUFwZU4wYzlWdmR5UUtwNWZQbUVGTFl4amlxR3k5UUhyTldpcGJmZXdPUGY0YUl4X05VRnE3R1BsUk1yalA4VEhvSzNPOVNfXzJpR09LRVpINDFUWkpscVBZX0s5dFNkbFNKd1FPWEtwOFc2ZUdGT3l2MElueVhsUXhHb0ZBWVNrUC12WTlWQy1vTUtzdmhocm1GeGM0VlU2OUZ3VWFJYUdaOU9jaXF4M3B0aE9sU1drRjFhbEtxNWFJZ2VHbEUzM2VyNGthSXciLCAicCI6ICI1WDN0QzN4Z0hwbm91U1JwSlg4c0ZWRm5vamhxMWJoWkF3c3VRaXBxWWgtZmJNRGI4a2NTTy1fT3BEMExNekYzcHp0dVNRb0NZOFc0WjI0TEJ6cFRuUlFid0JrYWt3VDMybmZIU1J0d3RnM1ZjWkkxZFNsdHgtclhEcHlBMDNHa1RvLUxEZkp1UzF0a1FYQXB0OTBkcnJHMndjQ25oRXc4bGx2SzR2cWRucHMiLCAicSI6ICJ2VVM2V2QtY2trTUJMVmJvSkVaVnRtMlFLTFE2dV9oZEFrbTFWa3dGajMxZWZWRTlFRWRSa0F0dGVoOWh2ZzBkM2FXVDZ1bFQ4YlpubWo3WkFjNG55aVdwOTlFd0k5U0hFX01UUE11YVZSeUw5SmFIX2R0Uk5nVGE5UV9hZUs2d1pkY3RwLUZRT1lteVlDWmhzRnVOTG45TFJ3UklJOVJ0YlBXYW55X01jQjgiLCAiZHAiOiAiWjFNNkhmakN3aVJqcnJBaEV6dmQyajlMbkxNd0RzZXdjX2xkdTNhamJVaDFuQjU5S09rczRZV0lFVlJXclpieEczOWJtVkVEWUc2T0p5dFpsY2lDQ3ZBWnluVEREVHlvWjFtVWhXcndaVmQzS1dvOTNXRm94eUVKOE04d0JZTmVDZTBCRzZkeVYwVnZyekxUNWEtTmhMRUk2dFZWMXZBSU8xNWF5N1V3c0U4IiwgImRxIjogIktsclpBUWZEZUEtNmtiVGpHa3NMSDFvQmFycDZjbG93SmpUc2ViVmxnU2pqSGxReHdCVFZzZEI4M1Zsc2ZDVmZTNXlrTDJ1cnQybkVZWVl5OWU1MmhReE1yd0tITFYyQUpQeS1qMXBZM1RjWU10SUUtTkE5cWtNSDVOTjVab3hoT1VrZ0ZIT2RpbUxBSWpnMG9FeThtVzB2SVdOWjZYcS1TaVhrUmo5aUZxMCIsICJxaSI6ICJzSV84RTh0MTBsRDY2NTh3UXRpY19BaUUxOVk1Rms0SDJWbnpGclBhVU04aWFNaVc2eUZxMFZuN3RXa2RTWS1STTB1SFMwdmVmSEcyZTBKSWxEanhBUmZWZUcwNTFyVUNRZjBkSnR4U0ZDQUp2eGxMRTZsYjZOQlUwZVIyMld6bjVob1ZZTVpHZnQ5QnA0SlVOOHJkMF9lMm1kSjhxc09wM1NLQ3NTSTByUkkiLCAia2lkIjogInBvd2Vyc3luYyJ9 +POWERSYNC_URL=http://localhost:8080 From bd52d23d98fa858e3c4b6d7e84165e86bf2b467c Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 5 Nov 2025 00:01:33 +0100 Subject: [PATCH 19/20] Bump mongo version --- dev-postgres-powersync/powersync-services/mongo.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-postgres-powersync/powersync-services/mongo.yaml b/dev-postgres-powersync/powersync-services/mongo.yaml index e012836..9381497 100644 --- a/dev-postgres-powersync/powersync-services/mongo.yaml +++ b/dev-postgres-powersync/powersync-services/mongo.yaml @@ -1,7 +1,7 @@ services: # MongoDB Service used internally mongo: - image: mongo:7.0 + image: mongo:8 command: --replSet rs0 --bind_ip_all --quiet restart: unless-stopped ports: @@ -11,7 +11,7 @@ services: # Initializes the MongoDB replica set. This service will not usually be actively running mongo-rs-init: - image: mongo:7.0 + image: mongo:8 depends_on: - mongo restart: on-failure From 282d028e16bcf76e848aa72e1c7f283f3c695587 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 5 Nov 2025 00:01:53 +0100 Subject: [PATCH 20/20] Add missing data buckets --- dev-postgres-powersync/config-powersync/sync_rules.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev-postgres-powersync/config-powersync/sync_rules.yaml b/dev-postgres-powersync/config-powersync/sync_rules.yaml index a40884f..f25c790 100644 --- a/dev-postgres-powersync/config-powersync/sync_rules.yaml +++ b/dev-postgres-powersync/config-powersync/sync_rules.yaml @@ -3,12 +3,17 @@ # Note that changes to this file are not watched. # The service needs to be restarted for changes to take effect. # Warning, parameter queries have a limit of 1000 rows (before filtering)! +config: + edition: 2 + bucket_definitions: global: data: # Core tables - SELECT * FROM core_language - SELECT * FROM core_license + - SELECT * FROM core_repetitionunit; + - SELECT * FROM core_weightunit; # Exercises - SELECT * FROM exercises_exercise @@ -28,6 +33,7 @@ bucket_definitions: data: - SELECT uuid AS id, * FROM weight_weightentry WHERE user_id = bucket.user_id - SELECT uuid AS id, * FROM manager_workoutlog WHERE user_id = bucket.user_id + - SELECT uuid AS id, * FROM manager_workoutsession WHERE user_id = bucket.user_id - SELECT * FROM measurements_category WHERE user_id = bucket.user_id # - select * from ivm_nutrition_nutritionplan as nutrition_nutritionplan where user_id = bucket.user_id