CyberChef
Web app for encoding, decoding, encrypting, compressing and picking apart data, by chaining hundreds of small operations into a recipe.
Security / Development / Tools
Database change management for teams. Plan, review and roll out schema changes to Postgres, MySQL and 20-odd other databases with a full history, or query them from a web SQL editor.
It isn't in the main Portainer Templates list yet, so use this one. Portainer takes one URL at a time, so it swaps out whatever list you had before.
In Portainer, head to Settings --> App Templates, paste this in as the URL and save.
https://raw.githubusercontent.com/NotAFlightRisk/portainer-templates-extras/main/templates.json http://<your-server>:8093 in a browser.The same file Portainer deploys. It reads its settings from a .env next to it.
services:
bytebase:
image: bytebase/bytebase:latest
restart: unless-stopped
ports:
- "${BYTEBASE_PORT:-8093}:8080"
environment:
PG_URL: postgresql://bytebase:${BYTEBASE_DB_PASSWORD:?Set a database password}@postgres:5432/bytebase
volumes:
- bytebase-data:/var/opt/bytebase
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: bytebase
POSTGRES_USER: bytebase
POSTGRES_PASSWORD: ${BYTEBASE_DB_PASSWORD:?Set a database password}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U bytebase -d bytebase"]
interval: 10s
timeout: 5s
retries: 5
volumes:
bytebase-data:
postgres-data:
Fill in the blanks, as Bytebase won't start without them.
# Database password (required) - For Bytebase's own Postgres. Generate one with: openssl rand -hex 32. Keep it the same when you redeploy.
BYTEBASE_DB_PASSWORD=
# Host port for the web UI
BYTEBASE_PORT=8093 Grab the file and start it.
mkdir bytebase && cd bytebase
curl -fsSL -o compose.yml https://raw.githubusercontent.com/NotAFlightRisk/portainer-templates-extras/main/apps/bytebase/compose.yml
# save the .env tab here as .env first
docker compose up -d Set the database password before you deploy (openssl rand -hex 32 makes a good one), since the stack won't start without it. Then open http://<your-host>:8093 (or whichever port you picked). That page creates the admin, and whoever reaches it first gets to, so do it straight away. Sign-ups stay open after that (new people join as members), so tick Disallow self-service signup under Settings --> General if anyone else can reach it, and set the External URL there to the address you actually use. Each time it starts, Bytebase sends the first account's email address, everyone's email domains and your SQL review rules to bytebase.com, unless you untick Participate in improvement program on that same page. When you add a database, use your host's IP rather than localhost, which is the Bytebase container itself. The free Community plan covers 20 users and 10 instances. Bytebase keeps everything in Postgres, in the postgres-data volume, and any sample instance you start in bytebase-data. Docs: docs.bytebase.com
What the Portainer form asks for. With compose they go in the .env file instead.
| Variable | What it's for | Default |
|---|---|---|
BYTEBASE_DB_PASSWORD | Database password (required) For Bytebase's own Postgres. Generate one with: openssl rand -hex 32. Keep it the same when you redeploy. | Needs filling in |
BYTEBASE_PORT | Host port for the web UI | 8093 |
The containers this stack runs, with ports as they come out of the box.
| Service | Image | Ports |
|---|---|---|
bytebase | bytebase/bytebase:latest | 8093:8080 |
postgres | postgres:17-alpine | Internal only |