From ccaa04ce336fc05b3e99e991468ea181b1e51768 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 3 Nov 2026 18:28:46 +0100 Subject: [PATCH] fix(service): use postgresql in the bugsink template The template used mysql:latest with binary logging on and no limit, so the binary logs filled the disk and Bugsink stopped. Use postgres:17-alpine and bugsink/bugsink:2, as the Bugsink Docker Compose sample does. Existing services keep MySQL; the changelog tells how to purge the logs and turn binary logging off. Closes #10626 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 1 + templates/compose/bugsink.yaml | 30 ++++++++++--------------- templates/service-templates-latest.json | 4 ++-- templates/service-templates.json | 4 ++-- 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59d8ff5a26..397695df72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Fixed +- Use PostgreSQL 17 instead of MySQL in the Bugsink service template, as the Bugsink Docker Compose sample does, and pin Bugsink to version 2. Before, the template used `mysql:latest` with binary logging on, so the binary logs filled the disk after some weeks and Bugsink stopped. Only new Bugsink services get PostgreSQL. To stop the growth in an existing service, run `PURGE BINARY LOGS BEFORE NOW();` in MySQL, then add `command: ['--disable-log-bin']` to the `mysql` service and restart it ([#10626](https://github.com/coollabsio/coolify/issues/10626)) - List the commit images of Docker Compose applications on the **Rollback** page and in `GET /api/v1/applications/{uuid}/rollback-images`. Since v4.5.0 the list was always empty, because a Compose build names each service image `_`. The page also shows the running commit when the Compose file has services from other images, for example a database ([#12446](https://github.com/coollabsio/coolify/issues/12446)) - Finish the startup and the nightly cleanup of stuck resources on instances with many large deployment logs. Before, the cleanup loaded the logs of all deployments and stopped with "Allowed memory size exhausted", so stuck deployments, tasks, and backups were not marked as failed and the proxy configuration was not set up ([#12435](https://github.com/coollabsio/coolify/issues/12435)) - Open the database backup pages and **Settings > Backup** faster when a backup has many executions. Before, these pages loaded all executions of the backup on each request, but they did not show them diff --git a/templates/compose/bugsink.yaml b/templates/compose/bugsink.yaml index 4fc000fe3b..39ae55c0b0 100644 --- a/templates/compose/bugsink.yaml +++ b/templates/compose/bugsink.yaml @@ -1,41 +1,35 @@ # documentation: https://www.bugsink.com/docs/ # slogan: Self-hosted Error Tracking. # category: monitoring -# tags: python, error-tracking, django, mysql +# tags: python, error-tracking, django, postgresql # logo: svgs/bugsink.svg # port: 8000 services: - mysql: - image: 'mysql:latest' + postgres: + image: 'postgres:17-alpine' restart: unless-stopped environment: - - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} - - MYSQL_DATABASE=${MYSQL_DATABASE:-bugsink} - - MYSQL_USER=${SERVICE_USER_MYSQL} - - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-bugsink} volumes: - - my-datavolume:/var/lib/mysql + - bugsink-postgres-data:/var/lib/postgresql/data healthcheck: - test: - - CMD - - mysqladmin - - ping - - '-h' - - 127.0.0.1 + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 web: - image: bugsink/bugsink + image: 'bugsink/bugsink:2' restart: unless-stopped environment: - SECRET_KEY=$SERVICE_PASSWORD_64_BUGSINK - CREATE_SUPERUSER=${BUGSINK_ADMIN_EMAIL:?}:$SERVICE_PASSWORD_BUGSINK - SERVICE_URL_BUGSINK_8000 - BASE_URL=$SERVICE_URL_BUGSINK - - DATABASE_URL=mysql://${SERVICE_USER_MYSQL}:$SERVICE_PASSWORD_MYSQL@mysql:3306/${MYSQL_DATABASE:-bugsink} + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-bugsink} - BEHIND_HTTPS_PROXY=True - SITE_TITLE=${SITE_TITLE:-Bugsink} - TIME_ZONE=${TIME_ZONE:-UTC} @@ -48,10 +42,10 @@ services: - EMAIL_USE_SSL=${EMAIL_USE_SSL:-False} - DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL} healthcheck: - test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8000/\").raise_for_status()'"] + test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8000/health/ready\").raise_for_status()'"] interval: 5s timeout: 20s retries: 10 depends_on: - mysql: + postgres: condition: service_healthy diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index d02b2fa698..81bc1f0d69 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -412,12 +412,12 @@ "bugsink": { "documentation": "https://www.bugsink.com/docs/?utm_source=coolify.io", "slogan": "Self-hosted Error Tracking.", - "compose": "c2VydmljZXM6CiAgbXlzcWw6CiAgICBpbWFnZTogJ215c3FsOmxhdGVzdCcKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotYnVnc2lua30nCiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgdm9sdW1lczoKICAgICAgLSAnbXktZGF0YXZvbHVtZTovdmFyL2xpYi9teXNxbCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHdlYjoKICAgIGltYWdlOiBidWdzaW5rL2J1Z3NpbmsKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRUNSRVRfS0VZPSRTRVJWSUNFX1BBU1NXT1JEXzY0X0JVR1NJTksKICAgICAgLSAnQ1JFQVRFX1NVUEVSVVNFUj0ke0JVR1NJTktfQURNSU5fRU1BSUw6P306JFNFUlZJQ0VfUEFTU1dPUkRfQlVHU0lOSycKICAgICAgLSBTRVJWSUNFX1VSTF9CVUdTSU5LXzgwMDAKICAgICAgLSBCQVNFX1VSTD0kU0VSVklDRV9VUkxfQlVHU0lOSwogICAgICAtICdEQVRBQkFTRV9VUkw9bXlzcWw6Ly8ke1NFUlZJQ0VfVVNFUl9NWVNRTH06JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUxAbXlzcWw6MzMwNi8ke01ZU1FMX0RBVEFCQVNFOi1idWdzaW5rfScKICAgICAgLSBCRUhJTkRfSFRUUFNfUFJPWFk9VHJ1ZQogICAgICAtICdTSVRFX1RJVExFPSR7U0lURV9USVRMRTotQnVnc2lua30nCiAgICAgIC0gJ1RJTUVfWk9ORT0ke1RJTUVfWk9ORTotVVRDfScKICAgICAgLSAnUEhPTkVIT01FPSR7UEhPTkVIT01FOi1GYWxzZX0nCiAgICAgIC0gJ0VNQUlMX0hPU1Q9JHtFTUFJTF9IT1NUfScKICAgICAgLSAnRU1BSUxfUE9SVD0ke0VNQUlMX1BPUlQ6LTU4N30nCiAgICAgIC0gJ0VNQUlMX0hPU1RfVVNFUj0ke0VNQUlMX0hPU1RfVVNFUn0nCiAgICAgIC0gJ0VNQUlMX0hPU1RfUEFTU1dPUkQ9JHtFTUFJTF9IT1NUX1BBU1NXT1JEfScKICAgICAgLSAnRU1BSUxfVVNFX1RMUz0ke0VNQUlMX1VTRV9UTFM6LVRydWV9JwogICAgICAtICdFTUFJTF9VU0VfU1NMPSR7RU1BSUxfVVNFX1NTTDotRmFsc2V9JwogICAgICAtICdERUZBVUxUX0ZST01fRU1BSUw9JHtERUZBVUxUX0ZST01fRU1BSUx9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdweXRob24gLWMgJydpbXBvcnQgcmVxdWVzdHM7IHJlcXVlc3RzLmdldCgiaHR0cDovL2xvY2FsaG9zdDo4MDAwLyIpLnJhaXNlX2Zvcl9zdGF0dXMoKScnJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBkZXBlbmRzX29uOgogICAgICBteXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQo=", + "compose": "c2VydmljZXM6CiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE3LWFscGluZScKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LWJ1Z3Npbmt9JwogICAgdm9sdW1lczoKICAgICAgLSAnYnVnc2luay1wb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICB3ZWI6CiAgICBpbWFnZTogJ2J1Z3NpbmsvYnVnc2luazoyJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFQ1JFVF9LRVk9JFNFUlZJQ0VfUEFTU1dPUkRfNjRfQlVHU0lOSwogICAgICAtICdDUkVBVEVfU1VQRVJVU0VSPSR7QlVHU0lOS19BRE1JTl9FTUFJTDo/fTokU0VSVklDRV9QQVNTV09SRF9CVUdTSU5LJwogICAgICAtIFNFUlZJQ0VfVVJMX0JVR1NJTktfODAwMAogICAgICAtIEJBU0VfVVJMPSRTRVJWSUNFX1VSTF9CVUdTSU5LCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1wb3N0Z3Jlc3FsOi8vJHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9OiR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU31AcG9zdGdyZXM6NTQzMi8ke1BPU1RHUkVTX0RCOi1idWdzaW5rfScKICAgICAgLSBCRUhJTkRfSFRUUFNfUFJPWFk9VHJ1ZQogICAgICAtICdTSVRFX1RJVExFPSR7U0lURV9USVRMRTotQnVnc2lua30nCiAgICAgIC0gJ1RJTUVfWk9ORT0ke1RJTUVfWk9ORTotVVRDfScKICAgICAgLSAnUEhPTkVIT01FPSR7UEhPTkVIT01FOi1GYWxzZX0nCiAgICAgIC0gJ0VNQUlMX0hPU1Q9JHtFTUFJTF9IT1NUfScKICAgICAgLSAnRU1BSUxfUE9SVD0ke0VNQUlMX1BPUlQ6LTU4N30nCiAgICAgIC0gJ0VNQUlMX0hPU1RfVVNFUj0ke0VNQUlMX0hPU1RfVVNFUn0nCiAgICAgIC0gJ0VNQUlMX0hPU1RfUEFTU1dPUkQ9JHtFTUFJTF9IT1NUX1BBU1NXT1JEfScKICAgICAgLSAnRU1BSUxfVVNFX1RMUz0ke0VNQUlMX1VTRV9UTFM6LVRydWV9JwogICAgICAtICdFTUFJTF9VU0VfU1NMPSR7RU1BSUxfVVNFX1NTTDotRmFsc2V9JwogICAgICAtICdERUZBVUxUX0ZST01fRU1BSUw9JHtERUZBVUxUX0ZST01fRU1BSUx9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdweXRob24gLWMgJydpbXBvcnQgcmVxdWVzdHM7IHJlcXVlc3RzLmdldCgiaHR0cDovL2xvY2FsaG9zdDo4MDAwL2hlYWx0aC9yZWFkeSIpLnJhaXNlX2Zvcl9zdGF0dXMoKScnJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQo=", "tags": [ "python", "error-tracking", "django", - "mysql" + "postgresql" ], "category": "monitoring", "logo": "svgs/bugsink.svg", diff --git a/templates/service-templates.json b/templates/service-templates.json index 0af1cdf752..f3c2034879 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -412,12 +412,12 @@ "bugsink": { "documentation": "https://www.bugsink.com/docs/?utm_source=coolify.io", "slogan": "Self-hosted Error Tracking.", - "compose": "c2VydmljZXM6CiAgbXlzcWw6CiAgICBpbWFnZTogJ215c3FsOmxhdGVzdCcKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotYnVnc2lua30nCiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgdm9sdW1lczoKICAgICAgLSAnbXktZGF0YXZvbHVtZTovdmFyL2xpYi9teXNxbCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHdlYjoKICAgIGltYWdlOiBidWdzaW5rL2J1Z3NpbmsKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRUNSRVRfS0VZPSRTRVJWSUNFX1BBU1NXT1JEXzY0X0JVR1NJTksKICAgICAgLSAnQ1JFQVRFX1NVUEVSVVNFUj0ke0JVR1NJTktfQURNSU5fRU1BSUw6P306JFNFUlZJQ0VfUEFTU1dPUkRfQlVHU0lOSycKICAgICAgLSBTRVJWSUNFX0ZRRE5fQlVHU0lOS184MDAwCiAgICAgIC0gQkFTRV9VUkw9JFNFUlZJQ0VfRlFETl9CVUdTSU5LCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1teXNxbDovLyR7U0VSVklDRV9VU0VSX01ZU1FMfTokU0VSVklDRV9QQVNTV09SRF9NWVNRTEBteXNxbDozMzA2LyR7TVlTUUxfREFUQUJBU0U6LWJ1Z3Npbmt9JwogICAgICAtIEJFSElORF9IVFRQU19QUk9YWT1UcnVlCiAgICAgIC0gJ1NJVEVfVElUTEU9JHtTSVRFX1RJVExFOi1CdWdzaW5rfScKICAgICAgLSAnVElNRV9aT05FPSR7VElNRV9aT05FOi1VVEN9JwogICAgICAtICdQSE9ORUhPTUU9JHtQSE9ORUhPTUU6LUZhbHNlfScKICAgICAgLSAnRU1BSUxfSE9TVD0ke0VNQUlMX0hPU1R9JwogICAgICAtICdFTUFJTF9QT1JUPSR7RU1BSUxfUE9SVDotNTg3fScKICAgICAgLSAnRU1BSUxfSE9TVF9VU0VSPSR7RU1BSUxfSE9TVF9VU0VSfScKICAgICAgLSAnRU1BSUxfSE9TVF9QQVNTV09SRD0ke0VNQUlMX0hPU1RfUEFTU1dPUkR9JwogICAgICAtICdFTUFJTF9VU0VfVExTPSR7RU1BSUxfVVNFX1RMUzotVHJ1ZX0nCiAgICAgIC0gJ0VNQUlMX1VTRV9TU0w9JHtFTUFJTF9VU0VfU1NMOi1GYWxzZX0nCiAgICAgIC0gJ0RFRkFVTFRfRlJPTV9FTUFJTD0ke0RFRkFVTFRfRlJPTV9FTUFJTH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3B5dGhvbiAtYyAnJ2ltcG9ydCByZXF1ZXN0czsgcmVxdWVzdHMuZ2V0KCJodHRwOi8vbG9jYWxob3N0OjgwMDAvIikucmFpc2VfZm9yX3N0YXR1cygpJycnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICAgIGRlcGVuZHNfb246CiAgICAgIG15c3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5Cg==", + "compose": "c2VydmljZXM6CiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE3LWFscGluZScKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LWJ1Z3Npbmt9JwogICAgdm9sdW1lczoKICAgICAgLSAnYnVnc2luay1wb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICB3ZWI6CiAgICBpbWFnZTogJ2J1Z3NpbmsvYnVnc2luazoyJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFQ1JFVF9LRVk9JFNFUlZJQ0VfUEFTU1dPUkRfNjRfQlVHU0lOSwogICAgICAtICdDUkVBVEVfU1VQRVJVU0VSPSR7QlVHU0lOS19BRE1JTl9FTUFJTDo/fTokU0VSVklDRV9QQVNTV09SRF9CVUdTSU5LJwogICAgICAtIFNFUlZJQ0VfRlFETl9CVUdTSU5LXzgwMDAKICAgICAgLSBCQVNFX1VSTD0kU0VSVklDRV9GUUROX0JVR1NJTksKICAgICAgLSAnREFUQUJBU0VfVVJMPXBvc3RncmVzcWw6Ly8ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU306JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlczo1NDMyLyR7UE9TVEdSRVNfREI6LWJ1Z3Npbmt9JwogICAgICAtIEJFSElORF9IVFRQU19QUk9YWT1UcnVlCiAgICAgIC0gJ1NJVEVfVElUTEU9JHtTSVRFX1RJVExFOi1CdWdzaW5rfScKICAgICAgLSAnVElNRV9aT05FPSR7VElNRV9aT05FOi1VVEN9JwogICAgICAtICdQSE9ORUhPTUU9JHtQSE9ORUhPTUU6LUZhbHNlfScKICAgICAgLSAnRU1BSUxfSE9TVD0ke0VNQUlMX0hPU1R9JwogICAgICAtICdFTUFJTF9QT1JUPSR7RU1BSUxfUE9SVDotNTg3fScKICAgICAgLSAnRU1BSUxfSE9TVF9VU0VSPSR7RU1BSUxfSE9TVF9VU0VSfScKICAgICAgLSAnRU1BSUxfSE9TVF9QQVNTV09SRD0ke0VNQUlMX0hPU1RfUEFTU1dPUkR9JwogICAgICAtICdFTUFJTF9VU0VfVExTPSR7RU1BSUxfVVNFX1RMUzotVHJ1ZX0nCiAgICAgIC0gJ0VNQUlMX1VTRV9TU0w9JHtFTUFJTF9VU0VfU1NMOi1GYWxzZX0nCiAgICAgIC0gJ0RFRkFVTFRfRlJPTV9FTUFJTD0ke0RFRkFVTFRfRlJPTV9FTUFJTH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3B5dGhvbiAtYyAnJ2ltcG9ydCByZXF1ZXN0czsgcmVxdWVzdHMuZ2V0KCJodHRwOi8vbG9jYWxob3N0OjgwMDAvaGVhbHRoL3JlYWR5IikucmFpc2VfZm9yX3N0YXR1cygpJycnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5Cg==", "tags": [ "python", "error-tracking", "django", - "mysql" + "postgresql" ], "category": "monitoring", "logo": "svgs/bugsink.svg",