0

[Java Backend Zero to Hello] [Phase 7] BÀI 7.7: TRIỂN KHAI LÊN CLOUD

📚 Series: Java Backend Zero to Hello 📂 Phân đoạn: Phase 7: Testing & DevOps 📖 Nội dung: BÀI 7.7: TRIỂN KHAI LÊN CLOUD 💡 Khóa học lập trình Backend Java & Spring Boot chuẩn doanh nghiệp từ con số 0.


BÀI 7.7: TRIỂN KHAI LÊN CLOUD

Mục tiêu

  • Triển khai ứng dụng lên cloud
  • Sử dụng các platform phổ biến
  • Cấu hình production environment

1. CÁC PLATFORM PHỔ BIẾN

Platform Đặc điểm Phù hợp
AWS Đầy đủ tính năng nhất Enterprise
Google Cloud ML/AI mạnh Data, ML
Azure Tích hợp Microsoft .NET, Windows
Railway Đơn giản, nhanh Side project
Render Free tier tốt Startup
Heroku Dễ dùng Prototype
DigitalOcean Giá rẻ SMB

2. RAILWAY

2.1 Triển khai

  1. Tạo tài khoản Railway
  2. New Project → Deploy from GitHub
  3. Chọn repo
  4. Thêm biến môi trường
  5. Deploy

2.2 Cấu hình

# railway.toml hoặc Procfile
web: java -jar target/myapp-1.0.jar

2.3 Biến môi trường

SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:postgresql://...
SPRING_DATASOURCE_USERNAME=...
SPRING_DATASOURCE_PASSWORD=...

3. RENDER

3.1 Triển khai

  1. Tạo tài khoản Render
  2. New → Web Service
  3. Connect GitHub repo
  4. Cấu hình:
    • Environment: Docker
    • Region: Singapore
    • Branch: main

3.2 Dockerfile

FROM eclipse-temurin:17-jre-jammy
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

4. AWS EC2

4.1 Khởi tạo EC2

  1. EC2 → Launch Instance
  2. Chọn Amazon Linux 2
  3. Chọn instance type (t2.micro free tier)
  4. Cấu hình Security Group (mở port 22, 80, 443, 8080)
  5. Tạo key pair

4.2 Cài đặt môi trường

# SSH vào server
ssh -i key.pem ec2-user@<public-ip>

# Cài Java
sudo yum install java-17-amazon-corretto

# Cài Docker
sudo yum install docker
sudo service docker start
sudo usermod -a -G docker ec2-user

4.3 Deploy

# Copy JAR
scp -i key.pem target/myapp.jar ec2-user@<ip>:~/

# Chạy
java -jar myapp.jar

4.4 Với Docker

# Pull image
docker pull username/myapp:latest

# Run
docker run -d -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:mysql://... \
  username/myapp:latest

5. AWS ECS (CONTAINER SERVICE)

5.1 Kiến trúc

ECR (Image Registry) → ECS Cluster → Task Definition → Service

5.2 Push image lên ECR

aws ecr get-login-password --region ap-southeast-1 | \
  docker login --username AWS --password-stdin <account-id>.dkr.ecr.ap-southeast-1.amazonaws.com

docker tag myapp:latest <account-id>.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest
docker push <account-id>.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest

5.3 Task Definition

{
  "family": "myapp",
  "containerDefinitions": [
    {
      "name": "myapp",
      "image": "<ecr-uri>/myapp:latest",
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 8080
        }
      ],
      "environment": [
        {
          "name": "SPRING_PROFILES_ACTIVE",
          "value": "prod"
        }
      ]
    }
  ]
}

6. DATABASE TRÊN CLOUD

6.1 AWS RDS

  • Tạo RDS instance (PostgreSQL/MySQL)
  • Cấu hình Security Group
  • Lấy endpoint, username, password

6.2 Connection

spring:
  datasource:
    url: jdbc:postgresql://myapp.xxxx.rds.amazonaws.com:5432/mydb
    username: admin
    password: ${DB_PASSWORD}

7. HTTPS VỚI NGINX + LET'S ENCRYPT

7.1 Cài đặt

sudo yum install nginx certbot python-certbot-nginx

7.2 Cấu hình Nginx

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        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;
    }
}

7.3 SSL

sudo certbot --nginx -d example.com

8. ENVIRONMENT VARIABLES

8.1 Best practices

# application-prod.yml
spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: validate  # Không auto-update ở production

8.2 Không commit secrets

.env
application-local.yml

9. MONITORING

9.1 Health check

management:
  endpoints:
    web:
      exposure:
        include: health
  endpoint:
    health:
      probes:
        enabled: true
      livenessstate:
        enabled: true
      readinessstate:
        enabled: true

9.2 Logging

  • Tập trung log qua CloudWatch, ELK
  • Set retention policy

10. CHECKLIST TRIỂN KHAI

  • [ ] HTTPS được cấu hình
  • [ ] Database có backup tự động
  • [ ] Environment variables được bảo mật
  • [ ] Health check endpoint hoạt động
  • [ ] Logging được cấu hình
  • [ ] Monitoring và alerting
  • [ ] Auto-scaling (nếu cần)
  • [ ] CI/CD pipeline
  • [ ] Domain trỏ về server
  • [ ] Firewall rules

11. BÀI TẬP THỰC HÀNH

Bài 1: Railway

Deploy Spring Boot app lên Railway.

Bài 2: AWS EC2

Triển khai lên EC2 với Docker.

Bài 3: HTTPS

Cấu hình HTTPS với Let's Encrypt.


12. TÓM TẮT

Platform Độ phức tạp Chi phí
Railway Thấp Free tier
Render Thấp Free tier
Heroku Thấp Trả phí
AWS EC2 Trung bình Free tier 1 năm
AWS ECS Cao Theo usage
Kubernetes Rất cao Theo usage

Hoàn thành Phase 7! Tiếp tục với Phase 8: Project thực tế cuối khóa


🧭 Điều hướng bài học

⭐ Hãy bookmark (clip) lại series để tiện theo dõi các bài học tiếp theo nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí