deploy
This commit is contained in:
210
README-DEPLOYMENT.md
Normal file
210
README-DEPLOYMENT.md
Normal file
@@ -0,0 +1,210 @@
|
||||
# Observation App - Docker Deployment Guide
|
||||
|
||||
This guide provides a complete Docker-based deployment solution for the Observation App with automated database import and image handling.
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
- **observation_app**: Next.js application container
|
||||
- **observation_db**: MongoDB database container
|
||||
- **observation_net**: Private network for container communication
|
||||
|
||||
## 📋 Prerequisites
|
||||
|
||||
- Docker and Docker Compose installed
|
||||
- `.env` file configured
|
||||
- `public/` directory with required files
|
||||
- `public/db/` directory with JSON database files (optional)
|
||||
|
||||
## 🚀 Quick Deployment
|
||||
|
||||
### 1. Prepare Environment
|
||||
|
||||
Ensure you have:
|
||||
```bash
|
||||
# .env file with configuration
|
||||
MONGODB_URI=mongodb://localhost/beanstalk
|
||||
# ... other environment variables
|
||||
|
||||
# public directory structure
|
||||
public/
|
||||
├── observations/ # Image files
|
||||
├── db/ # JSON database files
|
||||
│ ├── indicators.json
|
||||
│ ├── learning_areas.json
|
||||
│ └── observations.json
|
||||
└── ... # Other static files
|
||||
```
|
||||
|
||||
### 2. Deploy
|
||||
|
||||
```bash
|
||||
# Make deployment script executable
|
||||
chmod +x scripts/deploy.sh
|
||||
|
||||
# Run deployment
|
||||
./scripts/deploy.sh
|
||||
```
|
||||
|
||||
The deployment script will:
|
||||
- ✅ Build and start containers
|
||||
- ✅ Wait for database readiness
|
||||
- ✅ Import JSON files from `public/db/` automatically
|
||||
- ✅ Copy images to container
|
||||
- ✅ Perform health checks
|
||||
|
||||
### 3. Access Services
|
||||
|
||||
- **Application**: http://localhost:3000
|
||||
- **Database**: `mongodb://admin:password123@localhost:27017`
|
||||
|
||||
## 🛠️ Management Commands
|
||||
|
||||
### Container Management
|
||||
```bash
|
||||
# View logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Stop services
|
||||
docker-compose down
|
||||
|
||||
# Restart services
|
||||
docker-compose restart
|
||||
|
||||
# Access application container
|
||||
docker-compose exec observation_app sh
|
||||
|
||||
# Access database
|
||||
docker-compose exec observation_db mongosh
|
||||
```
|
||||
|
||||
### Database Operations
|
||||
```bash
|
||||
# Import new JSON file
|
||||
curl -X POST -F "file=@data.json" http://localhost:3000/api/import-json
|
||||
|
||||
# Export database
|
||||
docker-compose exec observation_db mongodump --uri="mongodb://admin:password123@localhost:27017/beanstalk?authSource=admin" --archive > backup.archive
|
||||
```
|
||||
|
||||
## 📁 Data Management
|
||||
|
||||
### Images
|
||||
- Place images in `public/observations/`
|
||||
- Automatically copied to container during deployment
|
||||
- Accessible via `/api/proxy-image` endpoint
|
||||
|
||||
### Database Files
|
||||
- Place JSON files in `public/db/`
|
||||
- Filename becomes collection name (e.g., `users.json` → `users` collection)
|
||||
- Automatically imported during deployment
|
||||
- Existing collections are dropped before import
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Environment Variables
|
||||
```bash
|
||||
# Database Connection
|
||||
MONGODB_URI=mongodb://admin:password123@observation_db:27017/beanstalk?authSource=admin
|
||||
|
||||
# Application
|
||||
NODE_ENV=production
|
||||
```
|
||||
|
||||
### Docker Compose Settings
|
||||
- **MongoDB Version**: 6.0
|
||||
- **Node.js Version**: 18 Alpine
|
||||
- **Ports**: App (3000), Database (27017)
|
||||
- **Volumes**: Persistent MongoDB data
|
||||
|
||||
## 🔄 Backup & Restore
|
||||
|
||||
### Create Backup
|
||||
```bash
|
||||
chmod +x scripts/backup.sh
|
||||
./scripts/backup.sh
|
||||
```
|
||||
|
||||
Creates backup in `backups/YYYYMMDD_HHMMSS/` with:
|
||||
- MongoDB database archive
|
||||
- Image files
|
||||
- Configuration files
|
||||
- Automated restore script
|
||||
|
||||
### Restore from Backup
|
||||
```bash
|
||||
cd backups/YYYYMMDD_HHMMSS/
|
||||
./restore.sh
|
||||
```
|
||||
|
||||
## 🧹 Cleanup
|
||||
|
||||
### Complete Cleanup
|
||||
```bash
|
||||
chmod +x scripts/cleanup.sh
|
||||
./scripts/cleanup.sh
|
||||
```
|
||||
|
||||
Removes:
|
||||
- All containers
|
||||
- Application images
|
||||
- Unused networks
|
||||
- Optionally: Database volumes (with confirmation)
|
||||
|
||||
## 🔍 Troubleshooting
|
||||
|
||||
### Database Connection Issues
|
||||
```bash
|
||||
# Check database status
|
||||
docker-compose exec observation_db mongosh --eval "db.adminCommand('ping')"
|
||||
|
||||
# View database logs
|
||||
docker-compose logs observation_db
|
||||
```
|
||||
|
||||
### Application Issues
|
||||
```bash
|
||||
# Check application health
|
||||
curl http://localhost:3000/api/health
|
||||
|
||||
# View application logs
|
||||
docker-compose logs observation_app
|
||||
```
|
||||
|
||||
### Rebuild Containers
|
||||
```bash
|
||||
# Force rebuild without cache
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 📊 Monitoring
|
||||
|
||||
### Health Checks
|
||||
- Application: `/api/health`
|
||||
- Database: MongoDB ping command
|
||||
- Container status: `docker-compose ps`
|
||||
|
||||
### Logs
|
||||
```bash
|
||||
# All services
|
||||
docker-compose logs -f
|
||||
|
||||
# Specific service
|
||||
docker-compose logs -f observation_app
|
||||
docker-compose logs -f observation_db
|
||||
```
|
||||
|
||||
## 🔒 Security Notes
|
||||
|
||||
- Default credentials are for development only
|
||||
- Change MongoDB passwords in production
|
||||
- Use environment variables for sensitive data
|
||||
- Consider using Docker secrets for production
|
||||
|
||||
## 🚀 Production Considerations
|
||||
|
||||
1. **Security**: Update default passwords
|
||||
2. **SSL**: Add HTTPS termination
|
||||
3. **Backup**: Schedule regular backups
|
||||
4. **Monitoring**: Add health monitoring
|
||||
5. **Scaling**: Consider load balancer for multiple app instances
|
||||
Reference in New Issue
Block a user