lynkr 3.3.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,867 @@
1
+ # Docker Deployment Guide
2
+
3
+ Complete guide to deploying Lynkr with Docker and docker-compose, including GPU support and Kubernetes deployment.
4
+
5
+ ---
6
+
7
+ ## Quick Start
8
+
9
+ ### docker-compose (Recommended)
10
+
11
+ **1. Clone repository:**
12
+ ```bash
13
+ git clone https://github.com/vishalveerareddy123/Lynkr.git
14
+ cd Lynkr
15
+ ```
16
+
17
+ **2. Configure environment:**
18
+ ```bash
19
+ cp .env.example .env
20
+ # Edit .env with your provider credentials
21
+ ```
22
+
23
+ **3. Start services:**
24
+ ```bash
25
+ docker-compose up -d
26
+ ```
27
+
28
+ **4. Verify:**
29
+ ```bash
30
+ curl http://localhost:8081/health/live
31
+ # Expected: {"status":"ok"}
32
+ ```
33
+
34
+ ---
35
+
36
+ ## Docker Compose Configuration
37
+
38
+ ### Standard Setup (docker-compose.yml)
39
+
40
+ ```yaml
41
+ version: '3.8'
42
+
43
+ services:
44
+ lynkr:
45
+ build: .
46
+ container_name: lynkr
47
+ ports:
48
+ - "8081:8081" # Lynkr proxy
49
+ env_file:
50
+ - .env
51
+ volumes:
52
+ - ./data:/app/data # Persistent data (memories, sessions)
53
+ - ./workspace:/app/workspace # Workspace for file operations
54
+ restart: unless-stopped
55
+ healthcheck:
56
+ test: ["CMD", "curl", "-f", "http://localhost:8081/health/live"]
57
+ interval: 30s
58
+ timeout: 10s
59
+ retries: 3
60
+ start_period: 40s
61
+ ```
62
+
63
+ ### With Ollama (Local LLM)
64
+
65
+ ```yaml
66
+ version: '3.8'
67
+
68
+ services:
69
+ # Lynkr proxy
70
+ lynkr:
71
+ build: .
72
+ container_name: lynkr
73
+ ports:
74
+ - "8081:8081"
75
+ environment:
76
+ # Hybrid routing: Ollama first, fallback to cloud
77
+ - MODEL_PROVIDER=ollama
78
+ - OLLAMA_API_BASE=http://ollama:11434
79
+ - PREFER_OLLAMA=true
80
+ - FALLBACK_ENABLED=true
81
+ - FALLBACK_PROVIDER=databricks
82
+ - DATABRICKS_API_BASE=${DATABRICKS_API_BASE}
83
+ - DATABRICKS_API_KEY=${DATABRICKS_API_KEY}
84
+ volumes:
85
+ - ./data:/app/data
86
+ - ./workspace:/app/workspace
87
+ depends_on:
88
+ - ollama
89
+ restart: unless-stopped
90
+
91
+ # Ollama local LLM server
92
+ ollama:
93
+ image: ollama/ollama:latest
94
+ container_name: ollama
95
+ ports:
96
+ - "11434:11434"
97
+ volumes:
98
+ - ollama_data:/root/.ollama
99
+ restart: unless-stopped
100
+ healthcheck:
101
+ test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
102
+ interval: 30s
103
+ timeout: 10s
104
+ retries: 3
105
+
106
+ volumes:
107
+ ollama_data:
108
+ ```
109
+
110
+ **Pull models:**
111
+ ```bash
112
+ # Enter Ollama container
113
+ docker exec -it ollama ollama pull qwen2.5-coder:7b
114
+
115
+ # Or from host (if Ollama CLI installed)
116
+ ollama pull qwen2.5-coder:7b
117
+ ```
118
+
119
+ ### With GPU Support (NVIDIA)
120
+
121
+ ```yaml
122
+ version: '3.8'
123
+
124
+ services:
125
+ lynkr:
126
+ build: .
127
+ container_name: lynkr
128
+ ports:
129
+ - "8081:8081"
130
+ environment:
131
+ - MODEL_PROVIDER=ollama
132
+ - OLLAMA_API_BASE=http://ollama:11434
133
+ volumes:
134
+ - ./data:/app/data
135
+ - ./workspace:/app/workspace
136
+ depends_on:
137
+ - ollama
138
+ restart: unless-stopped
139
+
140
+ ollama:
141
+ image: ollama/ollama:latest
142
+ container_name: ollama
143
+ ports:
144
+ - "11434:11434"
145
+ volumes:
146
+ - ollama_data:/root/.ollama
147
+ deploy:
148
+ resources:
149
+ reservations:
150
+ devices:
151
+ - driver: nvidia
152
+ count: all
153
+ capabilities: [gpu]
154
+ restart: unless-stopped
155
+
156
+ volumes:
157
+ ollama_data:
158
+ ```
159
+
160
+ **Prerequisites:**
161
+ 1. Install NVIDIA drivers
162
+ 2. Install NVIDIA Container Toolkit:
163
+ ```bash
164
+ # Ubuntu/Debian
165
+ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
166
+ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
167
+ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
168
+ sudo tee /etc/apt/sources.list.d/nvidia-docker.list
169
+
170
+ sudo apt-get update
171
+ sudo apt-get install -y nvidia-container-toolkit
172
+ sudo systemctl restart docker
173
+ ```
174
+
175
+ **Verify GPU access:**
176
+ ```bash
177
+ docker exec -it ollama nvidia-smi
178
+ ```
179
+
180
+ ### With Embeddings (for Cursor @Codebase)
181
+
182
+ ```yaml
183
+ version: '3.8'
184
+
185
+ services:
186
+ lynkr:
187
+ build: .
188
+ container_name: lynkr
189
+ ports:
190
+ - "8081:8081"
191
+ environment:
192
+ - MODEL_PROVIDER=databricks
193
+ - DATABRICKS_API_BASE=${DATABRICKS_API_BASE}
194
+ - DATABRICKS_API_KEY=${DATABRICKS_API_KEY}
195
+
196
+ # Embeddings via Ollama
197
+ - EMBEDDINGS_PROVIDER=ollama
198
+ - OLLAMA_API_BASE=http://ollama:11434
199
+ - OLLAMA_EMBEDDINGS_MODEL=nomic-embed-text
200
+
201
+ # Index workspace for @Codebase
202
+ - WORKSPACE_ROOT=/app/workspace
203
+ - WORKSPACE_INDEX_ENABLED=true
204
+ volumes:
205
+ - ./data:/app/data
206
+ - ./workspace:/app/workspace
207
+ depends_on:
208
+ - ollama
209
+ restart: unless-stopped
210
+
211
+ ollama:
212
+ image: ollama/ollama:latest
213
+ container_name: ollama
214
+ ports:
215
+ - "11434:11434"
216
+ volumes:
217
+ - ollama_data:/root/.ollama
218
+ restart: unless-stopped
219
+
220
+ volumes:
221
+ ollama_data:
222
+ ```
223
+
224
+ **Pull embedding model:**
225
+ ```bash
226
+ docker exec -it ollama ollama pull nomic-embed-text
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Standalone Docker
232
+
233
+ ### Build Image
234
+
235
+ ```bash
236
+ # Build from Dockerfile
237
+ docker build -t lynkr:latest .
238
+
239
+ # Or pull from registry (when available)
240
+ docker pull ghcr.io/vishalveerareddy123/lynkr:latest
241
+ ```
242
+
243
+ ### Run Container
244
+
245
+ **With Databricks:**
246
+ ```bash
247
+ docker run -d \
248
+ --name lynkr \
249
+ -p 8081:8081 \
250
+ -e MODEL_PROVIDER=databricks \
251
+ -e DATABRICKS_API_BASE=https://your-workspace.databricks.com \
252
+ -e DATABRICKS_API_KEY=your-key \
253
+ -v $(pwd)/data:/app/data \
254
+ -v $(pwd)/workspace:/app/workspace \
255
+ --restart unless-stopped \
256
+ lynkr:latest
257
+ ```
258
+
259
+ **With Ollama:**
260
+ ```bash
261
+ # Start Ollama first
262
+ docker run -d \
263
+ --name ollama \
264
+ -p 11434:11434 \
265
+ -v ollama_data:/root/.ollama \
266
+ ollama/ollama:latest
267
+
268
+ # Start Lynkr
269
+ docker run -d \
270
+ --name lynkr \
271
+ -p 8081:8081 \
272
+ -e MODEL_PROVIDER=ollama \
273
+ -e OLLAMA_API_BASE=http://ollama:11434 \
274
+ -v $(pwd)/data:/app/data \
275
+ -v $(pwd)/workspace:/app/workspace \
276
+ --link ollama \
277
+ --restart unless-stopped \
278
+ lynkr:latest
279
+ ```
280
+
281
+ **With AWS Bedrock:**
282
+ ```bash
283
+ docker run -d \
284
+ --name lynkr \
285
+ -p 8081:8081 \
286
+ -e MODEL_PROVIDER=bedrock \
287
+ -e AWS_ACCESS_KEY_ID=AKIA... \
288
+ -e AWS_SECRET_ACCESS_KEY=... \
289
+ -e AWS_BEDROCK_REGION=us-east-1 \
290
+ -v $(pwd)/data:/app/data \
291
+ -v $(pwd)/workspace:/app/workspace \
292
+ --restart unless-stopped \
293
+ lynkr:latest
294
+ ```
295
+
296
+ ---
297
+
298
+ ## Dockerfile
299
+
300
+ ### Standard Dockerfile
301
+
302
+ ```dockerfile
303
+ # Use Node.js 18 Alpine for smaller image
304
+ FROM node:18-alpine
305
+
306
+ # Set working directory
307
+ WORKDIR /app
308
+
309
+ # Install dependencies
310
+ COPY package*.json ./
311
+ RUN npm ci --production
312
+
313
+ # Copy application code
314
+ COPY . .
315
+
316
+ # Create data directories
317
+ RUN mkdir -p /app/data /app/workspace
318
+
319
+ # Expose port
320
+ EXPOSE 8081
321
+
322
+ # Health check
323
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
324
+ CMD node -e "require('http').get('http://localhost:8081/health/live', (r) => { process.exit(r.statusCode === 200 ? 0 : 1); })"
325
+
326
+ # Run as non-root user
327
+ USER node
328
+
329
+ # Start application
330
+ CMD ["node", "index.js"]
331
+ ```
332
+
333
+ ### Multi-stage Dockerfile (Smaller Image)
334
+
335
+ ```dockerfile
336
+ # Build stage
337
+ FROM node:18-alpine AS builder
338
+
339
+ WORKDIR /app
340
+ COPY package*.json ./
341
+ RUN npm ci --production
342
+
343
+ # Runtime stage
344
+ FROM node:18-alpine
345
+
346
+ WORKDIR /app
347
+
348
+ # Copy dependencies
349
+ COPY --from=builder /app/node_modules ./node_modules
350
+
351
+ # Copy application
352
+ COPY . .
353
+
354
+ # Create directories
355
+ RUN mkdir -p /app/data /app/workspace && \
356
+ chown -R node:node /app
357
+
358
+ # Expose port
359
+ EXPOSE 8081
360
+
361
+ # Health check
362
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
363
+ CMD node -e "require('http').get('http://localhost:8081/health/live', (r) => { process.exit(r.statusCode === 200 ? 0 : 1); })"
364
+
365
+ # Run as non-root user
366
+ USER node
367
+
368
+ CMD ["node", "index.js"]
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Volume Management
374
+
375
+ ### Persistent Data
376
+
377
+ **Required volumes:**
378
+ ```yaml
379
+ volumes:
380
+ - ./data:/app/data # SQLite databases (memories, sessions)
381
+ - ./workspace:/app/workspace # File operations workspace
382
+ ```
383
+
384
+ **Data directory structure:**
385
+ ```
386
+ data/
387
+ ├── memories.db # Long-term memory database
388
+ ├── sessions.db # Conversation history
389
+ └── workspace-index.db # Workspace metadata
390
+ ```
391
+
392
+ ### Backup Data
393
+
394
+ **Backup script:**
395
+ ```bash
396
+ #!/bin/bash
397
+ # backup-lynkr.sh
398
+
399
+ BACKUP_DIR="./backups/$(date +%Y%m%d_%H%M%S)"
400
+ mkdir -p $BACKUP_DIR
401
+
402
+ # Stop container
403
+ docker-compose stop lynkr
404
+
405
+ # Backup data
406
+ cp -r ./data $BACKUP_DIR/
407
+ cp -r ./workspace $BACKUP_DIR/
408
+
409
+ # Restart container
410
+ docker-compose start lynkr
411
+
412
+ echo "Backup saved to: $BACKUP_DIR"
413
+ ```
414
+
415
+ ### Restore Data
416
+
417
+ ```bash
418
+ #!/bin/bash
419
+ # restore-lynkr.sh
420
+
421
+ BACKUP_DIR=$1
422
+
423
+ if [ -z "$BACKUP_DIR" ]; then
424
+ echo "Usage: ./restore-lynkr.sh <backup_directory>"
425
+ exit 1
426
+ fi
427
+
428
+ # Stop container
429
+ docker-compose stop lynkr
430
+
431
+ # Restore data
432
+ rm -rf ./data ./workspace
433
+ cp -r $BACKUP_DIR/data ./
434
+ cp -r $BACKUP_DIR/workspace ./
435
+
436
+ # Restart container
437
+ docker-compose start lynkr
438
+
439
+ echo "Restored from: $BACKUP_DIR"
440
+ ```
441
+
442
+ ---
443
+
444
+ ## Environment Variables
445
+
446
+ ### Core Configuration
447
+
448
+ ```yaml
449
+ environment:
450
+ # Provider
451
+ - MODEL_PROVIDER=databricks
452
+ - DATABRICKS_API_BASE=https://your-workspace.databricks.com
453
+ - DATABRICKS_API_KEY=${DATABRICKS_API_KEY}
454
+
455
+ # Hybrid routing
456
+ - PREFER_OLLAMA=true
457
+ - FALLBACK_ENABLED=true
458
+ - FALLBACK_PROVIDER=databricks
459
+
460
+ # Port
461
+ - PORT=8081
462
+
463
+ # Logging
464
+ - LOG_LEVEL=info
465
+
466
+ # Memory
467
+ - MEMORY_ENABLED=true
468
+ - MEMORY_RETRIEVAL_LIMIT=5
469
+
470
+ # Caching
471
+ - PROMPT_CACHE_ENABLED=true
472
+ - PROMPT_CACHE_TTL_MS=300000
473
+ ```
474
+
475
+ ### Security Configuration
476
+
477
+ ```yaml
478
+ environment:
479
+ # Git policies
480
+ - POLICY_GIT_ALLOW_PUSH=false
481
+ - POLICY_GIT_REQUIRE_TESTS=true
482
+ - POLICY_GIT_TEST_COMMAND=npm test
483
+
484
+ # Web fetch policies
485
+ - WEB_SEARCH_ALLOWED_HOSTS=github.com,stackoverflow.com
486
+
487
+ # Workspace policies
488
+ - WORKSPACE_ROOT=/app/workspace
489
+ - POLICY_MAX_STEPS=8
490
+
491
+ # MCP sandbox
492
+ - MCP_SANDBOX_ENABLED=true
493
+ - MCP_SANDBOX_IMAGE=ubuntu:22.04
494
+ ```
495
+
496
+ ---
497
+
498
+ ## Docker Commands
499
+
500
+ ### Container Management
501
+
502
+ ```bash
503
+ # Start services
504
+ docker-compose up -d
505
+
506
+ # Stop services
507
+ docker-compose stop
508
+
509
+ # Restart services
510
+ docker-compose restart
511
+
512
+ # View logs
513
+ docker-compose logs -f lynkr
514
+
515
+ # View logs (last 100 lines)
516
+ docker-compose logs --tail=100 lynkr
517
+
518
+ # Execute command in container
519
+ docker-compose exec lynkr sh
520
+
521
+ # Remove containers
522
+ docker-compose down
523
+
524
+ # Remove containers and volumes
525
+ docker-compose down -v
526
+ ```
527
+
528
+ ### Debugging
529
+
530
+ ```bash
531
+ # Check container status
532
+ docker-compose ps
533
+
534
+ # Inspect container
535
+ docker inspect lynkr
536
+
537
+ # Check resource usage
538
+ docker stats lynkr
539
+
540
+ # View container logs
541
+ docker logs -f lynkr
542
+
543
+ # Enter container shell
544
+ docker exec -it lynkr sh
545
+
546
+ # Check environment variables
547
+ docker exec lynkr env
548
+
549
+ # Test health endpoint
550
+ docker exec lynkr curl http://localhost:8081/health/live
551
+ ```
552
+
553
+ ---
554
+
555
+ ## Kubernetes Deployment
556
+
557
+ ### Basic Deployment
558
+
559
+ **deployment.yaml:**
560
+ ```yaml
561
+ apiVersion: apps/v1
562
+ kind: Deployment
563
+ metadata:
564
+ name: lynkr
565
+ labels:
566
+ app: lynkr
567
+ spec:
568
+ replicas: 3
569
+ selector:
570
+ matchLabels:
571
+ app: lynkr
572
+ template:
573
+ metadata:
574
+ labels:
575
+ app: lynkr
576
+ spec:
577
+ containers:
578
+ - name: lynkr
579
+ image: ghcr.io/vishalveerareddy123/lynkr:latest
580
+ ports:
581
+ - containerPort: 8081
582
+ name: http
583
+ env:
584
+ - name: MODEL_PROVIDER
585
+ value: "databricks"
586
+ - name: DATABRICKS_API_BASE
587
+ valueFrom:
588
+ secretKeyRef:
589
+ name: lynkr-secrets
590
+ key: databricks-api-base
591
+ - name: DATABRICKS_API_KEY
592
+ valueFrom:
593
+ secretKeyRef:
594
+ name: lynkr-secrets
595
+ key: databricks-api-key
596
+ resources:
597
+ requests:
598
+ cpu: "500m"
599
+ memory: "512Mi"
600
+ limits:
601
+ cpu: "2"
602
+ memory: "2Gi"
603
+ volumeMounts:
604
+ - name: data
605
+ mountPath: /app/data
606
+ - name: workspace
607
+ mountPath: /app/workspace
608
+ livenessProbe:
609
+ httpGet:
610
+ path: /health/live
611
+ port: 8081
612
+ initialDelaySeconds: 10
613
+ periodSeconds: 10
614
+ timeoutSeconds: 5
615
+ failureThreshold: 3
616
+ readinessProbe:
617
+ httpGet:
618
+ path: /health/ready
619
+ port: 8081
620
+ initialDelaySeconds: 5
621
+ periodSeconds: 5
622
+ timeoutSeconds: 3
623
+ failureThreshold: 3
624
+ volumes:
625
+ - name: data
626
+ persistentVolumeClaim:
627
+ claimName: lynkr-data-pvc
628
+ - name: workspace
629
+ persistentVolumeClaim:
630
+ claimName: lynkr-workspace-pvc
631
+ ---
632
+ apiVersion: v1
633
+ kind: Service
634
+ metadata:
635
+ name: lynkr
636
+ labels:
637
+ app: lynkr
638
+ spec:
639
+ selector:
640
+ app: lynkr
641
+ ports:
642
+ - port: 80
643
+ targetPort: 8081
644
+ protocol: TCP
645
+ name: http
646
+ type: LoadBalancer
647
+ ```
648
+
649
+ **secrets.yaml:**
650
+ ```yaml
651
+ apiVersion: v1
652
+ kind: Secret
653
+ metadata:
654
+ name: lynkr-secrets
655
+ type: Opaque
656
+ stringData:
657
+ databricks-api-base: "https://your-workspace.databricks.com"
658
+ databricks-api-key: "your-api-key"
659
+ ```
660
+
661
+ **persistent-volumes.yaml:**
662
+ ```yaml
663
+ apiVersion: v1
664
+ kind: PersistentVolumeClaim
665
+ metadata:
666
+ name: lynkr-data-pvc
667
+ spec:
668
+ accessModes:
669
+ - ReadWriteOnce
670
+ resources:
671
+ requests:
672
+ storage: 10Gi
673
+ ---
674
+ apiVersion: v1
675
+ kind: PersistentVolumeClaim
676
+ metadata:
677
+ name: lynkr-workspace-pvc
678
+ spec:
679
+ accessModes:
680
+ - ReadWriteOnce
681
+ resources:
682
+ requests:
683
+ storage: 50Gi
684
+ ```
685
+
686
+ **Deploy:**
687
+ ```bash
688
+ # Create secrets
689
+ kubectl apply -f secrets.yaml
690
+
691
+ # Create PVCs
692
+ kubectl apply -f persistent-volumes.yaml
693
+
694
+ # Deploy application
695
+ kubectl apply -f deployment.yaml
696
+
697
+ # Check status
698
+ kubectl get pods -l app=lynkr
699
+ kubectl get svc lynkr
700
+
701
+ # View logs
702
+ kubectl logs -f deployment/lynkr
703
+
704
+ # Scale replicas
705
+ kubectl scale deployment/lynkr --replicas=5
706
+ ```
707
+
708
+ ---
709
+
710
+ ## Production Best Practices
711
+
712
+ ### Security
713
+
714
+ 1. **Run as non-root user:**
715
+ ```dockerfile
716
+ USER node
717
+ ```
718
+
719
+ 2. **Read-only root filesystem:**
720
+ ```yaml
721
+ security_opt:
722
+ - no-new-privileges:true
723
+ read_only: true
724
+ tmpfs:
725
+ - /tmp
726
+ ```
727
+
728
+ 3. **Resource limits:**
729
+ ```yaml
730
+ deploy:
731
+ resources:
732
+ limits:
733
+ cpus: '2'
734
+ memory: 2G
735
+ reservations:
736
+ cpus: '0.5'
737
+ memory: 512M
738
+ ```
739
+
740
+ ### Monitoring
741
+
742
+ 1. **Prometheus metrics:**
743
+ ```yaml
744
+ # Expose metrics port
745
+ ports:
746
+ - "8081:8081" # Main port (includes /metrics)
747
+ ```
748
+
749
+ 2. **Health checks:**
750
+ ```yaml
751
+ healthcheck:
752
+ test: ["CMD", "curl", "-f", "http://localhost:8081/health/live"]
753
+ interval: 30s
754
+ timeout: 10s
755
+ retries: 3
756
+ start_period: 40s
757
+ ```
758
+
759
+ 3. **Logging:**
760
+ ```yaml
761
+ logging:
762
+ driver: "json-file"
763
+ options:
764
+ max-size: "10m"
765
+ max-file: "3"
766
+ ```
767
+
768
+ ### High Availability
769
+
770
+ 1. **Multiple replicas:**
771
+ ```yaml
772
+ spec:
773
+ replicas: 3
774
+ ```
775
+
776
+ 2. **Load balancer:**
777
+ ```yaml
778
+ services:
779
+ nginx:
780
+ image: nginx:alpine
781
+ ports:
782
+ - "80:80"
783
+ volumes:
784
+ - ./nginx.conf:/etc/nginx/nginx.conf:ro
785
+ depends_on:
786
+ - lynkr
787
+ ```
788
+
789
+ 3. **Shared database:**
790
+ ```yaml
791
+ volumes:
792
+ - lynkr_data:/app/data # Shared volume
793
+
794
+ volumes:
795
+ lynkr_data:
796
+ driver: local
797
+ ```
798
+
799
+ ---
800
+
801
+ ## Troubleshooting
802
+
803
+ ### Container Won't Start
804
+
805
+ ```bash
806
+ # Check logs
807
+ docker-compose logs lynkr
808
+
809
+ # Common issues:
810
+ # 1. Missing environment variables
811
+ # 2. Invalid API credentials
812
+ # 3. Port already in use
813
+ ```
814
+
815
+ ### Connection Refused
816
+
817
+ ```bash
818
+ # Check container is running
819
+ docker-compose ps
820
+
821
+ # Check port binding
822
+ docker port lynkr
823
+
824
+ # Test from inside container
825
+ docker exec lynkr curl http://localhost:8081/health/live
826
+ ```
827
+
828
+ ### Out of Memory
829
+
830
+ ```bash
831
+ # Increase memory limit
832
+ docker-compose.yml:
833
+ deploy:
834
+ resources:
835
+ limits:
836
+ memory: 4G # Increase from 2G
837
+ ```
838
+
839
+ ### Slow Performance
840
+
841
+ ```bash
842
+ # Check resource usage
843
+ docker stats lynkr
844
+
845
+ # Increase CPU limit
846
+ docker-compose.yml:
847
+ deploy:
848
+ resources:
849
+ limits:
850
+ cpus: '4' # Increase from 2
851
+ ```
852
+
853
+ ---
854
+
855
+ ## Next Steps
856
+
857
+ - **[Production Guide](production.md)** - Production deployment best practices
858
+ - **[Monitoring Guide](production.md#monitoring)** - Prometheus + Grafana setup
859
+ - **[API Reference](api.md)** - API endpoints
860
+ - **[Troubleshooting](troubleshooting.md)** - Common issues
861
+
862
+ ---
863
+
864
+ ## Getting Help
865
+
866
+ - **[GitHub Discussions](https://github.com/vishalveerareddy123/Lynkr/discussions)** - Ask questions
867
+ - **[GitHub Issues](https://github.com/vishalveerareddy123/Lynkr/issues)** - Report issues