@robiki/proxy 1.0.2 → 1.0.4
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/README.de.md +101 -395
- package/README.es.md +100 -394
- package/README.ja.md +101 -395
- package/README.md +101 -395
- package/README.pl.md +101 -395
- package/README.ru.md +100 -394
- package/README.zh.md +100 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-Bmt0asXb.d.ts} +5 -11
- package/dist/config-C-0wrirG.js +315 -0
- package/dist/{config-CQ7zIaQt.d.ts → config-CCOdQL7F.d.ts} +7 -11
- package/dist/{config-_6LOsppp.d.ts → config-DtfpOtWI.d.ts} +30 -73
- package/dist/index.d.ts +14 -2
- package/dist/index.js +30 -58
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +3 -215
- package/package.json +2 -5
package/README.pl.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# 🚀 Robiki Proxy
|
|
2
2
|
|
|
3
|
-
> Wydajny
|
|
3
|
+
> Wydajny reverse proxy HTTP/2 z obsługą WebSocket, konfigurowalnym routingiem, CORS i walidacją żądań. Używaj jako pakiet npm lub kontener Docker w lokalnych środowiskach deweloperskich.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@robiki/proxy)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
## 🌍 Języki
|
|
8
|
+
## 🌍 Języki
|
|
9
9
|
|
|
10
10
|
[English](README.md) | [Deutsch](README.de.md) | [中文](README.zh.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Español](README.es.md) | [Русский](README.ru.md)
|
|
11
11
|
|
|
@@ -18,54 +18,29 @@
|
|
|
18
18
|
- **✅ Walidacja żądań**: Niestandardowa logika walidacji dla uwierzytelniania, limitowania żądań itp.
|
|
19
19
|
- **🔄 Przekierowywanie URL**: Transformacja URL przed przekazaniem do usług docelowych
|
|
20
20
|
- **📦 Podwójne użycie**: Użyj jako pakiet npm lub kontener Docker
|
|
21
|
+
- **⚙️ Obsługa konfiguracji JavaScript i TypeScript**: Użyj plików konfiguracyjnych `.js` lub `.ts` z funkcjami w Docker
|
|
21
22
|
- **🎯 Obsługa wielu portów**: Nasłuchiwanie na wielu portach jednocześnie
|
|
22
23
|
- **⚡ Wysoka wydajność**: Zbudowany na natywnej implementacji HTTP/2 w Node.js
|
|
23
24
|
|
|
24
25
|
## 📦 Instalacja
|
|
25
26
|
|
|
26
|
-
###
|
|
27
|
+
### Pakiet npm
|
|
27
28
|
|
|
28
29
|
```bash
|
|
29
30
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
31
|
+
# lub
|
|
33
32
|
yarn add @robiki/proxy
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
###
|
|
35
|
+
### Docker
|
|
37
36
|
|
|
38
37
|
```bash
|
|
39
38
|
docker pull robiki/proxy:latest
|
|
40
39
|
```
|
|
41
40
|
|
|
42
|
-
### Jako usługa Docker Compose
|
|
43
|
-
|
|
44
|
-
```yaml
|
|
45
|
-
services:
|
|
46
|
-
proxy:
|
|
47
|
-
image: robiki/proxy:latest
|
|
48
|
-
container_name: robiki-proxy
|
|
49
|
-
restart: unless-stopped
|
|
50
|
-
ports:
|
|
51
|
-
- '443:443'
|
|
52
|
-
- '8080:8080'
|
|
53
|
-
- '9229:9229'
|
|
54
|
-
volumes:
|
|
55
|
-
- ./proxy.config.json:/app/proxy.config.json:ro
|
|
56
|
-
- ./certs:/app/certs:ro
|
|
57
|
-
networks:
|
|
58
|
-
- app-network
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Uwagi
|
|
62
|
-
|
|
63
|
-
- Hosty skonfigurowane lokalnie powinny zostać dodane do lokalnego pliku `hosts`.
|
|
64
|
-
- Jeśli używasz niestandardowych certyfikatów, musisz dodać pliki certyfikatów do katalogu `certs`.
|
|
65
|
-
|
|
66
41
|
## 🚀 Szybki start
|
|
67
42
|
|
|
68
|
-
###
|
|
43
|
+
### Pakiet npm
|
|
69
44
|
|
|
70
45
|
```javascript
|
|
71
46
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +63,11 @@ const proxy = await createProxy({
|
|
|
88
63
|
},
|
|
89
64
|
},
|
|
90
65
|
});
|
|
91
|
-
|
|
92
|
-
console.log('Serwer proxy działa!');
|
|
93
66
|
```
|
|
94
67
|
|
|
95
|
-
###
|
|
68
|
+
### Docker
|
|
96
69
|
|
|
97
|
-
|
|
70
|
+
Utwórz `proxy.config.json`:
|
|
98
71
|
|
|
99
72
|
```json
|
|
100
73
|
{
|
|
@@ -108,20 +81,14 @@ console.log('Serwer proxy działa!');
|
|
|
108
81
|
"api.example.com": {
|
|
109
82
|
"target": "backend-service:3000",
|
|
110
83
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
84
|
}
|
|
116
85
|
}
|
|
117
86
|
}
|
|
118
87
|
```
|
|
119
88
|
|
|
120
|
-
|
|
89
|
+
Utwórz `docker-compose.yml`:
|
|
121
90
|
|
|
122
91
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
92
|
services:
|
|
126
93
|
proxy:
|
|
127
94
|
image: robiki/proxy:latest
|
|
@@ -133,25 +100,9 @@ services:
|
|
|
133
100
|
- ./certs:/app/certs:ro
|
|
134
101
|
environment:
|
|
135
102
|
- PROXY_CONFIG=/app/proxy.config.json
|
|
136
|
-
networks:
|
|
137
|
-
- app-network
|
|
138
|
-
|
|
139
|
-
backend-service:
|
|
140
|
-
image: your-backend-image
|
|
141
|
-
networks:
|
|
142
|
-
- app-network
|
|
143
|
-
|
|
144
|
-
frontend-service:
|
|
145
|
-
image: your-frontend-image
|
|
146
|
-
networks:
|
|
147
|
-
- app-network
|
|
148
|
-
|
|
149
|
-
networks:
|
|
150
|
-
app-network:
|
|
151
|
-
driver: bridge
|
|
152
103
|
```
|
|
153
104
|
|
|
154
|
-
|
|
105
|
+
Uruchom:
|
|
155
106
|
|
|
156
107
|
```bash
|
|
157
108
|
docker-compose up -d
|
|
@@ -159,9 +110,9 @@ docker-compose up -d
|
|
|
159
110
|
|
|
160
111
|
## 📖 Konfiguracja
|
|
161
112
|
|
|
162
|
-
###
|
|
113
|
+
### Konfiguracja JSON
|
|
163
114
|
|
|
164
|
-
|
|
115
|
+
Prosta deklaratywna konfiguracja:
|
|
165
116
|
|
|
166
117
|
```json
|
|
167
118
|
{
|
|
@@ -169,24 +120,17 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
|
|
|
169
120
|
"ssl": {
|
|
170
121
|
"key": "./certs/key.pem",
|
|
171
122
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
123
|
"allowHTTP1": true
|
|
174
124
|
},
|
|
175
125
|
"cors": {
|
|
176
126
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
127
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
128
|
+
"credentials": true
|
|
181
129
|
},
|
|
182
130
|
"routes": {
|
|
183
131
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
132
|
+
"target": "backend:3000",
|
|
133
|
+
"ssl": true
|
|
190
134
|
},
|
|
191
135
|
"*.example.com": {
|
|
192
136
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +140,32 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
|
|
|
196
140
|
}
|
|
197
141
|
```
|
|
198
142
|
|
|
199
|
-
###
|
|
200
|
-
|
|
201
|
-
Możesz również skonfigurować proxy za pomocą zmiennych środowiskowych:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# Konfiguracja SSL
|
|
205
|
-
SSL_KEY=/app/certs/key.pem
|
|
206
|
-
SSL_CERT=/app/certs/cert.pem
|
|
207
|
-
SSL_CA=/app/certs/ca.pem
|
|
208
|
-
SSL_ALLOW_HTTP1=true
|
|
209
|
-
|
|
210
|
-
# Konfiguracja CORS
|
|
211
|
-
CORS_ORIGIN=*
|
|
212
|
-
CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
|
|
213
|
-
CORS_HEADERS=Content-Type,Authorization
|
|
214
|
-
CORS_CREDENTIALS=true
|
|
215
|
-
|
|
216
|
-
# Tryb debugowania
|
|
217
|
-
DEBUG=true # Włącz szczegółowe logowanie dla połączeń proxy i błędów
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## 🎯 Zaawansowane użycie
|
|
143
|
+
### Konfiguracja JavaScript
|
|
221
144
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
Transformuj URL przed przekazaniem do usług docelowych:
|
|
145
|
+
Dla zaawansowanych funkcji jak przekierowywanie URL i walidacja:
|
|
225
146
|
|
|
226
147
|
```javascript
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
return url.replace(/^\/api/, '');
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### Walidacja żądań
|
|
242
|
-
|
|
243
|
-
Dodaj niestandardową logikę walidacji dla uwierzytelniania, limitowania żądań itp.:
|
|
244
|
-
|
|
245
|
-
```javascript
|
|
246
|
-
const config = {
|
|
247
|
-
// Walidacja globalna
|
|
248
|
-
validate: async (info) => {
|
|
249
|
-
if (!info.headers.authorization) {
|
|
250
|
-
return {
|
|
251
|
-
status: false,
|
|
252
|
-
code: 401,
|
|
253
|
-
message: 'Nieautoryzowany',
|
|
254
|
-
headers: { 'www-authenticate': 'Bearer' },
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return { status: true };
|
|
148
|
+
// proxy.config.js
|
|
149
|
+
export default {
|
|
150
|
+
ports: [443, 8080],
|
|
151
|
+
ssl: {
|
|
152
|
+
key: './certs/key.pem',
|
|
153
|
+
cert: './certs/cert.pem',
|
|
154
|
+
allowHTTP1: true,
|
|
258
155
|
},
|
|
259
156
|
routes: {
|
|
260
157
|
'api.example.com': {
|
|
261
158
|
target: 'backend:3000',
|
|
262
159
|
ssl: true,
|
|
263
|
-
//
|
|
160
|
+
// Przekierowywanie URL
|
|
161
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
162
|
+
// Walidacja żądań
|
|
264
163
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
164
|
+
if (!info.headers.authorization) {
|
|
267
165
|
return {
|
|
268
166
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
167
|
+
code: 401,
|
|
168
|
+
message: 'Unauthorized',
|
|
271
169
|
};
|
|
272
170
|
}
|
|
273
171
|
return { status: true };
|
|
@@ -277,93 +175,80 @@ const config = {
|
|
|
277
175
|
};
|
|
278
176
|
```
|
|
279
177
|
|
|
280
|
-
###
|
|
178
|
+
### Konfiguracja TypeScript
|
|
281
179
|
|
|
282
|
-
|
|
180
|
+
Konfiguracja z pełnym wsparciem typów i IDE:
|
|
283
181
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
182
|
+
```typescript
|
|
183
|
+
// proxy.config.ts
|
|
184
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
185
|
+
|
|
186
|
+
const config: ServerConfig = {
|
|
187
|
+
ports: [443, 8080],
|
|
188
|
+
ssl: {
|
|
189
|
+
key: './certs/key.pem',
|
|
190
|
+
cert: './certs/cert.pem',
|
|
191
|
+
allowHTTP1: true,
|
|
293
192
|
},
|
|
294
193
|
routes: {
|
|
295
194
|
'api.example.com': {
|
|
296
195
|
target: 'backend:3000',
|
|
297
196
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
197
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
198
|
+
validate: async (info: ConnectionInfo) => {
|
|
199
|
+
if (!info.headers['x-api-key']) {
|
|
200
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
201
|
+
}
|
|
202
|
+
return { status: true };
|
|
302
203
|
},
|
|
303
204
|
},
|
|
304
205
|
},
|
|
305
206
|
};
|
|
306
|
-
```
|
|
307
207
|
|
|
308
|
-
|
|
208
|
+
export default config;
|
|
209
|
+
```
|
|
309
210
|
|
|
310
|
-
|
|
211
|
+
### Zmienne środowiskowe
|
|
311
212
|
|
|
312
|
-
```
|
|
313
|
-
|
|
213
|
+
```bash
|
|
214
|
+
# Konfiguracja SSL
|
|
215
|
+
SSL_KEY=/app/certs/key.pem
|
|
216
|
+
SSL_CERT=/app/certs/cert.pem
|
|
217
|
+
SSL_ALLOW_HTTP1=true
|
|
314
218
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
// Powrót do domyślnego zachowania proxy
|
|
321
|
-
const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
|
|
322
|
-
return restAPIProxyHandler(req, res);
|
|
323
|
-
};
|
|
219
|
+
# Konfiguracja CORS
|
|
220
|
+
CORS_ORIGIN=*
|
|
221
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
222
|
+
CORS_CREDENTIALS=true
|
|
324
223
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
224
|
+
# Tryb debugowania
|
|
225
|
+
DEBUG=true
|
|
330
226
|
```
|
|
331
227
|
|
|
332
228
|
## 🔧 Dokumentacja API
|
|
333
229
|
|
|
334
|
-
### `createProxy(config: ServerConfig)
|
|
335
|
-
|
|
336
|
-
Tworzy i uruchamia serwer proxy z podaną konfiguracją.
|
|
337
|
-
|
|
338
|
-
**Parametry:**
|
|
339
|
-
|
|
340
|
-
- `config`: Obiekt konfiguracji serwera
|
|
341
|
-
|
|
342
|
-
**Zwraca:** Promise, który rozwiązuje się do instancji `ProxyServer`
|
|
343
|
-
|
|
344
|
-
### `ProxyServer`
|
|
230
|
+
### `createProxy(config: ServerConfig)`
|
|
345
231
|
|
|
346
|
-
|
|
232
|
+
Tworzy i uruchamia serwer proxy.
|
|
347
233
|
|
|
348
|
-
|
|
349
|
-
- `stop()`: Zatrzymaj serwer proxy
|
|
350
|
-
- `getConfig()`: Pobierz aktualną konfigurację
|
|
351
|
-
|
|
352
|
-
### Typy konfiguracji
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
234
|
+
**ServerConfig:**
|
|
355
235
|
|
|
356
236
|
```typescript
|
|
357
237
|
interface ServerConfig {
|
|
358
238
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
239
|
+
ssl?: {
|
|
240
|
+
key: string;
|
|
241
|
+
cert: string;
|
|
242
|
+
ca?: string;
|
|
243
|
+
allowHTTP1?: boolean;
|
|
244
|
+
};
|
|
360
245
|
routes: Record<string, RouteConfig>;
|
|
361
246
|
cors?: CorsConfig;
|
|
362
247
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
248
|
}
|
|
364
249
|
```
|
|
365
250
|
|
|
366
|
-
|
|
251
|
+
**RouteConfig:**
|
|
367
252
|
|
|
368
253
|
```typescript
|
|
369
254
|
interface RouteConfig {
|
|
@@ -375,265 +260,86 @@ interface RouteConfig {
|
|
|
375
260
|
}
|
|
376
261
|
```
|
|
377
262
|
|
|
378
|
-
#### `CorsConfig`
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
interface CorsConfig {
|
|
382
|
-
origin?: string | string[];
|
|
383
|
-
methods?: string[];
|
|
384
|
-
allowedHeaders?: string[];
|
|
385
|
-
exposedHeaders?: string[];
|
|
386
|
-
credentials?: boolean;
|
|
387
|
-
maxAge?: number;
|
|
388
|
-
}
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
#### `ConnectionInfo`
|
|
392
|
-
|
|
393
|
-
```typescript
|
|
394
|
-
interface ConnectionInfo {
|
|
395
|
-
id: number;
|
|
396
|
-
method: string;
|
|
397
|
-
path: string;
|
|
398
|
-
remoteAddress: string;
|
|
399
|
-
scheme: string;
|
|
400
|
-
authority: string;
|
|
401
|
-
origin: string;
|
|
402
|
-
headers: IncomingHttpHeaders;
|
|
403
|
-
query: URLSearchParams;
|
|
404
|
-
type: RequestType;
|
|
405
|
-
}
|
|
406
|
-
```
|
|
407
|
-
|
|
408
263
|
## 🐳 Użycie Docker
|
|
409
264
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
1. Dodaj proxy do swojego `docker-compose.yml`:
|
|
265
|
+
Zamontuj plik konfiguracyjny (JSON, .cjs lub .ts):
|
|
413
266
|
|
|
414
267
|
```yaml
|
|
415
268
|
services:
|
|
416
269
|
proxy:
|
|
417
270
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
271
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
272
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
273
|
- ./certs:/app/certs:ro
|
|
424
|
-
|
|
425
|
-
-
|
|
426
|
-
|
|
427
|
-
your-service:
|
|
428
|
-
image: your-service-image
|
|
429
|
-
networks:
|
|
430
|
-
- your-network
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
2. Skonfiguruj trasy w `proxy.config.json`, aby wskazywały na twoje usługi
|
|
434
|
-
|
|
435
|
-
3. Uruchom swój stack:
|
|
436
|
-
|
|
437
|
-
```bash
|
|
438
|
-
docker-compose up -d
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
### Budowanie niestandardowego obrazu
|
|
442
|
-
|
|
443
|
-
Utwórz niestandardowy Dockerfile:
|
|
444
|
-
|
|
445
|
-
```dockerfile
|
|
446
|
-
FROM robiki/proxy:latest
|
|
447
|
-
|
|
448
|
-
# Skopiuj swoją konfigurację
|
|
449
|
-
COPY proxy.config.json /app/proxy.config.json
|
|
450
|
-
COPY certs /app/certs
|
|
451
|
-
|
|
452
|
-
# Ustaw zmienne środowiskowe
|
|
453
|
-
ENV PROXY_CONFIG=/app/proxy.config.json
|
|
274
|
+
environment:
|
|
275
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
276
|
```
|
|
455
277
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
Sprawdź katalog `examples/` dla więcej przykładów użycia:
|
|
459
|
-
|
|
460
|
-
- `basic-usage.js` - Prosta konfiguracja proxy
|
|
461
|
-
- `advanced-usage.js` - Zaawansowane funkcje (walidacja, CORS, przekierowywanie)
|
|
462
|
-
- `custom-handlers.js` - Niestandardowe handlery żądań
|
|
463
|
-
- `docker-compose.example.yml` - Pełna konfiguracja Docker
|
|
464
|
-
|
|
465
|
-
## 🔐 Certyfikaty SSL/TLS
|
|
466
|
-
|
|
467
|
-
### Generowanie certyfikatów self-signed
|
|
278
|
+
## 🔐 Certyfikaty SSL
|
|
468
279
|
|
|
469
|
-
|
|
280
|
+
### Środowisko deweloperskie (self-signed)
|
|
470
281
|
|
|
471
282
|
```bash
|
|
472
283
|
mkdir -p certs
|
|
473
284
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
285
|
```
|
|
475
286
|
|
|
476
|
-
###
|
|
477
|
-
|
|
478
|
-
Do produkcji, użyj certyfikatów Let's Encrypt:
|
|
287
|
+
### Produkcja (Let's Encrypt)
|
|
479
288
|
|
|
480
289
|
```bash
|
|
481
290
|
certbot certonly --standalone -d example.com
|
|
482
291
|
```
|
|
483
292
|
|
|
484
|
-
Następnie odwołaj się do nich w konfiguracji:
|
|
485
|
-
|
|
486
|
-
```json
|
|
487
|
-
{
|
|
488
|
-
"ssl": {
|
|
489
|
-
"key": "/etc/letsencrypt/live/example.com/privkey.pem",
|
|
490
|
-
"cert": "/etc/letsencrypt/live/example.com/fullchain.pem"
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
## 🤝 Współpraca
|
|
496
|
-
|
|
497
|
-
Wkłady są mile widziane! Prosimy o przesyłanie Pull Requestów.
|
|
498
|
-
|
|
499
|
-
## 📄 Licencja
|
|
500
|
-
|
|
501
|
-
MIT © Robiki sp. z o.o.
|
|
502
|
-
|
|
503
|
-
## 🔗 Linki
|
|
504
|
-
|
|
505
|
-
- [Repozytorium GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
506
|
-
- [Pakiet npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
507
|
-
- [Tracker problemów](https://github.com/robiki-ai/robiki-proxy/issues)
|
|
508
|
-
|
|
509
|
-
## 💡 Przypadki użycia
|
|
510
|
-
|
|
511
|
-
- **Architektura mikroserwisów**: Kierowanie żądań do różnych usług na podstawie domeny/ścieżki
|
|
512
|
-
- **Środowisko deweloperskie**: Lokalny proxy do testowania wielu usług
|
|
513
|
-
- **Brama API**: Scentralizowany punkt wejścia z uwierzytelnianiem i limitowaniem żądań
|
|
514
|
-
- **Terminacja SSL**: Obsługa SSL/TLS na poziomie proxy
|
|
515
|
-
- **Zarządzanie CORS**: Scentralizowana konfiguracja CORS
|
|
516
|
-
- **Równoważenie obciążenia**: Dystrybucja ruchu między wieloma instancjami (z niestandardowymi handlerami)
|
|
517
|
-
|
|
518
293
|
## 🛠️ Rozwiązywanie problemów
|
|
519
294
|
|
|
520
295
|
### Tryb debugowania
|
|
521
296
|
|
|
522
|
-
Włącz szczegółowe logowanie
|
|
297
|
+
Włącz szczegółowe logowanie:
|
|
523
298
|
|
|
524
299
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# Lub z Docker
|
|
300
|
+
DEBUG=true node your-script.js
|
|
301
|
+
# lub
|
|
529
302
|
docker run -e DEBUG=true robiki/proxy:latest
|
|
530
|
-
|
|
531
|
-
# Lub w docker-compose.yml
|
|
532
|
-
services:
|
|
533
|
-
proxy:
|
|
534
|
-
image: robiki/proxy:latest
|
|
535
|
-
environment:
|
|
536
|
-
- DEBUG=true
|
|
537
303
|
```
|
|
538
304
|
|
|
539
|
-
Gdy `DEBUG=true`, proxy będzie logować:
|
|
540
|
-
- Wszystkie próby połączenia proxy (REST, WebSocket, strumienie HTTP/2)
|
|
541
|
-
- Szczegóły żądań i odpowiedzi
|
|
542
|
-
- Błędy połączenia i przekroczenia czasu
|
|
543
|
-
- Błędy proxy i błędy klienta
|
|
544
|
-
|
|
545
305
|
### Port już w użyciu
|
|
546
306
|
|
|
547
|
-
Proxy automatycznie spróbuje zabić procesy na skonfigurowanych portach. Jeśli to się nie powiedzie, ręcznie zwolnij porty:
|
|
548
|
-
|
|
549
307
|
```bash
|
|
550
308
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
309
|
```
|
|
553
310
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
Upewnij się, że pliki certyfikatów są czytelne i w poprawnym formacie (PEM). Do rozwoju użyj certyfikatów self-signed.
|
|
557
|
-
|
|
558
|
-
### Problemy z połączeniem WebSocket
|
|
559
|
-
|
|
560
|
-
Upewnij się, że trasy WebSocket są skonfigurowane z poprawnym protokołem (ws/wss) i że usługa docelowa obsługuje połączenia WebSocket.
|
|
561
|
-
|
|
562
|
-
## 🧪 Testowanie
|
|
563
|
-
|
|
564
|
-
Robiki Proxy zawiera kompleksowy zestaw testów obejmujący testy jednostkowe, testy integracyjne i zaawansowane scenariusze.
|
|
565
|
-
|
|
566
|
-
### Uruchamianie testów
|
|
311
|
+
## 🧪 Testy
|
|
567
312
|
|
|
568
313
|
```bash
|
|
569
314
|
# Uruchom wszystkie testy
|
|
570
315
|
yarn test
|
|
571
316
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# Uruchom testy z pokryciem
|
|
317
|
+
# Z pokryciem
|
|
576
318
|
yarn test:coverage
|
|
577
319
|
|
|
578
|
-
#
|
|
579
|
-
yarn test:ui
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
### Pokrycie testów
|
|
583
|
-
|
|
584
|
-
Zestaw testów obejmuje:
|
|
585
|
-
|
|
586
|
-
- **Testy jednostkowe**: Konfiguracja, narzędzia, konwersja nagłówków, obsługa CORS
|
|
587
|
-
- **Testy integracyjne**: Proxy HTTP, rozwiązywanie tras, walidacja, ładowanie konfiguracji
|
|
588
|
-
- **Testy zaawansowane**: Proxy WebSocket, strumienie HTTP/2, równoczesne połączenia
|
|
589
|
-
- **Testy Docker**: Budowanie kontenerów, ładowanie konfiguracji, zachowanie w czasie wykonywania
|
|
590
|
-
|
|
591
|
-
### Testy Docker
|
|
592
|
-
|
|
593
|
-
Uruchom testy integracyjne Docker:
|
|
594
|
-
|
|
595
|
-
```bash
|
|
596
|
-
# Pełny test integracyjny Docker
|
|
320
|
+
# Testy Docker
|
|
597
321
|
yarn test:docker
|
|
598
|
-
|
|
599
|
-
# Test specyficzny dla ładowania konfiguracji
|
|
600
|
-
yarn test:docker:config
|
|
601
|
-
|
|
602
|
-
# Uruchom wszystkie testy (jednostkowe + integracyjne + Docker)
|
|
603
|
-
yarn test:all
|
|
604
322
|
```
|
|
605
323
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
```bash
|
|
609
|
-
# Szybki test budowania Docker
|
|
610
|
-
make test-docker
|
|
611
|
-
|
|
612
|
-
# Pełny zestaw testów integracyjnych
|
|
613
|
-
make test-docker-full
|
|
614
|
-
|
|
615
|
-
# Test ładowania konfiguracji
|
|
616
|
-
make test-docker-config
|
|
324
|
+
## 📚 Przykłady
|
|
617
325
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
326
|
+
Zobacz katalog `examples/`:
|
|
621
327
|
|
|
622
|
-
|
|
328
|
+
- `basic-usage.js` - Prosta konfiguracja proxy
|
|
329
|
+
- `advanced-usage.js` - Walidacja, CORS, przekierowania
|
|
330
|
+
- `custom-handlers.js` - Niestandardowe handlery żądań
|
|
331
|
+
- `docker-compose.example.yml` - Konfiguracja Docker
|
|
623
332
|
|
|
624
|
-
##
|
|
333
|
+
## 🤝 Współpraca
|
|
625
334
|
|
|
626
|
-
|
|
335
|
+
Wkład mile widziany! Zobacz [CONTRIBUTING.md](CONTRIBUTING.md) po szczegóły.
|
|
627
336
|
|
|
628
|
-
|
|
629
|
-
- Minimalny narzut
|
|
630
|
-
- Pooling połączeń
|
|
631
|
-
- Automatyczny powrót do HTTP/1.1
|
|
337
|
+
## 📄 Licencja
|
|
632
338
|
|
|
633
|
-
|
|
339
|
+
MIT © Robiki sp. z o.o.
|
|
634
340
|
|
|
635
|
-
|
|
636
|
-
- Włączenie klastrowania dla systemów wielordzeniowych
|
|
637
|
-
- Monitorowanie za pomocą health checks
|
|
638
|
-
- Skonfigurowanie odpowiedniego logowania
|
|
341
|
+
## 🔗 Linki
|
|
639
342
|
|
|
343
|
+
- [Repozytorium GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
344
|
+
- [Pakiet npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
345
|
+
- [Issue Tracker](https://github.com/robiki-ai/robiki-proxy/issues)
|