From b051b658b7edbf9d02d50f7af1136bc92e72413a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 15 Sep 2024 12:55:48 +0000 Subject: [PATCH] chore: update installation data --- scripts/self-hosted/db.sql | 23 ++++++++++++----------- scripts/self-hosted/tasks.json | 8 ++++---- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/scripts/self-hosted/db.sql b/scripts/self-hosted/db.sql index 68a28df..7242908 100644 --- a/scripts/self-hosted/db.sql +++ b/scripts/self-hosted/db.sql @@ -1106,8 +1106,8 @@ COPY public.customers (id, billable_type, billable_id, paddle_id, name, email, t -- COPY public.deployments (id, team_id, service_id, data, created_at, updated_at) FROM stdin; -1 1 1 {"processes": [{"name": "svc", "caddy": [], "ports": [{"targetPort": 80, "publishedPort": 80}, {"targetPort": 443, "publishedPort": 443}, {"targetPort": 2019, "publishedPort": 2019}], "backups": [], "command": "sh /start.sh", "envVars": [{"name": "CADDY_ADMIN", "value": "0.0.0.0:2019"}], "fastCgi": null, "volumes": [{"id": "volume-a1b2c3d4e5f", "name": "data", "path": "/data", "dockerName": "svc_1_caddy_svc_data", "backupSchedule": null}, {"id": "volume-g6h7i8j9k1", "name": "config", "path": "/config", "dockerName": "svc_1_caddy_svc_config", "backupSchedule": null}], "workers": [], "replicas": 1, "dockerName": "svc_1_caddy_svc", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [{"path": "/ptah/caddy/tls/.keep", "content": "# Keep this file", "dockerName": "svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep"}, {"path": "/start.sh", "content": "# This is the entrypoint for Caddy.\\n# By default, it starts with a blank Caddyfile with a standard \\"Hello from Caddy\\" page.\\n\\nif [ -f \\"/config/caddy/autosave.json\\" ]; then\\n echo \\"Starting with autosave.json\\"\\n\\n caddy run --config \\"/config/caddy/autosave.json\\"\\nelse\\n echo \\"Starting with the default Caddyfile\\"\\n\\n caddy run --config \\"/etc/caddy/Caddyfile\\"\\nfi", "dockerName": "svc_1_caddy_svc_dpl_1_cfg_start_sh"}], "dockerImage": "caddy:2.8-alpine", "secretFiles": [], "backupVolume": {"id": "volume-l2m3n4o5p6", "name": "backups", "path": "/ptah/backups", "dockerName": "svc_1_caddy_svc_ptah_backups"}, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": 1, "dockerRegistryId": null}], "networkName": "ptah_net", "internalDomain": "caddy.ptah.local"} 2024-09-01 00:00:00 2024-09-01 00:00:00 -2 1 2 {"processes": [{"name": "pg", "caddy": [], "ports": [], "backups": [], "command": null, "envVars": [{"name": "POSTGRESQL_USERNAME", "value": "ptah_sh"}, {"name": "POSTGRESQL_PASSWORD", "value": "ptah_sh"}, {"name": "POSTGRESQL_DATABASE", "value": "ptah_sh"}], "fastCgi": null, "volumes": [{"id": "volume-q7r8s9t0a1", "name": "data", "path": "/bitnami/postgresql", "dockerName": "svc_2_ptah_pg_data", "backupSchedule": null}], "workers": [], "replicas": 1, "dockerName": "svc_2_ptah_pg", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "bitnami/postgresql:16", "secretFiles": [], "backupVolume": {"id": "volume-h7i8j9k0l1", "name": "backups", "path": "/ptah/backups", "dockerName": "svc_2_ptah_pg_ptah_backups"}, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": 1, "dockerRegistryId": null}, {"name": "pool", "caddy": [], "ports": [], "backups": [], "command": null, "envVars": [{"name": "PGBOUNCER_POOL_MODE", "value": "session"}, {"name": "POSTGRESQL_USERNAME", "value": "ptah_sh"}, {"name": "POSTGRESQL_PASSWORD", "value": "ptah_sh"}, {"name": "POSTGRESQL_DATABASE", "value": "ptah_sh"}, {"name": "POSTGRESQL_HOST", "value": "pg.server.ptah.local"}, {"name": "PGBOUNCER_PORT", "value": "5432"}, {"name": "PGBOUNCER_DATABASE", "value": "ptah_sh"}], "fastCgi": null, "volumes": [], "workers": [], "replicas": 1, "dockerName": "svc_2_ptah_pool", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "bitnami/pgbouncer", "secretFiles": [], "backupVolume": null, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": null, "dockerRegistryId": null}, {"name": "app", "caddy": [{"id": "caddy-b2c3d4e5f6", "path": "/*", "domain": "ptah.localhost", "targetPort": 8080, "publishedPort": 80, "targetProtocol": "http"}], "ports": [], "backups": [], "command": null, "envVars": [{"name": "APP_ENV", "value": "production"}, {"name": "APP_KEY", "value": "base64:APP_KEY"}, {"name": "BCRYPT_ROUNDS", "value": "12"}, {"name": "DB_CONNECTION", "value": "pgsql"}, {"name": "DB_HOST", "value": "pool.server.ptah.local"}, {"name": "DB_DATABASE", "value": "ptah_sh"}, {"name": "DB_USERNAME", "value": "ptah_sh"}, {"name": "DB_PASSWORD", "value": "ptah_sh"}, {"name": "LOG_CHANNEL", "value": "errorlog"}, {"name": "APP_URL", "value": "localhost"}, {"name": "BILLING_ENABLED", "value": "false"}], "fastCgi": null, "volumes": [], "workers": [{"name": "schedule", "command": "php artisan config:cache && php artisan schedule:work", "replicas": 1, "dockerName": "svc_2_ptah_app_wkr_schedule"}, {"name": "queue", "command": "php artisan config:cache && php artisan queue:work", "replicas": 1, "dockerName": "svc_2_ptah_app_wkr_queue"}], "replicas": 2, "dockerName": "svc_2_ptah_app", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "ghcr.io/ptah-sh/ptah-server:latest", "secretFiles": [], "backupVolume": null, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": "php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force", "dockerName": "svc_2_dpl_2_release_command"}, "placementNodeId": null, "dockerRegistryId": null}], "networkName": "ptah_net", "internalDomain": "server.ptah.local"} 2024-09-01 00:00:00 2024-09-01 00:00:00 +1 1 1 {"processes": [{"name": "svc", "caddy": [], "ports": [{"targetPort": 80, "publishedPort": 80}, {"targetPort": 443, "publishedPort": 443}, {"targetPort": 2019, "publishedPort": 2019}], "backups": [], "command": "sh /start.sh", "envVars": [{"name": "CADDY_ADMIN", "value": "0.0.0.0:2019"}], "fastCgi": null, "volumes": [{"id": "volume-a1b2c3d4e5f", "name": "data", "path": "/data", "dockerName": "svc_1_caddy_svc_data", "backupSchedule": null}, {"id": "volume-g6h7i8j9k1", "name": "config", "path": "/config", "dockerName": "svc_1_caddy_svc_config", "backupSchedule": null}], "workers": [], "replicas": 1, "dockerName": "svc_1_caddy_svc", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [{"path": "/ptah/caddy/tls/.keep", "content": "# Keep this file", "dockerName": "svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep"}, {"path": "/start.sh", "content": "# This is the entrypoint for Caddy.\\n# By default, it starts with a blank Caddyfile with a standard \\"Hello from Caddy\\" page.\\n\\nif [ -f \\"/config/caddy/autosave.json\\" ]; then\\n echo \\"Starting with autosave.json\\"\\n\\n caddy run --config \\"/config/caddy/autosave.json\\"\\nelse\\n echo \\"Starting with the default Caddyfile\\"\\n\\n caddy run --config \\"/etc/caddy/Caddyfile\\"\\nfi", "dockerName": "svc_1_caddy_svc_dpl_1_cfg_start_sh"}], "dockerImage": "caddy:2.8-alpine", "healthcheck": {"command": null, "retries": 3, "timeout": 5, "interval": 10, "startPeriod": 30, "startInterval": 5}, "secretFiles": [], "backupVolume": {"id": "volume-l2m3n4o5p6", "name": "backups", "path": "/ptah/backups", "dockerName": "svc_1_caddy_svc_ptah_backups"}, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": 1, "dockerRegistryId": null}], "networkName": "ptah_net", "internalDomain": "caddy.ptah.local"} 2024-09-01 00:00:00 2024-09-01 00:00:00 +2 1 2 {"processes": [{"name": "pg", "caddy": [], "ports": [], "backups": [], "command": null, "envVars": [{"name": "POSTGRESQL_USERNAME", "value": "ptah_sh"}, {"name": "POSTGRESQL_PASSWORD", "value": "ptah_sh"}, {"name": "POSTGRESQL_DATABASE", "value": "ptah_sh"}], "fastCgi": null, "volumes": [{"id": "volume-q7r8s9t0a1", "name": "data", "path": "/bitnami/postgresql", "dockerName": "svc_2_ptah_pg_data", "backupSchedule": null}], "workers": [], "replicas": 1, "dockerName": "svc_2_ptah_pg", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "bitnami/postgresql:16", "healthcheck": {"command": null, "retries": 3, "timeout": 5, "interval": 10, "startPeriod": 30, "startInterval": 5}, "secretFiles": [], "backupVolume": {"id": "volume-h7i8j9k0l1", "name": "backups", "path": "/ptah/backups", "dockerName": "svc_2_ptah_pg_ptah_backups"}, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": 1, "dockerRegistryId": null}, {"name": "pool", "caddy": [], "ports": [], "backups": [], "command": null, "envVars": [{"name": "PGBOUNCER_POOL_MODE", "value": "session"}, {"name": "POSTGRESQL_USERNAME", "value": "ptah_sh"}, {"name": "POSTGRESQL_PASSWORD", "value": "ptah_sh"}, {"name": "POSTGRESQL_DATABASE", "value": "ptah_sh"}, {"name": "POSTGRESQL_HOST", "value": "pg.server.ptah.local"}, {"name": "PGBOUNCER_PORT", "value": "5432"}, {"name": "PGBOUNCER_DATABASE", "value": "ptah_sh"}], "fastCgi": null, "volumes": [], "workers": [], "replicas": 1, "dockerName": "svc_2_ptah_pool", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "bitnami/pgbouncer", "healthcheck": {"command": null, "retries": 3, "timeout": 5, "interval": 10, "startPeriod": 30, "startInterval": 5}, "secretFiles": [], "backupVolume": null, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": null, "dockerName": null}, "placementNodeId": null, "dockerRegistryId": null}, {"name": "app", "caddy": [{"id": "caddy-b2c3d4e5f6", "path": "/*", "domain": "ptah.localhost", "targetPort": 8080, "publishedPort": 80, "targetProtocol": "http"}], "ports": [], "backups": [], "command": null, "envVars": [{"name": "APP_ENV", "value": "production"}, {"name": "APP_KEY", "value": "base64:APP_KEY"}, {"name": "BCRYPT_ROUNDS", "value": "12"}, {"name": "DB_CONNECTION", "value": "pgsql"}, {"name": "DB_HOST", "value": "pool.server.ptah.local"}, {"name": "DB_DATABASE", "value": "ptah_sh"}, {"name": "DB_USERNAME", "value": "ptah_sh"}, {"name": "DB_PASSWORD", "value": "ptah_sh"}, {"name": "LOG_CHANNEL", "value": "errorlog"}, {"name": "APP_URL", "value": "localhost"}, {"name": "BILLING_ENABLED", "value": "false"}], "fastCgi": null, "volumes": [], "workers": [{"name": "schedule", "command": "php artisan config:cache && php artisan schedule:work", "replicas": 1, "dockerName": "svc_2_ptah_app_wkr_schedule"}, {"name": "queue", "command": "php artisan config:cache && php artisan queue:work", "replicas": 1, "dockerName": "svc_2_ptah_app_wkr_queue"}], "replicas": 2, "dockerName": "svc_2_ptah_app", "launchMode": "daemon", "secretVars": {"vars": []}, "configFiles": [], "dockerImage": "ghcr.io/ptah-sh/ptah-server:latest", "healthcheck": {"command": null, "retries": 3, "timeout": 5, "interval": 10, "startPeriod": 30, "startInterval": 5}, "secretFiles": [], "backupVolume": null, "rewriteRules": [], "redirectRules": [], "releaseCommand": {"command": "php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force", "dockerName": "svc_2_dpl_2_release_command"}, "placementNodeId": null, "dockerRegistryId": null}], "networkName": "ptah_net", "internalDomain": "server.ptah.local"} 2024-09-01 00:00:00 2024-09-01 00:00:00 \. @@ -1189,6 +1189,7 @@ COPY public.migrations (id, migration, batch) FROM stdin; 47 2024_08_25_233000_add_slug_to_services_table 1 48 2024_09_06_091348_alter_deployments_add_rewrite_rules_data 1 49 2024_09_08_183203_alter_deployments_move_placement_node_id_to_processes 1 +50 2024_09_09_000000_update_processes_structure_in_deployments 1 \. @@ -1217,22 +1218,22 @@ COPY public.node_task_groups (id, team_id, swarm_id, node_id, status, invoker_id -- COPY public.node_tasks (id, team_id, task_group_id, type, meta, payload, status, started_at, ended_at, result, created_at, updated_at) FROM stdin; -7 1 2 4 {"serviceId": 1, "dockerName": "svc_1_caddy_svc", "serviceName": "caddy", "deploymentId": 1} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_1_caddy_svc", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}, "EndpointSpec": {"Ports": [{"Protocol": "tcp", "TargetPort": 80, "PublishMode": "ingress", "PublishedPort": 80}, {"Protocol": "tcp", "TargetPort": 443, "PublishMode": "ingress", "PublishedPort": 443}, {"Protocol": "tcp", "TargetPort": 2019, "PublishMode": "ingress", "PublishedPort": 2019}]}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["svc.caddy.ptah.local"]}], "ContainerSpec": {"Env": ["CADDY_ADMIN=0.0.0.0:2019", "PTAH_HOSTNAME=svc.caddy.ptah.local"], "Args": ["/start.sh"], "Hosts": ["svc.caddy.ptah.local"], "Image": "caddy:2.8-alpine", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}, "Mounts": [{"Type": "volume", "Source": "svc_1_caddy_svc_data", "Target": "/data", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-a1b2c3d4e5f", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}, {"Type": "volume", "Source": "svc_1_caddy_svc_config", "Target": "/config", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-g6h7i8j9k1", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}, {"Type": "volume", "Source": "svc_1_caddy_svc_ptah_backups", "Target": "/ptah/backups", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-l2m3n4o5p6", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}], "Command": ["sh"], "Configs": [{"File": {"GID": "0", "UID": "0", "Mode": 511, "Name": "/ptah/caddy/tls/.keep"}, "ConfigName": "svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep"}, {"File": {"GID": "0", "UID": "0", "Mode": 511, "Name": "/start.sh"}, "ConfigName": "svc_1_caddy_svc_dpl_1_cfg_start_sh"}], "Secrets": [], "Hostname": "dpl-1.svc.caddy.ptah.local", "Placement": {"Constraints": ["node.labels.sh.ptah.node.id==1"]}}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -1 1 1 1 {"swarmId": 1, "forceNewCluster": false} {"SwarmInitRequest": {"Spec": {"Annotations": {"Name": "default", "Labels": {"sh.ptah.managed": "1", "sh.ptah.swarm.id": "1"}}}, "ListenAddr": "0.0.0.0:2377", "AdvertiseAddr": "192.168.1.1", "ForceNewCluster": false}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 2 1 1 7 [] {"NodeSpec": {"Name": "default", "Role": "manager", "Labels": {"sh.ptah.managed": "1", "sh.ptah.node.id": "1", "sh.ptah.node.name": "default"}, "Availability": "active"}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +3 1 1 0 {"name": "ptah_net", "networkId": 1} {"NetworkName": "ptah_net", "NetworkCreateOptions": {"Scope": "swarm", "Driver": "overlay", "Labels": {"sh.ptah.managed": "1", "sh.ptah.network.id": "1"}, "Attachable": true}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 6 1 2 14 {"dockerImage": "caddy:2.8-alpine"} {"Image": "caddy:2.8-alpine", "PullOptions": {}, "AuthConfigName": ""} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +1 1 1 1 {"swarmId": 1, "forceNewCluster": false} {"SwarmInitRequest": {"Spec": {"Annotations": {"Name": "default", "Labels": {"sh.ptah.managed": "1", "sh.ptah.swarm.id": "1"}}}, "ListenAddr": "0.0.0.0:2377", "AdvertiseAddr": "192.168.1.1", "ForceNewCluster": false}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +5 1 2 2 {"hash": "7b19b2f4fc26c6e51ad2f6bc3a8b1670", "path": "/start.sh", "processName": "svc_1_caddy_svc", "deploymentId": 1} {"SwarmConfigSpec": {"Data": "IyBUaGlzIGlzIHRoZSBlbnRyeXBvaW50IGZvciBDYWRkeS4KIyBCeSBkZWZhdWx0LCBpdCBzdGFydHMgd2l0aCBhIGJsYW5rIENhZGR5ZmlsZSB3aXRoIGEgc3RhbmRhcmQgIkhlbGxvIGZyb20gQ2FkZHkiIHBhZ2UuCgppZiBbIC1mICIvY29uZmlnL2NhZGR5L2F1dG9zYXZlLmpzb24iIF07IHRoZW4KICAgIGVjaG8gIlN0YXJ0aW5nIHdpdGggYXV0b3NhdmUuanNvbiIKCiAgICBjYWRkeSBydW4gLS1jb25maWcgIi9jb25maWcvY2FkZHkvYXV0b3NhdmUuanNvbiIKZWxzZQogICAgZWNobyAiU3RhcnRpbmcgd2l0aCB0aGUgZGVmYXVsdCBDYWRkeWZpbGUiCgogICAgY2FkZHkgcnVuIC0tY29uZmlnICIvZXRjL2NhZGR5L0NhZGR5ZmlsZSIKZmk=", "Name": "svc_1_caddy_svc_dpl_1_cfg_start_sh", "Labels": {"sh.ptah.kind": "config", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.content.hash": "7b19b2f4fc26c6e51ad2f6bc3a8b1670", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 4 1 2 2 {"hash": "ac953927ad31a333b3a326a74baf428f", "path": "/ptah/caddy/tls/.keep", "processName": "svc_1_caddy_svc", "deploymentId": 1} {"SwarmConfigSpec": {"Data": "IyBLZWVwIHRoaXMgZmlsZQ==", "Name": "svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep", "Labels": {"sh.ptah.kind": "config", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.content.hash": "ac953927ad31a333b3a326a74baf428f", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -3 1 1 0 {"name": "ptah_net", "networkId": 1} {"NetworkName": "ptah_net", "NetworkCreateOptions": {"Scope": "swarm", "Driver": "overlay", "Labels": {"sh.ptah.managed": "1", "sh.ptah.network.id": "1"}, "Attachable": true}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 8 1 3 14 {"dockerImage": "bitnami/postgresql:16"} {"Image": "bitnami/postgresql:16", "PullOptions": {}, "AuthConfigName": ""} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 10 1 3 14 {"dockerImage": "bitnami/pgbouncer"} {"Image": "bitnami/pgbouncer", "PullOptions": {}, "AuthConfigName": ""} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -15 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_app_wkr_queue", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_app_wkr_queue", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["queue.app.server.ptah.local"]}], "ContainerSpec": {"Env": ["APP_ENV=production", "APP_KEY=base64:APP_KEY", "BCRYPT_ROUNDS=12", "DB_CONNECTION=pgsql", "DB_HOST=pool.server.ptah.local", "DB_DATABASE=ptah_sh", "DB_USERNAME=ptah_sh", "DB_PASSWORD=ptah_sh", "LOG_CHANNEL=errorlog", "APP_URL=localhost", "BILLING_ENABLED=false"], "Args": ["php artisan config:cache && php artisan queue:work"], "Hosts": ["queue.app.server.ptah.local"], "Image": "ghcr.io/ptah-sh/ptah-server:latest", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": ["sh", "-c"], "Configs": [], "Secrets": [], "Hostname": "dpl-2.queue.app.server.ptah.local", "Placement": [], "HealthCheck": {"Test": ["NONE"]}}}, "UpdateConfig": {"Parallelism": 1}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -9 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_pg", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_pg", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["pg.server.ptah.local"]}], "ContainerSpec": {"Env": ["POSTGRESQL_USERNAME=ptah_sh", "POSTGRESQL_PASSWORD=ptah_sh", "POSTGRESQL_DATABASE=ptah_sh", "PTAH_HOSTNAME=pg.server.ptah.local"], "Args": null, "Hosts": ["pg.server.ptah.local"], "Image": "bitnami/postgresql:16", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [{"Type": "volume", "Source": "svc_2_ptah_pg_data", "Target": "/bitnami/postgresql", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-q7r8s9t0a1", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}}, {"Type": "volume", "Source": "svc_2_ptah_pg_ptah_backups", "Target": "/ptah/backups", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-h7i8j9k0l1", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}}], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.pg.server.ptah.local", "Placement": {"Constraints": ["node.labels.sh.ptah.node.id==1"]}}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +9 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_pg", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_pg", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["pg.server.ptah.local"]}], "ContainerSpec": {"Env": ["POSTGRESQL_USERNAME=ptah_sh", "POSTGRESQL_PASSWORD=ptah_sh", "POSTGRESQL_DATABASE=ptah_sh", "PTAH_HOSTNAME=pg.server.ptah.local"], "Args": null, "Hosts": ["pg.server.ptah.local"], "Image": "bitnami/postgresql:16", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [{"Type": "volume", "Source": "svc_2_ptah_pg_data", "Target": "/bitnami/postgresql", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-q7r8s9t0a1", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}}, {"Type": "volume", "Source": "svc_2_ptah_pg_ptah_backups", "Target": "/ptah/backups", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-h7i8j9k0l1", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}}], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.pg.server.ptah.local", "Placement": {"Constraints": ["node.labels.sh.ptah.node.id==1"]}, "HealthCheck": null}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 12 1 3 14 {"dockerImage": "ghcr.io/ptah-sh/ptah-server:latest"} {"Image": "ghcr.io/ptah-sh/ptah-server:latest", "PullOptions": {}, "AuthConfigName": ""} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -5 1 2 2 {"hash": "7b19b2f4fc26c6e51ad2f6bc3a8b1670", "path": "/start.sh", "processName": "svc_1_caddy_svc", "deploymentId": 1} {"SwarmConfigSpec": {"Data": "IyBUaGlzIGlzIHRoZSBlbnRyeXBvaW50IGZvciBDYWRkeS4KIyBCeSBkZWZhdWx0LCBpdCBzdGFydHMgd2l0aCBhIGJsYW5rIENhZGR5ZmlsZSB3aXRoIGEgc3RhbmRhcmQgIkhlbGxvIGZyb20gQ2FkZHkiIHBhZ2UuCgppZiBbIC1mICIvY29uZmlnL2NhZGR5L2F1dG9zYXZlLmpzb24iIF07IHRoZW4KICAgIGVjaG8gIlN0YXJ0aW5nIHdpdGggYXV0b3NhdmUuanNvbiIKCiAgICBjYWRkeSBydW4gLS1jb25maWcgIi9jb25maWcvY2FkZHkvYXV0b3NhdmUuanNvbiIKZWxzZQogICAgZWNobyAiU3RhcnRpbmcgd2l0aCB0aGUgZGVmYXVsdCBDYWRkeWZpbGUiCgogICAgY2FkZHkgcnVuIC0tY29uZmlnICIvZXRjL2NhZGR5L0NhZGR5ZmlsZSIKZmk=", "Name": "svc_1_caddy_svc_dpl_1_cfg_start_sh", "Labels": {"sh.ptah.kind": "config", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.content.hash": "7b19b2f4fc26c6e51ad2f6bc3a8b1670", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -11 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_pool", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_pool", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["pool.server.ptah.local"]}], "ContainerSpec": {"Env": ["PGBOUNCER_POOL_MODE=session", "POSTGRESQL_USERNAME=ptah_sh", "POSTGRESQL_PASSWORD=ptah_sh", "POSTGRESQL_DATABASE=ptah_sh", "POSTGRESQL_HOST=pg.server.ptah.local", "PGBOUNCER_PORT=5432", "PGBOUNCER_DATABASE=ptah_sh", "PTAH_HOSTNAME=pool.server.ptah.local"], "Args": null, "Hosts": ["pool.server.ptah.local"], "Image": "bitnami/pgbouncer", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.pool.server.ptah.local", "Placement": []}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 -13 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_app", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force", "ConfigName": "svc_2_dpl_2_release_command", "ConfigLabels": {"sh.ptah.kind": "release-command", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 2}}, "Name": "svc_2_ptah_app", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["app.server.ptah.local"]}], "ContainerSpec": {"Env": ["APP_ENV=production", "APP_KEY=base64:APP_KEY", "BCRYPT_ROUNDS=12", "DB_CONNECTION=pgsql", "DB_HOST=pool.server.ptah.local", "DB_DATABASE=ptah_sh", "DB_USERNAME=ptah_sh", "DB_PASSWORD=ptah_sh", "LOG_CHANNEL=errorlog", "APP_URL=localhost", "BILLING_ENABLED=false", "PTAH_HOSTNAME=app.server.ptah.local"], "Args": null, "Hosts": ["app.server.ptah.local"], "Image": "ghcr.io/ptah-sh/ptah-server:latest", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.app.server.ptah.local", "Placement": []}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +15 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_app_wkr_queue", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_app_wkr_queue", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["queue.app.server.ptah.local"]}], "ContainerSpec": {"Env": ["APP_ENV=production", "APP_KEY=base64:APP_KEY", "BCRYPT_ROUNDS=12", "DB_CONNECTION=pgsql", "DB_HOST=pool.server.ptah.local", "DB_DATABASE=ptah_sh", "DB_USERNAME=ptah_sh", "DB_PASSWORD=ptah_sh", "LOG_CHANNEL=errorlog", "APP_URL=localhost", "BILLING_ENABLED=false"], "Args": ["php artisan config:cache && php artisan queue:work"], "Hosts": ["queue.app.server.ptah.local"], "Image": "ghcr.io/ptah-sh/ptah-server:latest", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": ["sh", "-c"], "Configs": [], "Secrets": [], "Hostname": "dpl-2.queue.app.server.ptah.local", "Placement": [], "HealthCheck": {"Test": ["NONE"]}}}, "UpdateConfig": {"Parallelism": 1}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +7 1 2 4 {"serviceId": 1, "dockerName": "svc_1_caddy_svc", "serviceName": "caddy", "deploymentId": 1} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_1_caddy_svc", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}, "EndpointSpec": {"Ports": [{"Protocol": "tcp", "TargetPort": 80, "PublishMode": "ingress", "PublishedPort": 80}, {"Protocol": "tcp", "TargetPort": 443, "PublishMode": "ingress", "PublishedPort": 443}, {"Protocol": "tcp", "TargetPort": 2019, "PublishMode": "ingress", "PublishedPort": 2019}]}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["svc.caddy.ptah.local"]}], "ContainerSpec": {"Env": ["CADDY_ADMIN=0.0.0.0:2019", "PTAH_HOSTNAME=svc.caddy.ptah.local"], "Args": ["/start.sh"], "Hosts": ["svc.caddy.ptah.local"], "Image": "caddy:2.8-alpine", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}, "Mounts": [{"Type": "volume", "Source": "svc_1_caddy_svc_data", "Target": "/data", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-a1b2c3d4e5f", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}, {"Type": "volume", "Source": "svc_1_caddy_svc_config", "Target": "/config", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-g6h7i8j9k1", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}, {"Type": "volume", "Source": "svc_1_caddy_svc_ptah_backups", "Target": "/ptah/backups", "VolumeOptions": {"Labels": {"sh.ptah.id": "volume-l2m3n4o5p6", "sh.ptah.managed": "1", "sh.ptah.service.id": "1", "sh.ptah.service.slug": "caddy_happy_ptah_1", "sh.ptah.deployment.id": "1"}}}], "Command": ["sh"], "Configs": [{"File": {"GID": "0", "UID": "0", "Mode": 511, "Name": "/ptah/caddy/tls/.keep"}, "ConfigName": "svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep"}, {"File": {"GID": "0", "UID": "0", "Mode": 511, "Name": "/start.sh"}, "ConfigName": "svc_1_caddy_svc_dpl_1_cfg_start_sh"}], "Secrets": [], "Hostname": "dpl-1.svc.caddy.ptah.local", "Placement": {"Constraints": ["node.labels.sh.ptah.node.id==1"]}, "HealthCheck": null}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 14 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_app_wkr_schedule", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_app_wkr_schedule", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["schedule.app.server.ptah.local"]}], "ContainerSpec": {"Env": ["APP_ENV=production", "APP_KEY=base64:APP_KEY", "BCRYPT_ROUNDS=12", "DB_CONNECTION=pgsql", "DB_HOST=pool.server.ptah.local", "DB_DATABASE=ptah_sh", "DB_USERNAME=ptah_sh", "DB_PASSWORD=ptah_sh", "LOG_CHANNEL=errorlog", "APP_URL=localhost", "BILLING_ENABLED=false"], "Args": ["php artisan config:cache && php artisan schedule:work"], "Hosts": ["schedule.app.server.ptah.local"], "Image": "ghcr.io/ptah-sh/ptah-server:latest", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": ["sh", "-c"], "Configs": [], "Secrets": [], "Hostname": "dpl-2.schedule.app.server.ptah.local", "Placement": [], "HealthCheck": {"Test": ["NONE"]}}}, "UpdateConfig": {"Parallelism": 1}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 16 1 3 5 {"deploymentId": 2} {"caddy": {"apps": {"http": {"servers": {"listen_80": {"listen": ["0.0.0.0:80"], "routes": [{"match": [{"host": ["ptah.localhost"], "path": ["/*"]}], "handle": [{"handler": "reverse_proxy", "headers": {"request": {"set": {"X-Forwarded-Host": ["ptah.localhost"], "X-Forwarded-Port": ["80"], "X-Forwarded-Proto": ["http"], "X-Forwarded-Schema": ["http"]}}, "response": {"set": {"X-Powered-By": ["https://ptah.sh"], "X-Ptah-Rule-Id": ["caddy-b2c3d4e5f6"]}}}, "transport": {"protocol": "http"}, "upstreams": [{"dial": "app.server.ptah.local:8080"}]}]}, {"match": [{"host": ["*"], "path": ["/*"]}], "handle": [{"body": "\\n\\n
\\nThe requested URL was not found on this server.
\\n\\nPlease contact the server administrator if you believe this is an error.
\\n\\n Return to the Home Page\\nPowered by ptah.sh
\\n\\n", "handler": "static_response", "headers": {"Content-Type": ["text/html; charset=utf-8"], "X-Powered-By": ["https://ptah.sh"]}, "status_code": "404"}]}]}}}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +11 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_pool", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "", "ConfigName": "", "ConfigLabels": {}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 1}}, "Name": "svc_2_ptah_pool", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["pool.server.ptah.local"]}], "ContainerSpec": {"Env": ["PGBOUNCER_POOL_MODE=session", "POSTGRESQL_USERNAME=ptah_sh", "POSTGRESQL_PASSWORD=ptah_sh", "POSTGRESQL_DATABASE=ptah_sh", "POSTGRESQL_HOST=pg.server.ptah.local", "PGBOUNCER_PORT=5432", "PGBOUNCER_DATABASE=ptah_sh", "PTAH_HOSTNAME=pool.server.ptah.local"], "Args": null, "Hosts": ["pool.server.ptah.local"], "Image": "bitnami/pgbouncer", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.pool.server.ptah.local", "Placement": [], "HealthCheck": null}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 +13 1 3 4 {"serviceId": 2, "dockerName": "svc_2_ptah_app", "serviceName": "ptah", "deploymentId": 2} {"SecretVars": {"Values": {}}, "AuthConfigName": "", "ReleaseCommand": {"Command": "php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force", "ConfigName": "svc_2_dpl_2_release_command", "ConfigLabels": {"sh.ptah.kind": "release-command", "sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}}, "SwarmServiceSpec": {"Mode": {"Replicated": {"Replicas": 2}}, "Name": "svc_2_ptah_app", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "EndpointSpec": {"Ports": []}, "TaskTemplate": {"Networks": [{"Target": "ptah_net", "Aliases": ["app.server.ptah.local"]}], "ContainerSpec": {"Env": ["APP_ENV=production", "APP_KEY=base64:APP_KEY", "BCRYPT_ROUNDS=12", "DB_CONNECTION=pgsql", "DB_HOST=pool.server.ptah.local", "DB_DATABASE=ptah_sh", "DB_USERNAME=ptah_sh", "DB_PASSWORD=ptah_sh", "LOG_CHANNEL=errorlog", "APP_URL=localhost", "BILLING_ENABLED=false", "PTAH_HOSTNAME=app.server.ptah.local"], "Args": null, "Hosts": ["app.server.ptah.local"], "Image": "ghcr.io/ptah-sh/ptah-server:latest", "Labels": {"sh.ptah.managed": "1", "sh.ptah.service.id": "2", "sh.ptah.service.slug": "ptah_happy_ptah_2", "sh.ptah.deployment.id": "2"}, "Mounts": [], "Command": null, "Configs": [], "Secrets": [], "Hostname": "dpl-2.app.server.ptah.local", "Placement": [], "HealthCheck": null}}}} completed 2024-09-01 00:00:00 2024-09-01 00:00:00 [] 2024-09-01 00:00:00 2024-09-01 00:00:00 \. @@ -1385,7 +1386,7 @@ SELECT pg_catalog.setval('public.jobs_id_seq', 1, false); -- Name: migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - -- -SELECT pg_catalog.setval('public.migrations_id_seq', 49, true); +SELECT pg_catalog.setval('public.migrations_id_seq', 50, true); -- diff --git a/scripts/self-hosted/tasks.json b/scripts/self-hosted/tasks.json index ff66421..460d8e3 100644 --- a/scripts/self-hosted/tasks.json +++ b/scripts/self-hosted/tasks.json @@ -32,7 +32,7 @@ { "id": 7, "type": 4, - "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_1_caddy_svc\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}, \"EndpointSpec\": {\"Ports\": [{\"Protocol\": \"tcp\", \"TargetPort\": 80, \"PublishMode\": \"ingress\", \"PublishedPort\": 80}, {\"Protocol\": \"tcp\", \"TargetPort\": 443, \"PublishMode\": \"ingress\", \"PublishedPort\": 443}, {\"Protocol\": \"tcp\", \"TargetPort\": 2019, \"PublishMode\": \"ingress\", \"PublishedPort\": 2019}]}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"svc.caddy.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"CADDY_ADMIN=0.0.0.0:2019\", \"PTAH_HOSTNAME=svc.caddy.ptah.local\"], \"Args\": [\"/start.sh\"], \"Hosts\": [\"svc.caddy.ptah.local\"], \"Image\": \"caddy:2.8-alpine\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}, \"Mounts\": [{\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_data\", \"Target\": \"/data\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-a1b2c3d4e5f\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_config\", \"Target\": \"/config\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-g6h7i8j9k1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_ptah_backups\", \"Target\": \"/ptah/backups\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-l2m3n4o5p6\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}], \"Command\": [\"sh\"], \"Configs\": [{\"File\": {\"GID\": \"0\", \"UID\": \"0\", \"Mode\": 511, \"Name\": \"/ptah/caddy/tls/.keep\"}, \"ConfigName\": \"svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep\"}, {\"File\": {\"GID\": \"0\", \"UID\": \"0\", \"Mode\": 511, \"Name\": \"/start.sh\"}, \"ConfigName\": \"svc_1_caddy_svc_dpl_1_cfg_start_sh\"}], \"Secrets\": [], \"Hostname\": \"dpl-1.svc.caddy.ptah.local\", \"Placement\": {\"Constraints\": [\"node.labels.sh.ptah.node.id==1\"]}}}}}" + "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_1_caddy_svc\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}, \"EndpointSpec\": {\"Ports\": [{\"Protocol\": \"tcp\", \"TargetPort\": 80, \"PublishMode\": \"ingress\", \"PublishedPort\": 80}, {\"Protocol\": \"tcp\", \"TargetPort\": 443, \"PublishMode\": \"ingress\", \"PublishedPort\": 443}, {\"Protocol\": \"tcp\", \"TargetPort\": 2019, \"PublishMode\": \"ingress\", \"PublishedPort\": 2019}]}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"svc.caddy.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"CADDY_ADMIN=0.0.0.0:2019\", \"PTAH_HOSTNAME=svc.caddy.ptah.local\"], \"Args\": [\"/start.sh\"], \"Hosts\": [\"svc.caddy.ptah.local\"], \"Image\": \"caddy:2.8-alpine\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}, \"Mounts\": [{\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_data\", \"Target\": \"/data\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-a1b2c3d4e5f\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_config\", \"Target\": \"/config\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-g6h7i8j9k1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_1_caddy_svc_ptah_backups\", \"Target\": \"/ptah/backups\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-l2m3n4o5p6\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"1\", \"sh.ptah.service.slug\": \"caddy_happy_ptah_1\", \"sh.ptah.deployment.id\": \"1\"}}}], \"Command\": [\"sh\"], \"Configs\": [{\"File\": {\"GID\": \"0\", \"UID\": \"0\", \"Mode\": 511, \"Name\": \"/ptah/caddy/tls/.keep\"}, \"ConfigName\": \"svc_1_caddy_svc_dpl_1_cfg_ptah_caddy_tls_keep\"}, {\"File\": {\"GID\": \"0\", \"UID\": \"0\", \"Mode\": 511, \"Name\": \"/start.sh\"}, \"ConfigName\": \"svc_1_caddy_svc_dpl_1_cfg_start_sh\"}], \"Secrets\": [], \"Hostname\": \"dpl-1.svc.caddy.ptah.local\", \"Placement\": {\"Constraints\": [\"node.labels.sh.ptah.node.id==1\"]}, \"HealthCheck\": null}}}}" }, { "id": 8, @@ -42,7 +42,7 @@ { "id": 9, "type": 4, - "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_2_ptah_pg\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"pg.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"POSTGRESQL_USERNAME=ptah_sh\", \"POSTGRESQL_PASSWORD=ptah_sh\", \"POSTGRESQL_DATABASE=ptah_sh\", \"PTAH_HOSTNAME=pg.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"pg.server.ptah.local\"], \"Image\": \"bitnami/postgresql:16\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [{\"Type\": \"volume\", \"Source\": \"svc_2_ptah_pg_data\", \"Target\": \"/bitnami/postgresql\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-q7r8s9t0a1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_2_ptah_pg_ptah_backups\", \"Target\": \"/ptah/backups\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-h7i8j9k0l1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}}], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.pg.server.ptah.local\", \"Placement\": {\"Constraints\": [\"node.labels.sh.ptah.node.id==1\"]}}}}}" + "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_2_ptah_pg\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"pg.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"POSTGRESQL_USERNAME=ptah_sh\", \"POSTGRESQL_PASSWORD=ptah_sh\", \"POSTGRESQL_DATABASE=ptah_sh\", \"PTAH_HOSTNAME=pg.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"pg.server.ptah.local\"], \"Image\": \"bitnami/postgresql:16\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [{\"Type\": \"volume\", \"Source\": \"svc_2_ptah_pg_data\", \"Target\": \"/bitnami/postgresql\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-q7r8s9t0a1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}}, {\"Type\": \"volume\", \"Source\": \"svc_2_ptah_pg_ptah_backups\", \"Target\": \"/ptah/backups\", \"VolumeOptions\": {\"Labels\": {\"sh.ptah.id\": \"volume-h7i8j9k0l1\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}}], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.pg.server.ptah.local\", \"Placement\": {\"Constraints\": [\"node.labels.sh.ptah.node.id==1\"]}, \"HealthCheck\": null}}}}" }, { "id": 10, @@ -52,7 +52,7 @@ { "id": 11, "type": 4, - "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_2_ptah_pool\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"pool.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"PGBOUNCER_POOL_MODE=session\", \"POSTGRESQL_USERNAME=ptah_sh\", \"POSTGRESQL_PASSWORD=ptah_sh\", \"POSTGRESQL_DATABASE=ptah_sh\", \"POSTGRESQL_HOST=pg.server.ptah.local\", \"PGBOUNCER_PORT=5432\", \"PGBOUNCER_DATABASE=ptah_sh\", \"PTAH_HOSTNAME=pool.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"pool.server.ptah.local\"], \"Image\": \"bitnami/pgbouncer\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.pool.server.ptah.local\", \"Placement\": []}}}}" + "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"\", \"ConfigName\": \"\", \"ConfigLabels\": {}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 1}}, \"Name\": \"svc_2_ptah_pool\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"pool.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"PGBOUNCER_POOL_MODE=session\", \"POSTGRESQL_USERNAME=ptah_sh\", \"POSTGRESQL_PASSWORD=ptah_sh\", \"POSTGRESQL_DATABASE=ptah_sh\", \"POSTGRESQL_HOST=pg.server.ptah.local\", \"PGBOUNCER_PORT=5432\", \"PGBOUNCER_DATABASE=ptah_sh\", \"PTAH_HOSTNAME=pool.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"pool.server.ptah.local\"], \"Image\": \"bitnami/pgbouncer\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.pool.server.ptah.local\", \"Placement\": [], \"HealthCheck\": null}}}}" }, { "id": 12, @@ -62,7 +62,7 @@ { "id": 13, "type": 4, - "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force\", \"ConfigName\": \"svc_2_dpl_2_release_command\", \"ConfigLabels\": {\"sh.ptah.kind\": \"release-command\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 2}}, \"Name\": \"svc_2_ptah_app\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"app.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"APP_ENV=production\", \"APP_KEY=base64:APP_KEY\", \"BCRYPT_ROUNDS=12\", \"DB_CONNECTION=pgsql\", \"DB_HOST=pool.server.ptah.local\", \"DB_DATABASE=ptah_sh\", \"DB_USERNAME=ptah_sh\", \"DB_PASSWORD=ptah_sh\", \"LOG_CHANNEL=errorlog\", \"APP_URL=localhost\", \"BILLING_ENABLED=false\", \"PTAH_HOSTNAME=app.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"app.server.ptah.local\"], \"Image\": \"ghcr.io/ptah-sh/ptah-server:latest\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.app.server.ptah.local\", \"Placement\": []}}}}" + "payload": "{\"SecretVars\": {\"Values\": {}}, \"AuthConfigName\": \"\", \"ReleaseCommand\": {\"Command\": \"php artisan config:cache && php artisan migrate --no-interaction --verbose --ansi --force\", \"ConfigName\": \"svc_2_dpl_2_release_command\", \"ConfigLabels\": {\"sh.ptah.kind\": \"release-command\", \"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}}, \"SwarmServiceSpec\": {\"Mode\": {\"Replicated\": {\"Replicas\": 2}}, \"Name\": \"svc_2_ptah_app\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"EndpointSpec\": {\"Ports\": []}, \"TaskTemplate\": {\"Networks\": [{\"Target\": \"ptah_net\", \"Aliases\": [\"app.server.ptah.local\"]}], \"ContainerSpec\": {\"Env\": [\"APP_ENV=production\", \"APP_KEY=base64:APP_KEY\", \"BCRYPT_ROUNDS=12\", \"DB_CONNECTION=pgsql\", \"DB_HOST=pool.server.ptah.local\", \"DB_DATABASE=ptah_sh\", \"DB_USERNAME=ptah_sh\", \"DB_PASSWORD=ptah_sh\", \"LOG_CHANNEL=errorlog\", \"APP_URL=localhost\", \"BILLING_ENABLED=false\", \"PTAH_HOSTNAME=app.server.ptah.local\"], \"Args\": null, \"Hosts\": [\"app.server.ptah.local\"], \"Image\": \"ghcr.io/ptah-sh/ptah-server:latest\", \"Labels\": {\"sh.ptah.managed\": \"1\", \"sh.ptah.service.id\": \"2\", \"sh.ptah.service.slug\": \"ptah_happy_ptah_2\", \"sh.ptah.deployment.id\": \"2\"}, \"Mounts\": [], \"Command\": null, \"Configs\": [], \"Secrets\": [], \"Hostname\": \"dpl-2.app.server.ptah.local\", \"Placement\": [], \"HealthCheck\": null}}}}" }, { "id": 14,