A community board built on Meith.
| Route | File | Where the image builds |
|---|---|---|
| Quick start with Coolify | docker-compose.yaml |
Your server |
| Advanced / prebuilt | docker-compose.prebuilt.yaml |
GitHub Actions or another build machine |
| Docker Compose without a panel | docker-compose.byhand.yaml |
Your server |
Use one route for a deployment. The Coolify guide and Docker Compose guide cover prerequisites, secrets, domains and recovery.
- Push this repository to GitHub.
- Create a Git repository resource in Coolify with the Docker Compose build pack and
/docker-compose.yamlas the Compose file. - Assign the board's domain and deploy. Coolify supplies database and authentication secrets; save a protected recovery copy.
- Confirm
postgresis healthy,migrateexits successfully, andwebandworkerrun. - Open
/install, unlock withAUTH_SECRET, and create the board and its first administrator. The installer seals itself and returns 404 after completion.
A push alone does not rebuild this route. Use Coolify's Redeploy after pushing. If the server cannot complete the build, use the prebuilt route.
- Let
.github/workflows/build.ymlfinish in GitHub Actions. It builds and publishes your board's image. - Make that image accessible to Coolify and select
/docker-compose.prebuilt.yaml. - Set
MEITH_IMAGEto the exact image from the workflow summary. The commit tag uses${{ github.sha }};:latestfollows later builds and can change on redeploy. - Deploy and complete
/installas above.
For a local image build, the build argument comes from the board's pinned package:
docker build -f Dockerfile.prebuilt --build-arg MEITH_VERSION=$(node -p "require('./package.json').dependencies['@meith/web']") -t meith-board .After changing the board, wait for its new image and update MEITH_IMAGE if pinned to a commit, then redeploy.
npm install
npm run devOpen http://localhost:3000. Without DATABASE_URL, this is a read-only fixture preview. For persistent registration and posting, follow Create a writable local board.
meith.config.tsregisters themes and board configuration.board.plugins.jsonandmeith.plugins.tsregister installed plugins./adminmanages forums, members, permissions and settings.npm run meith -- --helplists operator commands.
Before inviting members, test email delivery, verify scheduled work, and configure backups. The log mail driver delivers nothing. This deployment's worker calls the web application's tick endpoint. For a manual development run, use npm run meith -- task:run.
Add a plugin from this checkout:
npm run meith -- plugin:add @meith/plugin-duesCommit the package and registry changes, build and deploy, then apply plugin migrations with meith upgrade against the deployed board. Follow Install plugins and themes for the full procedure and theme registration. Installing a package into a running container does not make it part of the next deployment.
.github/workflows/update.yml checks weekly and opens an update pull request. It also supports Run workflow. Enable Allow GitHub Actions to create and approve pull requests under Settings → Actions → General.
Review the release notes, take a backup, and inspect any scaffold files the updater left for manual reconciliation. Merge, rebuild and redeploy; then run meith upgrade for plugin migrations. Core migrations run through the deployment's migration service. Migrations are forward-only; recovery uses a backup.
To prepare the update locally:
npx create-meith@latest updateThe updater moves package pins and supported deployment files together. Its package update includes these commands; running them alone does not update deployment files:
npm install --save-exact @meith/web@latest @meith/cli@latest @meith/theme-default@latest
npm install --save-exact next@$(node -p "require('./node_modules/@meith/web/package.json').dependencies.next")Keep Next.js aligned with @meith/web. Use --save-exact: a caret range is not a legal Docker image tag. Read Upgrade Meith before applying the change.