fastcheck/DOCKER_SERVICES.md
2026-04-08 13:58:46 -04:00

293 lines
6.6 KiB
Markdown

# Docker Services Setup
This project includes MongoDB and RabbitMQ running in Docker containers for development and production use.
## Services Overview
### MongoDB
- **Container Name**: `duxiter-mongodb`
- **Image**: `mongo:7.0`
- **Port**: `27017`
- **Username**: `admin`
- **Password**: `password123`
- **Database**: `duxiter`
- **Connection String**: `mongodb://admin:password123@localhost:27017/duxiter?authSource=admin`
### RabbitMQ
- **Container Name**: `duxiter-rabbitmq`
- **Image**: `rabbitmq:3.12-management`
- **AMQP Port**: `5672`
- **Management UI Port**: `15672`
- **Username**: `admin`
- **Password**: `password123`
- **Management UI**: http://localhost:15672
- **Connection URL**: `amqp://admin:password123@localhost:5672`
## Quick Start
### Prerequisites
- Docker installed and running
- Docker Compose installed
### Starting Services
```bash
# Start all services in detached mode
sudo docker-compose up -d
# Check if services are running
sudo docker ps
```
### Stopping Services
```bash
# Stop all services
sudo docker-compose down
# Stop and remove volumes (WARNING: This will delete all data)
sudo docker-compose down -v
```
## Management Commands
### General Docker Commands
```bash
# View running containers
sudo docker ps
# View all containers (including stopped)
sudo docker ps -a
# Restart all services
sudo docker-compose restart
# Restart specific service
sudo docker-compose restart mongodb
sudo docker-compose restart rabbitmq
```
### Viewing Logs
```bash
# View MongoDB logs
sudo docker logs duxiter-mongodb
# View RabbitMQ logs
sudo docker logs duxiter-rabbitmq
# Follow logs in real-time
sudo docker logs -f duxiter-mongodb
sudo docker logs -f duxiter-rabbitmq
```
### Service Health Checks
```bash
# Test MongoDB connection
sudo docker exec -it duxiter-mongodb mongosh --username admin --password password123 --authenticationDatabase admin --eval "db.adminCommand('ping')"
# Check RabbitMQ status
sudo docker exec -it duxiter-rabbitmq rabbitmqctl status
# List RabbitMQ users
sudo docker exec -it duxiter-rabbitmq rabbitmqctl list_users
```
## Data Persistence
Data is automatically persisted using Docker volumes:
- **`duxiter_mongodb_data`**: MongoDB database files
- **`duxiter_mongodb_config`**: MongoDB configuration files
- **`duxiter_rabbitmq_data`**: RabbitMQ data and configuration
### Volume Management
```bash
# List all volumes
sudo docker volume ls
# Inspect a specific volume
sudo docker volume inspect duxiter_mongodb_data
# Remove all volumes (WARNING: This will delete all data)
sudo docker volume prune
```
## Network Configuration
Both services are connected via the `duxiter-network` bridge network, allowing:
- Inter-service communication using container names
- Isolated network environment
- External access through exposed ports
## Application Integration
### MongoDB Connection Examples
**Node.js (using mongoose)**
```javascript
const mongoose = require('mongoose');
const connectionString = 'mongodb://admin:password123@localhost:27017/duxiter?authSource=admin';
mongoose.connect(connectionString, {
useNewUrlParser: true,
useUnifiedTopology: true
});
```
**Python (using pymongo)**
```python
from pymongo import MongoClient
client = MongoClient('mongodb://admin:password123@localhost:27017/duxiter?authSource=admin')
db = client.duxiter
```
### RabbitMQ Connection Examples
**Node.js (using amqplib)**
```javascript
const amqp = require('amqplib');
const connection = await amqp.connect('amqp://admin:password123@localhost:5672');
const channel = await connection.createChannel();
```
**Python (using pika)**
```python
import pika
credentials = pika.PlainCredentials('admin', 'password123')
connection = pika.BlockingConnection(
pika.ConnectionParameters('localhost', 5672, '/', credentials)
)
channel = connection.channel()
```
## Security Considerations
⚠️ **Important**: The default credentials are for development only. For production:
1. Change default passwords
2. Use environment variables for credentials
3. Configure proper network security
4. Enable SSL/TLS encryption
5. Implement proper backup strategies
### Environment Variables
Create a `.env` file for production:
```env
MONGO_USERNAME=your_secure_username
MONGO_PASSWORD=your_secure_password
RABBITMQ_USERNAME=your_secure_username
RABBITMQ_PASSWORD=your_secure_password
```
## Troubleshooting
### Common Issues
**Port conflicts**
```bash
# Check if ports are in use
sudo netstat -tulpn | grep :27017
sudo netstat -tulpn | grep :5672
sudo netstat -tulpn | grep :15672
```
**Container won't start**
```bash
# Check container logs for errors
sudo docker logs duxiter-mongodb
sudo docker logs duxiter-rabbitmq
# Check Docker daemon status
sudo systemctl status docker
```
**Permission issues**
```bash
# Ensure user is in docker group
sudo usermod -aG docker $USER
# Log out and back in for changes to take effect
```
### Reset Everything
```bash
# Stop and remove containers, networks, and volumes
sudo docker-compose down -v
# Remove images (optional)
sudo docker rmi mongo:7.0 rabbitmq:3.12-management
# Start fresh
sudo docker-compose up -d
```
## Monitoring
### RabbitMQ Management Interface
Access the web interface at http://localhost:15672
- Username: `admin`
- Password: `password123`
Features:
- Queue monitoring
- Connection management
- Performance metrics
- User management
### MongoDB Monitoring
```bash
# Connect to MongoDB shell
sudo docker exec -it duxiter-mongodb mongosh --username admin --password password123 --authenticationDatabase admin
# Check database status
db.adminCommand("serverStatus")
# List databases
show dbs
# List collections
use duxiter
show collections
```
## Backup and Restore
### MongoDB Backup
```bash
# Create backup
sudo docker exec duxiter-mongodb mongodump --username admin --password password123 --authenticationDatabase admin --db duxiter --out /backup
# Copy backup from container
sudo docker cp duxiter-mongodb:/backup ./mongodb-backup
```
### MongoDB Restore
```bash
# Copy backup to container
sudo docker cp ./mongodb-backup duxiter-mongodb:/backup
# Restore database
sudo docker exec duxiter-mongodb mongorestore --username admin --password password123 --authenticationDatabase admin --db duxiter /backup/duxiter
```
## Performance Tuning
### MongoDB Optimization
- Adjust memory settings in docker-compose.yml
- Configure appropriate indexes
- Monitor slow queries
### RabbitMQ Optimization
- Adjust memory and disk limits
- Configure queue policies
- Monitor message rates
## Support
For issues related to:
- **Docker**: Check Docker documentation
- **MongoDB**: Check MongoDB documentation
- **RabbitMQ**: Check RabbitMQ documentation
- **This setup**: Check container logs and this documentation