@bluedynamics/cdk8s-plone 0.1.35 → 0.1.37
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/.jsii +4 -4
- package/documentation/sources/explanation/architecture.md +31 -23
- package/documentation/sources/explanation/features.md +47 -36
- package/documentation/sources/explanation/index.md +12 -3
- package/documentation/sources/how-to/configure-security-context.md +148 -0
- package/documentation/sources/how-to/deploy-classic-ui.md +57 -49
- package/documentation/sources/how-to/deploy-production-volto.md +61 -51
- package/documentation/sources/how-to/deploy-with-vinyl-cache.md +18 -9
- package/documentation/sources/how-to/enable-prometheus-monitoring.md +123 -0
- package/documentation/sources/how-to/index.md +14 -6
- package/documentation/sources/how-to/schedule-pods.md +150 -0
- package/documentation/sources/how-to/setup-prerequisites.md +53 -44
- package/documentation/sources/index.md +23 -14
- package/documentation/sources/reference/api/index.md +11 -2
- package/documentation/sources/reference/configuration-options.md +217 -50
- package/documentation/sources/reference/index.md +13 -4
- package/documentation/sources/tutorials/01-quick-start.md +27 -19
- package/documentation/sources/tutorials/index.md +10 -1
- package/lib/httpcache.js +1 -1
- package/lib/plone.js +1 -1
- package/lib/vinylcache.js +1 -1
- package/package.json +8 -8
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
myst:
|
|
3
|
+
html_meta:
|
|
4
|
+
"description": "Deploy the Classic UI example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
|
|
5
|
+
"property=og:description": "Deploy the Classic UI example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
|
|
6
|
+
"property=og:title": "Deploy Classic UI example"
|
|
7
|
+
"keywords": "Plone, cdk8s, Kubernetes, Classic UI, PostgreSQL, Varnish, ingress"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Deploy Classic UI example
|
|
2
11
|
|
|
3
12
|
This guide shows you how to deploy the Classic UI example to your Kubernetes cluster.
|
|
4
13
|
|
|
5
|
-
## What
|
|
14
|
+
## What you'll deploy
|
|
6
15
|
|
|
7
16
|
The [Classic UI example](https://github.com/bluedynamics/cdk8s-plone/tree/main/examples/classic-ui) provides traditional Plone with server-side rendering:
|
|
8
17
|
|
|
@@ -27,7 +36,7 @@ Choose Classic UI if you're migrating from older Plone versions or need specific
|
|
|
27
36
|
|
|
28
37
|
## Prerequisites
|
|
29
38
|
|
|
30
|
-
Same as the
|
|
39
|
+
Same as the {ref}`production-volto-prerequisites` in the Production Volto guide, you need:
|
|
31
40
|
|
|
32
41
|
- Ingress controller (Traefik or Kong)
|
|
33
42
|
- cert-manager
|
|
@@ -36,36 +45,36 @@ Same as the [Production Volto guide](deploy-production-volto.md#prerequisites),
|
|
|
36
45
|
|
|
37
46
|
See [Setup Prerequisites](setup-prerequisites.md) for detailed instructions.
|
|
38
47
|
|
|
39
|
-
## Step 1: Get the
|
|
48
|
+
## Step 1: Get the example
|
|
40
49
|
|
|
41
|
-
```
|
|
50
|
+
```shell
|
|
42
51
|
git clone https://github.com/bluedynamics/cdk8s-plone.git
|
|
43
52
|
cd cdk8s-plone/examples/classic-ui
|
|
44
53
|
```
|
|
45
54
|
|
|
46
|
-
## Step 2: Install
|
|
55
|
+
## Step 2: Install dependencies
|
|
47
56
|
|
|
48
|
-
```
|
|
57
|
+
```shell
|
|
49
58
|
npm install
|
|
50
59
|
```
|
|
51
60
|
|
|
52
61
|
## Step 3: Import CRDs
|
|
53
62
|
|
|
54
|
-
```
|
|
63
|
+
```shell
|
|
55
64
|
npm run import
|
|
56
65
|
```
|
|
57
66
|
|
|
58
|
-
## Step 4: Configure
|
|
67
|
+
## Step 4: Configure environment
|
|
59
68
|
|
|
60
69
|
Create `.env` from the example:
|
|
61
70
|
|
|
62
|
-
```
|
|
71
|
+
```shell
|
|
63
72
|
cp .env.example .env
|
|
64
73
|
```
|
|
65
74
|
|
|
66
75
|
Edit `.env`:
|
|
67
76
|
|
|
68
|
-
```
|
|
77
|
+
```shell
|
|
69
78
|
# Your domains
|
|
70
79
|
DOMAIN_CACHED=plone.example.com
|
|
71
80
|
DOMAIN_UNCACHED=plone-test.example.com
|
|
@@ -85,17 +94,17 @@ DATABASE=cloudnativepg
|
|
|
85
94
|
Classic UI only needs one image (backend). There's no frontend image configuration.
|
|
86
95
|
:::
|
|
87
96
|
|
|
88
|
-
## Step 5: Generate
|
|
97
|
+
## Step 5: Generate manifests
|
|
89
98
|
|
|
90
|
-
```
|
|
99
|
+
```shell
|
|
91
100
|
npm run synth
|
|
92
101
|
```
|
|
93
102
|
|
|
94
103
|
Creates `dist/plone-classic.k8s.yaml` (~27 KB, smaller than Volto's 32 KB).
|
|
95
104
|
|
|
96
|
-
## Step 6: Review
|
|
105
|
+
## Step 6: Review manifests
|
|
97
106
|
|
|
98
|
-
```
|
|
107
|
+
```shell
|
|
99
108
|
# Count resources
|
|
100
109
|
grep "^kind:" dist/plone-classic.k8s.yaml | sort | uniq -c
|
|
101
110
|
|
|
@@ -105,19 +114,19 @@ kubectl apply --dry-run=client -f dist/plone-classic.k8s.yaml
|
|
|
105
114
|
|
|
106
115
|
## Step 7: Deploy
|
|
107
116
|
|
|
108
|
-
```
|
|
117
|
+
```shell
|
|
109
118
|
kubectl apply -f dist/plone-classic.k8s.yaml
|
|
110
119
|
```
|
|
111
120
|
|
|
112
121
|
Or to a specific namespace:
|
|
113
122
|
|
|
114
|
-
```
|
|
123
|
+
```shell
|
|
115
124
|
kubectl apply -f dist/plone-classic.k8s.yaml -n plone
|
|
116
125
|
```
|
|
117
126
|
|
|
118
|
-
## Step 8: Monitor
|
|
127
|
+
## Step 8: Monitor deployment
|
|
119
128
|
|
|
120
|
-
```
|
|
129
|
+
```shell
|
|
121
130
|
# Watch pods
|
|
122
131
|
kubectl get pods -l app.kubernetes.io/part-of=plone -w
|
|
123
132
|
|
|
@@ -131,9 +140,9 @@ kubectl wait --for=condition=ready pod \
|
|
|
131
140
|
Classic UI deploys fewer pods than Volto (no frontend pods).
|
|
132
141
|
:::
|
|
133
142
|
|
|
134
|
-
## Step 9: Verify
|
|
143
|
+
## Step 9: Verify services
|
|
135
144
|
|
|
136
|
-
```
|
|
145
|
+
```shell
|
|
137
146
|
kubectl get svc -l app.kubernetes.io/part-of=plone
|
|
138
147
|
```
|
|
139
148
|
|
|
@@ -142,14 +151,14 @@ You should see:
|
|
|
142
151
|
- `plone-httpcache` (Varnish cache)
|
|
143
152
|
- Database service
|
|
144
153
|
|
|
145
|
-
## Step 10: Check
|
|
154
|
+
## Step 10: Check ingress
|
|
146
155
|
|
|
147
|
-
```
|
|
156
|
+
```shell
|
|
148
157
|
kubectl get ingress
|
|
149
158
|
kubectl get certificate
|
|
150
159
|
```
|
|
151
160
|
|
|
152
|
-
## Step 11: Access
|
|
161
|
+
## Step 11: Access your site
|
|
153
162
|
|
|
154
163
|
Once DNS and TLS are ready:
|
|
155
164
|
|
|
@@ -157,7 +166,7 @@ Once DNS and TLS are ready:
|
|
|
157
166
|
- **Testing (uncached)**: https://plone-test.example.com
|
|
158
167
|
- **Maintenance**: https://plone-admin.example.com
|
|
159
168
|
|
|
160
|
-
### Create Plone
|
|
169
|
+
### Create Plone site
|
|
161
170
|
|
|
162
171
|
1. Access maintenance domain: https://plone-admin.example.com
|
|
163
172
|
2. Click "Create a new Plone site"
|
|
@@ -168,7 +177,7 @@ Once DNS and TLS are ready:
|
|
|
168
177
|
- **Add-ons**: Choose Classic UI add-ons
|
|
169
178
|
4. Click "Create Plone Site"
|
|
170
179
|
|
|
171
|
-
## Key
|
|
180
|
+
## Key differences from Volto
|
|
172
181
|
|
|
173
182
|
### Architecture
|
|
174
183
|
|
|
@@ -184,7 +193,7 @@ Compared to Volto:
|
|
|
184
193
|
Traffic → Ingress → {Varnish → Frontend, Backend}
|
|
185
194
|
```
|
|
186
195
|
|
|
187
|
-
### Ingress
|
|
196
|
+
### Ingress routes
|
|
188
197
|
|
|
189
198
|
Classic UI uses virtual host rewriting for direct backend access:
|
|
190
199
|
|
|
@@ -192,7 +201,7 @@ Classic UI uses virtual host rewriting for direct backend access:
|
|
|
192
201
|
- **Uncached**: Direct to backend with VirtualHostBase rewrite
|
|
193
202
|
- **Maintenance**: Direct backend access with VirtualHostRoot
|
|
194
203
|
|
|
195
|
-
### No
|
|
204
|
+
### No frontend service
|
|
196
205
|
|
|
197
206
|
The manifest doesn't include:
|
|
198
207
|
- Frontend deployment
|
|
@@ -203,11 +212,11 @@ This makes the deployment ~15% smaller and simpler to manage.
|
|
|
203
212
|
|
|
204
213
|
## Troubleshooting
|
|
205
214
|
|
|
206
|
-
### Backend
|
|
215
|
+
### Backend not starting
|
|
207
216
|
|
|
208
217
|
Check backend logs:
|
|
209
218
|
|
|
210
|
-
```
|
|
219
|
+
```shell
|
|
211
220
|
kubectl logs -l app.kubernetes.io/name=plone-backend -f
|
|
212
221
|
```
|
|
213
222
|
|
|
@@ -216,24 +225,24 @@ Common issues:
|
|
|
216
225
|
- Memory limits too low
|
|
217
226
|
- Image pull errors
|
|
218
227
|
|
|
219
|
-
### Classic UI
|
|
228
|
+
### Classic UI interface not loading
|
|
220
229
|
|
|
221
230
|
1. Check if backend pods are running:
|
|
222
|
-
```
|
|
231
|
+
```shell
|
|
223
232
|
kubectl get pods -l app.kubernetes.io/name=plone-backend
|
|
224
233
|
```
|
|
225
234
|
|
|
226
235
|
2. Verify virtual host rewriting in ingress:
|
|
227
|
-
```
|
|
236
|
+
```shell
|
|
228
237
|
kubectl describe ingress
|
|
229
238
|
```
|
|
230
239
|
|
|
231
240
|
3. Check Varnish routing:
|
|
232
|
-
```
|
|
241
|
+
```shell
|
|
233
242
|
kubectl logs -l app.kubernetes.io/name=plone-httpcache
|
|
234
243
|
```
|
|
235
244
|
|
|
236
|
-
### Add-on
|
|
245
|
+
### Add-on compatibility
|
|
237
246
|
|
|
238
247
|
Some add-ons are Volto-specific. For Classic UI:
|
|
239
248
|
- Use Classic UI themes (not Volto themes)
|
|
@@ -253,7 +262,7 @@ See the [Production Volto deployment guide](deploy-production-volto.md) for deta
|
|
|
253
262
|
|
|
254
263
|
## Customization
|
|
255
264
|
|
|
256
|
-
### Backend
|
|
265
|
+
### Backend configuration
|
|
257
266
|
|
|
258
267
|
Edit `main.ts` to customize:
|
|
259
268
|
|
|
@@ -270,7 +279,7 @@ const plone = new Plone(this, 'plone', {
|
|
|
270
279
|
})
|
|
271
280
|
```
|
|
272
281
|
|
|
273
|
-
### Varnish
|
|
282
|
+
### Varnish caching
|
|
274
283
|
|
|
275
284
|
Edit `config/varnish.tpl.vcl` for caching rules specific to Classic UI.
|
|
276
285
|
|
|
@@ -287,7 +296,7 @@ backend: {
|
|
|
287
296
|
```
|
|
288
297
|
|
|
289
298
|
Then:
|
|
290
|
-
```
|
|
299
|
+
```shell
|
|
291
300
|
npm run synth
|
|
292
301
|
kubectl apply -f dist/plone-classic.k8s.yaml
|
|
293
302
|
```
|
|
@@ -303,20 +312,19 @@ Classic UI performance characteristics:
|
|
|
303
312
|
|
|
304
313
|
## Cleanup
|
|
305
314
|
|
|
306
|
-
```
|
|
315
|
+
```shell
|
|
307
316
|
kubectl delete -f dist/plone-classic.k8s.yaml
|
|
308
317
|
```
|
|
309
318
|
|
|
310
|
-
## Next
|
|
319
|
+
## Next steps
|
|
311
320
|
|
|
312
|
-
-
|
|
313
|
-
- Configure [CloudNativePG backups](https://cloudnative-pg.io/documentation/)
|
|
314
|
-
- Customize [Classic UI
|
|
315
|
-
- Set up [content migration](https://6.docs.plone.org/install/upgrade-guide.html)
|
|
321
|
+
- Follow {doc}`enable-prometheus-monitoring` to add Prometheus monitoring.
|
|
322
|
+
- Configure [CloudNativePG backups](https://cloudnative-pg.io/documentation/).
|
|
323
|
+
- Customize the Classic UI theme through [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/).
|
|
316
324
|
|
|
317
|
-
## See
|
|
325
|
+
## See also
|
|
318
326
|
|
|
319
|
-
-
|
|
320
|
-
-
|
|
321
|
-
-
|
|
322
|
-
- [Plone 6 Classic UI
|
|
327
|
+
- {doc}`deploy-production-volto` — For the modern React UI.
|
|
328
|
+
- {doc}`setup-prerequisites` — Cluster requirements.
|
|
329
|
+
- {doc}`/reference/configuration-options` — API reference.
|
|
330
|
+
- [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/)
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
myst:
|
|
3
|
+
html_meta:
|
|
4
|
+
"description": "Deploy the production-ready Volto example: React frontend, Plone REST API backend, PostgreSQL, Varnish caching, and ingress with TLS."
|
|
5
|
+
"property=og:description": "Deploy the production-ready Volto example: React frontend, Plone REST API backend, PostgreSQL, Varnish caching, and ingress with TLS."
|
|
6
|
+
"property=og:title": "Deploy production Volto example"
|
|
7
|
+
"keywords": "Plone, cdk8s, Kubernetes, Volto, production, PostgreSQL, Varnish, ingress, TLS"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Deploy production Volto example
|
|
2
11
|
|
|
3
12
|
This guide shows you how to deploy the production-ready Volto example to your Kubernetes cluster.
|
|
4
13
|
|
|
5
|
-
## What
|
|
14
|
+
## What you'll deploy
|
|
6
15
|
|
|
7
16
|
The [Production Volto example](https://github.com/bluedynamics/cdk8s-plone/tree/main/examples/production-volto) includes:
|
|
8
17
|
|
|
@@ -12,6 +21,8 @@ The [Production Volto example](https://github.com/bluedynamics/cdk8s-plone/tree/
|
|
|
12
21
|
- **Ingress** with TLS (Traefik or Kong)
|
|
13
22
|
- **Three access domains** (cached, uncached, maintenance)
|
|
14
23
|
|
|
24
|
+
(production-volto-prerequisites)=
|
|
25
|
+
|
|
15
26
|
## Prerequisites
|
|
16
27
|
|
|
17
28
|
### Required
|
|
@@ -23,45 +34,45 @@ Ensure you have these installed on your cluster:
|
|
|
23
34
|
- [Kong Gateway](https://docs.konghq.com/gateway/latest/install/kubernetes/)
|
|
24
35
|
|
|
25
36
|
2. **cert-manager** - For TLS certificates:
|
|
26
|
-
```
|
|
37
|
+
```shell
|
|
27
38
|
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.0/cert-manager.yaml
|
|
28
39
|
```
|
|
29
40
|
|
|
30
41
|
3. **kube-httpcache Operator** - For Varnish caching:
|
|
31
|
-
```
|
|
42
|
+
```shell
|
|
32
43
|
kubectl apply -f https://github.com/mittwald/kube-httpcache/releases/latest/download/kube-httpcache.yaml
|
|
33
44
|
```
|
|
34
45
|
|
|
35
46
|
4. **PostgreSQL Operator** - Choose one:
|
|
36
47
|
|
|
37
48
|
**Option A: CloudNativePG** (recommended for production):
|
|
38
|
-
```
|
|
49
|
+
```shell
|
|
39
50
|
kubectl apply -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.24/releases/cnpg-1.24.0.yaml
|
|
40
51
|
```
|
|
41
52
|
|
|
42
53
|
**Option B: Bitnami** (simpler for testing):
|
|
43
|
-
```
|
|
54
|
+
```shell
|
|
44
55
|
kubectl create namespace plone
|
|
45
56
|
```
|
|
46
57
|
|
|
47
|
-
### Local
|
|
58
|
+
### Local tools
|
|
48
59
|
|
|
49
60
|
- **Node.js 18+** and npm
|
|
50
61
|
- **kubectl** configured for your cluster
|
|
51
62
|
- **git** to clone the repository
|
|
52
63
|
|
|
53
|
-
## Step 1: Get the
|
|
64
|
+
## Step 1: Get the example
|
|
54
65
|
|
|
55
66
|
Clone the repository and navigate to the example:
|
|
56
67
|
|
|
57
|
-
```
|
|
68
|
+
```shell
|
|
58
69
|
git clone https://github.com/bluedynamics/cdk8s-plone.git
|
|
59
70
|
cd cdk8s-plone/examples/production-volto
|
|
60
71
|
```
|
|
61
72
|
|
|
62
|
-
## Step 2: Install
|
|
73
|
+
## Step 2: Install dependencies
|
|
63
74
|
|
|
64
|
-
```
|
|
75
|
+
```shell
|
|
65
76
|
npm install
|
|
66
77
|
```
|
|
67
78
|
|
|
@@ -69,7 +80,7 @@ npm install
|
|
|
69
80
|
|
|
70
81
|
Generate TypeScript bindings for Kubernetes CRDs:
|
|
71
82
|
|
|
72
|
-
```
|
|
83
|
+
```shell
|
|
73
84
|
npm run import
|
|
74
85
|
```
|
|
75
86
|
|
|
@@ -78,17 +89,17 @@ This imports:
|
|
|
78
89
|
- CloudNativePG Cluster CRDs
|
|
79
90
|
- Traefik Middleware CRDs
|
|
80
91
|
|
|
81
|
-
## Step 4: Configure
|
|
92
|
+
## Step 4: Configure environment
|
|
82
93
|
|
|
83
94
|
Create a `.env` file from the example:
|
|
84
95
|
|
|
85
|
-
```
|
|
96
|
+
```shell
|
|
86
97
|
cp .env.example .env
|
|
87
98
|
```
|
|
88
99
|
|
|
89
100
|
Edit `.env` with your settings:
|
|
90
101
|
|
|
91
|
-
```
|
|
102
|
+
```shell
|
|
92
103
|
# Your domains
|
|
93
104
|
DOMAIN_CACHED=plone.example.com
|
|
94
105
|
DOMAIN_UNCACHED=plone-test.example.com
|
|
@@ -109,21 +120,21 @@ DATABASE=cloudnativepg
|
|
|
109
120
|
For production, use `cloudnativepg` for high availability. For testing, `bitnami` is simpler.
|
|
110
121
|
:::
|
|
111
122
|
|
|
112
|
-
## Step 5: Generate
|
|
123
|
+
## Step 5: Generate manifests
|
|
113
124
|
|
|
114
125
|
Synthesize Kubernetes YAML:
|
|
115
126
|
|
|
116
|
-
```
|
|
127
|
+
```shell
|
|
117
128
|
npm run synth
|
|
118
129
|
```
|
|
119
130
|
|
|
120
131
|
This creates `dist/plone-example.k8s.yaml` with all resources.
|
|
121
132
|
|
|
122
|
-
## Step 6: Review
|
|
133
|
+
## Step 6: Review generated manifests
|
|
123
134
|
|
|
124
135
|
Inspect what will be deployed:
|
|
125
136
|
|
|
126
|
-
```
|
|
137
|
+
```shell
|
|
127
138
|
# Count resources
|
|
128
139
|
grep "^kind:" dist/plone-example.k8s.yaml | sort | uniq -c
|
|
129
140
|
|
|
@@ -135,21 +146,21 @@ kubectl apply --dry-run=client -f dist/plone-example.k8s.yaml
|
|
|
135
146
|
|
|
136
147
|
Deploy to your cluster:
|
|
137
148
|
|
|
138
|
-
```
|
|
149
|
+
```shell
|
|
139
150
|
kubectl apply -f dist/plone-example.k8s.yaml
|
|
140
151
|
```
|
|
141
152
|
|
|
142
153
|
Or deploy to a specific namespace:
|
|
143
154
|
|
|
144
|
-
```
|
|
155
|
+
```shell
|
|
145
156
|
kubectl apply -f dist/plone-example.k8s.yaml -n plone
|
|
146
157
|
```
|
|
147
158
|
|
|
148
|
-
## Step 8: Monitor
|
|
159
|
+
## Step 8: Monitor deployment
|
|
149
160
|
|
|
150
161
|
Watch pods starting:
|
|
151
162
|
|
|
152
|
-
```
|
|
163
|
+
```shell
|
|
153
164
|
# Watch all pods
|
|
154
165
|
kubectl get pods -l app.kubernetes.io/part-of=plone -w
|
|
155
166
|
|
|
@@ -161,15 +172,15 @@ kubectl get pods -l app.kubernetes.io/name=plone-httpcache
|
|
|
161
172
|
|
|
162
173
|
Wait for all pods to be `Running`:
|
|
163
174
|
|
|
164
|
-
```
|
|
175
|
+
```shell
|
|
165
176
|
kubectl wait --for=condition=ready pod -l app.kubernetes.io/part-of=plone --timeout=300s
|
|
166
177
|
```
|
|
167
178
|
|
|
168
|
-
## Step 9: Verify
|
|
179
|
+
## Step 9: Verify services
|
|
169
180
|
|
|
170
181
|
Check that services are created:
|
|
171
182
|
|
|
172
|
-
```
|
|
183
|
+
```shell
|
|
173
184
|
kubectl get svc -l app.kubernetes.io/part-of=plone
|
|
174
185
|
```
|
|
175
186
|
|
|
@@ -179,21 +190,21 @@ You should see:
|
|
|
179
190
|
- `plone-httpcache` (Varnish cache)
|
|
180
191
|
- Database service (Bitnami or CloudNativePG)
|
|
181
192
|
|
|
182
|
-
## Step 10: Check
|
|
193
|
+
## Step 10: Check ingress
|
|
183
194
|
|
|
184
195
|
Verify ingress routes:
|
|
185
196
|
|
|
186
|
-
```
|
|
197
|
+
```shell
|
|
187
198
|
kubectl get ingress
|
|
188
199
|
```
|
|
189
200
|
|
|
190
201
|
Check TLS certificates:
|
|
191
202
|
|
|
192
|
-
```
|
|
203
|
+
```shell
|
|
193
204
|
kubectl get certificate
|
|
194
205
|
```
|
|
195
206
|
|
|
196
|
-
## Step 11: Access
|
|
207
|
+
## Step 11: Access your site
|
|
197
208
|
|
|
198
209
|
Once DNS is configured and TLS certificates are issued:
|
|
199
210
|
|
|
@@ -201,7 +212,7 @@ Once DNS is configured and TLS certificates are issued:
|
|
|
201
212
|
- **Testing (uncached)**: https://plone-test.example.com
|
|
202
213
|
- **Maintenance**: https://plone-admin.example.com
|
|
203
214
|
|
|
204
|
-
### Create Plone
|
|
215
|
+
### Create Plone site
|
|
205
216
|
|
|
206
217
|
On first access to the maintenance domain:
|
|
207
218
|
|
|
@@ -215,11 +226,11 @@ On first access to the maintenance domain:
|
|
|
215
226
|
|
|
216
227
|
## Troubleshooting
|
|
217
228
|
|
|
218
|
-
### Pods
|
|
229
|
+
### Pods not starting
|
|
219
230
|
|
|
220
231
|
Check pod logs:
|
|
221
232
|
|
|
222
|
-
```
|
|
233
|
+
```shell
|
|
223
234
|
# Backend logs
|
|
224
235
|
kubectl logs -l app.kubernetes.io/name=plone-backend -f
|
|
225
236
|
|
|
@@ -230,11 +241,11 @@ kubectl logs -l app.kubernetes.io/name=plone-frontend -f
|
|
|
230
241
|
kubectl logs -l postgresql=plone-postgresql -f
|
|
231
242
|
```
|
|
232
243
|
|
|
233
|
-
### Database
|
|
244
|
+
### Database connection issues
|
|
234
245
|
|
|
235
246
|
**CloudNativePG:**
|
|
236
247
|
|
|
237
|
-
```
|
|
248
|
+
```shell
|
|
238
249
|
# Check cluster status
|
|
239
250
|
kubectl get cluster
|
|
240
251
|
|
|
@@ -244,7 +255,7 @@ kubectl get secret -l cnpg.io/cluster
|
|
|
244
255
|
|
|
245
256
|
**Bitnami:**
|
|
246
257
|
|
|
247
|
-
```
|
|
258
|
+
```shell
|
|
248
259
|
# Check service
|
|
249
260
|
kubectl get svc -l app.kubernetes.io/name=postgresql
|
|
250
261
|
|
|
@@ -252,9 +263,9 @@ kubectl get svc -l app.kubernetes.io/name=postgresql
|
|
|
252
263
|
kubectl describe secret <postgresql-secret-name>
|
|
253
264
|
```
|
|
254
265
|
|
|
255
|
-
### TLS
|
|
266
|
+
### TLS certificate issues
|
|
256
267
|
|
|
257
|
-
```
|
|
268
|
+
```shell
|
|
258
269
|
# Check certificate status
|
|
259
270
|
kubectl describe certificate
|
|
260
271
|
|
|
@@ -262,9 +273,9 @@ kubectl describe certificate
|
|
|
262
273
|
kubectl logs -n cert-manager deployment/cert-manager
|
|
263
274
|
```
|
|
264
275
|
|
|
265
|
-
### Varnish
|
|
276
|
+
### Varnish cache not working
|
|
266
277
|
|
|
267
|
-
```
|
|
278
|
+
```shell
|
|
268
279
|
# Check httpcache logs
|
|
269
280
|
kubectl logs -l app.kubernetes.io/name=plone-httpcache
|
|
270
281
|
|
|
@@ -272,7 +283,7 @@ kubectl logs -l app.kubernetes.io/name=plone-httpcache
|
|
|
272
283
|
kubectl get pods -n kube-httpcache-system
|
|
273
284
|
```
|
|
274
285
|
|
|
275
|
-
## Updating
|
|
286
|
+
## Updating your deployment
|
|
276
287
|
|
|
277
288
|
After making changes to the example:
|
|
278
289
|
|
|
@@ -301,19 +312,18 @@ Then regenerate and reapply.
|
|
|
301
312
|
|
|
302
313
|
Remove all resources:
|
|
303
314
|
|
|
304
|
-
```
|
|
315
|
+
```shell
|
|
305
316
|
kubectl delete -f dist/plone-example.k8s.yaml
|
|
306
317
|
```
|
|
307
318
|
|
|
308
|
-
## Next
|
|
319
|
+
## Next steps
|
|
309
320
|
|
|
310
|
-
- Configure
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
- Review [security best practices](../explanation/architecture.md#security)
|
|
321
|
+
- Configure monitoring and metrics through {doc}`enable-prometheus-monitoring`.
|
|
322
|
+
- Customize [Varnish caching rules](https://github.com/bluedynamics/cdk8s-plone/blob/main/examples/production-volto/config/varnish.tpl.vcl).
|
|
323
|
+
- Harden pods with {doc}`configure-security-context`.
|
|
314
324
|
|
|
315
|
-
## See
|
|
325
|
+
## See also
|
|
316
326
|
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
-
|
|
327
|
+
- {doc}`deploy-classic-ui` — For the traditional Plone interface.
|
|
328
|
+
- {doc}`setup-prerequisites` — Detailed cluster setup.
|
|
329
|
+
- {doc}`/reference/configuration-options` — API reference.
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
myst:
|
|
3
|
+
html_meta:
|
|
4
|
+
"description": "Add the cloud-vinyl VinylCache operator to your Plone deployment for operator-managed Varnish caching."
|
|
5
|
+
"property=og:description": "Add the cloud-vinyl VinylCache operator to your Plone deployment for operator-managed Varnish caching."
|
|
6
|
+
"property=og:title": "Deploy with cloud-vinyl cache"
|
|
7
|
+
"keywords": "Plone, cdk8s, Kubernetes, Varnish, cloud-vinyl, VinylCache, operator, caching"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
```{image} ../_static/kup6s-icon-howto.svg
|
|
2
11
|
:align: center
|
|
3
12
|
:class: section-icon-large
|
|
4
13
|
```
|
|
5
14
|
|
|
6
|
-
# Deploy with
|
|
15
|
+
# Deploy with cloud-vinyl cache
|
|
7
16
|
|
|
8
17
|
<div class="page-metadata">
|
|
9
18
|
<div class="metadata-content">
|
|
@@ -21,7 +30,7 @@
|
|
|
21
30
|
|
|
22
31
|
## Steps
|
|
23
32
|
|
|
24
|
-
### 1. Add PloneVinylCache to
|
|
33
|
+
### 1. Add PloneVinylCache to your deployment
|
|
25
34
|
|
|
26
35
|
```typescript
|
|
27
36
|
import { Plone, PloneVinylCache } from '@bluedynamics/cdk8s-plone';
|
|
@@ -37,7 +46,7 @@ const cache = new PloneVinylCache(chart, 'cache', {
|
|
|
37
46
|
});
|
|
38
47
|
```
|
|
39
48
|
|
|
40
|
-
### 2. Use the
|
|
49
|
+
### 2. Use the cache service in your IngressRoute
|
|
41
50
|
|
|
42
51
|
The cache exposes a service that should be used as the upstream in your IngressRoute:
|
|
43
52
|
|
|
@@ -46,9 +55,9 @@ The cache exposes a service that should be used as the upstream in your IngressR
|
|
|
46
55
|
// instead of plone.frontendServiceName
|
|
47
56
|
```
|
|
48
57
|
|
|
49
|
-
### 3. Build and
|
|
58
|
+
### 3. Build and deploy
|
|
50
59
|
|
|
51
|
-
```
|
|
60
|
+
```shell
|
|
52
61
|
npm run build
|
|
53
62
|
# Review generated manifests
|
|
54
63
|
# Deploy via ArgoCD or kubectl apply
|
|
@@ -56,7 +65,7 @@ npm run build
|
|
|
56
65
|
|
|
57
66
|
### 4. Verify
|
|
58
67
|
|
|
59
|
-
```
|
|
68
|
+
```shell
|
|
60
69
|
# Check VinylCache status
|
|
61
70
|
kubectl get vinylcache -n <namespace>
|
|
62
71
|
|
|
@@ -66,7 +75,7 @@ kubectl get pods -n <namespace> -l app.kubernetes.io/managed-by=cloud-vinyl
|
|
|
66
75
|
|
|
67
76
|
## Customization
|
|
68
77
|
|
|
69
|
-
### Sizing the
|
|
78
|
+
### Sizing the cache storage
|
|
70
79
|
|
|
71
80
|
Without an explicit `storage` entry, the operator ships varnishd with its
|
|
72
81
|
stock default (~100 MB malloc) — almost always too small. Set a malloc size
|
|
@@ -105,7 +114,7 @@ new PloneVinylCache(chart, 'cache', {
|
|
|
105
114
|
});
|
|
106
115
|
```
|
|
107
116
|
|
|
108
|
-
### Cache
|
|
117
|
+
### Cache invalidation
|
|
109
118
|
|
|
110
119
|
Invalidation is enabled by default (PURGE, BAN, xkey). Configure `plone.cachepurging` to point to the VinylCache invalidation proxy endpoint.
|
|
111
120
|
|
|
@@ -123,7 +132,7 @@ new PloneVinylCache(chart, 'cache', {
|
|
|
123
132
|
});
|
|
124
133
|
```
|
|
125
134
|
|
|
126
|
-
### Shard
|
|
135
|
+
### Shard director tuning
|
|
127
136
|
|
|
128
137
|
For shard-based load distribution (the default), you can fine-tune the consistent-hash behavior. These options require **cloud-vinyl ≥ 0.4.2** to be honored by the generated VCL.
|
|
129
138
|
|