obsidian/wiki/infrastructure/server-optical.md
2026-04-24 11:19:08 +01:00

115 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
tags: [infrastructure, server, gcp, oliver-internal]
updated: 2026-04-24
---
# optical — optical-web-1 (Main AI Production)
> SSH alias: `optical` → `vadym.samoilenko@10.220.168.5:22`
> Key: `~/.ssh/id_rsa_vadym`
## Overview
Main Oliver Agency AI production server. Hosts ~35 client and internal AI applications as systemd services (mix of Python/FastAPI, Node.js, Docker Compose). The biggest server in the fleet — many apps share resources on a single GCP instance.
- **Hostname**: optical-web-1
- **Platform**: GCP (europe-west2 assumed)
- **OS**: Ubuntu 22.04.4 LTS
- **IP**: 10.220.168.5
- **Web server**: Apache 2.4 (no Nginx)
- **Domain**: ai-sandbox.oliver.solutions
- **Disk**: 116 GB total
## Running Applications (`/opt/`)
| App | Service | Port | Tech |
|-----|---------|------|------|
| agent_collector | agent_collector.service | — | Python |
| AgentHub / agent_tracker | agent_tracker.service | 17000 | Python/FastAPI |
| AI QC | ai_qc.service | — | Python |
| Box→Bynder | box2bynder.service | — | Python |
| Brief Extractor | brief-extractor.service | — | Python |
| Cannes Video Generator | cannes-video-generator.service | — | Python |
| Contract Query | contract-query.service | — | Python |
| Ferrero CreativeX | creativex-service.service | — | Python |
| Ferrero AC Booking | ferrero-ac.service | — | Python |
| Ferrero Orchestrator | ferrero-orchestrator-prod.service | — | Python |
| Hiring Calculator | hiring_calculator.service | 8127 | Flask/Gunicorn |
| H&M EMS | hm-ems.service | 3001 (Node) | Node.js |
| HP Chatbot | hp_chatbot.service | — | Python |
| JustEight | justeight.service | 7395 | Python |
| Markdown→PDF | markdown2pdf.service | — | Python |
| MSFT Melanie Bot | melanie_bot.service | 8475/8505 | Python |
| Netflix Chatbot | netflix_chatbot.service | — | Python |
| Netflix V2 | netflix_v2.service | — | Python |
| PDF Extract | pdf_extract.service | 8746 | Python |
| Semblance | semblance.service | 8001 | Python |
| Veo Video Generator | veo-video-generator.service | 7394 | Python |
| Video Optimizer | video-optimizer-backend.service | 8003 | Python |
| Video Query | video_query.service | 8000 | Python |
| Voice→Text (Whisper) | voice2text-api.service | 8100 | Python |
| PM2 apps (vadym) | pm2-vadym.samoilenko.service | 3000, 4000, 3100, 3456 | Node.js |
**Other `/opt/` dirs**: apac-ops-bot, apac-strategy-dashboard, build-a-squad, enterprise-ai-hub-nexus, ferrero-opentext, hm-ems-data, hm_ai_qc, hm_ems_report, loreal-sla-calculator, lusa-back-planner, mongodb, oliver-metadata-tool, ollie-brandtech-strategic-intelligence, pimco-charts, rackham-meeting-analyzer, sandbox-notebookllamalm-nextjs, smartcrop26, veo3, video-accessibility, video-subtitle, backups, agent-sync
## Port Map
| Port | Service | Notes |
|------|---------|-------|
| 80 / 443 | Apache | ai-sandbox.oliver.solutions |
| 3000 | PM2 / Node.js | — |
| 3001 | H&M EMS Node | — |
| 3100 | PM2 / Node.js | — |
| 3456 | Node.js (fac) | ProxyPass /fac/ → :3456 |
| 4000 | PM2 / Node.js | — |
| 5000 | Gunicorn (localhost) | — |
| 5432 / 5433 / 5437 | PostgreSQL | Three instances |
| 6174 / 6175 / 6176 | Redis internal | — |
| 6333 | Qdrant | Vector DB (internal: 10.220.168.5:6333) |
| 6379 / 6380 / 6399 | Redis | Three instances |
| 7474 / 7475 | Neo4j HTTP | — |
| 7687 / 7688 | Neo4j Bolt | — |
| 7394 / 7395 | JustEight | — |
| 8000 | Video Query | — |
| 8001 | Semblance | — |
| 8003 | Video Optimizer | — |
| 8038 / 8048 | Various | — |
| 8080 | — | — |
| 8100 | Voice2Text | — |
| 8127 | Hiring Calculator | — |
| 8475 / 8505 | Melanie Bot | — |
| 8746 | PDF Extract | — |
| 8877 / 8569 | Internal only (localhost) | — |
| 9000 / 9001 | — | — |
| 17000 | AgentHub | — |
| 27017 / 27019 / 27021 | MongoDB | Three instances |
## Databases Running
- **PostgreSQL**: :5432, :5433, :5437 (three instances)
- **MongoDB**: :27017, :27019, :27021 (three instances)
- **Redis**: :6379, :6380, :6399 + internal on 61746176
- **Qdrant** (vector DB): :6333 (bound to 10.220.168.5 only)
- **Neo4j**: :7474/:7475 (HTTP), :7687/:7688 (Bolt)
- Also: internal Redis exposed to optical-dev via :15432 (PG) and :16379 (Redis)
## Apache Config
- Single vhost: `ai-sandbox.oliver.solutions`
- SSL termination: upstream (GCP load balancer)
- PHP 8.1-FPM running alongside
- ProxyPass: `/fac/``http://127.0.0.1:3456/`
## Key Takeaways
- This is the **main workhorse** — don't restart services carelessly
- Multiple databases of each type — always confirm which port before connecting
- Apps deployed in `/opt/{name}/` as systemd services — manage with `sudo systemctl {start|stop|status} {service-name}`
- Also some Docker Compose apps (loreal-sla-calculator, enterprise-ai-hub-nexus, video-accessibility, pdf-accessibility, pimco-charts, ac-helper, sandbox apps)
- PM2 manages Node.js apps under `vadym.samoilenko` user
## Related
- [[wiki/infrastructure/server-optical-dev|server-optical-dev]] — Docker staging server
- [[wiki/infrastructure/ssh-aliases|ssh-aliases]] — all server quick reference
- [[wiki/architecture/docker-compose-deploy|docker-compose-deploy]]