414 lines
7.6 KiB
Markdown
414 lines
7.6 KiB
Markdown
# Deployment Guide
|
|
|
|
This guide covers deploying the Meshtastic MQTT Dashboard to production environments.
|
|
|
|
## Pre-Deployment Checklist
|
|
|
|
- [ ] Change `SESSION_SECRET` to a strong random string
|
|
- [ ] Set `NODE_ENV=production` in `.env`
|
|
- [ ] Review and adjust MQTT broker settings
|
|
- [ ] Configure data retention policies
|
|
- [ ] Set up SSL/TLS certificates
|
|
- [ ] Configure firewall rules
|
|
- [ ] Plan backup strategy
|
|
- [ ] Create initial user accounts
|
|
- [ ] Test the application locally
|
|
|
|
## Deployment Options
|
|
|
|
### Option 1: Traditional Server (Linux)
|
|
|
|
#### Requirements
|
|
- Ubuntu 20.04+ or similar Linux distribution
|
|
- Node.js 16.x or higher
|
|
- Nginx (for reverse proxy and SSL)
|
|
- 1GB+ RAM
|
|
- 10GB+ disk space
|
|
|
|
#### Steps
|
|
|
|
1. **Install Node.js**
|
|
```bash
|
|
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
```
|
|
|
|
2. **Clone/Upload Application**
|
|
```bash
|
|
cd /opt
|
|
sudo mkdir meshtastic-dashboard
|
|
sudo chown $USER:$USER meshtastic-dashboard
|
|
cd meshtastic-dashboard
|
|
# Upload your files here
|
|
```
|
|
|
|
3. **Install Dependencies**
|
|
```bash
|
|
npm ci --production
|
|
```
|
|
|
|
4. **Configure Environment**
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env # Edit configuration
|
|
```
|
|
|
|
5. **Create User**
|
|
```bash
|
|
npm run create-user
|
|
```
|
|
|
|
6. **Set Up Systemd Service**
|
|
|
|
Create `/etc/systemd/system/meshtastic-dashboard.service`:
|
|
|
|
```ini
|
|
[Unit]
|
|
Description=Meshtastic MQTT Dashboard
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=www-data
|
|
WorkingDirectory=/opt/meshtastic-dashboard
|
|
Environment=NODE_ENV=production
|
|
ExecStart=/usr/bin/node src/server.js
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Enable and start:
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable meshtastic-dashboard
|
|
sudo systemctl start meshtastic-dashboard
|
|
sudo systemctl status meshtastic-dashboard
|
|
```
|
|
|
|
7. **Configure Nginx**
|
|
|
|
Create `/etc/nginx/sites-available/meshtastic-dashboard`:
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name your-domain.com;
|
|
|
|
# Redirect to HTTPS
|
|
return 301 https://$server_name$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name your-domain.com;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:3000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
```
|
|
|
|
Enable site:
|
|
```bash
|
|
sudo ln -s /etc/nginx/sites-available/meshtastic-dashboard /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
8. **Set Up SSL with Let's Encrypt**
|
|
```bash
|
|
sudo apt-get install certbot python3-certbot-nginx
|
|
sudo certbot --nginx -d your-domain.com
|
|
```
|
|
|
|
### Option 2: Docker Deployment
|
|
|
|
Create `Dockerfile`:
|
|
|
|
```dockerfile
|
|
FROM node:18-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package*.json ./
|
|
RUN npm ci --production
|
|
|
|
COPY . .
|
|
|
|
RUN mkdir -p data logs
|
|
|
|
EXPOSE 3000
|
|
|
|
CMD ["node", "src/server.js"]
|
|
```
|
|
|
|
Create `docker-compose.yml`:
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
meshtastic-dashboard:
|
|
build: .
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- ./data:/app/data
|
|
- ./logs:/app/logs
|
|
- ./.env:/app/.env:ro
|
|
restart: unless-stopped
|
|
environment:
|
|
- NODE_ENV=production
|
|
```
|
|
|
|
Deploy:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Option 3: Cloud Platforms
|
|
|
|
#### Heroku
|
|
|
|
1. Create `Procfile`:
|
|
```
|
|
web: node src/server.js
|
|
```
|
|
|
|
2. Deploy:
|
|
```bash
|
|
heroku create your-app-name
|
|
heroku config:set SESSION_SECRET=your-secret-here
|
|
git push heroku main
|
|
```
|
|
|
|
#### DigitalOcean App Platform
|
|
|
|
1. Connect your repository
|
|
2. Set environment variables in the dashboard
|
|
3. Deploy with one click
|
|
|
|
#### AWS EC2
|
|
|
|
Follow "Traditional Server" steps above on an EC2 instance.
|
|
|
|
## Security Hardening
|
|
|
|
### 1. Firewall Configuration
|
|
|
|
```bash
|
|
# UFW (Ubuntu)
|
|
sudo ufw allow 22/tcp
|
|
sudo ufw allow 80/tcp
|
|
sudo ufw allow 443/tcp
|
|
sudo ufw enable
|
|
```
|
|
|
|
### 2. Environment Variables
|
|
|
|
Never commit `.env` file. Use secure methods to transfer:
|
|
```bash
|
|
# On server
|
|
touch .env
|
|
chmod 600 .env
|
|
nano .env # Add your configuration
|
|
```
|
|
|
|
### 3. Database Permissions
|
|
|
|
```bash
|
|
chmod 700 data/
|
|
chmod 600 data/meshtastic.db
|
|
```
|
|
|
|
### 4. Regular Updates
|
|
|
|
```bash
|
|
# Update system packages
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Update Node.js dependencies
|
|
npm audit fix
|
|
npm update
|
|
```
|
|
|
|
### 5. Monitoring
|
|
|
|
Install monitoring tools:
|
|
```bash
|
|
# PM2 for process management
|
|
npm install -g pm2
|
|
pm2 start src/server.js --name meshtastic-dashboard
|
|
pm2 startup
|
|
pm2 save
|
|
```
|
|
|
|
## Backup Strategy
|
|
|
|
### Automated Backup Script
|
|
|
|
Create `/opt/backup-meshtastic.sh`:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
BACKUP_DIR="/opt/backups/meshtastic"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# Backup database
|
|
cp /opt/meshtastic-dashboard/data/meshtastic.db $BACKUP_DIR/db_$DATE.db
|
|
|
|
# Backup configuration
|
|
cp /opt/meshtastic-dashboard/.env $BACKUP_DIR/env_$DATE.txt
|
|
|
|
# Keep only last 7 days
|
|
find $BACKUP_DIR -name "db_*.db" -mtime +7 -delete
|
|
find $BACKUP_DIR -name "env_*.txt" -mtime +7 -delete
|
|
|
|
echo "Backup completed: $DATE"
|
|
```
|
|
|
|
Add to crontab:
|
|
```bash
|
|
chmod +x /opt/backup-meshtastic.sh
|
|
crontab -e
|
|
# Add: 0 3 * * * /opt/backup-meshtastic.sh
|
|
```
|
|
|
|
## Monitoring and Logs
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
# Systemd logs
|
|
sudo journalctl -u meshtastic-dashboard -f
|
|
|
|
# Application logs
|
|
tail -f /opt/meshtastic-dashboard/logs/combined.log
|
|
tail -f /opt/meshtastic-dashboard/logs/error.log
|
|
```
|
|
|
|
### Log Rotation
|
|
|
|
Create `/etc/logrotate.d/meshtastic-dashboard`:
|
|
|
|
```
|
|
/opt/meshtastic-dashboard/logs/*.log {
|
|
daily
|
|
rotate 14
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
missingok
|
|
copytruncate
|
|
}
|
|
```
|
|
|
|
## Performance Optimization
|
|
|
|
### 1. Enable Node.js Clustering
|
|
|
|
For multi-core servers, modify `src/server.js` to use the cluster module.
|
|
|
|
### 2. Database Optimization
|
|
|
|
```bash
|
|
# Vacuum database periodically
|
|
sqlite3 data/meshtastic.db "VACUUM;"
|
|
```
|
|
|
|
### 3. Nginx Caching
|
|
|
|
Add to nginx configuration:
|
|
```nginx
|
|
location /css/ {
|
|
expires 1y;
|
|
add_header Cache-Control "public, immutable";
|
|
}
|
|
|
|
location /js/ {
|
|
expires 1y;
|
|
add_header Cache-Control "public, immutable";
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Application Won't Start
|
|
|
|
1. Check logs: `sudo journalctl -u meshtastic-dashboard -n 50`
|
|
2. Verify Node.js version: `node --version`
|
|
3. Check port availability: `sudo netstat -tlnp | grep 3000`
|
|
4. Verify permissions on data directory
|
|
|
|
### MQTT Connection Issues
|
|
|
|
1. Check broker is accessible: `telnet mqtt.meshtastic.org 1883`
|
|
2. Verify credentials in `.env`
|
|
3. Check firewall rules
|
|
|
|
### Database Errors
|
|
|
|
1. Check disk space: `df -h`
|
|
2. Verify database permissions: `ls -la data/`
|
|
3. Try rebuilding: `rm data/meshtastic.db && npm start`
|
|
|
|
## Scaling Considerations
|
|
|
|
For high traffic deployments:
|
|
|
|
1. **Load Balancing**: Use multiple instances behind nginx
|
|
2. **Database**: Consider PostgreSQL for better concurrency
|
|
3. **Caching**: Add Redis for session storage
|
|
4. **CDN**: Use CloudFlare for static assets
|
|
5. **Monitoring**: Add Prometheus + Grafana
|
|
|
|
## Maintenance
|
|
|
|
### Weekly Tasks
|
|
- Review error logs
|
|
- Check disk space
|
|
- Verify backups
|
|
|
|
### Monthly Tasks
|
|
- Update dependencies
|
|
- Review security advisories
|
|
- Optimize database
|
|
- Rotate API keys if used
|
|
|
|
### Quarterly Tasks
|
|
- Review access logs
|
|
- Update SSL certificates (if not using auto-renewal)
|
|
- Performance audit
|
|
- Security audit
|
|
|
|
## Support
|
|
|
|
For deployment issues:
|
|
1. Check logs first
|
|
2. Review documentation
|
|
3. Check GitHub issues
|
|
4. Contact maintainers
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025
|
|
**Maintainer**: Meshtastic Community
|