Initial Coolify deployment template
Some checks are pending
Deploy to Coolify / deploy (push) Waiting to run

This commit is contained in:
Artur Ferreira 2026-06-01 14:00:04 +02:00
commit 24173fe5bb
6 changed files with 146 additions and 0 deletions

2
.env.example Normal file
View file

@ -0,0 +1,2 @@
COOLIFY_WEBHOOK=https://coolify.example.com/api/v1/deploy?uuid=example&force=false
COOLIFY_TOKEN=replace-with-token-that-has-deploy-permission

View file

@ -0,0 +1,21 @@
name: Deploy to Coolify
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: docker
steps:
- name: Validate required secrets
run: |
test -n "${{ secrets.COOLIFY_WEBHOOK }}"
test -n "${{ secrets.COOLIFY_TOKEN }}"
- name: Trigger Coolify deployment
run: |
curl --fail --show-error --request GET "${{ secrets.COOLIFY_WEBHOOK }}" \
--header "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}"

5
.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
node_modules/
dist/
.env
.env.*
!.env.example

5
Dockerfile Normal file
View file

@ -0,0 +1,5 @@
FROM nginx:1.27-alpine
COPY public/ /usr/share/nginx/html/
EXPOSE 80

49
README.md Normal file
View file

@ -0,0 +1,49 @@
# Template
Minimal Forgejo + Coolify deployment template.
This repository is intended to stay on Forgejo. Coolify should use it as an "Other Git Provider" repository:
- Public repo: use `http://192.168.1.113:3001/artur/template` as the HTTPS/HTTP repository URL.
- Private repo: add a deploy key in Coolify and Forgejo, then use `ssh://git@192.168.1.113:222/artur/template.git`.
Automatic deployments are handled by Forgejo Actions calling Coolify's Deploy Webhook.
## Required Forgejo Secrets
Add these in `Settings -> Actions -> Secrets`:
| Secret | Purpose |
|--------|---------|
| `COOLIFY_WEBHOOK` | Deploy Webhook URL from the Coolify resource |
| `COOLIFY_TOKEN` | Coolify API token with `deploy` permission |
The workflow calls:
```sh
curl --request GET "$COOLIFY_WEBHOOK" \
--header "Authorization: Bearer $COOLIFY_TOKEN"
```
## Coolify MCP
Coolify's MCP server is read-only. Enable it in Coolify with a `root` API token:
```sh
curl -X POST http://192.168.1.101:8000/api/v1/mcp/enable \
-H "Authorization: Bearer <root-token>"
```
Then configure MCP clients with:
- URL: `http://192.168.1.101:8000/mcp`
- Header: `Authorization: Bearer <read-token>`
Use a token with `read` permission for MCP, not `root`.
## Local Test
```sh
docker build -t template:local .
docker run --rm -p 8080:80 template:local
```

64
public/index.html Normal file
View file

@ -0,0 +1,64 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Template</title>
<style>
:root {
color-scheme: dark;
--bg: #0f110c;
--panel: #181b12;
--text: #f8f3df;
--muted: #aaa18b;
--accent: #c8ff2e;
}
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 100vh;
display: grid;
place-items: center;
background:
linear-gradient(rgba(248, 243, 223, .045) 1px, transparent 1px),
linear-gradient(90deg, rgba(248, 243, 223, .045) 1px, transparent 1px),
radial-gradient(circle at 20% 0%, rgba(200, 255, 46, .18), transparent 30%),
var(--bg);
background-size: 34px 34px, 34px 34px, auto, auto;
color: var(--text);
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
main {
width: min(720px, calc(100vw - 32px));
padding: 36px;
border: 1px solid rgba(248, 243, 223, .14);
border-radius: 8px;
background: rgba(24, 27, 18, .9);
box-shadow: 12px 12px 0 rgba(200, 255, 46, .11);
}
p:first-child {
margin: 0 0 12px;
color: var(--accent);
font-weight: 800;
letter-spacing: .1em;
text-transform: uppercase;
font-size: 12px;
}
h1 {
margin: 0 0 14px;
font-size: clamp(40px, 8vw, 76px);
line-height: .92;
letter-spacing: -.07em;
}
p { color: var(--muted); line-height: 1.6; }
code { color: var(--accent); }
</style>
</head>
<body>
<main>
<p>Forgejo to Coolify</p>
<h1>Deployment template is alive.</h1>
<p>Push to <code>main</code>, let Forgejo Actions call the Coolify Deploy Webhook, and keep the app source in Forgejo.</p>
</main>
</body>
</html>