Rename fittracker to milevault throughout
This commit is contained in:
@@ -0,0 +1,83 @@
|
|||||||
|
name: Build and push images
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch: # allow manual trigger from Gitea UI
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: ${{ vars.GITEA_URL }} # e.g. gitea.yourdomain.com — set in repo Settings → Variables
|
||||||
|
OWNER: ${{ gitea.repository_owner }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-backend:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Gitea registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.PACKAGE_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push backend
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: ./backend
|
||||||
|
file: ./backend/Dockerfile
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-backend:latest
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-backend:${{ gitea.sha }}
|
||||||
|
|
||||||
|
build-worker:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Gitea registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.PACKAGE_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push worker
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: ./backend
|
||||||
|
file: ./backend/Dockerfile.worker
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-worker:latest
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-worker:${{ gitea.sha }}
|
||||||
|
|
||||||
|
build-frontend:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Gitea registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ gitea.actor }}
|
||||||
|
password: ${{ secrets.PACKAGE_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push frontend
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: ./frontend
|
||||||
|
file: ./frontend/Dockerfile
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-frontend:latest
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/milevault-frontend:${{ gitea.sha }}
|
||||||
|
build-args: |
|
||||||
|
VITE_API_URL=/api
|
||||||
|
VITE_MAPBOX_TOKEN=
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# FitTracker
|
# MileVault
|
||||||
|
|
||||||
Self-hosted fitness tracking — Garmin & Strava import, maps, health trends, personal records.
|
Self-hosted fitness tracking — Garmin & Strava import, maps, health trends, personal records.
|
||||||
|
|
||||||
@@ -6,14 +6,14 @@ Self-hosted fitness tracking — Garmin & Strava import, maps, health trends, pe
|
|||||||
|
|
||||||
## For users — deploy with two files
|
## For users — deploy with two files
|
||||||
|
|
||||||
Once this repo is pushed to Gitea and the Actions workflow has run once, anyone on your network only needs **two files** to run FitTracker. No source code, no cloning.
|
Once this repo is pushed to Gitea and the Actions workflow has run once, anyone on your network only needs **two files** to run MileVault. No source code, no cloning.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir fittracker && cd fittracker
|
mkdir milevault && cd milevault
|
||||||
|
|
||||||
# Download the two deployment files
|
# Download the two deployment files
|
||||||
curl -O https://gitea.yourdomain.com/yourusername/fittracker/raw/branch/main/docker-compose.deploy.yml
|
curl -O https://gitea.yourdomain.com/yourusername/milevault/raw/branch/main/docker-compose.deploy.yml
|
||||||
curl -O https://gitea.yourdomain.com/yourusername/fittracker/raw/branch/main/nginx.conf
|
curl -O https://gitea.yourdomain.com/yourusername/milevault/raw/branch/main/nginx.conf
|
||||||
|
|
||||||
# Start (images pulled automatically from your Gitea registry)
|
# Start (images pulled automatically from your Gitea registry)
|
||||||
docker compose -f docker-compose.deploy.yml up -d
|
docker compose -f docker-compose.deploy.yml up -d
|
||||||
@@ -82,7 +82,7 @@ In your repo: **Settings → Variables → Actions → Add Variable**
|
|||||||
### 5. Push the repo
|
### 5. Push the repo
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git remote add origin https://gitea.yourdomain.com/yourusername/fittracker.git
|
git remote add origin https://gitea.yourdomain.com/yourusername/milevault.git
|
||||||
git push -u origin main
|
git push -u origin main
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ async def lifespan(app: FastAPI):
|
|||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="FitTracker",
|
title="MileVault",
|
||||||
version="1.0.0",
|
version="1.0.0",
|
||||||
lifespan=lifespan,
|
lifespan=lifespan,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from celery import Celery
|
|||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
|
||||||
celery_app = Celery(
|
celery_app = Celery(
|
||||||
"fittracker",
|
"milevault",
|
||||||
broker=settings.redis_url,
|
broker=settings.redis_url,
|
||||||
backend=settings.redis_url,
|
backend=settings.redis_url,
|
||||||
)
|
)
|
||||||
|
|||||||
+20
-20
@@ -1,6 +1,6 @@
|
|||||||
version: "3.9"
|
version: "3.9"
|
||||||
|
|
||||||
# FitTracker — standalone deployment
|
# MileVault — standalone deployment
|
||||||
#
|
#
|
||||||
# 1. Copy this file somewhere on your server (no other files needed)
|
# 1. Copy this file somewhere on your server (no other files needed)
|
||||||
# 2. Run: docker compose up -d
|
# 2. Run: docker compose up -d
|
||||||
@@ -16,16 +16,16 @@ x-registry: ®istry gitea.yourdomain.com/yourusername
|
|||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: timescale/timescaledb:latest-pg16
|
image: timescale/timescaledb:latest-pg16
|
||||||
container_name: fittracker_db
|
container_name: milevault_db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: fittracker
|
POSTGRES_DB: milevault
|
||||||
POSTGRES_USER: ${DB_USER:-fittracker}
|
POSTGRES_USER: ${DB_USER:-milevault}
|
||||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-fittracker}
|
POSTGRES_PASSWORD: ${DB_PASSWORD:-milevault}
|
||||||
volumes:
|
volumes:
|
||||||
- db_data:/var/lib/postgresql/data
|
- db_data:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-fittracker} -d fittracker"]
|
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-milevault} -d milevault"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 10
|
retries: 10
|
||||||
@@ -33,25 +33,25 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:7-alpine
|
||||||
container_name: fittracker_redis
|
container_name: milevault_redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: redis-server --requirepass ${REDIS_PASSWORD:-fittracker}
|
command: redis-server --requirepass ${REDIS_PASSWORD:-milevault}
|
||||||
volumes:
|
volumes:
|
||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-fittracker}", "ping"]
|
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-milevault}", "ping"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
start_period: 10s
|
start_period: 10s
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
image: gitea.yourdomain.com/yourusername/fittracker-backend:latest
|
image: gitea.yourdomain.com/yourusername/milevault-backend:latest
|
||||||
container_name: fittracker_backend
|
container_name: milevault_backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://${DB_USER:-fittracker}:${DB_PASSWORD:-fittracker}@db:5432/fittracker
|
DATABASE_URL: postgresql+asyncpg://${DB_USER:-milevault}:${DB_PASSWORD:-milevault}@db:5432/milevault
|
||||||
REDIS_URL: redis://:${REDIS_PASSWORD:-fittracker}@redis:6379/0
|
REDIS_URL: redis://:${REDIS_PASSWORD:-milevault}@redis:6379/0
|
||||||
SECRET_KEY: ${SECRET_KEY:-changeme_run_openssl_rand_hex_32}
|
SECRET_KEY: ${SECRET_KEY:-changeme_run_openssl_rand_hex_32}
|
||||||
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
||||||
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin}
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin}
|
||||||
@@ -75,12 +75,12 @@ services:
|
|||||||
start_period: 30s
|
start_period: 30s
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
image: gitea.yourdomain.com/yourusername/fittracker-worker:latest
|
image: gitea.yourdomain.com/yourusername/milevault-worker:latest
|
||||||
container_name: fittracker_worker
|
container_name: milevault_worker
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://${DB_USER:-fittracker}:${DB_PASSWORD:-fittracker}@db:5432/fittracker
|
DATABASE_URL: postgresql+asyncpg://${DB_USER:-milevault}:${DB_PASSWORD:-milevault}@db:5432/milevault
|
||||||
REDIS_URL: redis://:${REDIS_PASSWORD:-fittracker}@redis:6379/0
|
REDIS_URL: redis://:${REDIS_PASSWORD:-milevault}@redis:6379/0
|
||||||
SECRET_KEY: ${SECRET_KEY:-changeme_run_openssl_rand_hex_32}
|
SECRET_KEY: ${SECRET_KEY:-changeme_run_openssl_rand_hex_32}
|
||||||
FILE_STORE_PATH: /data/files
|
FILE_STORE_PATH: /data/files
|
||||||
volumes:
|
volumes:
|
||||||
@@ -92,13 +92,13 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: gitea.yourdomain.com/yourusername/fittracker-frontend:latest
|
image: gitea.yourdomain.com/yourusername/milevault-frontend:latest
|
||||||
container_name: fittracker_frontend
|
container_name: milevault_frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:alpine
|
image: nginx:alpine
|
||||||
container_name: fittracker_nginx
|
container_name: milevault_nginx
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "${HTTP_PORT:-80}:80"
|
- "${HTTP_PORT:-80}:80"
|
||||||
|
|||||||
+16
-16
@@ -3,17 +3,17 @@ version: "3.9"
|
|||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: timescale/timescaledb:latest-pg16
|
image: timescale/timescaledb:latest-pg16
|
||||||
container_name: fittracker_db
|
container_name: milevault_db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: fittracker
|
POSTGRES_DB: milevault
|
||||||
POSTGRES_USER: ${DB_USER:-fittracker}
|
POSTGRES_USER: ${DB_USER:-milevault}
|
||||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-fittracker}
|
POSTGRES_PASSWORD: ${DB_PASSWORD:-milevault}
|
||||||
volumes:
|
volumes:
|
||||||
- db_data:/var/lib/postgresql/data
|
- db_data:/var/lib/postgresql/data
|
||||||
- ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
- ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-fittracker} -d fittracker"]
|
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-milevault} -d milevault"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 10
|
retries: 10
|
||||||
@@ -21,13 +21,13 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7-alpine
|
image: redis:7-alpine
|
||||||
container_name: fittracker_redis
|
container_name: milevault_redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: redis-server --requirepass ${REDIS_PASSWORD:-fittracker}
|
command: redis-server --requirepass ${REDIS_PASSWORD:-milevault}
|
||||||
volumes:
|
volumes:
|
||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-fittracker}", "ping"]
|
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-milevault}", "ping"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
@@ -37,11 +37,11 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ./backend
|
context: ./backend
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: fittracker_backend
|
container_name: milevault_backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://${DB_USER:-fittracker}:${DB_PASSWORD:-fittracker}@db:5432/fittracker
|
DATABASE_URL: postgresql+asyncpg://${DB_USER:-milevault}:${DB_PASSWORD:-milevault}@db:5432/milevault
|
||||||
REDIS_URL: redis://:${REDIS_PASSWORD:-fittracker}@redis:6379/0
|
REDIS_URL: redis://:${REDIS_PASSWORD:-milevault}@redis:6379/0
|
||||||
SECRET_KEY: ${SECRET_KEY:-changeme_please_set_in_env_file_32chars}
|
SECRET_KEY: ${SECRET_KEY:-changeme_please_set_in_env_file_32chars}
|
||||||
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
||||||
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin}
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin}
|
||||||
@@ -68,11 +68,11 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ./backend
|
context: ./backend
|
||||||
dockerfile: Dockerfile.worker
|
dockerfile: Dockerfile.worker
|
||||||
container_name: fittracker_worker
|
container_name: milevault_worker
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgresql+asyncpg://${DB_USER:-fittracker}:${DB_PASSWORD:-fittracker}@db:5432/fittracker
|
DATABASE_URL: postgresql+asyncpg://${DB_USER:-milevault}:${DB_PASSWORD:-milevault}@db:5432/milevault
|
||||||
REDIS_URL: redis://:${REDIS_PASSWORD:-fittracker}@redis:6379/0
|
REDIS_URL: redis://:${REDIS_PASSWORD:-milevault}@redis:6379/0
|
||||||
SECRET_KEY: ${SECRET_KEY:-changeme_please_set_in_env_file_32chars}
|
SECRET_KEY: ${SECRET_KEY:-changeme_please_set_in_env_file_32chars}
|
||||||
FILE_STORE_PATH: /data/files
|
FILE_STORE_PATH: /data/files
|
||||||
volumes:
|
volumes:
|
||||||
@@ -90,12 +90,12 @@ services:
|
|||||||
args:
|
args:
|
||||||
VITE_API_URL: ${VITE_API_URL:-/api}
|
VITE_API_URL: ${VITE_API_URL:-/api}
|
||||||
VITE_MAPBOX_TOKEN: ${VITE_MAPBOX_TOKEN:-}
|
VITE_MAPBOX_TOKEN: ${VITE_MAPBOX_TOKEN:-}
|
||||||
container_name: fittracker_frontend
|
container_name: milevault_frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:alpine
|
image: nginx:alpine
|
||||||
container_name: fittracker_nginx
|
container_name: milevault_nginx
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "${HTTP_PORT:-80}:80"
|
- "${HTTP_PORT:-80}:80"
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>FitTracker</title>
|
<title>MileVault</title>
|
||||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "fittracker-frontend",
|
"name": "milevault-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export default function Layout() {
|
|||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
<div className="px-4 py-5 border-b border-gray-800">
|
<div className="px-4 py-5 border-b border-gray-800">
|
||||||
<h1 className="text-lg font-bold text-white tracking-tight">
|
<h1 className="text-lg font-bold text-white tracking-tight">
|
||||||
<span className="text-blue-400">Fit</span>Tracker
|
<span className="text-blue-400">Mile</span>Vault
|
||||||
</h1>
|
</h1>
|
||||||
{user && (
|
{user && (
|
||||||
<p className="text-xs text-gray-500 mt-0.5">@{user.username}</p>
|
<p className="text-xs text-gray-500 mt-0.5">@{user.username}</p>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export default function LoginPage() {
|
|||||||
<div className="w-full max-w-sm">
|
<div className="w-full max-w-sm">
|
||||||
<div className="text-center mb-8">
|
<div className="text-center mb-8">
|
||||||
<h1 className="text-3xl font-bold text-white">
|
<h1 className="text-3xl font-bold text-white">
|
||||||
<span className="text-blue-400">Fit</span>Tracker
|
<span className="text-blue-400">Mile</span>Vault
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-gray-500 mt-2 text-sm">Your personal fitness dashboard</p>
|
<p className="text-gray-500 mt-2 text-sm">Your personal fitness dashboard</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+10
-10
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# FitTracker installer
|
# MileVault installer
|
||||||
# Usage: curl -fsSL https://raw.githubusercontent.com/you/fittracker/main/install.sh | bash
|
# Usage: curl -fsSL https://raw.githubusercontent.com/you/milevault/main/install.sh | bash
|
||||||
# Or: bash install.sh
|
# Or: bash install.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ info "Docker daemon is running"
|
|||||||
|
|
||||||
step "Setting up install directory"
|
step "Setting up install directory"
|
||||||
|
|
||||||
INSTALL_DIR="${FITTRACKER_DIR:-$HOME/fittracker}"
|
INSTALL_DIR="${FITTRACKER_DIR:-$HOME/milevault}"
|
||||||
|
|
||||||
if [ -d "$INSTALL_DIR" ] && [ "$(ls -A "$INSTALL_DIR" 2>/dev/null)" ]; then
|
if [ -d "$INSTALL_DIR" ] && [ "$(ls -A "$INSTALL_DIR" 2>/dev/null)" ]; then
|
||||||
warn "Directory $INSTALL_DIR already exists."
|
warn "Directory $INSTALL_DIR already exists."
|
||||||
@@ -62,7 +62,7 @@ info "Install directory: $INSTALL_DIR"
|
|||||||
|
|
||||||
# ── Download project files ────────────────────────────────────────────────────
|
# ── Download project files ────────────────────────────────────────────────────
|
||||||
|
|
||||||
step "Downloading FitTracker"
|
step "Downloading MileVault"
|
||||||
|
|
||||||
# If we're already inside the repo (files exist), skip download
|
# If we're already inside the repo (files exist), skip download
|
||||||
if [ -f "docker-compose.yml" ]; then
|
if [ -f "docker-compose.yml" ]; then
|
||||||
@@ -70,7 +70,7 @@ if [ -f "docker-compose.yml" ]; then
|
|||||||
else
|
else
|
||||||
# Try git first, fall back to curl
|
# Try git first, fall back to curl
|
||||||
if command -v git >/dev/null 2>&1; then
|
if command -v git >/dev/null 2>&1; then
|
||||||
git clone --depth 1 https://github.com/yourusername/fittracker.git . 2>/dev/null || {
|
git clone --depth 1 https://github.com/yourusername/milevault.git . 2>/dev/null || {
|
||||||
warn "Git clone failed — copying bundled files instead"
|
warn "Git clone failed — copying bundled files instead"
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
@@ -111,7 +111,7 @@ else
|
|||||||
PORT="${FITTRACKER_PORT:-80}"
|
PORT="${FITTRACKER_PORT:-80}"
|
||||||
|
|
||||||
cat > .env << ENV
|
cat > .env << ENV
|
||||||
# FitTracker configuration — generated $(date)
|
# MileVault configuration — generated $(date)
|
||||||
# Edit this file to change settings, then run: docker compose up -d
|
# Edit this file to change settings, then run: docker compose up -d
|
||||||
|
|
||||||
# Admin login
|
# Admin login
|
||||||
@@ -121,7 +121,7 @@ ADMIN_PASSWORD=${ADMIN_PASSWORD}
|
|||||||
# Secrets (auto-generated — do not share)
|
# Secrets (auto-generated — do not share)
|
||||||
SECRET_KEY=${SECRET_KEY}
|
SECRET_KEY=${SECRET_KEY}
|
||||||
DB_PASSWORD=${DB_PASSWORD}
|
DB_PASSWORD=${DB_PASSWORD}
|
||||||
DB_USER=fittracker
|
DB_USER=milevault
|
||||||
REDIS_PASSWORD=${REDIS_PASSWORD}
|
REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||||
|
|
||||||
# Server
|
# Server
|
||||||
@@ -133,7 +133,7 @@ VITE_MAPBOX_TOKEN=
|
|||||||
|
|
||||||
# Optional: PocketID passkey authentication
|
# Optional: PocketID passkey authentication
|
||||||
# POCKETID_ISSUER=https://your-pocketid.example.com
|
# POCKETID_ISSUER=https://your-pocketid.example.com
|
||||||
# POCKETID_CLIENT_ID=fittracker
|
# POCKETID_CLIENT_ID=milevault
|
||||||
# POCKETID_CLIENT_SECRET=
|
# POCKETID_CLIENT_SECRET=
|
||||||
ENV
|
ENV
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ step "Waiting for services to be ready"
|
|||||||
TIMEOUT=120
|
TIMEOUT=120
|
||||||
ELAPSED=0
|
ELAPSED=0
|
||||||
printf " Waiting"
|
printf " Waiting"
|
||||||
while ! docker inspect fittracker_backend 2>/dev/null | grep -q '"healthy"' ; do
|
while ! docker inspect milevault_backend 2>/dev/null | grep -q '"healthy"' ; do
|
||||||
if [ $ELAPSED -ge $TIMEOUT ]; then
|
if [ $ELAPSED -ge $TIMEOUT ]; then
|
||||||
echo ""
|
echo ""
|
||||||
warn "Backend taking longer than expected. Check logs: docker compose logs backend"
|
warn "Backend taking longer than expected. Check logs: docker compose logs backend"
|
||||||
@@ -181,7 +181,7 @@ URL="http://localhost${PORT:+:${PORT}}"
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${GREEN}${BOLD}╔══════════════════════════════════════════╗${NC}"
|
echo -e "${GREEN}${BOLD}╔══════════════════════════════════════════╗${NC}"
|
||||||
echo -e "${GREEN}${BOLD}║ FitTracker is ready! ║${NC}"
|
echo -e "${GREEN}${BOLD}║ MileVault is ready! ║${NC}"
|
||||||
echo -e "${GREEN}${BOLD}╚══════════════════════════════════════════╝${NC}"
|
echo -e "${GREEN}${BOLD}╚══════════════════════════════════════════╝${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " 🌐 Open: ${CYAN}${URL}${NC}"
|
echo -e " 🌐 Open: ${CYAN}${URL}${NC}"
|
||||||
|
|||||||
+9
-9
@@ -6,9 +6,9 @@ cd "$SCRIPT_DIR/.."
|
|||||||
|
|
||||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||||||
|
|
||||||
info() { echo -e "${GREEN}[fittracker]${NC} $*"; }
|
info() { echo -e "${GREEN}[milevault]${NC} $*"; }
|
||||||
warn() { echo -e "${YELLOW}[fittracker]${NC} $*"; }
|
warn() { echo -e "${YELLOW}[milevault]${NC} $*"; }
|
||||||
error() { echo -e "${RED}[fittracker]${NC} $*"; exit 1; }
|
error() { echo -e "${RED}[milevault]${NC} $*"; exit 1; }
|
||||||
|
|
||||||
check_env() {
|
check_env() {
|
||||||
if [ ! -f .env ]; then
|
if [ ! -f .env ]; then
|
||||||
@@ -49,13 +49,13 @@ generate_secrets() {
|
|||||||
|
|
||||||
cmd_start() {
|
cmd_start() {
|
||||||
check_env
|
check_env
|
||||||
info "Starting FitTracker..."
|
info "Starting MileVault..."
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
info "Started! Visit http://localhost:${HTTP_PORT:-80}"
|
info "Started! Visit http://localhost:${HTTP_PORT:-80}"
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_stop() {
|
cmd_stop() {
|
||||||
info "Stopping FitTracker..."
|
info "Stopping MileVault..."
|
||||||
docker compose down
|
docker compose down
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,10 +71,10 @@ cmd_setup() {
|
|||||||
|
|
||||||
cmd_backup() {
|
cmd_backup() {
|
||||||
source .env
|
source .env
|
||||||
BACKUP_FILE="fittracker_backup_$(date +%Y%m%d_%H%M%S).sql"
|
BACKUP_FILE="milevault_backup_$(date +%Y%m%d_%H%M%S).sql"
|
||||||
info "Backing up database to $BACKUP_FILE..."
|
info "Backing up database to $BACKUP_FILE..."
|
||||||
docker compose exec -T db pg_dump \
|
docker compose exec -T db pg_dump \
|
||||||
-U "${DB_USER:-fittracker}" fittracker > "$BACKUP_FILE"
|
-U "${DB_USER:-milevault}" milevault > "$BACKUP_FILE"
|
||||||
info "Backup saved: $BACKUP_FILE"
|
info "Backup saved: $BACKUP_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ cmd_restore() {
|
|||||||
source .env
|
source .env
|
||||||
info "Restoring from $1..."
|
info "Restoring from $1..."
|
||||||
docker compose exec -T db psql \
|
docker compose exec -T db psql \
|
||||||
-U "${DB_USER:-fittracker}" fittracker < "$1"
|
-U "${DB_USER:-milevault}" milevault < "$1"
|
||||||
info "Restore complete"
|
info "Restore complete"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ case "${1:-help}" in
|
|||||||
restore) cmd_restore "${2:-}" ;;
|
restore) cmd_restore "${2:-}" ;;
|
||||||
update) cmd_update ;;
|
update) cmd_update ;;
|
||||||
*)
|
*)
|
||||||
echo "FitTracker management script"
|
echo "MileVault management script"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Usage: $0 <command>"
|
echo "Usage: $0 <command>"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user