Grist
Spreadsheet that works like a database, with typed columns, Python formulas, linked tables, charts and forms.
Database / Productivity
No-code platform for building internal tools and business apps: define your own data tables and relations, then build pages, forms, kanbans and calendars on top, with roles, permissions and workflows.
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>:13000 in a browser.The same file Portainer deploys. It reads its settings from a .env next to it.
services:
nocobase:
image: nocobase/nocobase:latest
restart: unless-stopped
init: true
ports:
- "${NOCOBASE_PORT:-13000}:80"
environment:
DB_DIALECT: postgres
DB_HOST: postgres
DB_PORT: "5432"
DB_DATABASE: nocobase
DB_USER: nocobase
DB_PASSWORD: ${NOCOBASE_DB_PASSWORD:?Set a database password}
INIT_ROOT_PASSWORD: ${NOCOBASE_ADMIN_PASSWORD:?Set a password for the admin account}
volumes:
- nocobase-storage:/app/nocobase/storage
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:17-alpine
restart: unless-stopped
command: postgres -c wal_level=logical
environment:
POSTGRES_DB: nocobase
POSTGRES_USER: nocobase
POSTGRES_PASSWORD: ${NOCOBASE_DB_PASSWORD:?Set a database password}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nocobase -d nocobase"]
interval: 10s
timeout: 5s
retries: 5
volumes:
nocobase-storage:
postgres-data:
Fill in the blanks, as NocoBase won't start without them.
# Admin password (required) - For signing in as admin@nocobase.com. Only used on the very first start.
NOCOBASE_ADMIN_PASSWORD=
# Database password (required) - Generate one with: openssl rand -hex 32. Keep it the same when you redeploy, or NocoBase can't reach its database.
NOCOBASE_DB_PASSWORD=
# Host port for the web UI
NOCOBASE_PORT=13000 Grab the file and start it.
mkdir nocobase && cd nocobase
curl -fsSL -o compose.yml https://raw.githubusercontent.com/NotAFlightRisk/portainer-templates-extras/main/apps/nocobase/compose.yml
# save the .env tab here as .env first
docker compose up -d Set both passwords before you deploy, since the stack won't start without them. The first start installs everything and takes a minute or two (the log shows a few APP_COMMANDING errors while it does, which is normal). Then open http://<your-host>:13000 (or whichever port you picked) and sign in as admin@nocobase.com with your admin password. Changing that password on the form later does nothing, so use Change password in the user menu at the top right instead. Anyone who can reach it can sign up, and new accounts see nothing until you give their role some permissions. To stop sign-ups, untick Allow to sign up under Settings --> Authentication --> basic --> Configure. Uploads and its generated keys live in the nocobase-storage volume, everything else in postgres-data. Docs: docs.nocobase.com
What the Portainer form asks for. With compose they go in the .env file instead.
| Variable | What it's for | Default |
|---|---|---|
NOCOBASE_ADMIN_PASSWORD | Admin password (required) For signing in as admin@nocobase.com. Only used on the very first start. | Needs filling in |
NOCOBASE_DB_PASSWORD | Database password (required) Generate one with: openssl rand -hex 32. Keep it the same when you redeploy, or NocoBase can't reach its database. | Needs filling in |
NOCOBASE_PORT | Host port for the web UI | 13000 |
The containers this stack runs, with ports as they come out of the box.
| Service | Image | Ports |
|---|---|---|
nocobase | nocobase/nocobase:latest | 13000:80 |
postgres | postgres:17-alpine | Internal only |