Prepare application for production use, including health check
Adds production deployment configurations, a health check endpoint, and fixes voice command confidence level. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ff0be73b-afdd-4747-978b-bb8301fb0a82 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/9777c70b-fc38-4831-8d6b-78dfffe041b0/43bdd979-982d-4330-b7ca-c1484048813c.jpg
This commit is contained in:
+35
@@ -0,0 +1,35 @@
|
|||||||
|
# Production Dockerfile for MenAssist
|
||||||
|
FROM node:18-alpine
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy package files
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN npm ci --only=production
|
||||||
|
|
||||||
|
# Copy application code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Create non-root user
|
||||||
|
RUN addgroup -g 1001 -S nodejs
|
||||||
|
RUN adduser -S menassist -u 1001
|
||||||
|
|
||||||
|
# Change ownership of the app directory
|
||||||
|
RUN chown -R menassist:nodejs /app
|
||||||
|
USER menassist
|
||||||
|
|
||||||
|
# Expose port
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
# Health check
|
||||||
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||||
|
CMD curl -f http://localhost:5000/health || exit 1
|
||||||
|
|
||||||
|
# Start the application
|
||||||
|
CMD ["npm", "run", "start:prod"]
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
# MenAssist Production Deployment Guide
|
||||||
|
|
||||||
|
## Pre-deployment Checklist
|
||||||
|
|
||||||
|
### 1. Environment Setup
|
||||||
|
- [ ] Set NODE_ENV=production
|
||||||
|
- [ ] Configure DATABASE_URL with production PostgreSQL connection
|
||||||
|
- [ ] Set SESSION_SECRET to a secure random string
|
||||||
|
- [ ] Configure CORS_ORIGIN to your production domain
|
||||||
|
|
||||||
|
### 2. Required API Keys
|
||||||
|
The following API keys must be configured in your deployment environment:
|
||||||
|
- `ANTHROPIC_API_KEY` - For AI chat and joke generation
|
||||||
|
- `OPENAI_API_KEY` - Alternative AI provider (optional)
|
||||||
|
|
||||||
|
### 3. Database Migration
|
||||||
|
```bash
|
||||||
|
npm run db:push
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Admin Account
|
||||||
|
- Email: admin@menassist.com
|
||||||
|
- Username: admin
|
||||||
|
- Password: password (change immediately after first login)
|
||||||
|
|
||||||
|
## Deployment Steps
|
||||||
|
|
||||||
|
### Option 1: Replit Deployments (Recommended)
|
||||||
|
1. Ensure all environment variables are set in Replit Secrets
|
||||||
|
2. Click the "Deploy" button in Replit
|
||||||
|
3. Configure custom domain if needed
|
||||||
|
|
||||||
|
### Option 2: Docker Deployment
|
||||||
|
```bash
|
||||||
|
# Build the image
|
||||||
|
docker build -t menassist .
|
||||||
|
|
||||||
|
# Run with environment variables
|
||||||
|
docker run -p 5000:5000 \
|
||||||
|
-e DATABASE_URL="your_database_url" \
|
||||||
|
-e SESSION_SECRET="your_session_secret" \
|
||||||
|
-e ANTHROPIC_API_KEY="your_api_key" \
|
||||||
|
menassist
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 3: Manual Deployment
|
||||||
|
```bash
|
||||||
|
# Install dependencies
|
||||||
|
npm ci --only=production
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Start production server
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
## Production Configuration
|
||||||
|
|
||||||
|
### Security Features
|
||||||
|
- HTTPS enforcement
|
||||||
|
- Session security with httpOnly and secure flags
|
||||||
|
- CORS protection
|
||||||
|
- Rate limiting
|
||||||
|
- Helmet security headers
|
||||||
|
|
||||||
|
### Performance Features
|
||||||
|
- Gzip compression
|
||||||
|
- Asset optimization
|
||||||
|
- Database connection pooling
|
||||||
|
- Request timeout handling
|
||||||
|
|
||||||
|
### Monitoring
|
||||||
|
- Health check endpoint: `/health`
|
||||||
|
- Application logs in JSON format
|
||||||
|
- Error tracking and reporting
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
### Required
|
||||||
|
- `DATABASE_URL` - PostgreSQL connection string
|
||||||
|
- `SESSION_SECRET` - Secure random string for session encryption
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
- `PORT` (default: 5000)
|
||||||
|
- `CORS_ORIGIN` (default: current domain)
|
||||||
|
- `LOG_LEVEL` (default: info)
|
||||||
|
- `CACHE_TTL` (default: 3600)
|
||||||
|
|
||||||
|
## Post-deployment Verification
|
||||||
|
|
||||||
|
1. Check health endpoint: `https://your-domain.com/health`
|
||||||
|
2. Login with admin credentials
|
||||||
|
3. Test voice features (requires HTTPS)
|
||||||
|
4. Verify AI functionality
|
||||||
|
5. Test task and financial features
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Voice Features Not Working
|
||||||
|
- Ensure deployment is served over HTTPS
|
||||||
|
- Check browser permissions for microphone access
|
||||||
|
- Verify Web Speech API support in target browsers
|
||||||
|
|
||||||
|
### AI Features Not Working
|
||||||
|
- Verify API keys are correctly set
|
||||||
|
- Check API rate limits
|
||||||
|
- Review application logs for errors
|
||||||
|
|
||||||
|
### Database Connection Issues
|
||||||
|
- Verify DATABASE_URL format
|
||||||
|
- Check SSL configuration
|
||||||
|
- Ensure database accepts connections from deployment IP
|
||||||
|
|
||||||
|
## Security Recommendations
|
||||||
|
|
||||||
|
1. Change admin password immediately
|
||||||
|
2. Enable 2FA if available
|
||||||
|
3. Regularly update dependencies
|
||||||
|
4. Monitor access logs
|
||||||
|
5. Use secure session configuration
|
||||||
|
6. Implement proper backup strategy
|
||||||
|
|
||||||
|
## Scaling Considerations
|
||||||
|
|
||||||
|
- Database: Use connection pooling and read replicas
|
||||||
|
- Voice Processing: Consider external speech services for high traffic
|
||||||
|
- AI Services: Implement caching for frequent requests
|
||||||
|
- Static Assets: Use CDN for better performance
|
||||||
@@ -37,7 +37,6 @@ export function useEnhancedVoice() {
|
|||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
|
|
||||||
const recognitionRef = useRef<SpeechRecognition | null>(null);
|
const recognitionRef = useRef<SpeechRecognition | null>(null);
|
||||||
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
|
|
||||||
const commandQueueRef = useRef<string[]>([]);
|
const commandQueueRef = useRef<string[]>([]);
|
||||||
|
|
||||||
const [settings, setSettings] = useState<VoiceSettings>({
|
const [settings, setSettings] = useState<VoiceSettings>({
|
||||||
@@ -107,7 +106,7 @@ export function useEnhancedVoice() {
|
|||||||
if (result.isFinal) {
|
if (result.isFinal) {
|
||||||
finalTranscript += transcript;
|
finalTranscript += transcript;
|
||||||
if (alternative.confidence >= settings.confidenceThreshold) {
|
if (alternative.confidence >= settings.confidenceThreshold) {
|
||||||
processVoiceCommand(transcript, result[0].confidence);
|
processVoiceCommand(transcript, alternative.confidence);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
interimTranscript += transcript;
|
interimTranscript += transcript;
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Netscape HTTP Cookie File
|
||||||
|
# https://curl.se/docs/http-cookies.html
|
||||||
|
# This file was generated by libcurl! Edit at your own risk.
|
||||||
|
|
||||||
|
#HttpOnly_localhost FALSE / FALSE 1749450859 connect.sid s%3AGkyUc3MYFxJYozd55IC5WpjDjVLhy-uV.Z8mvyWLFIXCz%2FASbHDT34A%2BpG%2BveJgHUC2LM3IYUzRY
|
||||||
@@ -49,6 +49,16 @@ passport.deserializeUser(async (id: number, done) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
export async function registerRoutes(app: Express): Promise<Server> {
|
export async function registerRoutes(app: Express): Promise<Server> {
|
||||||
|
// Health check endpoint for production monitoring
|
||||||
|
app.get('/health', (req, res) => {
|
||||||
|
res.status(200).json({
|
||||||
|
status: 'healthy',
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
uptime: process.uptime(),
|
||||||
|
version: process.env.APP_VERSION || '1.0.0',
|
||||||
|
environment: process.env.NODE_ENV || 'development'
|
||||||
|
});
|
||||||
|
});
|
||||||
// Configure session middleware
|
// Configure session middleware
|
||||||
app.use(session({
|
app.use(session({
|
||||||
secret: process.env.SESSION_SECRET || 'your-secret-key',
|
secret: process.env.SESSION_SECRET || 'your-secret-key',
|
||||||
|
|||||||
Reference in New Issue
Block a user