Your cart is currently empty!
Deploying a Full-Stack Application: Manual vs CI/CD with Drone
Introduction
In this article, we’ll explore how to deploy a full-stack application (Angular + FastAPI + Nginx) using both manual deployment and automated CI/CD with Drone. We’ll break down each approach and understand what makes Drone so powerful for automating deployments.
The Stack
Our application consists of three main components:
- Frontend: Angular application served through Nginx
 - Backend: FastAPI Python application
 - Reverse Proxy: Main Nginx server handling routing
 
Manual Deployment
Let’s start with how you would deploy this stack manually. You would:
1. Clone the repository:
git clone https://github.com/your-org/your-app.git
cd your-app
2. Build and start the containers:
docker compose up -d --build
That’s it! The docker-compose.yml file handles all the configuration. Here’s what it looks like:
version: '3'
name: app
services:
  # Backend API service
  backend:
    build:
      context: ./Backend
      dockerfile: Dockerfile
    volumes:
      - ./Backend/uploads:/app/uploads  # Persistent storage for uploads
      - ./Backend/logs:/app/logs        # Persistent storage for logs
    restart: always
  # Frontend Angular service
  frontend:
    build: 
      context: ./ClientApp
      dockerfile: Dockerfile
    restart: always
  # Main Nginx reverse proxy
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - "8080:80"  # Example port mapping
    depends_on:
      - backend
      - frontend
    restart: always
Automated Deployment with Drone CI/CD
Now let’s look at how Drone automates this process. Here’s the .drone.yml configuration:
kind: pipeline
type: docker
name: deploy
# Only trigger this pipeline on the prod branch
trigger:
  branch:
    - prod
steps:
  # Step 1: Build and deploy the application
  - name: deploy
    image: appleboy/drone-ssh
    settings:
      # SSH connection details
      host: 
        from_secret: ssh_host      # Server IP/hostname
      username:
        from_secret: ssh_username  # SSH username
      password:
        from_secret: ssh_password  # SSH password
      port: 22
      
      # Commands to run on the server
      script:
        - cd /path/to/your/app
        - git pull origin prod
        - docker compose down
        - docker compose up -d --build
How Drone Works
When you push to the prod branch, here’s what happens:
1. Trigger Check
- Drone monitors your repository
 - When it sees a push to prod, it starts the pipeline
 
2. Environment Setup
- Drone creates a secure environment
 - Loads secrets (SSH credentials) securely
 
3. SSH Connection
- Uses appleboy/drone-ssh to connect to your server
 - Authenticates using the provided credentials
 
4. Deployment Steps
- Navigate to app directory
 - Pull latest changes
 - Stop existing containers
 - Rebuild and start containers
 
Key Benefits of Using Drone
1. Automation
- No manual SSH into servers
 - No manual git pulls or docker commands
 - Consistent deployment process every time
 
2. Security
- Credentials stored as secrets
 - No exposed passwords in configuration
 - Secure SSH connections
 
3. Reliability
- Same steps executed every time
 - No human error in deployment
 - Automatic recovery from failures
 
4. Monitoring
- Built-in logging
 - Deployment status tracking
 - Error notifications
 
Best Practices
Whether using manual or automated deployment, follow these practices:
1. Version Control
- Always work in feature branches
 - Only merge tested code to prod
 - Keep deployment configurations in version control
 
2. Docker Best Practices
- Use specific image versions
 - Implement health checks
 - Configure proper restart policies
 
3. Security
- Never commit secrets
 - Use environment variables
 - Implement proper firewalls
 
4. Monitoring
- Set up logging
 - Monitor container health
 - Track application metrics
 
Troubleshooting
Common issues and solutions:
1. Container Issues
To view container logs:
docker compose logs
# Check specific service
docker compose logs backend
2. Network Issues
To check container network:
docker network ls
docker network inspect your_network_name
3. Permission Issues
To check volume permissions:
ls -la Backend/uploads
ls -la Backend/logs
Conclusion
While manual deployment is straightforward with Docker Compose, Drone CI/CD adds automation, security, and reliability to your deployment process. The choice between manual and automated deployment often depends on:
- Team size
 - Deployment frequency
 - Infrastructure complexity
 - Security requirements
 
For small projects, manual deployment might be sufficient. But as your application grows, CI/CD with Drone becomes invaluable for maintaining a reliable deployment process.
Resources
by
Tags:
Leave a Reply