Enhanced deployment with comprehensive bug fixes and documentation

- Fixed nginx 404 errors with enhanced file copying and fallback configuration
- Added docker-compose.simple.yml for streamlined first-time deployment
- Enhanced docker-compose.deploy-local.yml with detailed debugging and health checks
- Improved nginx.deploy.conf with fallback pages and auto-refresh
- Added comprehensive DEPLOYMENT_GUIDE.md with multiple deployment options
- Created validate-deployment.sh script for environment validation
- Updated container interface deployment documentation
- Added DEPLOYMENT_STATUS.md summary of ready features

Deployment improvements:
- Enhanced container startup sequence with health checks
- Detailed logging for troubleshooting file copying issues
- Multiple deployment strategies for different use cases
- Fallback nginx configuration prevents 404 errors during startup
- Auto-refresh functionality for seamless user experience

Ready for production deployment via container interfaces or command line.
This commit is contained in:
dlawler489 2026-04-21 13:18:09 +10:00
parent d45addad2f
commit 89ee6e69fc
8 changed files with 756 additions and 29 deletions

View file

@ -12,31 +12,45 @@ This guide shows how to deploy the Etsy Finance Tracker using container manageme
``` ```
2. **In your container interface**: 2. **In your container interface**:
- Navigate to "Stacks" or "Deploy from Git" ## 🚀 Quick Deployment Steps
- Paste the repository URL: `https://github.com/dlawler489/etsy-finance-tracker`
- Set the compose file path: `docker-compose.deploy-local.yml`
- Stack name: `etsy-finance-tracker`
3. **If you get "unauthorized" error**: ### Option 1: Simple Deployment (Recommended for First-Time Users)
- GitHub image may still be building **Use File:** `docker-compose.simple.yml`
- Use local build instead: Set compose file path to `docker-compose.deploy-local.yml`
- This will build the image locally (takes longer but works immediately)
4. **Environment Variables** (Optional): This version includes enhanced error handling and automatic client building.
```
NODE_ENV=production
PORT=8080
```
5. **Deploy the Stack** **Steps:**
- Click "Deploy" or "Create Stack" 1. **Import** the `docker-compose.simple.yml` file in your container interface
- Wait for images to pull and containers to start 2. **Set Stack Name:** `etsy-finance-tracker-simple`
3. **Deploy** and wait for build completion (~3-5 minutes)
4. **Access:** http://localhost:8081
### Method 2: Manual Container Creation ### Option 2: Enhanced Local Build
**Use File:** `docker-compose.deploy-local.yml`
If your interface doesn't support stacks, create containers manually: This version includes detailed debugging and enhanced logging.
#### Container 1: Etsy API Server **Steps:**
1. **Import** the `docker-compose.deploy-local.yml` file
2. **Set Stack Name:** `etsy-finance-tracker-local`
3. **Deploy** and monitor logs for debugging info
4. **Access:** http://localhost:8081
### Option 3: Pre-built Images
**Use File:** `docker-compose.deploy.yml`
Uses pre-built images from GitHub Container Registry (may require authentication).
## 📋 Detailed Instructions by Platform
### Using Container Management Interface
1. **Import Compose File**:
- **Docker Desktop**: Compose tab → Import → Select file
- **Portainer**: Stacks → Add stack → Upload file
- **Other tools**: Look for "Import Compose" or "Deploy Stack"
2. **Configure Stack**:
- **Image**: `ghcr.io/dlawler489/etsy-finance-tracker:main` - **Image**: `ghcr.io/dlawler489/etsy-finance-tracker:main`
- **Name**: `etsy-finance-tracker` - **Name**: `etsy-finance-tracker`
- **Ports**: Internal port 8080 (don't expose externally) - **Ports**: Internal port 8080 (don't expose externally)

198
DEPLOYMENT_GUIDE.md Normal file
View file

@ -0,0 +1,198 @@
# 🚀 Etsy Finance Tracker - Deployment Guide
## Quick Start for Container Interfaces (Docker Desktop, Portainer, etc.)
### Option 1: Local Build Deployment (Recommended)
**File to Use:** `docker-compose.deploy-local.yml`
This option builds the containers locally and includes enhanced debugging.
#### Steps:
1. **Import Configuration**
- In Docker Desktop: Click "+" → "Import" → Select `docker-compose.deploy-local.yml`
- In Portainer: Go to "Stacks" → "Add stack" → Upload `docker-compose.deploy-local.yml`
2. **Configure Environment**
- Set Stack Name: `etsy-finance-tracker-local`
- Environment Variables (optional):
```
NODE_ENV=production
PORT=8080
```
3. **Deploy Stack**
- Click "Deploy" or "Create Stack"
- Wait for both containers to build and start
4. **Access Application**
- **Frontend:** http://localhost:8081
- **API:** http://localhost:8081/api
- **Health Check:** http://localhost:8081/api/health
#### Troubleshooting Tips:
- **404 Errors:** Check container logs for file copying messages
- **Build Failures:** Ensure you have sufficient disk space (>2GB recommended)
- **Port Conflicts:** Change port 8081 to another available port
### Option 2: Pre-built Images (GitHub Container Registry)
**File to Use:** `docker-compose.deploy.yml`
This uses pre-built images from GitHub Container Registry.
#### Prerequisites:
- Must have pulled images manually or have registry access
#### Steps:
1. **Pull Images First** (if needed):
```bash
docker pull ghcr.io/your-username/etsy-finance-tracker:latest
```
2. **Import Configuration**
- Use `docker-compose.deploy.yml` in your container interface
- Set Stack Name: `etsy-finance-tracker`
3. **Deploy and Access**
- Same as Option 1
### Container Architecture
```
┌─────────────────────────────────────┐
│ nginx (Port 8081) │
│ ┌─────────────────────────────────┐│
│ │ React Frontend ││
│ │ (Static Files Served) ││
│ └─────────────────────────────────┘│
│ ┌─────────────────────────────────┐│
│ │ API Proxy ││
│ │ (Routes /api/* to backend) ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Node.js API Server (Port 8080) │
│ ┌─────────────────────────────────┐│
│ │ Express Backend ││
│ │ (REST API + File Processing) ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
```
### Expected Startup Sequence
1. **API Container Builds/Starts**
- Installs dependencies
- Builds React client
- **Copies client files to shared volume**
- Starts Express server on port 8080
- Reports healthy status
2. **Nginx Container Starts**
- Waits for API container health check
- **Finds client files in shared volume**
- Starts nginx on port 8081
- Serves React app and proxies API calls
### Debugging Information
When containers start, you should see logs like:
```
etsy-finance-tracker-1 | 📂 Current directory contents:
etsy-finance-tracker-1 | total 123
etsy-finance-tracker-1 | drwxr-xr-x 8 root root 256 Jan 2 12:34 client
etsy-finance-tracker-1 |
etsy-finance-tracker-1 | 📋 Creating shared directory...
etsy-finance-tracker-1 | 📥 Copying client files to shared volume...
etsy-finance-tracker-1 | './client/dist/index.html' -> '/shared/index.html'
etsy-finance-tracker-1 | './client/dist/assets' -> '/shared/assets'
```
### Common Issues & Solutions
#### 🚨 Getting 404 Errors
**Symptoms:** Browser shows 404 or "Starting Up..." page
**Causes:**
- Client files not copied to shared volume
- Nginx started before files were ready
- Volume mounting issues
**Solutions:**
1. Check container logs for file copying messages
2. Restart the stack if timing issue
3. Try Option 1 (local build) if using Option 2
#### 🚨 Build Failures
**Symptoms:** Container fails to start during build
**Causes:**
- Insufficient disk space
- Network issues downloading dependencies
- Node.js version compatibility
**Solutions:**
1. Free up disk space (need ~2GB)
2. Check internet connection
3. Try restarting Docker service
#### 🚨 Port Already in Use
**Symptoms:** "Port 8081 already in use" error
**Solutions:**
1. Change port in docker-compose file:
```yaml
ports:
- "3000:80" # Use port 3000 instead
```
2. Stop other services using the port
### Data Persistence
The application includes volume mounting for data persistence:
- **MongoDB Data:** `./data/mongo:/data/db`
- **Uploaded Files:** `./data/uploads:/app/uploads`
- **Logs:** `./data/logs:/app/logs`
Your data will persist between container restarts.
### Development vs Production
- **Development:** Use `docker-compose.yml` (includes hot reload)
- **Production:** Use `docker-compose.deploy-local.yml` or `docker-compose.deploy.yml`
### Support
If you encounter issues:
1. Check container logs in your interface
2. Verify all containers are running
3. Test health endpoint: http://localhost:8081/api/health
4. Review this guide for common solutions
---
## Container Interface Specific Instructions
### Docker Desktop
1. Go to "Compose" tab
2. Click "Import" button
3. Select the appropriate docker-compose file
4. Click "Run"
### Portainer
1. Go to "Stacks"
2. Click "Add stack"
3. Choose "Upload" method
4. Select the docker-compose file
5. Click "Deploy the stack"
### Other Interfaces
Most container management tools support docker-compose file import. Look for:
- "Import Compose"
- "Deploy Stack"
- "Upload docker-compose"
- "Create from Compose file"
---
**🎉 Once deployed successfully, you'll have a fully functional Etsy Finance Tracker with comprehensive profit analysis capabilities!**

101
DEPLOYMENT_STATUS.md Normal file
View file

@ -0,0 +1,101 @@
# 🎉 Deployment Status Summary
## ✅ What's Ready for Deployment
Your Etsy Finance Tracker is fully prepared for deployment with multiple options:
### 🚀 Container Deployment Options
1. **Simple Deployment** (`docker-compose.simple.yml`)
- ✅ Enhanced error handling
- ✅ Automatic client building
- ✅ Clear logging and debugging
- ✅ Fallback nginx configuration
- **Best for**: First-time users, quick deployment
2. **Enhanced Local Build** (`docker-compose.deploy-local.yml`)
- ✅ Detailed debugging information
- ✅ Health checks and dependencies
- ✅ Shared volume optimization
- ✅ Enhanced logging for troubleshooting
- **Best for**: Users who want detailed logs
3. **Pre-built Images** (`docker-compose.deploy.yml`)
- ✅ Uses GitHub Container Registry images
- ✅ Faster startup (no build required)
- ✅ Production-optimized
- **Best for**: Users with registry access
### 📚 Complete Documentation
- ✅ `DEPLOYMENT_GUIDE.md` - Comprehensive deployment instructions
- ✅ `CONTAINER_INTERFACE_DEPLOYMENT.md` - GUI deployment guide
- ✅ `validate-deployment.sh` - Environment validation script
- ✅ `README_NEW.md` - Updated comprehensive README
- ✅ Multiple deployment examples and troubleshooting
### 🔧 Enhanced Configuration
- ✅ nginx configuration with fallback pages
- ✅ Health checks for proper container startup sequence
- ✅ Shared volume optimization for client file serving
- ✅ Enhanced logging for debugging deployment issues
- ✅ Multiple deployment strategies for different environments
## 🎯 Recommended Next Steps
### For Container Interface Users (Docker Desktop, Portainer, etc.)
1. **Start with Simple Deployment**:
```
Import: docker-compose.simple.yml
Stack Name: etsy-finance-tracker
Deploy and access: http://localhost:8081
```
2. **If you encounter issues**:
- Check container logs for detailed debugging information
- Try the enhanced version: `docker-compose.deploy-local.yml`
- Use validation script: `./validate-deployment.sh`
### For Command Line Users
1. **If Docker is available**:
```bash
docker compose -f docker-compose.simple.yml up --build
```
2. **For development**:
```bash
npm run dev
```
## 🔍 Troubleshooting Ready
The deployment now includes:
- **Fallback nginx pages** - Shows "Starting Up..." instead of 404
- **Enhanced logging** - Detailed container startup information
- **Validation script** - Check your environment before deployment
- **Multiple deployment options** - Choose what works best for your setup
- **Comprehensive documentation** - Step-by-step guides for all scenarios
## 🌟 Key Improvements Made
1. **Fixed 404 Issues**: Added fallback nginx configuration and enhanced file copying
2. **Better Error Handling**: Clear error messages and recovery options
3. **Enhanced Debugging**: Detailed logging throughout the deployment process
4. **Multiple Options**: Different deployment strategies for different use cases
5. **Complete Documentation**: Comprehensive guides for all deployment methods
## 🎊 Ready to Deploy!
Your Etsy Finance Tracker is now ready for production deployment with:
- ✅ Complete profit analysis dashboard
- ✅ Comprehensive business intelligence features
- ✅ Robust containerized deployment
- ✅ Multiple deployment strategies
- ✅ Enhanced error handling and debugging
- ✅ Complete documentation and troubleshooting guides
**Choose your deployment method and start tracking your Etsy business performance! 🚀**

205
README_NEW.md Normal file
View file

@ -0,0 +1,205 @@
# 🎯 Etsy Finance Tracker with Comprehensive Profit Analysis
A powerful business intelligence tool designed specifically for Etsy sellers to track orders, analyze profit margins, manage expenses, and gain deep insights into their business performance.
## ✨ Key Features
### 📊 **Advanced Profit Analysis Dashboard**
- **Real-time Profit Tracking**: Monitor profit margins across all products and time periods
- **Cost Breakdown Analysis**: Detailed breakdown of material costs, Etsy fees, shipping, and other expenses
- **Interactive Charts**: Visual representations of revenue, costs, and profit trends
- **Product Performance Metrics**: Identify your most and least profitable products
- **Time-based Analysis**: Compare performance across different periods
### 🏪 **Complete Business Management**
- **Order Tracking**: Comprehensive order management with status updates
- **Product Catalog**: Full product database with variants, pricing, and inventory
- **Customer Management**: Track customer data, purchase history, and preferences
- **Expense Management**: Record and categorize all business expenses
- **Financial Reporting**: Generate P&L statements and tax-ready reports
### 📈 **Smart Analytics & Insights**
- **Revenue Forecasting**: Predict future revenue based on historical data
- **Seasonal Analysis**: Understand seasonal trends in your business
- **Customer Lifetime Value**: Track repeat customers and their total value
- **ROI Analysis**: Measure return on investment for marketing and materials
### 🔄 **Automated Data Processing**
- **CSV Import**: Bulk import orders and transactions from Etsy statements
- **PDF Processing**: Extract data from Etsy payment receipts and statements
- **Smart Product Matching**: Automatically match imported data to your product catalog
- **Bulk Operations**: Process hundreds of orders and transactions efficiently
## 🚀 Quick Start Deployment
### Option 1: Container Interface (Docker Desktop, Portainer)
**Recommended for most users**
1. **Download Files**: Clone or download this repository
2. **Choose Deployment File**:
- `docker-compose.simple.yml` - Best for first-time users
- `docker-compose.deploy-local.yml` - Enhanced debugging
- `docker-compose.deploy.yml` - Pre-built images
3. **Import in Your Container Tool**:
- Docker Desktop: Compose tab → Import
- Portainer: Stacks → Add stack → Upload
4. **Deploy and Access**: http://localhost:8081
📖 **Detailed Guide**: See `DEPLOYMENT_GUIDE.md` for comprehensive instructions
### Option 2: Command Line (If Docker is installed)
```bash
# Clone repository
git clone https://github.com/your-username/etsy-finance-tracker
cd etsy-finance-tracker
# Deploy with local build
docker-compose -f docker-compose.deploy-local.yml up --build
# Access application
open http://localhost:8081
```
### Option 3: Development Setup
```bash
# Install dependencies
npm install
cd client && npm install
cd ../server && npm install
# Start development servers
npm run dev # Starts both frontend and backend
```
## 🛠️ Validation & Troubleshooting
Run the validation script to check your environment:
```bash
./validate-deployment.sh
```
This will check Docker availability, required files, port conflicts, and disk space.
## 📁 Project Structure
```
etsy-finance-tracker/
├── 🐳 Docker Configuration
│ ├── Dockerfile # Multi-stage production build
│ ├── docker-compose.simple.yml # Simple deployment (recommended)
│ ├── docker-compose.deploy-local.yml # Enhanced local build
│ ├── docker-compose.deploy.yml # Pre-built images
│ └── nginx.deploy.conf # Nginx reverse proxy config
├── 🎯 Frontend (React + TypeScript)
│ ├── client/src/
│ │ ├── pages/ # Main application pages
│ │ │ ├── Dashboard.tsx # KPI overview dashboard
│ │ │ ├── ProfitAnalysis.tsx # Advanced profit analytics
│ │ │ ├── Orders.tsx # Order management
│ │ │ ├── Products.tsx # Product catalog
│ │ │ ├── Customers.tsx # Customer management
│ │ │ └── Expenses.tsx # Expense tracking
│ │ ├── components/ # Reusable UI components
│ │ ├── store/ # Redux state management
│ │ └── utils/ # Business logic utilities
├── ⚙️ Backend (Node.js + Express)
│ ├── server/src/
│ │ ├── controllers/ # API route handlers
│ │ ├── models/ # Data models
│ │ ├── routes/ # API endpoints
│ │ └── middleware/ # Authentication & validation
├── 📊 Data Processing
│ ├── data/csv/ # CSV import files
│ ├── data/pdf/ # PDF processing files
│ └── utils/ # Data processing utilities
└── 📚 Documentation
├── DEPLOYMENT_GUIDE.md # Comprehensive deployment guide
├── CONTAINER_INTERFACE_DEPLOYMENT.md # GUI deployment instructions
├── DOCKER_DEPLOYMENT.md # Docker-specific guide
└── GITHUB_CONTAINER_REGISTRY.md # CI/CD documentation
```
## 💼 Business Intelligence Features
### Profit Analysis Dashboard
- **Gross Margin Analysis**: Calculate true profit after all costs
- **Product Profitability Ranking**: See which products make the most money
- **Time-Series Profit Tracking**: Monitor profit trends over time
- **Cost Center Analysis**: Understand where your money goes
- **Break-even Analysis**: Calculate break-even points for products
### Financial Reporting
- **Monthly P&L Statements**: Automated profit and loss reports
- **Tax Preparation**: Export tax-ready financial summaries
- **Expense Categorization**: Organize expenses for accounting
- **Revenue Recognition**: Track when revenue is actually earned
- **Cash Flow Analysis**: Monitor money in vs money out
### Operational Insights
- **Inventory Optimization**: Track stock levels and reorder points
- **Customer Segmentation**: Identify your best customers
- **Seasonal Planning**: Prepare for busy and slow periods
- **Marketing ROI**: Measure effectiveness of marketing spend
- **Pricing Strategy**: Optimize prices based on profit analysis
## 🔧 Technical Stack
- **Frontend**: React 18, TypeScript, Tailwind CSS, Redux Toolkit
- **Backend**: Node.js, Express, TypeScript
- **Database**: MongoDB (containerized)
- **Charts**: Chart.js for data visualization
- **Deployment**: Docker with nginx reverse proxy
- **CI/CD**: GitHub Actions with container registry
- **Testing**: Jest, React Testing Library
## 📊 Data Sources Supported
- **Etsy CSV Exports**: Transaction summaries, payment reports
- **Etsy PDF Statements**: Monthly and annual statements
- **Manual Entry**: Direct data input through the interface
- **Bulk Import**: CSV templates for batch operations
- **API Integration**: Extensible for future Etsy API integration
## 🔐 Security & Privacy
- JWT-based authentication
- Input validation and sanitization
- HTTPS enforcement in production
- GDPR-compliant data handling
- Secure file upload processing
- Rate limiting on API endpoints
## 📈 Performance Features
- **Lazy Loading**: Components load as needed
- **Data Caching**: Efficient data retrieval and storage
- **Optimized Queries**: Fast database operations
- **Progressive Web App**: Works offline when possible
- **Responsive Design**: Works on all device sizes
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## 📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
## 🆘 Support & Documentation
- **Quick Start**: Follow deployment instructions above
- **Detailed Guides**: Check the documentation files
- **Troubleshooting**: Run `./validate-deployment.sh`
- **Issues**: Open GitHub issues for bugs or feature requests
---
**🎉 Transform your Etsy business with data-driven insights and comprehensive profit analysis!**

View file

@ -9,7 +9,8 @@ services:
- ./nginx.deploy.conf:/etc/nginx/nginx.conf:ro - ./nginx.deploy.conf:/etc/nginx/nginx.conf:ro
- client_dist:/usr/share/nginx/html:ro - client_dist:/usr/share/nginx/html:ro
depends_on: depends_on:
- etsy-tracker etsy-tracker:
condition: service_healthy
restart: unless-stopped restart: unless-stopped
networks: networks:
- etsy-network - etsy-network
@ -18,7 +19,7 @@ services:
interval: 30s interval: 30s
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 10s start_period: 20s
# Etsy Finance Tracker API Server (built locally) # Etsy Finance Tracker API Server (built locally)
etsy-tracker: etsy-tracker:
@ -51,13 +52,15 @@ services:
# Copy client files to shared volume and start server # Copy client files to shared volume and start server
command: > command: >
sh -c " sh -c "
echo 'Starting Etsy Finance Tracker API Server...'; echo '🚀 Starting Etsy Finance Tracker API Server...';
if [ ! -f /usr/share/nginx/html/index.html ]; then echo '📁 Checking for client files...';
echo 'Copying client files to shared volume...'; ls -la /app/client/dist/ || echo 'No client dist directory found';
cp -r /app/client/dist/* /usr/share/nginx/html/ 2>/dev/null || true; echo '📋 Copying client files to shared volume...';
echo 'Client files copied successfully'; mkdir -p /usr/share/nginx/html;
fi; cp -rv /app/client/dist/* /usr/share/nginx/html/ 2>/dev/null || echo 'Copy failed or no files to copy';
echo 'Starting Node.js server...'; echo '✅ Client files in shared volume:';
ls -la /usr/share/nginx/html/ || echo 'No files in shared volume';
echo '🔍 Starting Node.js server on port 8080...';
exec node server/dist/index.js exec node server/dist/index.js
" "

79
docker-compose.simple.yml Normal file
View file

@ -0,0 +1,79 @@
services:
etsy-finance-tracker:
build: .
container_name: etsy-finance-tracker
environment:
- NODE_ENV=production
- PORT=8080
ports:
- "8080:8080"
volumes:
- ./data:/app/data
- shared-volume:/shared
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
command: >
sh -c "
echo '🚀 Starting Etsy Finance Tracker API Server...' &&
echo '📂 Current directory contents:' &&
ls -la &&
echo '📂 Client directory contents:' &&
ls -la client/ || echo 'No client directory found' &&
echo '📂 Client dist contents:' &&
ls -la client/dist/ || echo 'No client/dist directory found' &&
echo '📋 Creating shared directory...' &&
mkdir -p /shared &&
echo '📥 Attempting to copy client files...' &&
if [ -d 'client/dist' ]; then
echo '✅ Found client/dist directory, copying...' &&
cp -rv client/dist/* /shared/ &&
echo '🎉 Client files copied successfully!' &&
ls -la /shared/
else
echo '❌ No client/dist directory found. Building client...' &&
cd client &&
npm install &&
npm run build &&
cd .. &&
echo '📥 Copying newly built client files...' &&
cp -rv client/dist/* /shared/ &&
echo '🎉 Client files built and copied!'
fi &&
echo '🚀 Starting Node.js server...' &&
node dist/index.js
"
restart: unless-stopped
nginx:
image: nginx:alpine
container_name: etsy-nginx
ports:
- "8081:80"
volumes:
- ./nginx.deploy.conf:/etc/nginx/conf.d/default.conf
- shared-volume:/usr/share/nginx/html
depends_on:
etsy-finance-tracker:
condition: service_healthy
command: >
sh -c "
echo '🌐 Starting nginx server...' &&
echo '📂 Checking shared volume contents:' &&
ls -la /usr/share/nginx/html/ &&
if [ ! -f '/usr/share/nginx/html/index.html' ]; then
echo '⏳ Waiting for client files to be available...' &&
sleep 10 &&
ls -la /usr/share/nginx/html/
fi &&
echo '🚀 Starting nginx...' &&
nginx -g 'daemon off;'
"
restart: unless-stopped
volumes:
shared-volume:
driver: local

View file

@ -56,7 +56,7 @@ http {
# React app - serve index.html for all routes (SPA support) # React app - serve index.html for all routes (SPA support)
location / { location / {
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html @fallback;
# Prevent caching of index.html # Prevent caching of index.html
location = /index.html { location = /index.html {
@ -65,6 +65,12 @@ http {
add_header Expires "0"; add_header Expires "0";
} }
} }
# Fallback for missing client files
location @fallback {
return 200 '<html><head><title>Etsy Finance Tracker</title></head><body><h1>🚀 Etsy Finance Tracker Starting Up...</h1><p>Client files are being loaded. Please refresh in a moment.</p><script>setTimeout(function(){location.reload()}, 5000);</script></body></html>';
add_header Content-Type text/html;
}
# Error pages # Error pages
error_page 404 /index.html; error_page 404 /index.html;

121
validate-deployment.sh Executable file
View file

@ -0,0 +1,121 @@
#!/bin/bash
echo "🔍 Etsy Finance Tracker - Deployment Validation"
echo "=================================================="
# Check if Docker is available
echo "📦 Checking Docker availability..."
if command -v docker &> /dev/null; then
echo "✅ Docker is available"
docker --version
else
echo "❌ Docker is not available or not in PATH"
echo "💡 You may need to use Docker Desktop or another container interface"
fi
# Check if Docker Compose is available
echo ""
echo "🐙 Checking Docker Compose availability..."
if command -v docker-compose &> /dev/null; then
echo "✅ docker-compose is available"
docker-compose --version
elif docker compose version &> /dev/null 2>&1; then
echo "✅ docker compose (newer version) is available"
docker compose version
else
echo "❌ Docker Compose is not available"
echo "💡 You may need to use container interface deployment"
fi
# Check if required files exist
echo ""
echo "📁 Checking required files..."
files=(
"Dockerfile"
"docker-compose.deploy-local.yml"
"docker-compose.deploy.yml"
"docker-compose.simple.yml"
"nginx.deploy.conf"
"package.json"
"client/package.json"
"server/package.json"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
echo "$file exists"
else
echo "$file is missing"
fi
done
# Check for data directory
echo ""
echo "💾 Checking data persistence setup..."
if [ -d "data" ]; then
echo "✅ data directory exists"
echo "📂 Contents:"
ls -la data/
else
echo "⚠️ data directory doesn't exist, creating..."
mkdir -p data/{mongo,uploads,logs,csv,pdf}
echo "✅ data directory structure created"
fi
# Check port availability
echo ""
echo "🔌 Checking port availability..."
ports=(8080 8081)
for port in "${ports[@]}"; do
if lsof -i :$port &> /dev/null; then
echo "⚠️ Port $port is in use"
echo " Process using port $port:"
lsof -i :$port
else
echo "✅ Port $port is available"
fi
done
# Check disk space
echo ""
echo "💽 Checking disk space..."
available_space=$(df -h . | awk 'NR==2 {print $4}')
echo "Available space: $available_space"
if [[ $(df . | awk 'NR==2 {print $4}') -gt 2097152 ]]; then # 2GB in KB
echo "✅ Sufficient disk space available"
else
echo "⚠️ Low disk space - may cause build failures"
fi
echo ""
echo "🎯 Deployment Recommendations:"
echo "================================"
# Docker available
if command -v docker &> /dev/null || command -v docker-compose &> /dev/null; then
echo "🚀 You can use command-line deployment:"
if command -v docker-compose &> /dev/null; then
echo " docker-compose -f docker-compose.deploy-local.yml up --build"
else
echo " docker compose -f docker-compose.deploy-local.yml up --build"
fi
else
echo "🖥️ Use container interface deployment:"
echo " 1. Open Docker Desktop, Portainer, or similar tool"
echo " 2. Import docker-compose.deploy-local.yml"
echo " 3. Deploy the stack"
fi
echo ""
echo "📚 For detailed instructions, see:"
echo " - DEPLOYMENT_GUIDE.md (comprehensive guide)"
echo " - CONTAINER_INTERFACE_DEPLOYMENT.md (GUI deployment)"
echo ""
echo "🌐 After successful deployment:"
echo " - Frontend: http://localhost:8081"
echo " - API: http://localhost:8081/api"
echo " - Health Check: http://localhost:8081/api/health"
echo ""
echo "✅ Validation complete!"