pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
유입변압기의 수소가스·메탄가스·절연유 유면·온도를 실시간으로 감시하고, 임계치와 복합 판정 규칙에 따라 이상 등급을 산출하는 웹 대시보드입니다. 외부 서비스 의존 없이 EC2 한 대에서 전부 동작합니다. (Next.js + PostgreSQL) 최초 가입자는 자동으로 관리자가 되며, 이후 가입자는 모두 뷰어입니다. lib/thresholds.ts 가 센서 하나의 값을 히스테리시스로 판정하고, lib/alarmEngine.ts 가 그 결과를 모아 설비의 최종 등급을 냅니다. 1. 수소·메탄·온도는 임계치로, 유면은 정상/낮음 범주로 각각 개별 등급을 매깁니다. 2. 그중 가장 높은 등급을 기본 등급으로 삼습니다. 3. 복합 판정 — 동시에 이상인 센서 수가 기준(기본 2개) 이상이면 한 단계 격상합니다. 온도와 수소가 각각 "주의" 수준이어도 동시에 발생하면 "경고"가 됩니다. 4. 마지막 수신 후 설정된 시간(기본 15분, 전송 주기 5분 × 3회)이 지나면 통신단절입니다.檢視完整 README ↗
유입변압기의 수소가스·메탄가스·절연유 유면·온도를 실시간으로 감시하고, 임계치와 복합 판정 규칙에 따라 이상 등급을 산출하는 웹 대시보드입니다.
외부 서비스 의존 없이 EC2 한 대에서 전부 동작합니다. (Next.js + PostgreSQL)
현장 센서 ──RS-485(Modbus RTU)──> 브릿지 보드
──MQTT over TLS(8883)──> EC2
├─ MQTT 브로커 + 수집 서버
├─ PostgreSQL
└─ nginx → Next.js (이 저장소)
| 계층 | 기술 |
|---|---|
| 프런트/서버 | Next.js 14 (App Router), React 18, TypeScript |
| 데이터베이스 | PostgreSQL 16 (pg 드라이버, ORM 미사용) |
| 인증 | 자체 구현 — scrypt 해시 + 서버 세션 + HMAC 서명 쿠키 |
| 실시간 | PostgreSQL LISTEN/NOTIFY → Server-Sent Events |
| 배포 | PM2 + nginx (EC2) |
# PostgreSQL 준비
createdb dhsmartpower
cp .env.example .env.local
# DATABASE_URL 을 채우고, AUTH_SECRET 은 아래 명령으로 생성해 넣습니다.
# openssl rand -base64 48
# 로컬(HTTP)에서는 COOKIE_SECURE=false 여야 쿠키가 저장됩니다.
npm install
npm run db:schema # 스키마 반영 (반복 실행 안전)
psql "$DATABASE_URL" -f db/seed.sql # (선택) 설비 10대 등록
npm run create-admin # 관리자 계정 생성
npm run dev
| 경로 | 설명 | 권한 |
|---|---|---|
/ | 대시보드 — 설비 현황, 상태 필터, 상세 확장, 알람 이력 | 로그인 |
/settings | 센서 임계치, 복합 판정 규칙, 설비 등록 | 관리자 |
/admin | 회원 등급 관리, 로그인 이력 | 관리자 |
/login, /signup | 로그인 / 회원가입 | 공개 |
최초 가입자는 자동으로 관리자가 되며, 이후 가입자는 모두 뷰어입니다.
lib/thresholds.ts 가 센서 하나의 값을 히스테리시스로 판정하고,
lib/alarmEngine.ts 가 그 결과를 모아 설비의 최종 등급을 냅니다.
히스테리시스의 이전 상태는 반드시 센서별로 보관해야 합니다. 설비의 종합 등급을
각 센서에 복사해 넣으면 한 센서의 이상이 다른 센서의 판정을 오염시킵니다.
evaluateDevice() 가 돌려주는 sensorLevels 를 그대로 다음 호출에 넘기세요.
수집 서버(MQTT)는 다음 두 테이블에만 씁니다.
| 테이블 | 용도 |
|---|---|
telemetry | 원본 계측 이력. (device_id, measured_at) 유일 제약이 QoS 1 중복 수신을 걸러냅니다. |
device_readings | 설비별 최신값. upsert 하면 트리거가 NOTIFY 를 발생시킵니다. |
NOTIFY → /api/stream(SSE) → 브라우저 순으로 전달되며, 판정은 클라이언트에서
수행되므로 설정 화면에서 임계치를 바꾸면 즉시 반영됩니다.
설정을 저장하면 app_config.version 이 올라갑니다. 수집 서버가 이 값을 감지해
각 브릿지로 MQTT set_config 명령을 내려보내는 구조입니다.
# Ubuntu 24.04 인스턴스에서 (t3.small 이상 권장)
curl -fsSL https://raw.githubusercontent.com/youbro0210/dh-smartpower-dashboard/main/deploy/provision.sh -o provision.sh
sudo bash provision.sh monitor.회사도메인.com
스왑 구성, Node 20 · PostgreSQL 16 · nginx · PM2 설치, DB 생성, 스키마 반영, 빌드, 기동, 방화벽 설정까지 한 번에 수행합니다.
이후 재배포는 ./deploy/deploy.sh 입니다.
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d monitor.회사도메인.com
발급 후 .env.local 의 COOKIE_SECURE=true 로 바꾸고 npm run build && pm2 reload dh-dashboard.
deploy/nginx.conf 의
/api/stream 블록에 proxy_buffering off 가 있습니다.AUTH_SECRET 을 바꾸면 기존 로그인 세션이 전부 무효화됩니다.