feat: add deployment script and project README

- deploy.sh: pulls from Gitea, rebuilds and restarts Docker containers
- README.md: setup instructions, env vars, deployment guide

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
CTO (LegalAI)
2026-04-09 07:57:00 +00:00
parent 7dfbc42b8c
commit 38973f2d63
2 changed files with 144 additions and 21 deletions

View File

@@ -1,36 +1,85 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
# StageAI
## Getting Started
WebApp for stage law attorneys (Bühnenrecht). Built with Next.js, PostgreSQL, Meilisearch, and AI-powered contract analysis.
First, run the development server:
## Prerequisites
- Docker & Docker Compose
- Node.js 20+ (for local development)
- Git
## Quick Start (Docker)
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
# Clone the repo
git clone https://mgit.msbls.de/Remmer/StageAI.git
cd StageAI
# Set up environment
cp .env.example .env
# Edit .env with your API keys and secrets
# Start all services
docker compose up -d
# Run database migrations
docker compose exec app npx drizzle-kit push
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
The app will be available at http://localhost:3000.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
## Environment Variables
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
| Variable | Description | Required |
|---|---|---|
| `DATABASE_URL` | PostgreSQL connection string | Yes |
| `NEXTAUTH_URL` | App URL for authentication | Yes |
| `NEXTAUTH_SECRET` | Random secret for session encryption | Yes |
| `AI_PROVIDER` | `anthropic` or `openai` | Yes |
| `ANTHROPIC_API_KEY` | Anthropic API key | If using Anthropic |
| `OPENAI_API_KEY` | OpenAI API key | If using OpenAI |
| `MEILISEARCH_URL` | Meilisearch URL | Yes |
| `MEILISEARCH_API_KEY` | Meilisearch master key | Yes |
## Learn More
## Local Development
To learn more about Next.js, take a look at the following resources:
```bash
npm install
npm run dev
```
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
## Database Migrations
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
Migrations are in the `drizzle/` directory, managed by Drizzle Kit.
## Deploy on Vercel
```bash
# Generate a new migration after schema changes
npx drizzle-kit generate
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
# Apply migrations
npx drizzle-kit push
```
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
## Deployment (VPS)
A deployment script is included for the production VPS:
```bash
# On the VPS (remmer@100.81.230.53):
cd /home/remmer/StageAI
./deploy.sh
```
This pulls the latest code from Gitea and rebuilds the app container. PostgreSQL and Meilisearch containers are kept running.
## Services
| Service | Port | Description |
|---|---|---|
| App (Next.js) | 3000 | Main application |
| PostgreSQL | 5432 | Database |
| Meilisearch | 7700 | Full-text search engine |
## Repository
Source code: https://mgit.msbls.de/Remmer/StageAI

74
deploy.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
set -euo pipefail
# StageAI Deployment Script
# Pulls latest code from Gitea and redeploys via Docker Compose
#
# Usage (on VPS):
# ./deploy.sh # Pull & redeploy
# ./deploy.sh --build-only # Pull & rebuild without restarting
APP_DIR="/home/remmer/StageAI"
PROJECT_NAME="stageai"
REPO_URL="https://mgit.msbls.de/Remmer/StageAI.git"
BRANCH="master"
BUILD_ONLY=false
if [[ "${1:-}" == "--build-only" ]]; then
BUILD_ONLY=true
fi
echo "=== StageAI Deployment ==="
echo "Directory: $APP_DIR"
echo "Branch: $BRANCH"
echo ""
# Navigate to app directory
if [[ ! -d "$APP_DIR" ]]; then
echo "App directory not found. Cloning repo..."
git clone "$REPO_URL" "$APP_DIR"
fi
cd "$APP_DIR"
# Pull latest changes
echo "Pulling latest changes..."
git fetch origin "$BRANCH"
git reset --hard "origin/$BRANCH"
echo "Updated to: $(git log --oneline -1)"
# Rebuild containers
echo ""
echo "Rebuilding containers..."
docker compose -p "$PROJECT_NAME" build --no-cache app
if [[ "$BUILD_ONLY" == true ]]; then
echo ""
echo "Build complete (--build-only mode, skipping restart)."
exit 0
fi
# Restart app container (keep postgres and meilisearch running)
echo ""
echo "Restarting app container..."
docker compose -p "$PROJECT_NAME" up -d app
echo ""
echo "Waiting for app to start..."
sleep 5
# Health check
if curl -sf http://localhost:3000 > /dev/null 2>&1; then
echo "App is running at http://localhost:3000"
else
echo "Warning: App may not be ready yet. Check logs with:"
echo " docker compose -p $PROJECT_NAME logs -f app"
fi
echo ""
echo "=== Deployment complete ==="
echo ""
echo "Useful commands:"
echo " docker compose -p $PROJECT_NAME logs -f app # View app logs"
echo " docker compose -p $PROJECT_NAME ps # Container status"
echo " docker compose -p $PROJECT_NAME restart app # Restart app only"