@robiki/proxy 1.0.2 → 1.0.3
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 +99 -394
- package/README.ja.md +100 -395
- package/README.md +100 -394
- package/README.pl.md +100 -395
- package/README.ru.md +99 -394
- package/README.zh.md +99 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-CCOdQL7F.d.ts} +5 -11
- package/dist/index.d.ts +3 -2
- package/dist/index.js +51 -72
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +37 -20
- package/package.json +2 -5
- package/dist/config-CQ7zIaQt.d.ts +0 -172
- package/dist/config-_6LOsppp.d.ts +0 -180
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
|
|
|
@@ -23,49 +23,23 @@
|
|
|
23
23
|
|
|
24
24
|
## 📦 Instalacja
|
|
25
25
|
|
|
26
|
-
###
|
|
26
|
+
### Pakiet npm
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
29
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
30
|
+
# lub
|
|
33
31
|
yarn add @robiki/proxy
|
|
34
32
|
```
|
|
35
33
|
|
|
36
|
-
###
|
|
34
|
+
### Docker
|
|
37
35
|
|
|
38
36
|
```bash
|
|
39
37
|
docker pull robiki/proxy:latest
|
|
40
38
|
```
|
|
41
39
|
|
|
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
40
|
## 🚀 Szybki start
|
|
67
41
|
|
|
68
|
-
###
|
|
42
|
+
### Pakiet npm
|
|
69
43
|
|
|
70
44
|
```javascript
|
|
71
45
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +62,11 @@ const proxy = await createProxy({
|
|
|
88
62
|
},
|
|
89
63
|
},
|
|
90
64
|
});
|
|
91
|
-
|
|
92
|
-
console.log('Serwer proxy działa!');
|
|
93
65
|
```
|
|
94
66
|
|
|
95
|
-
###
|
|
67
|
+
### Docker
|
|
96
68
|
|
|
97
|
-
|
|
69
|
+
Utwórz `proxy.config.json`:
|
|
98
70
|
|
|
99
71
|
```json
|
|
100
72
|
{
|
|
@@ -108,20 +80,14 @@ console.log('Serwer proxy działa!');
|
|
|
108
80
|
"api.example.com": {
|
|
109
81
|
"target": "backend-service:3000",
|
|
110
82
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
83
|
}
|
|
116
84
|
}
|
|
117
85
|
}
|
|
118
86
|
```
|
|
119
87
|
|
|
120
|
-
|
|
88
|
+
Utwórz `docker-compose.yml`:
|
|
121
89
|
|
|
122
90
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
91
|
services:
|
|
126
92
|
proxy:
|
|
127
93
|
image: robiki/proxy:latest
|
|
@@ -133,25 +99,9 @@ services:
|
|
|
133
99
|
- ./certs:/app/certs:ro
|
|
134
100
|
environment:
|
|
135
101
|
- 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
102
|
```
|
|
153
103
|
|
|
154
|
-
|
|
104
|
+
Uruchom:
|
|
155
105
|
|
|
156
106
|
```bash
|
|
157
107
|
docker-compose up -d
|
|
@@ -159,9 +109,9 @@ docker-compose up -d
|
|
|
159
109
|
|
|
160
110
|
## 📖 Konfiguracja
|
|
161
111
|
|
|
162
|
-
###
|
|
112
|
+
### Konfiguracja JSON
|
|
163
113
|
|
|
164
|
-
|
|
114
|
+
Prosta deklaratywna konfiguracja:
|
|
165
115
|
|
|
166
116
|
```json
|
|
167
117
|
{
|
|
@@ -169,24 +119,17 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
|
|
|
169
119
|
"ssl": {
|
|
170
120
|
"key": "./certs/key.pem",
|
|
171
121
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
122
|
"allowHTTP1": true
|
|
174
123
|
},
|
|
175
124
|
"cors": {
|
|
176
125
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
126
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
127
|
+
"credentials": true
|
|
181
128
|
},
|
|
182
129
|
"routes": {
|
|
183
130
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
131
|
+
"target": "backend:3000",
|
|
132
|
+
"ssl": true
|
|
190
133
|
},
|
|
191
134
|
"*.example.com": {
|
|
192
135
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +139,32 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
|
|
|
196
139
|
}
|
|
197
140
|
```
|
|
198
141
|
|
|
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
|
|
142
|
+
### Konfiguracja JavaScript
|
|
221
143
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
Transformuj URL przed przekazaniem do usług docelowych:
|
|
144
|
+
Dla zaawansowanych funkcji jak przekierowywanie URL i walidacja:
|
|
225
145
|
|
|
226
146
|
```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 };
|
|
147
|
+
// proxy.config.cjs
|
|
148
|
+
module.exports = {
|
|
149
|
+
ports: [443, 8080],
|
|
150
|
+
ssl: {
|
|
151
|
+
key: './certs/key.pem',
|
|
152
|
+
cert: './certs/cert.pem',
|
|
153
|
+
allowHTTP1: true,
|
|
258
154
|
},
|
|
259
155
|
routes: {
|
|
260
156
|
'api.example.com': {
|
|
261
157
|
target: 'backend:3000',
|
|
262
158
|
ssl: true,
|
|
263
|
-
//
|
|
159
|
+
// Przekierowywanie URL
|
|
160
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
161
|
+
// Walidacja żądań
|
|
264
162
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
163
|
+
if (!info.headers.authorization) {
|
|
267
164
|
return {
|
|
268
165
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
166
|
+
code: 401,
|
|
167
|
+
message: 'Unauthorized',
|
|
271
168
|
};
|
|
272
169
|
}
|
|
273
170
|
return { status: true };
|
|
@@ -277,93 +174,80 @@ const config = {
|
|
|
277
174
|
};
|
|
278
175
|
```
|
|
279
176
|
|
|
280
|
-
###
|
|
177
|
+
### Konfiguracja TypeScript
|
|
281
178
|
|
|
282
|
-
|
|
179
|
+
Konfiguracja z pełnym wsparciem typów i IDE:
|
|
283
180
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
181
|
+
```typescript
|
|
182
|
+
// proxy.config.ts
|
|
183
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
184
|
+
|
|
185
|
+
const config: ServerConfig = {
|
|
186
|
+
ports: [443, 8080],
|
|
187
|
+
ssl: {
|
|
188
|
+
key: './certs/key.pem',
|
|
189
|
+
cert: './certs/cert.pem',
|
|
190
|
+
allowHTTP1: true,
|
|
293
191
|
},
|
|
294
192
|
routes: {
|
|
295
193
|
'api.example.com': {
|
|
296
194
|
target: 'backend:3000',
|
|
297
195
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
196
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
197
|
+
validate: async (info: ConnectionInfo) => {
|
|
198
|
+
if (!info.headers['x-api-key']) {
|
|
199
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
200
|
+
}
|
|
201
|
+
return { status: true };
|
|
302
202
|
},
|
|
303
203
|
},
|
|
304
204
|
},
|
|
305
205
|
};
|
|
306
|
-
```
|
|
307
206
|
|
|
308
|
-
|
|
207
|
+
export default config;
|
|
208
|
+
```
|
|
309
209
|
|
|
310
|
-
|
|
210
|
+
### Zmienne środowiskowe
|
|
311
211
|
|
|
312
|
-
```
|
|
313
|
-
|
|
212
|
+
```bash
|
|
213
|
+
# Konfiguracja SSL
|
|
214
|
+
SSL_KEY=/app/certs/key.pem
|
|
215
|
+
SSL_CERT=/app/certs/cert.pem
|
|
216
|
+
SSL_ALLOW_HTTP1=true
|
|
314
217
|
|
|
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
|
-
};
|
|
218
|
+
# Konfiguracja CORS
|
|
219
|
+
CORS_ORIGIN=*
|
|
220
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
221
|
+
CORS_CREDENTIALS=true
|
|
324
222
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
223
|
+
# Tryb debugowania
|
|
224
|
+
DEBUG=true
|
|
330
225
|
```
|
|
331
226
|
|
|
332
227
|
## 🔧 Dokumentacja API
|
|
333
228
|
|
|
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`
|
|
229
|
+
### `createProxy(config: ServerConfig)`
|
|
345
230
|
|
|
346
|
-
|
|
231
|
+
Tworzy i uruchamia serwer proxy.
|
|
347
232
|
|
|
348
|
-
|
|
349
|
-
- `stop()`: Zatrzymaj serwer proxy
|
|
350
|
-
- `getConfig()`: Pobierz aktualną konfigurację
|
|
351
|
-
|
|
352
|
-
### Typy konfiguracji
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
233
|
+
**ServerConfig:**
|
|
355
234
|
|
|
356
235
|
```typescript
|
|
357
236
|
interface ServerConfig {
|
|
358
237
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
238
|
+
ssl?: {
|
|
239
|
+
key: string;
|
|
240
|
+
cert: string;
|
|
241
|
+
ca?: string;
|
|
242
|
+
allowHTTP1?: boolean;
|
|
243
|
+
};
|
|
360
244
|
routes: Record<string, RouteConfig>;
|
|
361
245
|
cors?: CorsConfig;
|
|
362
246
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
247
|
}
|
|
364
248
|
```
|
|
365
249
|
|
|
366
|
-
|
|
250
|
+
**RouteConfig:**
|
|
367
251
|
|
|
368
252
|
```typescript
|
|
369
253
|
interface RouteConfig {
|
|
@@ -375,265 +259,86 @@ interface RouteConfig {
|
|
|
375
259
|
}
|
|
376
260
|
```
|
|
377
261
|
|
|
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
262
|
## 🐳 Użycie Docker
|
|
409
263
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
1. Dodaj proxy do swojego `docker-compose.yml`:
|
|
264
|
+
Zamontuj plik konfiguracyjny (JSON, .cjs lub .ts):
|
|
413
265
|
|
|
414
266
|
```yaml
|
|
415
267
|
services:
|
|
416
268
|
proxy:
|
|
417
269
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
270
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
271
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
272
|
- ./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
|
|
273
|
+
environment:
|
|
274
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
275
|
```
|
|
455
276
|
|
|
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
|
|
277
|
+
## 🔐 Certyfikaty SSL
|
|
468
278
|
|
|
469
|
-
|
|
279
|
+
### Środowisko deweloperskie (self-signed)
|
|
470
280
|
|
|
471
281
|
```bash
|
|
472
282
|
mkdir -p certs
|
|
473
283
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
284
|
```
|
|
475
285
|
|
|
476
|
-
###
|
|
477
|
-
|
|
478
|
-
Do produkcji, użyj certyfikatów Let's Encrypt:
|
|
286
|
+
### Produkcja (Let's Encrypt)
|
|
479
287
|
|
|
480
288
|
```bash
|
|
481
289
|
certbot certonly --standalone -d example.com
|
|
482
290
|
```
|
|
483
291
|
|
|
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
292
|
## 🛠️ Rozwiązywanie problemów
|
|
519
293
|
|
|
520
294
|
### Tryb debugowania
|
|
521
295
|
|
|
522
|
-
Włącz szczegółowe logowanie
|
|
296
|
+
Włącz szczegółowe logowanie:
|
|
523
297
|
|
|
524
298
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# Lub z Docker
|
|
299
|
+
DEBUG=true node your-script.js
|
|
300
|
+
# lub
|
|
529
301
|
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
302
|
```
|
|
538
303
|
|
|
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
304
|
### Port już w użyciu
|
|
546
305
|
|
|
547
|
-
Proxy automatycznie spróbuje zabić procesy na skonfigurowanych portach. Jeśli to się nie powiedzie, ręcznie zwolnij porty:
|
|
548
|
-
|
|
549
306
|
```bash
|
|
550
307
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
308
|
```
|
|
553
309
|
|
|
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
|
|
310
|
+
## 🧪 Testy
|
|
567
311
|
|
|
568
312
|
```bash
|
|
569
313
|
# Uruchom wszystkie testy
|
|
570
314
|
yarn test
|
|
571
315
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# Uruchom testy z pokryciem
|
|
316
|
+
# Z pokryciem
|
|
576
317
|
yarn test:coverage
|
|
577
318
|
|
|
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
|
|
319
|
+
# Testy Docker
|
|
597
320
|
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
321
|
```
|
|
605
322
|
|
|
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
|
|
323
|
+
## 📚 Przykłady
|
|
617
324
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
325
|
+
Zobacz katalog `examples/`:
|
|
621
326
|
|
|
622
|
-
|
|
327
|
+
- `basic-usage.js` - Prosta konfiguracja proxy
|
|
328
|
+
- `advanced-usage.js` - Walidacja, CORS, przekierowania
|
|
329
|
+
- `custom-handlers.js` - Niestandardowe handlery żądań
|
|
330
|
+
- `docker-compose.example.yml` - Konfiguracja Docker
|
|
623
331
|
|
|
624
|
-
##
|
|
332
|
+
## 🤝 Współpraca
|
|
625
333
|
|
|
626
|
-
|
|
334
|
+
Wkład mile widziany! Zobacz [CONTRIBUTING.md](CONTRIBUTING.md) po szczegóły.
|
|
627
335
|
|
|
628
|
-
|
|
629
|
-
- Minimalny narzut
|
|
630
|
-
- Pooling połączeń
|
|
631
|
-
- Automatyczny powrót do HTTP/1.1
|
|
336
|
+
## 📄 Licencja
|
|
632
337
|
|
|
633
|
-
|
|
338
|
+
MIT © Robiki sp. z o.o.
|
|
634
339
|
|
|
635
|
-
|
|
636
|
-
- Włączenie klastrowania dla systemów wielordzeniowych
|
|
637
|
-
- Monitorowanie za pomocą health checks
|
|
638
|
-
- Skonfigurowanie odpowiedniego logowania
|
|
340
|
+
## 🔗 Linki
|
|
639
341
|
|
|
342
|
+
- [Repozytorium GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
343
|
+
- [Pakiet npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
344
|
+
- [Issue Tracker](https://github.com/robiki-ai/robiki-proxy/issues)
|