Two issues caused DB reset on every deploy: 1. docker-compose.prod.yml used bind mount (./data/postgres) with PostgreSQL 18's incompatible /var/lib/postgresql/data path. 2. The Gitea CI runner shares Docker socket with the host, but ./data/postgres resolves to a temp path inside the runner container. Each deploy creates a fresh workspace, so the bind mount always points to an empty directory on the host. Fix: Use a named Docker volume (same as docker-compose.yml dev config). Named volumes are managed by Docker daemon directly, survive container recreation, and don't depend on working directory resolution. Also fix deploy.yml: remove unnecessary mkdir for data dirs, write backup to /tmp instead of relative path. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Galaxis-Po
Integrated Quant Portfolio Management Application
Tech Stack
- Backend: FastAPI, Python 3.12, SQLAlchemy, PostgreSQL
- Frontend: Next.js 15, React 19, TypeScript, Tailwind CSS
- Infrastructure: Docker, Docker Compose, uv
Development
Prerequisites
- Docker & Docker Compose
- Python 3.12
- Node.js 24
- uv (Python package manager)
Quick Start
# Start all services
docker-compose up -d
# Backend only (development)
cd backend
uv sync
uv run uvicorn app.main:app --reload
# Frontend only (development)
cd frontend
npm install
npm run dev
Project Structure
galaxis-po/
├── backend/ # FastAPI backend
├── frontend/ # Next.js frontend
├── docker-compose.yml
└── docs/plans/ # Implementation plans
Description
Languages
Python
50.6%
TypeScript
48.7%
CSS
0.3%
Dockerfile
0.3%