asset-dev-serverasset-dev-app, Deployment Group asset-dev-dg (대상: EC2 태그 CodeDeploy=asset-dev-app)asset-dev-codedeploy-artifacts (경로 예: dev/deploy-<sha>.zip)/dapp/dev/config (.env 전체)/dapp/dev/corp/* (기업 지갑용)appspec.ymlscripts/before_install.sh, scripts/after_install.sh, scripts/start.sh, scripts/validate.shdocker-compose.deploy.yml (배포용: ECR 이미지 사용).github/workflows/deploy-dev.yml (dev 브랜치용)IMAGE_TAG 파일은 Actions에서 생성되어 번들에 포함됨dev (브랜치 보호: dev)AWS_REGION=ap-northeast-2 (공통)AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY (ECR push + S3 + CodeDeploy 권한)ECR_REGISTRY=<ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.comECR_REPO=asset-dev-serverCODEDEPLOY_APP=asset-dev-appCODEDEPLOY_GROUP=asset-dev-dgCODEDEPLOY_S3_BUCKET_DEV=asset-dev-codedeploy-artifacts.github/workflows/deploy-dev.yml)1) dev 브랜치 push → 트리거
2) AWS 자격 구성(access key)
3) Docker build & push → ECR (:sha, :latest)
4) IMAGE_TAG 파일 생성, appspec.yml/scripts/docker-compose*.yml와 함께 zip → S3 업로드 (dev/deploy-<sha>.zip)
5) CodeDeploy create-deployment 호출(S3 revision)
/home/ec2-user/app에 배치/dapp/dev/config를 server/.env로 렌더링 (aws cli 필요, 경로는 AWS_ENV_SECRET_PATH로 override 가능)scripts/start.sh
IMAGE_TAG(파일/환경)와 IMAGE_REGISTRY로 이미지 결정 (기본 .../asset-dev-server:<tag>)docker compose -f docker-compose.yml -f docker-compose.deploy.yml up -d/health 호출scripts/reload_nginx.sh를 훅에 연결해 reload 가능(기본 미사용)..env 렌더링: AWS_ENV_SECRET_PATH(기본 /dapp/dev/config)로 경로 변경 가능./health, 필요 시 HEALTH_URL env로 override.ecr:GetAuthorizationToken, 이미지 업로드 일체s3:PutObject, s3:PutObjectAcl (버킷 asset-dev-codedeploy-artifacts 하위)codedeploy:CreateDeployment, codedeploy:Get*, codedeploy:List*sudo amazon-linux-extras enable nginx1 (또는 sudo apt-get install nginx), sudo yum install -y nginxsudo systemctl enable nginx && sudo systemctl start nginx/etc/nginx/conf.d/app.conf)
server {
listen 80;
server_name dev.asset.cccv.to;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo dnf install -y certbot python3-certbot-nginxsudo apt-get install -y certbot python3-certbot-nginx
2) 방화벽/SG에서 80/443 허용 확인
3) Nginx 기본 서버블록(80)으로 도메인 라우팅 상태 확인
4) 인증서 발급 및 Nginx 자동 설정
sudo certbot --nginx -d dev.asset.cccv.to --email admin@example.com --agree-tos --redirect
--redirect를 사용하면 80 → 443 리다이렉트 규칙 자동 적용-d를 추가 나열
5) 자동 갱신 크론/타이머 확인sudo systemctl status certbot.timer (systemd)sudo certbot renew --dry-run
6) 재배포 시 Nginx reload가 필요하면 CodeDeploy 훅에 scripts/reload_nginx.sh 연결scripts/reload_nginx.sh를 연결할 수 있음(기본 미사용).dnf 사용, amazon-linux-extras 없음)
sudo dnf update -y
sudo dnf install -y docker
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker ec2-user
*재로그인 후 docker ps로 권한 확인.
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo curl -SL https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-linux-x86_64 \
-o /usr/local/lib/docker/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
docker compose version
(ARM/Graviton일 경우 docker-compose-linux-aarch64 사용)
sudo dnf install -y awscli
CodeDeploy 훅에서 설치하지 않고, 사전에 EC2에 준비해두는 것을 권장합니다.
codedeploy-agent는 별도로 설치/활성화되어 있어야 합니다.
lsblk
sudo file -s /dev/sdf
sudo mkfs -t xfs /dev/sdf # 최초 1회만
sudo mkdir -p /mnt/redis
echo "/dev/sdf /mnt/redis xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
sudo mount -a
sudo chown ec2-user:ec2-user /mnt/redis
/mnt/redis:/data 바인드 마운트docker compose down -v 금지, EBS 교체 시 데이터 보존