๐Ÿš€ Gitea Infrastructure on AWS

July 26, 2025 ยท View on GitHub

AWS Terraform Docker Gitea Jenkins

Production-ready Gitea Git hosting platform deployed on AWS with automated CI/CD


๐Ÿ“‹ Table of Contents


๐Ÿงฉ Infrastructure Components

๐Ÿณ Container Orchestration

ServicePurposeKey Features
Amazon ECSContainer orchestration platformFargate serverless, auto-scaling, health checks
Amazon ECRPrivate Docker registryVulnerability scanning, lifecycle policies, secure access
ECS ServiceManages container deploymentRolling updates, desired count management

๐Ÿ’พ Storage & Database

๐Ÿ—„๏ธ Amazon EFS

  • Shared persistent storage
  • Multi-AZ availability
  • Encryption in transit/rest
  • POSIX-compliant file system

๐Ÿ˜ Amazon RDS PostgreSQL

  • Managed database service
  • Automated backups
  • Multi-AZ deployment
  • Performance monitoring

๐Ÿ” Security & Configuration

AWS Systems Manager Parameter Store

Centralized, encrypted storage for:

  • Database credentials
  • API keys and secrets
  • Application configuration
  • Environment variables

๐ŸŒ Load Balancing & SSL

Traffic Flow:
Internet โ†’ Route 53 โ†’ Application Load Balancer โ†’ ECS Containers
         โ†“
    SSL Certificate (ACM) โ†’ HTTPS Encryption
  • Application Load Balancer: Health checks, traffic distribution
  • AWS Certificate Manager: Automated SSL certificate management
  • Route 53: DNS management with failover capabilities

โš™๏ธ CI/CD Pipeline

Jenkins on EC2

Jenkins Flow โ†’ Build โ†’ Registry โ†’ Deploy


๐Ÿ”ง Application Details

๐ŸฆŠ Gitea Configuration

Runtime Environment:
  Platform: ECS Fargate
  Port: 3000 (HTTP)
  Database: PostgreSQL with SSL
  Storage: EFS mounted at /data
  Authentication: Parameter Store secrets
  
Features:
  โœ… Git over HTTPS
  โœ… Web interface
  โœ… Issue tracking
  โœ… Pull requests
  โœ… SSH 

๐Ÿ”จ Jenkins Configuration

Infrastructure:
  Instance: EC2 t3.medium (Ubuntu 22.04)
  Container: Jenkins LTS in Docker
  Backup: Automated daily S3 sync
  
Capabilities:
  โœ… Docker-in-Docker builds
  โœ… ECR integration
  โœ… AWS CLI access
  โœ… Automatic restoration

โœจ Key Features

๐Ÿ”„ High Availability

  • โœ… Multi-AZ deployment
  • โœ… Auto-scaling containers
  • โœ… Database redundancy
  • โœ… Load balancer health checks

๐Ÿ”’ Enterprise Security

  • โœ… Encrypted storage & transit
  • โœ… IAM role-based access
  • โœ… Private container registry
  • โœ… Network segmentation

๐Ÿ“ˆ Scalability

  • โœ… Serverless containers (Fargate)
  • โœ… Auto-growing file system
  • โœ… Database auto-scaling
  • โœ… Elastic load balancing

๐Ÿ’พ Backup & Recovery

  • โœ… Automated Jenkins backups
  • โœ… RDS point-in-time recovery
  • โœ… EFS built-in redundancy
  • โœ… Infrastructure as Code

๐Ÿš€ Quick Start

Prerequisites

# Required tools
terraform --version  # >= 1.0
aws --version        # AWS CLI configured

Deployment Steps

1๏ธโƒฃ Deploy S3 Storage (Jenkins Backups)
cd jenkins-s3/
terraform init
terraform plan
terraform apply
2๏ธโƒฃ Deploy Gitea Infrastructure
cd ../gitea/
terraform init
terraform plan
terraform apply
# Note: Creates ECR, ECS, EFS, RDS, IAM roles
3๏ธโƒฃ Deploy Load Balancer & SSL
cd ../gitea-alb/
terraform init
terraform plan
terraform apply
# Outputs: DNS name and HTTPS URL
4๏ธโƒฃ Deploy Jenkins CI/CD
cd ../jenkins-ec2/
terraform init
terraform plan
terraform apply
# Outputs: Jenkins URL and SSH command

๐ŸŽ‰ Access Your Services

ServiceURLPurpose
Giteahttps://my-gitea.pp.uaGit hosting & web interface
Jenkinshttp://jenkins-gitea.pp.ua:8080CI/CD pipeline management

๐Ÿ“Š Monitoring

CloudWatch Integration

Monitoring Stack:
  ๐Ÿ“ˆ Container Insights: ECS cluster metrics
  ๐Ÿ“‹ Log Groups: Centralized application logs  
  ๐Ÿšจ Health Checks: ALB target health monitoring
  ๐Ÿ“Š Custom Metrics: Database performance insights

Key Metrics to Watch

  • ECS service CPU/Memory utilization
  • RDS connection count and query performance
  • EFS throughput and IOPS
  • ALB response times and error rates

๐Ÿ”’ Security

๐Ÿ›ก๏ธ Security Best Practices Implemented

LayerSecurity Measures
NetworkVPC isolation, Security Groups, Private subnets
DataEncryption at rest (EFS, RDS, S3), SSL/TLS in transit
AccessIAM roles, least privilege principle, no hardcoded secrets
ContainerPrivate ECR, vulnerability scanning, non-root users

๐Ÿ” Secrets Management

All sensitive data is stored in AWS Systems Manager Parameter Store:

  • Database credentials (encrypted)
  • Application secrets and API keys
  • SSL certificates and domain configuration

๐Ÿ’ก Need Help?

Issues Documentation Terraform


Built with โค๏ธ using AWS + Terraform + Open Source

This infrastructure follows AWS Well-Architected Framework principles

# AWS Infrastructure for Gitea and Jenkins

This infrastructure project provisions a complete AWS-based environment for running Gitea (a self-hosted Git service) and Jenkins (a CI/CD automation server) using Terraform. It includes container orchestration, persistent storage, secret management, backups, and secure public access via HTTPS.

๐Ÿ—‚๏ธ Components Overview

ComponentPurpose
ECSRuns the Gitea container using AWS Fargate
ECRStores the custom Gitea container image
EFSProvides persistent, encrypted storage for Gitea
RDSPostgreSQL backend for Gitea database
S3Stores Jenkins backups, versioned and encrypted
IAMGrants EC2 and ECS access to needed services (S3, ECR, etc.)
Parameter StoreHolds all Gitea secrets and credentials securely
ALB + ACMPublic HTTPS access to Gitea via a load balancer and a self-signed cert
Route 53DNS zone management and custom domain routing
EC2Runs the Jenkins server via Docker, initialized via user_data

๐Ÿš€ Gitea Deployment (ECS + Fargate)

  • Gitea runs inside a container defined in task-definition.json, hosted on ECS Fargate.
  • Application data is mounted via EFS, ensuring persistent /data.
  • Secrets like DB credentials and admin account info are securely pulled from SSM Parameter Store.
  • Public access is managed via Application Load Balancer (ALB) with:
    • Automatic HTTP โ†’ HTTPS redirection
    • Self-signed SSL certificate provisioned via ACM
    • Domain mapping via Route 53

๐Ÿ”ง Jenkins Deployment (EC2 + Docker)

  • Jenkins runs in a Docker container on an EC2 instance, provisioned with:
    • SSH access
    • Docker and AWS CLI pre-installed
    • Automatic restore from S3 if backup is available
  • Daily backups are uploaded to S3, versioned and encrypted
  • EC2 instance uses an IAM role with permissions to read/write S3 and access ECR

๐Ÿ” Secrets Management (Parameter Store)

Secrets are stored under /gitea/ namespace and injected into the Gitea container at runtime:

  • Database host, user, password
  • Admin username, password, email
  • Security keys (e.g. SECRET_KEY, INSTALL_LOCK)

๐Ÿ“ฆ S3 Usage

  • Bucket: my-jenkins-storage
  • Used to store and version Jenkins backup data
  • Public access is fully blocked
  • Server-side encryption is enforced with AES256

๐Ÿ“Œ Additional Notes

  • All services are deployed in us-east-1
  • Default VPC and subnets are used for quick setup
  • Jenkins can be accessed at [http://<EC2_PUBLIC_IP>:8080](http://jenkins-gitea.pp.ua:8080
  • Gitea is available at https://my-gitea.pp.ua