Initial commit - NUC server configuration and docs

- CLAUDE.md: Server instructions and service reference
- docs/: Persistent documentation (architecture, guides)
- .artifacts/: Session-generated notes
- playwriter-browser/: Remote browser container config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-02-01 20:49:20 +00:00
commit 390eda1595
25 changed files with 3664 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
# Task Runners Health Check Fix
**Date:** 2026-02-01 13:20
**Context:** Fixed unhealthy status on n8n task-runners container
## Problem
The `task-runners-uk0o04o0g84s4sc80kkoooc0` container was showing as unhealthy with 60,395+ consecutive failures.
**Root Cause:** Health check was configured to hit `/` but the actual health endpoint is `/healthz`
| Configured | Actual Endpoint |
|------------|-----------------|
| `http://127.0.0.1:5680/` | Returns 404 |
| `http://127.0.0.1:5680/healthz` | Returns `{"status":"ok"}` |
## Solution
Updated Coolify's docker-compose configuration for the n8n service:
```bash
docker exec coolify php artisan tinker --execute="
use App\Models\Service;
\$service = Service::find(4);
\$compose = \$service->docker_compose_raw;
\$compose = str_replace(
\"'wget -qO- http://127.0.0.1:5680/'\",
\"'wget -qO- http://127.0.0.1:5680/healthz'\",
\$compose
);
\$service->docker_compose_raw = \$compose;
\$service->save();
"
```
Then restarted the service:
```bash
docker exec coolify php artisan tinker --execute="
use App\Models\Service;
use App\Actions\Service\StopService;
use App\Actions\Service\StartService;
\$service = Service::find(4);
StopService::run(\$service);
StartService::run(\$service);
"
```
## Result
- Container now shows as **healthy**
- Health check correctly hitting `/healthz` endpoint
## Related
- n8n Service ID: 4
- n8n Service UUID: uk0o04o0g84s4sc80kkoooc0
- Coolify: http://192.168.1.3:8000

View File

@@ -0,0 +1,132 @@
# LiquidGym & Knosia Migration to NUC
**Date:** 2026-02-01 16:45
**Context:** Migrated LiquidGym MySQL and Knosia PostgreSQL from local Docker to NUC Coolify
## NUC MySQL Connection
| Property | Value |
|----------|-------|
| Host | 192.168.1.3 |
| Port | 3306 |
| Database | liquidgym |
| User | liquidgym |
| Password | liquidgym_nuc_2026 |
| Root Password | liquidgym_root_nuc_2026 |
| Coolify UUID | hgwcgs4oswwc8scg080scoo4 |
| External URL | mysql://liquidgym:liquidgym_nuc_2026@192.168.1.3:3306/liquidgym |
## Local Volumes (Safe to Delete)
These local volumes contained LiquidGym MySQL data and are now migrated:
- `infra_mysql_data` - Active data (migrated)
- `infra_mysql_logs` - Logs
- `liquidgym_mysql_data` - Stale duplicate
- `liquidgym_mysql_logs` - Stale duplicate
## Project Updates
The liquidgym project at `/Users/agutierrez/Desktop/liquidgym` has been updated:
- Added `.env.nuc` with NUC MySQL configuration
- Local MySQL in docker-compose.yml can still be used for isolated testing
## Usage
```bash
# Use NUC MySQL (remote)
cd ~/Desktop/liquidgym/infra
cp .env.nuc .env
docker compose up cloudbeaver -d
# Use local MySQL (isolated)
docker compose --profile tier1 up mysql -d
```
---
## Knosia (LiquidRender) PostgreSQL
| Property | Value |
|----------|-------|
| Host | 192.168.1.3 |
| Port | 5442 |
| Database | knosia |
| User | knosia |
| Password | knosia_nuc_2026 |
| Coolify UUID | ik80skko0008w4000c4w40os |
| pgvector | 0.8.1 enabled |
| External URL | postgresql://knosia:knosia_nuc_2026@192.168.1.3:5442/knosia |
## NUC MinIO for Knosia
| Property | Value |
|----------|-------|
| Endpoint | http://192.168.1.3:9000 |
| Bucket | knosia |
| Access Key | Dt6yvE0MTH7N4GBz |
| Secret Key | iz6Fl5aAixTgyzRcRLZrjmCM02CBCdmZ |
| Coolify Service | dg4wkgg8skcssww0040sgk80 |
## Project Updates
- LiquidGym: `/Desktop/liquidgym/infra/.env.nuc`
- LiquidRender (Knosia): `/Desktop/liquidrender/.env.nuc`
---
## LiquidGym PostgreSQL (Test Datasets)
| Property | Value |
|----------|-------|
| Host | 192.168.1.3 |
| Port | 5433 |
| User | postgres |
| Password | postgres |
| Coolify UUID | x4kk8g4k8w4g0cw480w84g4g |
**Databases migrated (~520MB total):**
| Database | Size | Description |
|----------|------|-------------|
| employees | 334 MB | HR dataset |
| adventureworks | 114 MB | Sales/HR sample |
| lego | 43 MB | LEGO sets |
| pagila | 17 MB | DVD rental |
| netflix | 11 MB | Netflix titles |
| chinook | 10 MB | Music store |
| northwind | 8 MB | Classic sample |
---
## Google Reviews Scraper PostgreSQL
| Property | Value |
|----------|-------|
| Host | 192.168.1.3 |
| Port | 5437 |
| Database | scraper |
| User | scraper |
| Password | scraper_nuc_2026 |
| Coolify UUID | g4s8w4csk8s8ocswg48kkogo |
**Data migrated:**
| Table | Rows |
|-------|------|
| jobs | 21 |
| gbp_categories | 4,141 |
| canary_results | 25 |
**Project files:**
- `.env.nuc` - NUC database config
- `docker-compose.nuc.yml` - Override to use NUC DB
**Usage:**
```bash
cd ~/Desktop/google-reviews-scraper-pro
cp .env.nuc .env
docker compose -f docker-compose.production.yml -f docker-compose.nuc.yml up -d
```
## Related
- CloudBeaver on NUC: http://192.168.1.3:8087
- MinIO Console: http://192.168.1.3:9001
- Coolify Dashboard: http://192.168.1.3:8000

View File

@@ -0,0 +1,124 @@
# LiquidGym Database Engines Reference
**Date:** 2026-02-01 17:15
**Context:** Reference guide for LiquidGym's multi-engine SQL testing infrastructure
## Overview
LiquidGym is a multi-database testing environment designed to verify that analytical queries work identically across different database engines. This ensures engine-agnostic query generation.
## Engine Tiers
### Core (Always Started)
| Engine | Image | Port | Purpose |
|--------|-------|------|---------|
| PostgreSQL 16 | `postgres:16` | 5433 | Primary test database with sample datasets |
| CloudBeaver | `dbeaver/cloudbeaver` | 8978 | Web-based database UI |
### Tier 1: Essential Engines
Different SQL dialects for cross-engine testing.
| Engine | Image | Port | Description |
|--------|-------|------|-------------|
| **ClickHouse** | `clickhouse/clickhouse-server` | 8123 (HTTP), 9000 (Native) | Column-oriented OLAP database. Extremely fast for analytics on billions of rows. Used by Cloudflare, Uber, eBay. Best for: logs, metrics, time-series analytics. |
| **MySQL 8** | `mysql:8` | 3306 | World's most popular open-source RDBMS. Tests MySQL-specific SQL dialect. |
### Tier 2: Distributed & Specialized
| Engine | Image | Port | Description |
|--------|-------|------|-------------|
| **Trino** | `trinodb/trino` | 8084 | Distributed SQL query engine. Queries data across multiple sources (Postgres, S3, Kafka) with single SQL. No storage - just a query layer. |
| **StarRocks** | `starrocks/allin1-ubuntu` | 9030 (MySQL), 8030 (HTTP) | MPP analytics database. Sub-second queries on large datasets. Powers BI dashboards. Fork of Apache Doris with performance improvements. |
| **TimescaleDB** | `timescale/timescaledb:latest-pg16` | 5434 | PostgreSQL extension for time-series data. Auto-partitions by time. Perfect for IoT, metrics, events. Familiar Postgres SQL. |
### Tier 3: Advanced/Specialized
| Engine | Image | Port | Description |
|--------|-------|------|-------------|
| **Apache Doris** | `apache/doris:doris-all-in-one-2.1.0` | 9031 (MySQL), 8031 (HTTP) | Real-time analytical database. MySQL-compatible. Good for real-time dashboards and ad-hoc queries. |
| **Apache Druid** | `apache/druid:26.0.0` | 8888 | Real-time OLAP for sub-second slice-and-dice analytics. Powers Airbnb, Netflix, Alibaba dashboards. Best for: high-concurrency, low-latency queries. |
| **Apache Spark** | `apache/spark:3.5.0` | 7077 (Master), 8085 (UI) | Distributed compute engine for big data. ML pipelines, ETL, batch processing. Overkill for small datasets. |
## Observability Stack
| Tool | Image | Port | Description |
|------|-------|------|-------------|
| **Grafana** | `grafana/grafana` | 3005 | Visualization & dashboards. Query any data source, create alerts. Login: admin/liquidgym |
| **Prometheus** | `prom/prometheus` | 9090 | Metrics collection & alerting. Scrapes metrics from all engines. |
| **Redis** | `redis:7-alpine` | 6379 | In-memory cache. Used for session storage, caching query results. |
## Usage
```bash
cd ~/Desktop/liquidgym/infra
# Start core only (Postgres + CloudBeaver)
docker compose up -d
# Start with Tier 1 engines (+ ClickHouse, MySQL)
docker compose --profile tier1 up -d
# Start with Tier 2 engines (+ Trino, StarRocks, TimescaleDB)
docker compose --profile tier2 up -d
# Start with Tier 3 engines (+ Doris, Spark)
docker compose --profile tier3 up -d
# Start observability stack (+ Prometheus, Grafana, Redis)
docker compose --profile observability up -d
# Start everything
docker compose --profile all up -d
# Load sample datasets
docker compose --profile loader up
```
## Sample Datasets
| Dataset | Description | Tables |
|---------|-------------|--------|
| **Northwind** | Classic MS Access sample - orders, products, customers | 14 |
| **Pagila** | DVD rental store (PostgreSQL port of Sakila) | 29 |
| **Chinook** | Digital media store - artists, albums, tracks | 11 |
| **AdventureWorks** | Microsoft sample - sales, HR, production | 68 |
| **Employees** | Large HR dataset with 300K+ employee records | 6 |
| **LEGO** | LEGO sets, parts, themes, colors | 8 |
| **Netflix** | Netflix titles catalog | 1 |
## When to Use Each Engine
| Use Case | Recommended Engine |
|----------|-------------------|
| General OLTP | PostgreSQL, MySQL |
| Analytics on large datasets | ClickHouse, StarRocks |
| Time-series / IoT | TimescaleDB |
| Real-time dashboards | Druid, Doris |
| Query across multiple DBs | Trino |
| Big data / ML pipelines | Spark |
| Caching | Redis |
## Resource Requirements
| Profile | RAM | CPU | Disk |
|---------|-----|-----|------|
| Core | 1GB | 1 | 1GB |
| + Tier 1 | 6GB | 2 | 3GB |
| + Tier 2 | 10GB | 4 | 5GB |
| + Tier 3 | 16GB+ | 6+ | 10GB+ |
| + Observability | +2GB | +1 | +1GB |
## NUC Migration Status
The following have been migrated to NUC and no longer need local volumes:
| Service | NUC Location | Status |
|---------|--------------|--------|
| PostgreSQL (datasets) | 192.168.1.3:5433 | Migrated |
| MySQL | 192.168.1.3:3306 | Migrated |
Tier 1-3 engines remain local-only for development testing.
## Related
- LiquidGym project: `~/Desktop/liquidgym/infra/`
- Docker Compose: `~/Desktop/liquidgym/infra/docker-compose.yml`
- Datasets: `~/Desktop/liquidgym/infra/datasets/`