feat: add webhook Cloudron package (API-Gateway)
- Create Dockerfile for webhook (Go application) - Add CloudronManifest.json with basic configuration - Include README.md with usage documentation - Add hooks.json.example configuration template - Add logo.png (256x256) - Add CHANGELOG.md for version tracking Webhook is a lightweight configurable tool written in Go that allows creating HTTP endpoints (hooks) on your server for executing configured commands. Package includes: - Multi-stage Dockerfile using golang:1.21-alpine - Cloudron base image for runtime - Configuration on port 9000 - Localstorage addon for hooks.json - 256MB memory limit 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush <crush@charm.land>
This commit is contained in:
9
Package-Workspace/API-Gateway/webhook/CHANGELOG.md
Normal file
9
Package-Workspace/API-Gateway/webhook/CHANGELOG.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## [2.8.1] - 2025-01-24
|
||||
|
||||
### Added
|
||||
- Initial Cloudron package for webhook
|
||||
- Multi-stage Dockerfile for optimized image size
|
||||
- Example hooks.json configuration file
|
||||
- Documentation and usage instructions
|
||||
30
Package-Workspace/API-Gateway/webhook/CloudronManifest.json
Normal file
30
Package-Workspace/API-Gateway/webhook/CloudronManifest.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"version": 1,
|
||||
"manifestVersion": 2,
|
||||
"type": "app",
|
||||
"id": "io.cloudron.webhook",
|
||||
"title": "Webhook",
|
||||
"description": "A lightweight configurable tool written in Go that allows you to easily create HTTP endpoints (hooks) on your server",
|
||||
"author": "adnanh",
|
||||
"website": "https://github.com/adnanh/webhook",
|
||||
"contactEmail": "cloudron@tsys.dev",
|
||||
"tagline": "Lightweight webhook receiver for automation",
|
||||
"version": "2.8.1",
|
||||
"healthCheckPath": "/",
|
||||
"httpPort": 9000,
|
||||
"memoryLimit": 256,
|
||||
"addons": {
|
||||
"localstorage": true
|
||||
},
|
||||
"tcpPorts": {
|
||||
"HTTP_PORT": {
|
||||
"description": "Webhook HTTP port",
|
||||
"defaultValue": 9000
|
||||
}
|
||||
},
|
||||
"mediaLinks": [
|
||||
"https://github.com/adnanh/webhook/raw/development/docs/logo/logo-256x256.png"
|
||||
],
|
||||
"changelog": "Initial Cloudron package for webhook",
|
||||
"icon": "file://logo.png"
|
||||
}
|
||||
40
Package-Workspace/API-Gateway/webhook/Dockerfile
Normal file
40
Package-Workspace/API-Gateway/webhook/Dockerfile
Normal file
@@ -0,0 +1,40 @@
|
||||
FROM golang:1.21-alpine AS builder
|
||||
|
||||
# Install build dependencies
|
||||
RUN apk add --no-cache git make
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy go mod files
|
||||
COPY repo/go.mod repo/go.sum ./
|
||||
|
||||
# Download dependencies
|
||||
RUN go mod download
|
||||
|
||||
# Copy source code
|
||||
COPY repo/ .
|
||||
|
||||
# Build application
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o webhook
|
||||
|
||||
# Final stage
|
||||
FROM cloudron/base:3.2.0
|
||||
|
||||
# Copy binary from builder
|
||||
COPY --from=builder /app/webhook /usr/local/bin/webhook
|
||||
|
||||
# Create data directory
|
||||
RUN mkdir -p /app/data
|
||||
|
||||
# Set permissions
|
||||
RUN chmod +x /usr/local/bin/webhook
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Expose port
|
||||
EXPOSE 9000
|
||||
|
||||
# Start application
|
||||
CMD ["/usr/local/bin/webhook", "-hooks", "/app/data/hooks.json", "-verbose"]
|
||||
75
Package-Workspace/API-Gateway/webhook/README.md
Normal file
75
Package-Workspace/API-Gateway/webhook/README.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Webhook Cloudron Package
|
||||
|
||||
## Description
|
||||
|
||||
Webhook is a lightweight configurable tool written in Go that allows you to easily create HTTP endpoints (hooks) on your server, which you can use to execute configured commands.
|
||||
|
||||
## Features
|
||||
|
||||
- Define HTTP endpoints that execute commands on your server
|
||||
- Pass data from HTTP requests to your commands
|
||||
- Specify rules that must be satisfied for hooks to trigger
|
||||
- Supports JSON and YAML configuration files
|
||||
- Trigger rules for security (secrets, headers, etc.)
|
||||
- Hot-reload configuration without restart
|
||||
- Support for multipart form data
|
||||
- Template support for request values
|
||||
|
||||
## Configuration
|
||||
|
||||
The webhook application reads configuration from `/app/data/hooks.json` (or `/app/data/hooks.yaml`).
|
||||
|
||||
### Example Configuration
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "redeploy-webhook",
|
||||
"execute-command": "/var/scripts/redeploy.sh",
|
||||
"command-working-directory": "/var/webhook",
|
||||
"trigger-rule": {
|
||||
"and": [
|
||||
{
|
||||
"match": {
|
||||
"type": "payload-hmac-sha1",
|
||||
"secret": "mysecret",
|
||||
"parameter": {
|
||||
"source": "header",
|
||||
"name": "X-Hub-Signature"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
See [webhook documentation](https://github.com/adnanh/webhook/tree/master/docs) for detailed configuration options.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Install the webhook app on Cloudron
|
||||
2. Navigate to the File Manager
|
||||
3. Create or edit `hooks.json` in the `/app/data` directory
|
||||
4. Restart the app to apply configuration changes
|
||||
5. Access your webhook endpoints at `http://your-app.cloudron.app/hooks/{hook-id}`
|
||||
|
||||
## Documentation
|
||||
|
||||
For more information on configuring webhooks, visit:
|
||||
- [Hook Definition](https://github.com/adnanh/webhook/blob/master/docs/Hook-Definition.md)
|
||||
- [Hook Examples](https://github.com/adnanh/webhook/blob/master/docs/Hook-Examples.md)
|
||||
- [Hook Rules](https://github.com/adnanh/webhook/blob/master/docs/Hook-Rules.md)
|
||||
- [Webhook Parameters](https://github.com/adnanh/webhook/blob/master/docs/Webhook-Parameters.md)
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- Always use trigger rules to secure your hooks
|
||||
- Never expose sensitive commands without proper authentication
|
||||
- Use HMAC signatures for verifying webhook sources
|
||||
- Consider IP-based rules for additional security
|
||||
|
||||
## Upstream
|
||||
|
||||
[GitHub Repository](https://github.com/adnanh/webhook)
|
||||
60
Package-Workspace/API-Gateway/webhook/hooks.json.example
Normal file
60
Package-Workspace/API-Gateway/webhook/hooks.json.example
Normal file
@@ -0,0 +1,60 @@
|
||||
[
|
||||
{
|
||||
"id": "webhook",
|
||||
"execute-command": "/home/adnan/redeploy-go-webhook.sh",
|
||||
"command-working-directory": "/home/adnan/go",
|
||||
"response-message": "I got the payload!",
|
||||
"response-headers":
|
||||
[
|
||||
{
|
||||
"name": "Access-Control-Allow-Origin",
|
||||
"value": "*"
|
||||
}
|
||||
],
|
||||
"pass-arguments-to-command":
|
||||
[
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "head_commit.id"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "pusher.name"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "pusher.email"
|
||||
}
|
||||
],
|
||||
"trigger-rule":
|
||||
{
|
||||
"and":
|
||||
[
|
||||
{
|
||||
"match":
|
||||
{
|
||||
"type": "payload-hmac-sha1",
|
||||
"secret": "mysecret",
|
||||
"parameter":
|
||||
{
|
||||
"source": "header",
|
||||
"name": "X-Hub-Signature"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match":
|
||||
{
|
||||
"type": "value",
|
||||
"value": "refs/heads/master",
|
||||
"parameter":
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "ref"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
BIN
Package-Workspace/API-Gateway/webhook/logo.png
Normal file
BIN
Package-Workspace/API-Gateway/webhook/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
Reference in New Issue
Block a user