@underpostnet/cyberia 3.2.80 → 3.2.90

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.
Files changed (96) hide show
  1. package/.env.example +34 -15
  2. package/.github/workflows/cyberia-client.cd.yml +13 -1
  3. package/.github/workflows/cyberia-server.cd.yml +13 -1
  4. package/.github/workflows/docker-image.cyberia-client.ci.yml +4 -4
  5. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +4 -4
  6. package/.github/workflows/docker-image.cyberia-server.ci.yml +4 -4
  7. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +4 -4
  8. package/.github/workflows/docker-image.engine-cyberia.ci.yml +3 -3
  9. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +3 -3
  10. package/.github/workflows/engine-cyberia.cd.yml +14 -3
  11. package/CHANGELOG.md +182 -1
  12. package/CLI-HELP.md +37 -16
  13. package/Dockerfile +1 -1
  14. package/Dockerfile.dev +1 -1
  15. package/Dockerfile.test +1 -1
  16. package/bin/cyberia.js +203 -49
  17. package/bin/deploy.js +18 -16
  18. package/bin/index.js +203 -49
  19. package/compose.env +34 -15
  20. package/deployment.yaml +1 -210
  21. package/docker-compose.yml +73 -62
  22. package/hardhat/package-lock.json +134 -126
  23. package/hardhat/package.json +2 -2
  24. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  25. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  26. package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -210
  27. package/manifests/deployment/dd-cyberia-development/gateway.yaml +80 -0
  28. package/manifests/deployment/dd-cyberia-development/httproute.yaml +504 -0
  29. package/manifests/deployment/dd-cyberia-development/proxy.yaml +12 -12
  30. package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +0 -82
  31. package/manifests/deployment/dd-cyberia-development/traffic-service.yaml +121 -0
  32. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  33. package/manifests/deployment/playwright/deployment.yaml +1 -1
  34. package/manifests/mongodb/kustomization.yaml +4 -1
  35. package/manifests/mongodb/statefulset.yaml +4 -0
  36. package/manifests/mongodb/storage-class.yaml +9 -2
  37. package/nginx.conf +86 -16
  38. package/package.json +2 -2
  39. package/proxy.yaml +12 -12
  40. package/pv-pvc.yaml +0 -82
  41. package/scripts/nat-iptables.sh +10 -4
  42. package/scripts/test-monitor.sh +4 -3
  43. package/src/api/cyberia-action/cyberia-action.model.js +1 -0
  44. package/src/api/cyberia-instance/cyberia-fallback-world.js +41 -14
  45. package/src/api/cyberia-instance/cyberia-instance-map.service.js +8 -12
  46. package/src/api/cyberia-instance/cyberia-portal-connector.js +7 -5
  47. package/src/api/cyberia-instance/cyberia-random-source.js +80 -0
  48. package/src/api/cyberia-instance/cyberia-world-generator.js +4 -3
  49. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +73 -0
  50. package/src/cli/cluster.js +740 -55
  51. package/src/cli/db.js +2 -2
  52. package/src/cli/deploy.js +1679 -174
  53. package/src/cli/docker-compose.js +19 -178
  54. package/src/cli/image.js +15 -6
  55. package/src/cli/index.js +124 -35
  56. package/src/cli/ipfs.js +82 -11
  57. package/src/cli/monitor.js +1 -1
  58. package/src/cli/repository.js +1 -1
  59. package/src/cli/run.js +2161 -420
  60. package/src/cli/secrets.js +969 -0
  61. package/src/cli/ssh.js +8 -28
  62. package/src/client/components/cyberia/InstanceSelectionView.js +11 -8
  63. package/src/client/components/cyberia/SharedDefaultsCyberia.js +5 -0
  64. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +106 -39
  65. package/src/client/public/cyberia-docs/ARCHITECTURE.md +18 -0
  66. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +44 -7
  67. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  68. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  69. package/src/client-builder/client-build.js +94 -11
  70. package/src/client-builder/ssr.js +27 -73
  71. package/src/db/mongo/MongoBootstrap.js +295 -54
  72. package/src/db/mongo/MongooseDB.js +47 -32
  73. package/src/index.js +1 -1
  74. package/src/projects/cyberia/besu-genesis-generator.js +3 -2
  75. package/src/projects/cyberia/hot-reload-trigger.js +3 -3
  76. package/src/projects/cyberia/instance-data.js +42 -1
  77. package/src/runtime/cyberia-client/Dockerfile +1 -1
  78. package/src/runtime/cyberia-client/Dockerfile.dev +1 -1
  79. package/src/runtime/cyberia-server/Dockerfile +1 -1
  80. package/src/runtime/cyberia-server/Dockerfile.dev +1 -1
  81. package/src/runtime/engine-cyberia/Dockerfile +1 -1
  82. package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
  83. package/src/runtime/engine-cyberia/Dockerfile.test +1 -1
  84. package/src/runtime/engine-cyberia/compose.env +34 -15
  85. package/src/runtime/engine-cyberia/docker-compose.yml +73 -62
  86. package/src/runtime/engine-cyberia/nginx.conf +86 -16
  87. package/src/server/conf.js +1208 -70
  88. package/src/server/cri.js +70 -0
  89. package/src/server/underpost-gateway.js +1073 -0
  90. package/src/server/underpost-ingress.js +364 -0
  91. package/test/cluster-instances.test.js +435 -0
  92. package/test/deploy-node-placement.test.js +45 -0
  93. package/test/instance-traffic-plan.test.js +710 -0
  94. package/test/sops-secret-store.test.js +612 -0
  95. package/test/underpost-gateway.test.js +469 -0
  96. package/test/underpost-ingress.test.js +253 -0
@@ -0,0 +1,121 @@
1
+ ---
2
+ apiVersion: v1
3
+ kind: Service
4
+ metadata:
5
+ name: dd-cyberia-development-traffic-service
6
+ namespace: default
7
+ labels:
8
+ underpost.net/traffic-service: "true"
9
+ underpost.net/deploy-id: dd-cyberia-development
10
+ spec:
11
+ type: ClusterIP
12
+ selector:
13
+ app: dd-cyberia-development-blue
14
+ ports:
15
+ - name: 'tcp-4005'
16
+ protocol: TCP
17
+ port: 4005
18
+ targetPort: 4005
19
+ - name: 'udp-4005'
20
+ protocol: UDP
21
+ port: 4005
22
+ targetPort: 4005
23
+
24
+ - name: 'tcp-4006'
25
+ protocol: TCP
26
+ port: 4006
27
+ targetPort: 4006
28
+ - name: 'udp-4006'
29
+ protocol: UDP
30
+ port: 4006
31
+ targetPort: 4006
32
+
33
+ - name: 'tcp-4007'
34
+ protocol: TCP
35
+ port: 4007
36
+ targetPort: 4007
37
+ - name: 'udp-4007'
38
+ protocol: UDP
39
+ port: 4007
40
+ targetPort: 4007
41
+
42
+ - name: 'tcp-4008'
43
+ protocol: TCP
44
+ port: 4008
45
+ targetPort: 4008
46
+ - name: 'udp-4008'
47
+ protocol: UDP
48
+ port: 4008
49
+ targetPort: 4008
50
+
51
+ - name: 'tcp-4009'
52
+ protocol: TCP
53
+ port: 4009
54
+ targetPort: 4009
55
+ - name: 'udp-4009'
56
+ protocol: UDP
57
+ port: 4009
58
+ targetPort: 4009
59
+
60
+ - name: 'tcp-4010'
61
+ protocol: TCP
62
+ port: 4010
63
+ targetPort: 4010
64
+ - name: 'udp-4010'
65
+ protocol: UDP
66
+ port: 4010
67
+ targetPort: 4010
68
+
69
+ - name: 'tcp-4011'
70
+ protocol: TCP
71
+ port: 4011
72
+ targetPort: 4011
73
+ - name: 'udp-4011'
74
+ protocol: UDP
75
+ port: 4011
76
+ targetPort: 4011
77
+
78
+ - name: 'tcp-4012'
79
+ protocol: TCP
80
+ port: 4012
81
+ targetPort: 4012
82
+ - name: 'udp-4012'
83
+ protocol: UDP
84
+ port: 4012
85
+ targetPort: 4012
86
+
87
+ - name: 'tcp-4013'
88
+ protocol: TCP
89
+ port: 4013
90
+ targetPort: 4013
91
+ - name: 'udp-4013'
92
+ protocol: UDP
93
+ port: 4013
94
+ targetPort: 4013
95
+
96
+ - name: 'tcp-4014'
97
+ protocol: TCP
98
+ port: 4014
99
+ targetPort: 4014
100
+ - name: 'udp-4014'
101
+ protocol: UDP
102
+ port: 4014
103
+ targetPort: 4014
104
+
105
+ - name: 'tcp-4015'
106
+ protocol: TCP
107
+ port: 4015
108
+ targetPort: 4015
109
+ - name: 'udp-4015'
110
+ protocol: UDP
111
+ port: 4015
112
+ targetPort: 4015
113
+
114
+ - name: 'tcp-4016'
115
+ protocol: TCP
116
+ port: 4016
117
+ targetPort: 4016
118
+ - name: 'udp-4016'
119
+ protocol: UDP
120
+ port: 4016
121
+ targetPort: 4016
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: underpost/underpost-engine:v3.2.80
20
+ image: underpost/underpost-engine:v3.2.90
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -98,7 +98,7 @@ spec:
98
98
  spec:
99
99
  containers:
100
100
  - name: dd-default-development-green
101
- image: underpost/underpost-engine:v3.2.80
101
+ image: underpost/underpost-engine:v3.2.90
102
102
  # resources:
103
103
  # requests:
104
104
  # memory: "124Ki"
@@ -14,7 +14,7 @@ spec:
14
14
  spec:
15
15
  containers:
16
16
  - name: playwright
17
- image: mcr.microsoft.com/playwright:v1.59.0-jammy
17
+ image: mcr.microsoft.com/playwright:v1.62.1-jammy
18
18
  command:
19
19
  - /bin/bash
20
20
  - -c
@@ -3,7 +3,10 @@
3
3
  apiVersion: kustomize.config.k8s.io/v1beta1
4
4
  kind: Kustomization
5
5
  resources:
6
- - pv-pvc.yaml
6
+ # pv-pvc.yaml is intentionally absent: the PersistentVolume set is one-per-replica, so it is
7
+ # generated from the effective replica count by MongoBootstrap.applyReplicaVolumes() and applied
8
+ # just before this kustomization. A static file can only describe a fixed number of members, and
9
+ # any --replicas above it leaves the surplus claims unbindable.
7
10
  - headless-service.yaml
8
11
  - statefulset.yaml
9
12
  # - backup-pv-pvc.yaml
@@ -105,6 +105,10 @@ spec:
105
105
  volumeClaimTemplates:
106
106
  - metadata:
107
107
  name: mongodb-storage
108
+ # Without this label `kubectl delete pvc -l app=mongodb` matches nothing, leaving stale
109
+ # claims bound to retained PVs across redeploys.
110
+ labels:
111
+ app: mongodb
108
112
  spec:
109
113
  accessModes: ['ReadWriteOnce']
110
114
  storageClassName: mongodb-storage-class
@@ -3,7 +3,14 @@ kind: StorageClass
3
3
  metadata:
4
4
  name: mongodb-storage-class
5
5
  annotations:
6
- storageclass.kubernetes.io/is-default-class: "false"
7
- provisioner: rancher.io/local-path
6
+ storageclass.kubernetes.io/is-default-class: 'false'
7
+ # Static class: the replica volumes are hostPath PVs generated one per member by
8
+ # MongoBootstrap.applyReplicaVolumes(), each pinned to one member via `claimRef`. It must NOT name a dynamic provisioner — with
9
+ # `rancher.io/local-path` the local-path controller also provisions for these PVCs, racing the
10
+ # static binder, so which volume a member ends up on is not deterministic. Two members landing
11
+ # on one directory is fatal: mongod dies on `WiredTiger.lock: fcntl: Resource temporarily
12
+ # unavailable`, since kind bind-mounts /data/mongodb from the host into every node.
13
+ provisioner: kubernetes.io/no-provisioner
8
14
  reclaimPolicy: Retain
15
+ # Static hostPath PVs carry no nodeAffinity, so binding can safely wait for the scheduler.
9
16
  volumeBindingMode: WaitForFirstConsumer
package/nginx.conf CHANGED
@@ -1,8 +1,9 @@
1
- # Generated by 'underpost docker-compose --generate --deploy-id dd-cyberia --docker-compose-id cyberia' do not hand-edit.
2
- # Source of truth: engine-private/conf/dd-cyberia/conf.instances.json (multiInstance).
3
- # Single localhost gateway (dev compose). Access http://localhost/ (default),
4
- # http://localhost/<PATH> per variant. Client origins point back here
5
- # (compose.env CYBERIA_WS_ORIGIN=ws://localhost, CYBERIA_ENGINE_API_ORIGIN=http://localhost).
1
+ # Canonical routing for the dd-cyberia custom Compose workflow. This file is
2
+ # maintained here and is used as-is by the generic Docker Compose CLI.
3
+ # Docker DNS: http://cyberia-client, http://cyberia-server, http://engine-cyberia.
4
+ # Host access: client on http://localhost[:8082]/<PATH>, server on
5
+ # http://localhost:8081/<PATH>, and engine on http://localhost:4005.
6
+ # Optional *.cyberia.localhost aliases remain available.
6
7
 
7
8
  map $http_upgrade $connection_upgrade {
8
9
  default upgrade;
@@ -17,7 +18,7 @@ proxy_http_version 1.1;
17
18
 
18
19
  server {
19
20
  listen 80 default_server;
20
- server_name localhost 127.0.0.1 _;
21
+ server_name localhost 127.0.0.1 cyberia-client cyberia.localhost client.cyberia.localhost _;
21
22
 
22
23
  location = /healthz {
23
24
  access_log off;
@@ -27,7 +28,7 @@ server {
27
28
 
28
29
  # Shared content authority: REST API + engine-served assets (fonts, ui-icons).
29
30
  location /api/ {
30
- set $up_engine engine-cyberia:4005;
31
+ set $up_engine engine-cyberia-runtime:4005;
31
32
  proxy_pass http://$up_engine;
32
33
  proxy_set_header Host $host;
33
34
  proxy_set_header X-Real-IP $remote_addr;
@@ -39,7 +40,7 @@ server {
39
40
  }
40
41
 
41
42
  location /assets/ {
42
- set $up_engine engine-cyberia:4005;
43
+ set $up_engine engine-cyberia-runtime:4005;
43
44
  proxy_pass http://$up_engine;
44
45
  proxy_set_header Host $host;
45
46
  proxy_set_header X-Real-IP $remote_addr;
@@ -51,7 +52,7 @@ server {
51
52
  }
52
53
 
53
54
  location = /ws {
54
- set $up_server_default cyberia-server:8081;
55
+ set $up_server_default cyberia-server-runtime:8081;
55
56
  proxy_pass http://$up_server_default;
56
57
  proxy_set_header Host $host;
57
58
  proxy_set_header X-Real-IP $remote_addr;
@@ -62,9 +63,8 @@ server {
62
63
  proxy_read_timeout 3600s;
63
64
  }
64
65
 
65
- location /FOREST/ws {
66
+ location = /FOREST/ws {
66
67
  set $up_server_forest cyberia-server-forest:8081;
67
- rewrite ^/FOREST/(.*)$ /$1 break;
68
68
  proxy_pass http://$up_server_forest;
69
69
  proxy_set_header Host $host;
70
70
  proxy_set_header X-Real-IP $remote_addr;
@@ -75,9 +75,8 @@ server {
75
75
  proxy_read_timeout 3600s;
76
76
  }
77
77
 
78
- location /TEST/ws {
78
+ location = /TEST/ws {
79
79
  set $up_server_test cyberia-server-test:8081;
80
- rewrite ^/TEST/(.*)$ /$1 break;
81
80
  proxy_pass http://$up_server_test;
82
81
  proxy_set_header Host $host;
83
82
  proxy_set_header X-Real-IP $remote_addr;
@@ -89,7 +88,7 @@ server {
89
88
  }
90
89
 
91
90
  location / {
92
- set $up_client_default cyberia-client:8081;
91
+ set $up_client_default cyberia-client-runtime:8081;
93
92
  proxy_pass http://$up_client_default;
94
93
  proxy_set_header Host $host;
95
94
  proxy_set_header X-Real-IP $remote_addr;
@@ -101,7 +100,7 @@ server {
101
100
  }
102
101
 
103
102
  location = /FOREST { return 301 /FOREST/; }
104
- location /FOREST {
103
+ location ^~ /FOREST/ {
105
104
  set $up_client_forest cyberia-client-forest:8081;
106
105
  proxy_pass http://$up_client_forest;
107
106
  proxy_set_header Host $host;
@@ -114,7 +113,7 @@ server {
114
113
  }
115
114
 
116
115
  location = /TEST { return 301 /TEST/; }
117
- location /TEST {
116
+ location ^~ /TEST/ {
118
117
  set $up_client_test cyberia-client-test:8081;
119
118
  proxy_pass http://$up_client_test;
120
119
  proxy_set_header Host $host;
@@ -126,3 +125,74 @@ server {
126
125
  proxy_read_timeout 3600s;
127
126
  }
128
127
  }
128
+
129
+ # Dedicated Cyberia server gateway. Port 8081 makes all instance paths available
130
+ # from localhost; the stable Docker DNS alias exposes the same routes on :80.
131
+ server {
132
+ listen 80;
133
+ listen 8081 default_server;
134
+ server_name cyberia-server server.cyberia.localhost;
135
+
136
+ location = /healthz {
137
+ access_log off;
138
+ return 200 "ok\n";
139
+ add_header Content-Type text/plain;
140
+ }
141
+
142
+ location = /FOREST { return 301 /FOREST/; }
143
+ location ^~ /FOREST/ {
144
+ set $up_http_server_forest cyberia-server-forest:8081;
145
+ proxy_pass http://$up_http_server_forest;
146
+ proxy_set_header Host $host;
147
+ proxy_set_header X-Real-IP $remote_addr;
148
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
149
+ proxy_set_header X-Forwarded-Proto $scheme;
150
+ proxy_set_header Upgrade $http_upgrade;
151
+ proxy_set_header Connection $connection_upgrade;
152
+ proxy_read_timeout 3600s;
153
+ }
154
+
155
+ location = /TEST { return 301 /TEST/; }
156
+ location ^~ /TEST/ {
157
+ set $up_http_server_test cyberia-server-test:8081;
158
+ proxy_pass http://$up_http_server_test;
159
+ proxy_set_header Host $host;
160
+ proxy_set_header X-Real-IP $remote_addr;
161
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
162
+ proxy_set_header X-Forwarded-Proto $scheme;
163
+ proxy_set_header Upgrade $http_upgrade;
164
+ proxy_set_header Connection $connection_upgrade;
165
+ proxy_read_timeout 3600s;
166
+ }
167
+
168
+ location / {
169
+ set $up_http_server_default cyberia-server-runtime:8081;
170
+ proxy_pass http://$up_http_server_default;
171
+ proxy_set_header Host $host;
172
+ proxy_set_header X-Real-IP $remote_addr;
173
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
174
+ proxy_set_header X-Forwarded-Proto $scheme;
175
+ proxy_set_header Upgrade $http_upgrade;
176
+ proxy_set_header Connection $connection_upgrade;
177
+ proxy_read_timeout 3600s;
178
+ }
179
+ }
180
+
181
+ # The engine remains a single shared authority. Its direct :4005 publication is
182
+ # canonical for debugging; this alias is convenient for browser parity.
183
+ server {
184
+ listen 80;
185
+ server_name engine-cyberia engine.cyberia.localhost;
186
+
187
+ location / {
188
+ set $up_engine_authority engine-cyberia-runtime:4005;
189
+ proxy_pass http://$up_engine_authority;
190
+ proxy_set_header Host $host;
191
+ proxy_set_header X-Real-IP $remote_addr;
192
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
193
+ proxy_set_header X-Forwarded-Proto $scheme;
194
+ proxy_set_header Upgrade $http_upgrade;
195
+ proxy_set_header Connection $connection_upgrade;
196
+ proxy_read_timeout 3600s;
197
+ }
198
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "@underpostnet/cyberia",
5
- "version": "3.2.80",
5
+ "version": "3.2.90",
6
6
  "description": "Cyberia CLI — toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.",
7
7
  "scripts": {
8
8
  "start": "node --max-old-space-size=8192 src/server",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "homepage": "https://github.com/underpostnet/engine-cyberia#readme",
74
74
  "dependencies": {
75
- "underpost": "^3.2.80",
75
+ "underpost": "^3.2.90",
76
76
  "adm-zip": "^0.6.0",
77
77
  "maxrects-packer": "^2.7.3",
78
78
  "pngjs": "^7.0.0",
package/proxy.yaml CHANGED
@@ -14,7 +14,7 @@ spec:
14
14
 
15
15
  enableWebsockets: true
16
16
  services:
17
- - name: dd-cyberia-development-blue-service
17
+ - name: dd-cyberia-development-traffic-service
18
18
  port: 4005
19
19
  weight: 100
20
20
 
@@ -23,7 +23,7 @@ spec:
23
23
 
24
24
  enableWebsockets: true
25
25
  services:
26
- - name: dd-cyberia-development-blue-service
26
+ - name: dd-cyberia-development-traffic-service
27
27
  port: 4006
28
28
  weight: 100
29
29
 
@@ -42,7 +42,7 @@ spec:
42
42
 
43
43
  enableWebsockets: true
44
44
  services:
45
- - name: dd-cyberia-development-blue-service
45
+ - name: dd-cyberia-development-traffic-service
46
46
  port: 4007
47
47
  weight: 100
48
48
 
@@ -61,7 +61,7 @@ spec:
61
61
 
62
62
  enableWebsockets: true
63
63
  services:
64
- - name: dd-cyberia-development-blue-service
64
+ - name: dd-cyberia-development-traffic-service
65
65
  port: 4008
66
66
  weight: 100
67
67
 
@@ -70,7 +70,7 @@ spec:
70
70
 
71
71
  enableWebsockets: true
72
72
  services:
73
- - name: dd-cyberia-development-blue-service
73
+ - name: dd-cyberia-development-traffic-service
74
74
  port: 4009
75
75
  weight: 100
76
76
 
@@ -89,7 +89,7 @@ spec:
89
89
 
90
90
  enableWebsockets: true
91
91
  services:
92
- - name: dd-cyberia-development-blue-service
92
+ - name: dd-cyberia-development-traffic-service
93
93
  port: 4010
94
94
  weight: 100
95
95
 
@@ -108,7 +108,7 @@ spec:
108
108
 
109
109
  enableWebsockets: true
110
110
  services:
111
- - name: dd-cyberia-development-blue-service
111
+ - name: dd-cyberia-development-traffic-service
112
112
  port: 4011
113
113
  weight: 100
114
114
 
@@ -117,7 +117,7 @@ spec:
117
117
 
118
118
  enableWebsockets: true
119
119
  services:
120
- - name: dd-cyberia-development-blue-service
120
+ - name: dd-cyberia-development-traffic-service
121
121
  port: 4012
122
122
  weight: 100
123
123
 
@@ -136,7 +136,7 @@ spec:
136
136
 
137
137
  enableWebsockets: true
138
138
  services:
139
- - name: dd-cyberia-development-blue-service
139
+ - name: dd-cyberia-development-traffic-service
140
140
  port: 4013
141
141
  weight: 100
142
142
 
@@ -155,7 +155,7 @@ spec:
155
155
 
156
156
  enableWebsockets: true
157
157
  services:
158
- - name: dd-cyberia-development-blue-service
158
+ - name: dd-cyberia-development-traffic-service
159
159
  port: 4014
160
160
  weight: 100
161
161
 
@@ -164,7 +164,7 @@ spec:
164
164
 
165
165
  enableWebsockets: true
166
166
  services:
167
- - name: dd-cyberia-development-blue-service
167
+ - name: dd-cyberia-development-traffic-service
168
168
  port: 4015
169
169
  weight: 100
170
170
 
@@ -183,7 +183,7 @@ spec:
183
183
 
184
184
  enableWebsockets: true
185
185
  services:
186
- - name: dd-cyberia-development-blue-service
186
+ - name: dd-cyberia-development-traffic-service
187
187
  port: 4016
188
188
  weight: 100
189
189
 
package/pv-pvc.yaml CHANGED
@@ -80,85 +80,3 @@ spec:
80
80
  resources:
81
81
  requests:
82
82
  storage: 5Gi
83
- ---
84
- apiVersion: v1
85
- kind: PersistentVolume
86
- metadata:
87
- name: pv-public-dd-cyberia-dd-cyberia-development-green
88
- spec:
89
- capacity:
90
- storage: 5Gi
91
- accessModes:
92
- - ReadWriteOnce
93
- persistentVolumeReclaimPolicy: Retain
94
- storageClassName: manual
95
- nodeAffinity:
96
- required:
97
- nodeSelectorTerms:
98
- - matchExpressions:
99
- - key: kubernetes.io/hostname
100
- operator: In
101
- values:
102
- - kind-worker
103
- claimRef:
104
- apiVersion: v1
105
- kind: PersistentVolumeClaim
106
- name: pvc-public-dd-cyberia-dd-cyberia-development-green
107
- namespace: default
108
- hostPath:
109
- path: /home/dd/engine/volume/pv-public-dd-cyberia-dd-cyberia-development-green
110
- type: DirectoryOrCreate
111
- ---
112
- apiVersion: v1
113
- kind: PersistentVolumeClaim
114
- metadata:
115
- name: pvc-public-dd-cyberia-dd-cyberia-development-green
116
- spec:
117
- accessModes:
118
- - ReadWriteOnce
119
- storageClassName: manual
120
- volumeName: pv-public-dd-cyberia-dd-cyberia-development-green
121
- resources:
122
- requests:
123
- storage: 5Gi
124
- ---
125
- apiVersion: v1
126
- kind: PersistentVolume
127
- metadata:
128
- name: pv-public-dd-cyberia-underpost-dd-cyberia-development-green
129
- spec:
130
- capacity:
131
- storage: 5Gi
132
- accessModes:
133
- - ReadWriteOnce
134
- persistentVolumeReclaimPolicy: Retain
135
- storageClassName: manual
136
- nodeAffinity:
137
- required:
138
- nodeSelectorTerms:
139
- - matchExpressions:
140
- - key: kubernetes.io/hostname
141
- operator: In
142
- values:
143
- - kind-worker
144
- claimRef:
145
- apiVersion: v1
146
- kind: PersistentVolumeClaim
147
- name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-green
148
- namespace: default
149
- hostPath:
150
- path: /home/dd/engine/volume/pv-public-dd-cyberia-underpost-dd-cyberia-development-green
151
- type: DirectoryOrCreate
152
- ---
153
- apiVersion: v1
154
- kind: PersistentVolumeClaim
155
- metadata:
156
- name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-green
157
- spec:
158
- accessModes:
159
- - ReadWriteOnce
160
- storageClassName: manual
161
- volumeName: pv-public-dd-cyberia-underpost-dd-cyberia-development-green
162
- resources:
163
- requests:
164
- storage: 5Gi
@@ -32,6 +32,12 @@ sudo firewall-cmd --permanent --zone=public --add-service=ssh
32
32
  sudo firewall-cmd --permanent --zone=public --add-service=http
33
33
  sudo firewall-cmd --permanent --zone=public --add-service=https
34
34
 
35
+ # QUIC / HTTP3. The `https` service above covers TCP 443 only, so without this
36
+ # an HTTP/3 gateway advertises `Alt-Svc: h3=":443"` and every client that acts
37
+ # on it silently fails over UDP while HTTP/2 keeps working.
38
+ sudo firewall-cmd --permanent --zone=public --add-port=443/udp
39
+ sudo firewall-cmd --permanent --zone=public --add-port=80/udp
40
+
35
41
  echo "[INFO] Opening Kubernetes control plane ports..."
36
42
 
37
43
  # Kubernetes API Server
@@ -98,10 +104,10 @@ sudo firewall-cmd --reload
98
104
  echo
99
105
  echo "[INFO] Sysctl status:"
100
106
  sudo sysctl \
101
- net.ipv4.ip_forward \
102
- net.ipv6.conf.all.forwarding \
103
- net.bridge.bridge-nf-call-iptables \
104
- net.bridge.bridge-nf-call-ip6tables
107
+ net.ipv4.ip_forward \
108
+ net.ipv6.conf.all.forwarding \
109
+ net.bridge.bridge-nf-call-iptables \
110
+ net.bridge.bridge-nf-call-ip6tables
105
111
 
106
112
  echo
107
113
  echo "[INFO] Firewall status:"
@@ -24,7 +24,7 @@ MODE=runtime # runtime | instance
24
24
  ENV=development # development | production
25
25
  DEPLOY_ID=dd-test # deploy id (instance mode: parent of conf.instances.json)
26
26
  INSTANCE_IDS= # instance mode: csv of ids (default: all in conf.instances.json)
27
- IMAGE=underpost/wp:v3.2.80 # runtime mode image (instance mode reads image from conf)
27
+ IMAGE=underpost/wp:v3.2.90 # runtime mode image (instance mode reads image from conf)
28
28
  VERSIONS=green # csv of blue/green versions
29
29
  REPLICAS=1 # replicas per deployment
30
30
  NAMESPACE=default # k8s namespace
@@ -202,7 +202,8 @@ run_runtime_mode() {
202
202
  setup_tls_secrets $(hosts_from "$SERVER_CONF")
203
203
  expose_flags="--tls"
204
204
  fi
205
- [ "$DO_EXPOSE" = true ] && node bin deploy --expose --local-proxy "$DEPLOY_ID" "$ENV" $expose_flags
205
+ [ "$DO_EXPOSE" = true ] && node bin run expose "${DEPLOY_ID}-${ENV}-traffic-service" --namespace "$NAMESPACE" \
206
+ --local-proxy $DEV_FLAG $CLUSTER_FLAG $expose_flags
206
207
  }
207
208
 
208
209
  # ─────────────────────────── instance mode ───────────────────────────
@@ -234,7 +235,7 @@ run_instance_mode() {
234
235
  # Plain HTTP: port-forward each instance service port directly.
235
236
  for id in "${ids[@]}"; do
236
237
  [ -n "$id" ] || continue
237
- node bin deploy --expose "${DEPLOY_ID}-${id}" "$ENV" --namespace "$NAMESPACE" || true
238
+ node bin run expose "${DEPLOY_ID}-${id}-${ENV}-traffic-service" --namespace "$NAMESPACE" $CLUSTER_FLAG || true
238
239
  done
239
240
  fi
240
241
  }
@@ -60,6 +60,7 @@ const CyberiaActionSchema = new Schema(
60
60
  qty: { type: Number, default: 1, min: 1 },
61
61
  },
62
62
  ],
63
+ craftTimeMs: { type: Number, default: 0, min: 0 },
63
64
  },
64
65
  ],
65
66