From 6ff15b4a8fdb4d18834c5978fb267f01bf88ba07 Mon Sep 17 00:00:00 2001 From: didierfranc Date: Tue, 25 Feb 2025 20:55:13 +0100 Subject: [PATCH 1/2] chore: build a docker image --- .dockerignore | 37 +++++++++++++++++++++++++++++++++++++ Dockerfile | 14 ++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..06abb66 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,37 @@ +# Node artifact files +node_modules/ +dist/ +build/ + + +# Local development +*.env +*.dev +.DS_Store + +# Docker +Dockerfile +docker-compose.yml +*.dockerignore + +# Debug log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# IDE files +.idea/ +.vscode/ +*.swp +*.swo + +# Build results +out/ +*.tsbuildinfo +.next/ + +# SvelteKit +.svelte-kit/ + +# Tauri +src-tauri/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6c6754f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM node:23 AS builder + +WORKDIR /app +COPY . . +RUN npm install + +ENV NODE_ENV=production +ENV PLATFORM=WEB + +RUN npm run build +RUN ls /app/build + +FROM nginx +COPY --from=builder /app/build /usr/share/nginx/html From b70111c9c8369da11d4bf8e58cb78e1e5409c639 Mon Sep 17 00:00:00 2001 From: didierfranc Date: Tue, 25 Feb 2025 21:49:24 +0100 Subject: [PATCH 2/2] chore: setup docker compose chore: passwordless access to clickhouse fix: passwordless clickhouse login --- .dockerignore | 3 + Dockerfile | 2 + README.md | 23 + conf/config.xml | 1794 ++++++++++++++++++++++++++ conf/users.xml | 10 + docker-compose.yaml | 29 + src/lib/olap-engine/engine-remote.ts | 3 +- src/vite-env.d.ts | 2 + vite.config.js | 1 + 9 files changed, 1865 insertions(+), 2 deletions(-) create mode 100644 conf/config.xml create mode 100644 conf/users.xml create mode 100644 docker-compose.yaml diff --git a/.dockerignore b/.dockerignore index 06abb66..258d0cc 100644 --- a/.dockerignore +++ b/.dockerignore @@ -35,3 +35,6 @@ out/ # Tauri src-tauri/ + +#Clickhouse +conf/ diff --git a/Dockerfile b/Dockerfile index 6c6754f..1f967e4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,8 @@ RUN npm install ENV NODE_ENV=production ENV PLATFORM=WEB +ARG CLICKHOUSE_URL + RUN npm run build RUN ls /app/build diff --git a/README.md b/README.md index 5bf84d4..74239e9 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,29 @@ ## Getting Started +### → Live + +https://agx.app + +### → Local + +1. Clone the repository: + +```bash +git clone https://github.com/agnosticeng/agx +cd agx +``` + +2. Run with docker compose: + +```bash +docker compose up +``` + +3. Access the application via https://localhost:8080 + +### → Native + 1. Clone the repository: ```bash diff --git a/conf/config.xml b/conf/config.xml new file mode 100644 index 0000000..f781054 --- /dev/null +++ b/conf/config.xml @@ -0,0 +1,1794 @@ + + + 1 + + + trace + /var/log/clickhouse-server/clickhouse-server.log + /var/log/clickhouse-server/clickhouse-server.err.log + + 1000M + 10 + + + + + + + + + + + + + + + + + + + + + https://{bucket}.s3.amazonaws.com + + + https://storage.googleapis.com/{bucket} + + + https://{bucket}.oss.aliyuncs.com + + + + + +
+ Access-Control-Allow-Origin + * +
+
+ Access-Control-Allow-Headers + origin, x-requested-with, x-clickhouse-format, x-clickhouse-user, x-clickhouse-key, Authorization +
+
+ Access-Control-Allow-Methods + POST, GET, OPTIONS +
+
+ Access-Control-Max-Age + 86400 +
+
+ + + + + + 8123 + + + 9000 + + + + + + 9004 + + + 9005 + + + + + + + + + + + + 9009 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ::1 + 127.0.0.1 + + + + + + + + + + + + + + + + + + 10 + + + + + false + + + /path/to/ssl_cert_file + /path/to/ssl_key_file + + + false + + + /path/to/ssl_ca_cert_file + + + none + + + 0 + + + -1 + -1 + + + false + + + + + + + + + + none + true + true + sslv2,sslv3 + true + + + + RejectCertificateHandler + + + + + true + true + sslv2,sslv3 + true + + + + RejectCertificateHandler + + + + + + + + + 0 + 2 + + + 1000 + + + 0 + + + + 10000 + + + + + + true + + + 0.9 + + + 4194304 + + + 0 + + + + + + 8589934592 + + + + + + + + + + + + + + + + + + + + + /var/lib/clickhouse/caches/ + + false + + + /var/lib/clickhouse/ + + + + + + /var/lib/clickhouse/tmp/ + + + 1 + 1 + 1 + + + sha256_password + + + 12 + + + + + + + + + /var/lib/clickhouse/user_files/ + + + + + + + + + + + + + users.xml + + + + /var/lib/clickhouse/access/ + + + + + + + + true + + + true + + + true + + + true + + + true + + + false + + + 600 + + + + default + + + SQL_ + + + + + + + + + default + + + + + + + + + true + + + false + + ' | sed -e 's|.*>\(.*\)<.*|\1|') + wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge_$PKG_VER-1_all.deb + apt install --no-install-recommends -f ./clickhouse-jdbc-bridge_$PKG_VER-1_all.deb + clickhouse-jdbc-bridge & + + * [CentOS/RHEL] + export MVN_URL=https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc-bridge/ + export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '' | sed -e 's|.*>\(.*\)<.*|\1|') + wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm + yum localinstall -y clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm + clickhouse-jdbc-bridge & + + Please refer to https://github.com/ClickHouse/clickhouse-jdbc-bridge#usage for more information. + ]]> + + + + + + + + + + + + + + + + localhost + 9000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3600 + + + + 3600 + + + 60 + + + + + + + + + + + + + system + query_log
+ + toYYYYMM(event_date) + + + + + + + + 7500 + + 1048576 + + 8192 + + 524288 + + false + + + +
+ + + + system + trace_log
+ + toYYYYMM(event_date) + 7500 + 1048576 + 8192 + 524288 + + false + true +
+ + + + system + query_thread_log
+ toYYYYMM(event_date) + 7500 + 1048576 + 8192 + 524288 + false +
+ + + + system + query_views_log
+ toYYYYMM(event_date) + 7500 +
+ + + + system + part_log
+ toYYYYMM(event_date) + 7500 + 1048576 + 8192 + 524288 + false +
+ + + + system + text_log
+ 7500 + 1048576 + 8192 + 524288 + false + trace +
+ + + + system + metric_log
+ 7500 + 1048576 + 8192 + 524288 + 1000 + false +
+ + + + system + latency_log
+ 7500 + 1048576 + 8192 + 524288 + 1000 + false +
+ + + + system + error_log
+ 7500 + 1048576 + 8192 + 524288 + 1000 + false +
+ + + + system + query_metric_log
+ 7500 + 1048576 + 8192 + 524288 + 1000 + false +
+ + + + system + asynchronous_metric_log
+ 7000 + 1048576 + 8192 + 524288 + false +
+ + + + + + engine MergeTree + partition by toYYYYMM(finish_date) + order by (finish_date, finish_time_us, trace_id) + + system + opentelemetry_span_log
+ 7500 + 1048576 + 8192 + 524288 + false +
+ + + + + system + crash_log
+ + + 1000 + 1024 + 1024 + 512 + true +
+ + + + + + + system + processors_profile_log
+ + toYYYYMM(event_date) + 7500 + 1048576 + 8192 + 524288 + false + event_date + INTERVAL 30 DAY DELETE +
+ + + + system + asynchronous_insert_log
+ + 7500 + 1048576 + 8192 + 524288 + false + event_date + event_date + INTERVAL 3 DAY +
+ + + + system + backup_log
+ toYYYYMM(event_date) + 7500 +
+ + + + system + s3queue_log
+ toYYYYMM(event_date) + 7500 +
+ + + + system + blob_storage_log
+ toYYYYMM(event_date) + 7500 + event_date + INTERVAL 30 DAY +
+ + + + + + + + + + + + + *_dictionary.*ml + + + true + + + true + + + *_function.*ml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /clickhouse/task_queue/ddl + + /clickhouse/task_queue/replicas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + click_cost + any + + 0 + 3600 + + + 86400 + 60 + + + + max + + 0 + 60 + + + 3600 + 300 + + + 86400 + 3600 + + + + + + /var/lib/clickhouse/format_schemas/ + + + /usr/share/clickhouse/protos/ + + + + + + + + + + false + + false + + + https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277 + + false + + + + + + + + + + + + + + + + + + + + + + + + + + backups + + + true + + + + + + + + + + + +
diff --git a/conf/users.xml b/conf/users.xml new file mode 100644 index 0000000..d44f528 --- /dev/null +++ b/conf/users.xml @@ -0,0 +1,10 @@ + + + + + ::/0 + + + + + diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..f33057b --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,29 @@ +version: '3' +services: + agx_app: + build: + context: . + dockerfile: Dockerfile + args: + - CLICKHOUSE_URL=http://localhost:8123?default_format=JSON + ports: + - '8080:80' + depends_on: + clickhouse: + condition: service_healthy + clickhouse: + image: clickhouse/clickhouse-server:latest + ports: + - '8123:8123' + - '9000:9000' + volumes: + - clickhouse_data:/var/lib/clickhouse + - ./conf/config.xml:/etc/clickhouse-server/config.d/config.xml + - ./conf/users.xml:/etc/clickhouse-server/users.d/users.xml + healthcheck: + test: wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1 + interval: 3s + timeout: 5s + retries: 5 +volumes: + clickhouse_data: diff --git a/src/lib/olap-engine/engine-remote.ts b/src/lib/olap-engine/engine-remote.ts index 70b2b51..3da2d5b 100644 --- a/src/lib/olap-engine/engine-remote.ts +++ b/src/lib/olap-engine/engine-remote.ts @@ -9,8 +9,7 @@ export class RemoteEngine extends InternalEventEmitter implements OLAPEn async exec(query: string, _emit = true) { try { - const proxy = - new URLSearchParams(window.location.search).get('proxy') ?? 'https://proxy.agx.app/query'; + const proxy = new URLSearchParams(window.location.search).get('proxy') ?? CLICKHOUSE_URL; const response = await fetch(proxy, { method: 'POST', body: query }); const r = await response.text(); diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 2be3f9d..6ef483b 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1,3 +1,5 @@ declare const PLATFORM: 'NATIVE' | 'WEB'; declare const BUILD: string; +declare const CLICKHOUSE_URL: string; + type MaybePromise = T | Promise; diff --git a/vite.config.js b/vite.config.js index dab7f81..f5fcda3 100644 --- a/vite.config.js +++ b/vite.config.js @@ -22,6 +22,7 @@ export default defineConfig(async () => ({ exclude: ['@sqlite.org/sqlite-wasm'] }, define: { + CLICKHOUSE_URL: JSON.stringify(process.env.CLICKHOUSE_URL || 'https://proxy.agx.app/query'), PLATFORM: JSON.stringify(process.env.PLATFORM || 'NATIVE'), BUILD: JSON.stringify( (process.env.CF_PAGES_COMMIT_SHA || process.env.COMMIT_SHA || 'dev').slice(0, 7)