Files
homework-backend/README.md
2026-03-28 21:49:58 +01:00

162 lines
4.0 KiB
Markdown

# Homework Backend - Docker & Jenkins CI/CD Setup
This project includes complete CI/CD setup with Jenkins pipeline and Docker containerization.
## 🏗️ Build & Deploy
### Local Development
1. **Build and run locally:**
```bash
# Build the application
./build.sh
# Run with Docker Compose
docker-compose up --build
```
2. **Access the application:**
- API: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger
### Jenkins Pipeline
The Jenkins pipeline includes the following stages:
1. **Checkout** - Clone the repository
2. **Restore Dependencies** - Install NuGet packages
3. **Build** - Compile the application
4. **Test** - Run unit tests
5. **Publish** - Create deployment artifacts
6. **Build Docker Image** - Create Docker image
7. **Push Docker Image** - Push to registry
8. **Deploy to Staging** - Deploy to staging environment
9. **Integration Tests** - Run tests against staging
10. **Deploy to Production** - Manual approval then production deploy
### Environment Variables
Set these environment variables for Jenkins:
```bash
DOCKER_REGISTRY=your-registry.com
DB_PASSWORD=your-database-password
```
### Docker Registry Credentials
Configure Docker registry credentials in Jenkins:
- Credential ID: `docker-registry-credentials`
- Type: Username with password
## 📁 File Structure
```
├── Dockerfile # Multi-stage Docker build
├── Jenkinsfile # Jenkins pipeline definition
├── docker-compose.yml # Local development setup
├── docker-compose.staging.yml # Staging environment
├── docker-compose.prod.yml # Production environment
├── .dockerignore # Docker build exclusions
├── build.sh # Local build script
├── deploy.sh # Deployment script
├── init.sql # Database initialization
├── nginx/
│ └── nginx.conf # Nginx reverse proxy config
└── Homework/
├── appsettings.json # Application configuration
└── ... # Application code
```
## 🚀 Deployment Environments
### Development
- Single container setup with PostgreSQL
- Hot reload enabled
- Logs mounted to host
### Staging
- Load balanced (2 replicas)
- Resource limits applied
- Integration testing environment
### Production
- Load balanced (3 replicas)
- Nginx reverse proxy with SSL
- Resource limits and health checks
- Database persistence
## 🔧 Configuration
### Application Settings
Update `Homework/appsettings.json` for different environments:
```json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"JwtSettings": {
"Key": "your-jwt-secret-key",
"Issuer": "your-issuer",
"Audience": "your-audience"
},
"ConnectionStrings": {
"DefaultConnection": "Host=postgres;Database=homework;Username=homework_user;Password=homework_password"
}
}
```
### Jenkins Pipeline Customization
Modify the `Jenkinsfile` to:
- Change Docker registry URL
- Add additional test stages
- Modify deployment targets
- Add notification channels
## 🏥 Health Checks
The application includes health check endpoints:
- `/health` - Basic health check
- Container health checks configured in Docker
## 🔒 Security
- Non-root user in containers
- Security headers in Nginx
- Resource limits applied
- Secrets management via environment variables
## 📊 Monitoring
- Application logs are written to files and console
- Nginx access logs
- Docker container logs
- Health check monitoring
## 🐛 Troubleshooting
### Common Issues
1. **Build fails**: Check .NET SDK version in Dockerfile
2. **Database connection**: Verify PostgreSQL credentials
3. **Port conflicts**: Ensure ports 8080, 5432 are available
4. **Registry push fails**: Check Docker registry credentials
### Logs
```bash
# View application logs
docker-compose logs homework-backend
# View database logs
docker-compose logs postgres
# View all logs
docker-compose logs
```