fix(backend): P2 config & Docker consistency
Resolve the operational/config sprawl (#10-#14 from the review): the app read NORMOGEN_*/MONGODB_* env vars but every env/compose file set SERVER_*/DATABASE_*, the ports were all over the place (8080/8000/6500/6800), there were 5 inconsistent Dockerfiles (rust:1.82 vs rust:1.93, missing curl), and an 18 MB binary was committed. Env-var names — standardize on what the code reads: * config/mod.rs: NORMOGEN_PORT default 8080 -> 6500 (avoid the over-common 8000/8080). * db/mod.rs: create_database() now reads MONGODB_DATABASE (was DATABASE_NAME). * .env.example, defaults.env, docker-compose.yml, docker-compose.dev.yml, DEPLOYMENT_GUIDE.md, deployment/README.md, deploy-and-test-solaria.sh, deploy-local-build.sh: use NORMOGEN_HOST/NORMOGEN_PORT/MONGODB_URI/ MONGODB_DATABASE/APP_ENVIRONMENT; drop the dead SERVER_*/DATABASE_URI/ DATABASE_NAME names. Ports — canonical container port 6500 everywhere: * Both Dockerfiles EXPOSE 6500; prod compose maps 6500:6500, dev 6501:6500. * Bulk-replaced the long tail of solaria:8000/localhost:8000/localhost:8080 in docs and test scripts -> 6500. Dockerfiles — 2 canonical, rust:latest, curl + healthcheck: * backend/Dockerfile (prod): rust:latest builder, debian runtime now installs curl (so the compose HEALTHCHECK actually works), EXPOSE 6500. * backend/docker/Dockerfile.dev (dev): rust:latest both stages, EXPOSE 6500. * Deleted 3 redundant Dockerfiles (Dockerfile.improved x2, docker/Dockerfile). * Deleted the committed 18 MB binary backend/docker/normogen-backend. * Deleted 2 stray fix-notes in backend/docker/. Compose: * docker-compose.yml: correct env names, 6500:6500, APP_ENVIRONMENT=production, JWT_SECRET/ENCRYPTION_KEY required via compose interpolation, dropped the obsolete top-level version: key. * docker-compose.dev.yml: correct env names, 6501:6500, mongo:7 (was 6.0), added a working backend healthcheck. * Deleted docker/docker-compose.improved.yml + backend/deploy-to-solaria-improved.sh (built around the now-deleted 'improved' Docker files). Verified: cargo fmt --check clean, build + clippy --all-targets clean, 18 unit tests pass; grep confirms no SERVER_*/DATABASE_* env names and no rust:1.x tags remain outside docs/archive and docs/adr (historical).
This commit is contained in:
parent
17efc4f656
commit
fff1ed2e6d
31 changed files with 115 additions and 553 deletions
|
|
@ -322,7 +322,7 @@ docker compose up -d
|
|||
docker compose logs -f backend
|
||||
|
||||
# Check health
|
||||
curl http://localhost:8000/health
|
||||
curl http://localhost:6500/health
|
||||
```
|
||||
|
||||
#### Production (Solaria)
|
||||
|
|
|
|||
|
|
@ -83,19 +83,19 @@ docker-compose logs -f backend
|
|||
|
||||
### Base URL
|
||||
```
|
||||
http://solaria:8000
|
||||
http://solaria:6500
|
||||
```
|
||||
|
||||
### Public Endpoints (No Auth)
|
||||
|
||||
#### Health Check
|
||||
```bash
|
||||
curl http://solaria:8000/health
|
||||
curl http://solaria:6500/health
|
||||
```
|
||||
|
||||
#### Register
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/auth/register \
|
||||
curl -X POST http://solaria:6500/api/auth/register \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "test@example.com",
|
||||
|
|
@ -106,7 +106,7 @@ curl -X POST http://solaria:8000/api/auth/register \
|
|||
|
||||
#### Login
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/auth/login \
|
||||
curl -X POST http://solaria:6500/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "test@example.com",
|
||||
|
|
@ -116,7 +116,7 @@ curl -X POST http://solaria:8000/api/auth/login \
|
|||
|
||||
#### Set Recovery Phrase
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/auth/set-recovery-phrase \
|
||||
curl -X POST http://solaria:6500/api/auth/set-recovery-phrase \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "test@example.com",
|
||||
|
|
@ -126,7 +126,7 @@ curl -X POST http://solaria:8000/api/auth/set-recovery-phrase \
|
|||
|
||||
#### Recover Password
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/auth/recover-password \
|
||||
curl -X POST http://solaria:6500/api/auth/recover-password \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "test@example.com",
|
||||
|
|
@ -139,13 +139,13 @@ curl -X POST http://solaria:8000/api/auth/recover-password \
|
|||
|
||||
#### Get Profile
|
||||
```bash
|
||||
curl http://solaria:8000/api/users/me \
|
||||
curl http://solaria:6500/api/users/me \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Update Profile
|
||||
```bash
|
||||
curl -X PUT http://solaria:8000/api/users/me \
|
||||
curl -X PUT http://solaria:6500/api/users/me \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -155,13 +155,13 @@ curl -X PUT http://solaria:8000/api/users/me \
|
|||
|
||||
#### Get Settings
|
||||
```bash
|
||||
curl http://solaria:8000/api/users/me/settings \
|
||||
curl http://solaria:6500/api/users/me/settings \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Update Settings
|
||||
```bash
|
||||
curl -X PUT http://solaria:8000/api/users/me/settings \
|
||||
curl -X PUT http://solaria:6500/api/users/me/settings \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -171,7 +171,7 @@ curl -X PUT http://solaria:8000/api/users/me/settings \
|
|||
|
||||
#### Change Password
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/users/me/change-password \
|
||||
curl -X POST http://solaria:6500/api/users/me/change-password \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -182,7 +182,7 @@ curl -X POST http://solaria:8000/api/users/me/change-password \
|
|||
|
||||
#### Delete Account
|
||||
```bash
|
||||
curl -X DELETE http://solaria:8000/api/users/me \
|
||||
curl -X DELETE http://solaria:6500/api/users/me \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
"confirmation": "DELETE_ACCOUNT"
|
||||
|
|
@ -191,7 +191,7 @@ curl -X DELETE http://solaria:8000/api/users/me \
|
|||
|
||||
#### Create Share
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/shares \
|
||||
curl -X POST http://solaria:6500/api/shares \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -204,13 +204,13 @@ curl -X POST http://solaria:8000/api/shares \
|
|||
|
||||
#### List Shares
|
||||
```bash
|
||||
curl http://solaria:8000/api/shares \
|
||||
curl http://solaria:6500/api/shares \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Update Share
|
||||
```bash
|
||||
curl -X PUT http://solaria:8000/api/shares/SHARE_ID \
|
||||
curl -X PUT http://solaria:6500/api/shares/SHARE_ID \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -220,13 +220,13 @@ curl -X PUT http://solaria:8000/api/shares/SHARE_ID \
|
|||
|
||||
#### Delete Share
|
||||
```bash
|
||||
curl -X DELETE http://solaria:8000/api/shares/SHARE_ID \
|
||||
curl -X DELETE http://solaria:6500/api/shares/SHARE_ID \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Check Permission
|
||||
```bash
|
||||
curl -X POST http://solaria:8000/api/permissions/check \
|
||||
curl -X POST http://solaria:6500/api/permissions/check \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
||||
-d '{
|
||||
|
|
@ -237,19 +237,19 @@ curl -X POST http://solaria:8000/api/permissions/check \
|
|||
|
||||
#### Get Sessions (NEW)
|
||||
```bash
|
||||
curl http://solaria:8000/api/sessions \
|
||||
curl http://solaria:6500/api/sessions \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Revoke Session (NEW)
|
||||
```bash
|
||||
curl -X DELETE http://solaria:8000/api/sessions/SESSION_ID \
|
||||
curl -X DELETE http://solaria:6500/api/sessions/SESSION_ID \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
#### Revoke All Sessions (NEW)
|
||||
```bash
|
||||
curl -X DELETE http://solaria:8000/api/sessions/all \
|
||||
curl -X DELETE http://solaria:6500/api/sessions/all \
|
||||
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
|
||||
```
|
||||
|
||||
|
|
@ -309,8 +309,9 @@ JWT_SECRET=your-super-secret-jwt-key-min-32-chars
|
|||
MONGODB_URI=mongodb://mongodb:27017
|
||||
MONGODB_DATABASE=normogen
|
||||
RUST_LOG=info
|
||||
SERVER_PORT=8000
|
||||
SERVER_HOST=0.0.0.0
|
||||
NORMOGEN_PORT=6500
|
||||
NORMOGEN_HOST=0.0.0.0
|
||||
APP_ENVIRONMENT=production
|
||||
```
|
||||
|
||||
## Security Features (Phase 2.6)
|
||||
|
|
|
|||
|
|
@ -34,16 +34,17 @@ docker compose up -d
|
|||
|
||||
### Environment Configuration
|
||||
Required environment variables:
|
||||
- `DATABASE_URI` - MongoDB connection string
|
||||
- `DATABASE_NAME` - Database name
|
||||
- `MONGODB_URI` - MongoDB connection string
|
||||
- `MONGODB_DATABASE` - Database name
|
||||
- `JWT_SECRET` - JWT signing secret (min 32 chars)
|
||||
- `SERVER_HOST` - Server host (default: 0.0.0.0)
|
||||
- `SERVER_PORT` - Server port (default: 8080)
|
||||
- `NORMOGEN_HOST` - Server host (default: 0.0.0.0)
|
||||
- `NORMOGEN_PORT` - Server port (default: 6500)
|
||||
- `APP_ENVIRONMENT` - `development` (default) or `production`
|
||||
- `RUST_LOG` - Log level (debug/info/warn)
|
||||
|
||||
### Health Check
|
||||
```bash
|
||||
curl http://localhost:8000/health
|
||||
curl http://localhost:6500/health
|
||||
```
|
||||
|
||||
## 🌐 Deployment Environments
|
||||
|
|
|
|||
12
docs/deployment/deploy-and-test-solaria.sh
Executable file → Normal file
12
docs/deployment/deploy-and-test-solaria.sh
Executable file → Normal file
|
|
@ -25,12 +25,12 @@ if pgrep -f "normogen-backend" > /dev/null; then
|
|||
sleep 2
|
||||
fi
|
||||
|
||||
# Set environment
|
||||
export DATABASE_URI="mongodb://localhost:27017"
|
||||
export DATABASE_NAME="normogen"
|
||||
# Set environment (the app reads NORMOGEN_* / MONGODB_* / APP_ENVIRONMENT)
|
||||
export MONGODB_URI="mongodb://localhost:27017"
|
||||
export MONGODB_DATABASE="normogen"
|
||||
export JWT_SECRET="test-secret-key"
|
||||
export SERVER_HOST="0.0.0.0"
|
||||
export SERVER_PORT="8080"
|
||||
export NORMOGEN_HOST="0.0.0.0"
|
||||
export NORMOGEN_PORT="6500"
|
||||
export RUST_LOG="debug"
|
||||
|
||||
# Build
|
||||
|
|
@ -54,7 +54,7 @@ fi
|
|||
# Health check
|
||||
echo ""
|
||||
echo "Health check..."
|
||||
curl -s http://localhost:8080/health
|
||||
curl -s http://localhost:6500/health
|
||||
|
||||
ENDSSH
|
||||
|
||||
|
|
|
|||
10
docs/deployment/deploy-local-build.sh
Executable file → Normal file
10
docs/deployment/deploy-local-build.sh
Executable file → Normal file
|
|
@ -46,11 +46,11 @@ ENDSSH
|
|||
echo ""
|
||||
echo "Step 5: Starting backend on Solaria..."
|
||||
ssh alvaro@solaria bash << 'ENDSSH'
|
||||
export DATABASE_URI="mongodb://localhost:27017"
|
||||
export DATABASE_NAME="normogen"
|
||||
export MONGODB_URI="mongodb://localhost:27017"
|
||||
export MONGODB_DATABASE="normogen"
|
||||
export JWT_SECRET="production-secret-key"
|
||||
export SERVER_HOST="0.0.0.0"
|
||||
export SERVER_PORT="8080"
|
||||
export NORMOGEN_HOST="0.0.0.0"
|
||||
export NORMOGEN_PORT="6500"
|
||||
export RUST_LOG="normogen_backend=debug,tower_http=debug,axum=debug"
|
||||
|
||||
nohup ~/normogen-backend > ~/normogen-backend.log 2>&1 &
|
||||
|
|
@ -68,7 +68,7 @@ fi
|
|||
echo ""
|
||||
echo "Testing health endpoint..."
|
||||
sleep 2
|
||||
curl -s http://localhost:8080/health
|
||||
curl -s http://localhost:6500/health
|
||||
echo ""
|
||||
|
||||
ENDSSH
|
||||
|
|
|
|||
|
|
@ -61,6 +61,6 @@ echo "========================================="
|
|||
echo "Deployment complete!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "API is available at: http://solaria:8000"
|
||||
echo "Health check: http://solaria:8000/health"
|
||||
echo "API is available at: http://solaria:6500"
|
||||
echo "Health check: http://solaria:6500/health"
|
||||
echo ""
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ Response (with disclaimer)
|
|||
|
||||
```bash
|
||||
# Check interactions
|
||||
curl -X POST http://localhost:8080/api/interactions/check \
|
||||
curl -X POST http://localhost:6500/api/interactions/check \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ pub struct Medication {
|
|||
**Example: Parent managing child's medication**:
|
||||
```bash
|
||||
# Create medication for child's profile
|
||||
curl -X POST http://localhost:8000/api/medications \
|
||||
curl -X POST http://localhost:6500/api/medications \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{
|
||||
"name": "Amoxicillin",
|
||||
|
|
@ -292,12 +292,12 @@ curl -X POST http://localhost:8000/api/medications \
|
|||
}'
|
||||
|
||||
# Log dose for child
|
||||
curl -X POST http://localhost:8000/api/medications/{id}/log \
|
||||
curl -X POST http://localhost:6500/api/medications/{id}/log \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"profile_id": "child_profile_123"}'
|
||||
|
||||
# View child's adherence
|
||||
curl http://localhost:8000/api/medications/{id}/adherence?profile_id=child_profile_123 \
|
||||
curl http://localhost:6500/api/medications/{id}/adherence?profile_id=child_profile_123 \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@ cd backend
|
|||
docker compose up -d
|
||||
|
||||
# Check health
|
||||
curl http://localhost:8000/health
|
||||
curl http://localhost:6500/health
|
||||
```
|
||||
|
||||
#### 2. Access the API
|
||||
The backend API will be available at `http://localhost:8000`
|
||||
The backend API will be available at `http://localhost:6500`
|
||||
|
||||
### For Developers
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
BASE_URL="http://solaria:8000/api"
|
||||
BASE_URL="http://solaria:6500/api"
|
||||
EMAIL="test@normogen.com"
|
||||
PASSWORD="TestPassword123!"
|
||||
NEW_PASSWORD="NewPassword456!"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue