feat: run.sh restart/stop/status + real DB connector + GitLab CI

1. run.sh: start/stop/restart/status/logs/build/test
   - PID file management in .pids/
   - Colored output, health check wait, log files
   - Auto alembic migrate on start

2. DB Connector (replaces mock aiomysql):
   - MySQL: aiomysql (connect/query/dml/test)
   - PostgreSQL: asyncpg (connect/query/dml/test)
   - SQLite: sqlite3 via executor (connect/query/dml/test)
   - Unified interface: DBConnector.test_connection/execute_query/execute_dml
   - Connection test returns version + latency

3. GitLab CI/CD pipeline:
   - test: backend pytest + frontend build
   - build: Docker images (manual trigger)
   - deploy: SSH deploy (manual trigger)
   - Cache: pip + node_modules

Tests: 128 passing, frontend build: OK
This commit is contained in:
logan committed 2026-05-22 15:16:59 +08:00
1 parent 64e0c37972
commit 2cfd45c9d1
10 files changed
+712 -126

No files matched your search

+2 -11
View File
@@ -129,17 +129,8 @@ async def test_connection(
raise HTTPException(status_code=404, detail="数据源不存在")
# Decrypt password for connection test
from app.models.instance import Instance as InstModel
decrypted = instance.__class__(
name=instance.name, db_type=instance.db_type, host=instance.host,
port=instance.port, username=instance.username,
password=decrypt_password(instance.password),
database=instance.database, env=instance.env,
description=instance.description, status=instance.status,
version=instance.version,
)
decrypted.id = instance.id
return await InstanceService.test_connection(decrypted)
instance.password = decrypt_password(instance.password)
return await InstanceService.test_connection(instance)
@router.get("/{instance_id}/databases")