ginskill-init 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.wrangler/cache/pages.json +4 -0
- package/.wrangler/cache/wrangler-account.json +6 -0
- package/DEVELOPMENT.md +510 -0
- package/README.md +104 -0
- package/agents/developer.md +56 -0
- package/agents/frontend-design.md +69 -0
- package/agents/mobile-reviewer.md +36 -0
- package/agents/review-code.md +49 -0
- package/agents/security-scanner.md +50 -0
- package/agents/tester.md +72 -0
- package/bin/cli.js +461 -0
- package/landing/ai-build-ai.png +0 -0
- package/landing/index.html +1495 -0
- package/landing/logo.png +0 -0
- package/package.json +37 -0
- package/skills/active-life-dev/SKILL.md +157 -0
- package/skills/active-life-dev/docs/auth.md +187 -0
- package/skills/active-life-dev/docs/customers.md +216 -0
- package/skills/active-life-dev/docs/integrations.md +209 -0
- package/skills/active-life-dev/docs/inventory.md +192 -0
- package/skills/active-life-dev/docs/modules.md +181 -0
- package/skills/active-life-dev/docs/orders.md +180 -0
- package/skills/active-life-dev/docs/patterns.md +319 -0
- package/skills/active-life-dev/docs/products.md +216 -0
- package/skills/active-life-dev/docs/schema.md +502 -0
- package/skills/active-life-dev/docs/setup.md +169 -0
- package/skills/active-life-dev/docs/vouchers.md +144 -0
- package/skills/ai-asset-generator/SKILL.md +247 -0
- package/skills/ai-asset-generator/docs/gen-image.md +274 -0
- package/skills/ai-asset-generator/docs/genvideo.md +341 -0
- package/skills/ai-asset-generator/docs/remove-background.md +19 -0
- package/skills/ai-asset-generator/lib/bg-remove.mjs +34 -0
- package/skills/ai-asset-generator/lib/env.mjs +48 -0
- package/skills/ai-asset-generator/lib/kie-client.mjs +100 -0
- package/skills/ai-build-ai/SKILL.md +127 -0
- package/skills/ai-build-ai/docs/agent-teams.md +293 -0
- package/skills/ai-build-ai/docs/checkpointing.md +161 -0
- package/skills/ai-build-ai/docs/create-agent.md +399 -0
- package/skills/ai-build-ai/docs/create-mcp.md +395 -0
- package/skills/ai-build-ai/docs/create-skill.md +299 -0
- package/skills/ai-build-ai/docs/headless-mode.md +614 -0
- package/skills/ai-build-ai/docs/hooks.md +578 -0
- package/skills/ai-build-ai/docs/memory-claude-md.md +375 -0
- package/skills/ai-build-ai/docs/output-styles.md +208 -0
- package/skills/ai-build-ai/docs/overview.md +162 -0
- package/skills/ai-build-ai/docs/permissions.md +391 -0
- package/skills/ai-build-ai/docs/plugins.md +396 -0
- package/skills/ai-build-ai/docs/sandbox.md +262 -0
- package/skills/ai-build-ai/docs/team-lead-workflow.md +648 -0
- package/skills/ant-design/SKILL.md +323 -0
- package/skills/ant-design/docs/components.md +160 -0
- package/skills/ant-design/docs/data-entry.md +406 -0
- package/skills/ant-design/docs/display.md +594 -0
- package/skills/ant-design/docs/feedback.md +451 -0
- package/skills/ant-design/docs/key-components.md +414 -0
- package/skills/ant-design/docs/navigation.md +310 -0
- package/skills/ant-design/docs/pro-components.md +543 -0
- package/skills/ant-design/docs/setup.md +213 -0
- package/skills/ant-design/docs/theme.md +265 -0
- package/skills/flutter-performance/SKILL.md +803 -0
- package/skills/flutter-performance/references/flutter-patterns.md +595 -0
- package/skills/icon-generator/SKILL.md +270 -0
- package/skills/mobile-app-review/SKILL.md +321 -0
- package/skills/mobile-app-review/references/apple-review.md +132 -0
- package/skills/mobile-app-review/references/google-play-review.md +203 -0
- package/skills/mongodb/SKILL.md +667 -0
- package/skills/mongodb/references/mongoose-patterns.md +368 -0
- package/skills/nestjs-architecture/SKILL.md +1086 -0
- package/skills/nestjs-architecture/references/advanced-patterns.md +590 -0
- package/skills/performance/SKILL.md +509 -0
- package/skills/react-fsd-architecture/SKILL.md +693 -0
- package/skills/react-fsd-architecture/references/fsd-patterns.md +747 -0
- package/skills/react-native-expo/SKILL.md +128 -0
- package/skills/react-native-expo/references/data-layer.md +252 -0
- package/skills/react-native-expo/references/design-system.md +252 -0
- package/skills/react-native-expo/references/navigation.md +199 -0
- package/skills/react-native-expo/references/performance.md +229 -0
- package/skills/react-native-expo/references/platform-services.md +179 -0
- package/skills/react-native-expo/references/state-management.md +209 -0
- package/skills/react-native-expo/references/ui-patterns.md +301 -0
- package/skills/react-query/SKILL.md +685 -0
- package/skills/react-query/references/query-patterns.md +365 -0
- package/skills/review-code/SKILL.md +374 -0
- package/skills/review-code/references/clean-code-principles.md +395 -0
- package/skills/review-code/references/frontend-patterns.md +136 -0
- package/skills/review-code/references/nestjs-patterns.md +184 -0
- package/skills/security-scanner/SKILL.md +366 -0
- package/skills/security-scanner/references/nestjs-security.md +260 -0
- package/skills/security-scanner/references/nextjs-security.md +201 -0
- package/skills/security-scanner/references/react-native-security.md +199 -0
- package/skills/traefik/SKILL.md +105 -0
- package/skills/traefik/docs/advanced-routing.md +186 -0
- package/skills/traefik/docs/auth-providers.md +137 -0
- package/skills/traefik/docs/cicd-devops.md +396 -0
- package/skills/traefik/docs/core-config.md +171 -0
- package/skills/traefik/docs/distributed-config.md +96 -0
- package/skills/traefik/docs/docker-compose.md +182 -0
- package/skills/traefik/docs/ha-performance.md +177 -0
- package/skills/traefik/docs/kubernetes.md +278 -0
- package/skills/traefik/docs/middleware.md +205 -0
- package/skills/traefik/docs/monitoring.md +357 -0
- package/skills/traefik/docs/security.md +391 -0
- package/skills/traefik/docs/tls-acme.md +155 -0
- package/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: traefik
|
|
3
|
+
description: |
|
|
4
|
+
**Traefik Reverse Proxy Expert**: Production patterns for configuring Traefik v3 — routing, middleware, TLS/ACME, Docker Compose, Kubernetes CRDs, load balancing, observability, security hardening, CI/CD, and DevOps.
|
|
5
|
+
- MANDATORY TRIGGERS: traefik, reverse proxy, ingress controller, load balancer, traefik config, traefik middleware, traefik router, traefik service, traefik docker, traefik kubernetes, traefik TLS, traefik ACME, let's encrypt, traefik dashboard, traefik labels, IngressRoute, ForwardAuth, rate limit traefik, traefik compose, traefik helm, traefik CRD, traefik websocket, traefik grpc, traefik TCP, traefik UDP, traefik canary, traefik blue-green, traefik security headers, traefik monitoring, traefik prometheus
|
|
6
|
+
- Use this skill when building, configuring, deploying, debugging, or reviewing Traefik proxy setups in any environment (Docker, Kubernetes, bare metal, cloud).
|
|
7
|
+
allowed-tools: Read, Grep, Glob, Bash, Write, Edit
|
|
8
|
+
argument-hint: "[topic: config|middleware|tls|docker|k8s|security|cicd|monitoring|auth|tcp-udp|grpc|websocket|ha|performance]"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Traefik v3 Expert Guide
|
|
12
|
+
|
|
13
|
+
Traefik is a cloud-native reverse proxy and load balancer. Current stable: **v3.6.x**.
|
|
14
|
+
|
|
15
|
+
## Quick Reference
|
|
16
|
+
|
|
17
|
+
| Topic | Doc |
|
|
18
|
+
|-------|-----|
|
|
19
|
+
| Core config (static/dynamic, entrypoints, routers, services) | `docs/core-config.md` |
|
|
20
|
+
| Middleware (headers, rate-limit, auth, compress, chain) | `docs/middleware.md` |
|
|
21
|
+
| TLS, ACME, Let's Encrypt, mTLS | `docs/tls-acme.md` |
|
|
22
|
+
| Docker Compose patterns | `docs/docker-compose.md` |
|
|
23
|
+
| Kubernetes CRDs (IngressRoute, Middleware, TLSOption) | `docs/kubernetes.md` |
|
|
24
|
+
| Security hardening | `docs/security.md` |
|
|
25
|
+
| CI/CD, blue-green, canary, GitOps | `docs/cicd-devops.md` |
|
|
26
|
+
| Monitoring, metrics, tracing, logging | `docs/monitoring.md` |
|
|
27
|
+
| ForwardAuth (Authelia, Authentik, OAuth2 Proxy) | `docs/auth-providers.md` |
|
|
28
|
+
| TCP/UDP, gRPC, WebSocket routing | `docs/advanced-routing.md` |
|
|
29
|
+
| High availability & performance tuning | `docs/ha-performance.md` |
|
|
30
|
+
| Distributed config (Redis, Consul, etcd) | `docs/distributed-config.md` |
|
|
31
|
+
|
|
32
|
+
## Architecture Model
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Internet → EntryPoints → Routers (rules + middleware) → Services → Backends
|
|
36
|
+
↑ ↑ ↑
|
|
37
|
+
Static config Dynamic config Dynamic config
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Static config** (loaded at startup): entrypoints, providers, cert resolvers, API/dashboard.
|
|
41
|
+
Set via `traefik.yml`, CLI flags, or env vars.
|
|
42
|
+
|
|
43
|
+
**Dynamic config** (hot-reloaded): routers, services, middlewares, TLS options.
|
|
44
|
+
Provided by: Docker labels, Kubernetes CRDs, file provider, Consul, etcd, Redis.
|
|
45
|
+
|
|
46
|
+
## Key Patterns
|
|
47
|
+
|
|
48
|
+
### Docker: Expose a service
|
|
49
|
+
```yaml
|
|
50
|
+
labels:
|
|
51
|
+
- "traefik.enable=true"
|
|
52
|
+
- "traefik.http.routers.myapp.rule=Host(`app.example.com`)"
|
|
53
|
+
- "traefik.http.routers.myapp.entrypoints=websecure"
|
|
54
|
+
- "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
|
|
55
|
+
- "traefik.http.services.myapp.loadbalancer.server.port=8080"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Kubernetes: IngressRoute
|
|
59
|
+
```yaml
|
|
60
|
+
apiVersion: traefik.io/v1alpha1
|
|
61
|
+
kind: IngressRoute
|
|
62
|
+
metadata:
|
|
63
|
+
name: myapp
|
|
64
|
+
spec:
|
|
65
|
+
entryPoints: [websecure]
|
|
66
|
+
routes:
|
|
67
|
+
- match: Host(`app.example.com`)
|
|
68
|
+
kind: Rule
|
|
69
|
+
services:
|
|
70
|
+
- name: myapp-svc
|
|
71
|
+
port: 80
|
|
72
|
+
tls:
|
|
73
|
+
certResolver: letsencrypt
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Security headers (apply globally)
|
|
77
|
+
```yaml
|
|
78
|
+
http:
|
|
79
|
+
middlewares:
|
|
80
|
+
security-headers:
|
|
81
|
+
headers:
|
|
82
|
+
browserXssFilter: true
|
|
83
|
+
contentTypeNosniff: true
|
|
84
|
+
frameDeny: true
|
|
85
|
+
stsIncludeSubdomains: true
|
|
86
|
+
stsPreload: true
|
|
87
|
+
stsSeconds: 31536000
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## When Using This Skill
|
|
91
|
+
|
|
92
|
+
1. Read the relevant `docs/` file based on the user's topic
|
|
93
|
+
2. Provide production-ready configs, not toy examples
|
|
94
|
+
3. Always include security best practices
|
|
95
|
+
4. Specify Traefik v3 syntax (v2 syntax differs)
|
|
96
|
+
5. Warn about common pitfalls (exposed dashboard, no rate limiting, TLS misconfig)
|
|
97
|
+
|
|
98
|
+
## Common Pitfalls
|
|
99
|
+
|
|
100
|
+
- **Never** use `api.insecure: true` in production
|
|
101
|
+
- **Always** set `exposedByDefault: false` for Docker provider
|
|
102
|
+
- **Always** configure `forwardedHeaders.trustedIPs` when behind a load balancer
|
|
103
|
+
- Mount Docker socket **read-only** (`:ro`) or use a socket proxy
|
|
104
|
+
- Wildcard certs require DNS-01 challenge (HTTP-01 won't work)
|
|
105
|
+
- Set `sniStrict: true` to reject connections without matching SNI
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Advanced Routing: TCP, UDP, gRPC, WebSocket
|
|
2
|
+
|
|
3
|
+
## TCP Routing
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
# Static config - entrypoints
|
|
7
|
+
entryPoints:
|
|
8
|
+
mysql:
|
|
9
|
+
address: ":3306"
|
|
10
|
+
postgres:
|
|
11
|
+
address: ":5432"
|
|
12
|
+
ssh:
|
|
13
|
+
address: ":2222"
|
|
14
|
+
|
|
15
|
+
# Dynamic config
|
|
16
|
+
tcp:
|
|
17
|
+
routers:
|
|
18
|
+
mysql-router:
|
|
19
|
+
entryPoints: [mysql]
|
|
20
|
+
rule: "HostSNI(`db.example.com`)"
|
|
21
|
+
service: mysql-service
|
|
22
|
+
tls:
|
|
23
|
+
passthrough: true # Don't terminate TLS
|
|
24
|
+
|
|
25
|
+
ssh-router:
|
|
26
|
+
entryPoints: [ssh]
|
|
27
|
+
rule: "HostSNI(`*`)" # No SNI for plain TCP
|
|
28
|
+
service: ssh-service
|
|
29
|
+
|
|
30
|
+
postgres-tls:
|
|
31
|
+
entryPoints: [postgres]
|
|
32
|
+
rule: "HostSNI(`postgres.example.com`)"
|
|
33
|
+
service: postgres-service
|
|
34
|
+
tls:
|
|
35
|
+
certResolver: letsencrypt
|
|
36
|
+
|
|
37
|
+
services:
|
|
38
|
+
mysql-service:
|
|
39
|
+
loadBalancer:
|
|
40
|
+
servers:
|
|
41
|
+
- address: "10.0.0.20:3306"
|
|
42
|
+
- address: "10.0.0.21:3306"
|
|
43
|
+
|
|
44
|
+
ssh-service:
|
|
45
|
+
loadBalancer:
|
|
46
|
+
servers:
|
|
47
|
+
- address: "10.0.0.30:22"
|
|
48
|
+
|
|
49
|
+
postgres-service:
|
|
50
|
+
loadBalancer:
|
|
51
|
+
servers:
|
|
52
|
+
- address: "10.0.0.40:5432"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**TLS passthrough**: Traefik reads SNI from ClientHello without terminating TLS.
|
|
56
|
+
**Plain TCP**: Use `HostSNI(`*`)` as catch-all (no TLS = no SNI).
|
|
57
|
+
|
|
58
|
+
## UDP Routing
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
entryPoints:
|
|
62
|
+
dns-udp:
|
|
63
|
+
address: ":53/udp"
|
|
64
|
+
wireguard:
|
|
65
|
+
address: ":51820/udp"
|
|
66
|
+
|
|
67
|
+
udp:
|
|
68
|
+
routers:
|
|
69
|
+
dns-router:
|
|
70
|
+
entryPoints: [dns-udp]
|
|
71
|
+
service: dns-service
|
|
72
|
+
|
|
73
|
+
wireguard-router:
|
|
74
|
+
entryPoints: [wireguard]
|
|
75
|
+
service: wireguard-service
|
|
76
|
+
|
|
77
|
+
services:
|
|
78
|
+
dns-service:
|
|
79
|
+
loadBalancer:
|
|
80
|
+
servers:
|
|
81
|
+
- address: "10.0.0.50:53"
|
|
82
|
+
- address: "10.0.0.51:53"
|
|
83
|
+
|
|
84
|
+
wireguard-service:
|
|
85
|
+
loadBalancer:
|
|
86
|
+
servers:
|
|
87
|
+
- address: "10.0.0.60:51820"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
UDP has no path/SNI matching — it's pure load balancing.
|
|
91
|
+
|
|
92
|
+
## gRPC Routing
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
http:
|
|
96
|
+
routers:
|
|
97
|
+
grpc-router:
|
|
98
|
+
entryPoints: [websecure]
|
|
99
|
+
rule: "Host(`grpc.example.com`)"
|
|
100
|
+
service: grpc-service
|
|
101
|
+
tls:
|
|
102
|
+
certResolver: letsencrypt
|
|
103
|
+
|
|
104
|
+
services:
|
|
105
|
+
grpc-service:
|
|
106
|
+
loadBalancer:
|
|
107
|
+
servers:
|
|
108
|
+
- url: "h2c://grpc-backend:50051" # HTTP/2 cleartext
|
|
109
|
+
healthCheck:
|
|
110
|
+
path: /grpc.health.v1.Health/Check
|
|
111
|
+
scheme: h2c
|
|
112
|
+
interval: 10s
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Docker labels:
|
|
116
|
+
```yaml
|
|
117
|
+
labels:
|
|
118
|
+
- "traefik.enable=true"
|
|
119
|
+
- "traefik.http.routers.grpc.rule=Host(`grpc.example.com`)"
|
|
120
|
+
- "traefik.http.routers.grpc.entrypoints=websecure"
|
|
121
|
+
- "traefik.http.routers.grpc.tls.certresolver=letsencrypt"
|
|
122
|
+
- "traefik.http.services.grpc.loadbalancer.server.port=50051"
|
|
123
|
+
- "traefik.http.services.grpc.loadbalancer.server.scheme=h2c"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### gRPC-Web (browser clients)
|
|
127
|
+
```yaml
|
|
128
|
+
http:
|
|
129
|
+
middlewares:
|
|
130
|
+
grpc-web:
|
|
131
|
+
grpcWeb:
|
|
132
|
+
allowOrigins:
|
|
133
|
+
- "https://app.example.com"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## WebSocket
|
|
137
|
+
|
|
138
|
+
WebSocket works out of the box — no special config needed. The HTTP Upgrade mechanism is handled transparently.
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
http:
|
|
142
|
+
routers:
|
|
143
|
+
ws-router:
|
|
144
|
+
entryPoints: [websecure]
|
|
145
|
+
rule: "Host(`ws.example.com`)"
|
|
146
|
+
service: ws-service
|
|
147
|
+
tls:
|
|
148
|
+
certResolver: letsencrypt
|
|
149
|
+
|
|
150
|
+
services:
|
|
151
|
+
ws-service:
|
|
152
|
+
loadBalancer:
|
|
153
|
+
servers:
|
|
154
|
+
- url: "http://websocket-backend:8080"
|
|
155
|
+
sticky:
|
|
156
|
+
cookie:
|
|
157
|
+
name: ws_affinity
|
|
158
|
+
secure: true
|
|
159
|
+
httpOnly: true
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Important**: Extend timeouts for long-lived WebSocket connections:
|
|
163
|
+
```yaml
|
|
164
|
+
# traefik.yml (static)
|
|
165
|
+
serversTransport:
|
|
166
|
+
forwardingTimeouts:
|
|
167
|
+
dialTimeout: 30s
|
|
168
|
+
responseHeaderTimeout: 0s # 0 = no timeout
|
|
169
|
+
idleConnTimeout: 90s
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Sticky sessions are recommended for multi-instance WebSocket backends.
|
|
173
|
+
|
|
174
|
+
## Server-Sent Events (SSE)
|
|
175
|
+
|
|
176
|
+
SSE works automatically. Ensure compress middleware excludes `text/event-stream`:
|
|
177
|
+
```yaml
|
|
178
|
+
http:
|
|
179
|
+
middlewares:
|
|
180
|
+
compress:
|
|
181
|
+
compress:
|
|
182
|
+
excludedContentTypes:
|
|
183
|
+
- text/event-stream
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Set `responseHeaderTimeout: 0s` to prevent premature connection closure.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# ForwardAuth with Identity Providers
|
|
2
|
+
|
|
3
|
+
## Authelia
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
http:
|
|
7
|
+
middlewares:
|
|
8
|
+
authelia:
|
|
9
|
+
forwardAuth:
|
|
10
|
+
address: "http://authelia:9091/api/authz/forward-auth"
|
|
11
|
+
trustForwardHeader: true
|
|
12
|
+
authResponseHeaders:
|
|
13
|
+
- Remote-User
|
|
14
|
+
- Remote-Groups
|
|
15
|
+
- Remote-Name
|
|
16
|
+
- Remote-Email
|
|
17
|
+
|
|
18
|
+
authelia-basic:
|
|
19
|
+
forwardAuth:
|
|
20
|
+
address: "http://authelia:9091/api/authz/forward-auth/basic"
|
|
21
|
+
trustForwardHeader: true
|
|
22
|
+
authResponseHeaders:
|
|
23
|
+
- Remote-User
|
|
24
|
+
- Remote-Groups
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Docker label:
|
|
28
|
+
```yaml
|
|
29
|
+
- "traefik.http.routers.myapp.middlewares=authelia@file"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Authentik
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
http:
|
|
36
|
+
middlewares:
|
|
37
|
+
authentik:
|
|
38
|
+
forwardAuth:
|
|
39
|
+
address: "http://authentik-outpost:9000/outpost.goauthentik.io/auth/traefik"
|
|
40
|
+
trustForwardHeader: true
|
|
41
|
+
authResponseHeaders:
|
|
42
|
+
- X-authentik-username
|
|
43
|
+
- X-authentik-groups
|
|
44
|
+
- X-authentik-email
|
|
45
|
+
- X-authentik-name
|
|
46
|
+
- X-authentik-uid
|
|
47
|
+
- X-authentik-jwt
|
|
48
|
+
- X-authentik-meta-jwks
|
|
49
|
+
- X-authentik-meta-outpost
|
|
50
|
+
- X-authentik-meta-provider
|
|
51
|
+
- X-authentik-meta-app
|
|
52
|
+
- X-authentik-meta-version
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## OAuth2 Proxy
|
|
56
|
+
|
|
57
|
+
Docker Compose:
|
|
58
|
+
```yaml
|
|
59
|
+
services:
|
|
60
|
+
oauth2-proxy:
|
|
61
|
+
image: quay.io/oauth2-proxy/oauth2-proxy:latest
|
|
62
|
+
environment:
|
|
63
|
+
- OAUTH2_PROXY_PROVIDER=google
|
|
64
|
+
- OAUTH2_PROXY_CLIENT_ID=xxx.apps.googleusercontent.com
|
|
65
|
+
- OAUTH2_PROXY_CLIENT_SECRET=secret
|
|
66
|
+
- OAUTH2_PROXY_COOKIE_SECRET=32-byte-base64-encoded
|
|
67
|
+
- OAUTH2_PROXY_EMAIL_DOMAINS=example.com
|
|
68
|
+
- OAUTH2_PROXY_HTTP_ADDRESS=0.0.0.0:4180
|
|
69
|
+
- OAUTH2_PROXY_REVERSE_PROXY=true
|
|
70
|
+
- OAUTH2_PROXY_SET_XAUTHREQUEST=true
|
|
71
|
+
networks: [proxy]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Middleware:
|
|
75
|
+
```yaml
|
|
76
|
+
http:
|
|
77
|
+
middlewares:
|
|
78
|
+
oauth2-proxy:
|
|
79
|
+
forwardAuth:
|
|
80
|
+
address: "http://oauth2-proxy:4180/oauth2/auth"
|
|
81
|
+
trustForwardHeader: true
|
|
82
|
+
authResponseHeaders:
|
|
83
|
+
- X-Auth-Request-User
|
|
84
|
+
- X-Auth-Request-Email
|
|
85
|
+
- X-Auth-Request-Access-Token
|
|
86
|
+
- Set-Cookie
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Keycloak (via OAuth2 Proxy)
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
services:
|
|
93
|
+
oauth2-proxy:
|
|
94
|
+
image: quay.io/oauth2-proxy/oauth2-proxy:latest
|
|
95
|
+
environment:
|
|
96
|
+
- OAUTH2_PROXY_PROVIDER=keycloak-oidc
|
|
97
|
+
- OAUTH2_PROXY_OIDC_ISSUER_URL=https://keycloak.example.com/realms/myrealm
|
|
98
|
+
- OAUTH2_PROXY_CLIENT_ID=traefik
|
|
99
|
+
- OAUTH2_PROXY_CLIENT_SECRET=secret
|
|
100
|
+
- OAUTH2_PROXY_COOKIE_SECRET=32-byte-base64
|
|
101
|
+
- OAUTH2_PROXY_EMAIL_DOMAINS=*
|
|
102
|
+
- OAUTH2_PROXY_HTTP_ADDRESS=0.0.0.0:4180
|
|
103
|
+
- OAUTH2_PROXY_REVERSE_PROXY=true
|
|
104
|
+
- OAUTH2_PROXY_SET_XAUTHREQUEST=true
|
|
105
|
+
- OAUTH2_PROXY_PASS_ACCESS_TOKEN=true
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## BasicAuth (simple)
|
|
109
|
+
|
|
110
|
+
Generate password: `htpasswd -nB admin`
|
|
111
|
+
|
|
112
|
+
```yaml
|
|
113
|
+
http:
|
|
114
|
+
middlewares:
|
|
115
|
+
basic-auth:
|
|
116
|
+
basicAuth:
|
|
117
|
+
users:
|
|
118
|
+
- "admin:$2y$05$hash..."
|
|
119
|
+
removeHeader: true
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Docker label (escape `$` with `$$`):
|
|
123
|
+
```yaml
|
|
124
|
+
- "traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$05$$hash..."
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## DigestAuth
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
http:
|
|
131
|
+
middlewares:
|
|
132
|
+
digest-auth:
|
|
133
|
+
digestAuth:
|
|
134
|
+
users:
|
|
135
|
+
- "admin:traefik:hash"
|
|
136
|
+
removeHeader: true
|
|
137
|
+
```
|