Github Action + Docker + AWS EC2를 이용하여 CI/CD 환경을 구축하기 전에 필요한 준비물을 세팅해보자!

Github Action의 경우 yaml 파일에 입력된 내용을 토대로 동작하기 때문에 실행해야 하는 모든 명령어를 yaml 파일에 입력해야 함.
이 과정에서 중요한 정보가 그대로 노출되는 경우(특히 도커 이미지를 만드는 과정에서), 보안상의 위험이 있기 때문에 Github Secrets을 이용하여 중요한 정보를 환경변수 처리해야 함.
(해당 과정은 간단한 생성이므로 생략)
이때 키 페어는 ppk를 선택함.
나중에 pem 키가 필요하긴 하지만, 이건 ppk를 pem으로 변형할 수 있기 때문에 상관 없음.
# 패키지 업데이트
$ sudo yum update -y
'Nothing to do'가 떴음.
# docker 설치
$ sudo yum install docker -y
Complete!
# docker 서비스 실행
$ sudo service docker start
Redirection to /bin/systemctl start docker.service
# docker 상태 확인
$ systemctl status docker.service
'Active: active'을 확인해야 함.
# 파일 권한을 읽고 쓰기로 변경하여 그룹 내에 포함된 인원도 사용할 수 있도록 변경
$ sudo chmod 666 /var/run/docker.sock
# 도커 이미지 확인
$ docker ps
# 도커 컴포즈 설치
$ sudo curl \
-L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
# 도커 컴포즈 권한 추가
$ sudo chmod +x /usr/local/bin/docker-compose
# 트러블 슈팅#1 발생
# libxcrypt-compat: 보안 라이브러리, 시스템에서 암호 해싱과 관련된 작업을 수행하는 데 사용될 수 있음.
# 암호 관련 작업을 수행하는 프로그램이나 라이브러리가 해당 라이브러리에 의존하는 경우에 필요할 수 있음.
$ sudo dnf install libxcrypt-compat
# ec2-user를 docker 그룹에 추가
# 인스턴스 접속 후 도커 바로 제어할 수 있음.
$ sudo usermod -aG docker ec2-user
# 트러블 슈팅
# [29842] Error loading Python lib '/tmp/_MEIw0BaIn/libpython3.7m.so.1.0': dlopen: libcrypt.so.1: cannot open shared object file: No such file or directory 오류 발생
# 다음으로 해결함.
$ sudo dnf install libxcrypt-compat
해당 에러 메시지는 'libxcrypt-compat' 패키지를 설치하면서 'libpython3.7m.so.1.0' 라이브러리를 찾지 못했기 때문에 발생한 에러이기 때문에 'libxcrypt-compat'을 설치해주면 됨.
# Dockerfile
# jdk11 이미지 시작
FROM openjdk:11-jdk
# 인자 정리 - jar
ARG JAR_FILE=build/libs/*.jar
# jar 파일 복사
COPY ${JAR_FILE} app.jar
# ENTRYPOINT: 프로세스나 애플리케이션의 주진입점 지정
# java: 가상 머신을 실행하는 자바 명령어
# -jar: jar 파일을 실행하라
# /app.jar: 실행할 jar 파일 경로
ENTRYPOINT ["java", "-jar", "/app.jar"]
# build.gradle
jar {
enabled = false
}
(RDS 생성은 단순 생성이므로 과정 생략)
$ sudo yum install mysql
# 트러블 슈팅#2 발생
$ mysql -u 계정 -p -h Host주소
Docker CE Stable - x86_64 352 B/s | 397 B 00:01
Errors during downloading metadata for repository 'docker-ce-stable':
- Status code: 404 for https://download.docker.com/linux/centos/2023.2.20231113/x86_64/stable/repodata/repomd.xml (IP: 54.230.61.68)
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
MySQL 8.0 Community Server 7.0 MB/s | 3.2 MB 00:00
MySQL Connectors Community 342 kB/s | 63 kB 00:00
MySQL Tools Community 2.8 MB/s | 1.1 MB 00:00
Ignoring repositories: docker-ce-stable
Error:
Problem: conflicting requests
- nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
- nothing provides libssl.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
- nothing provides libcrypto.so.10(libcrypto.so.10)(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
- nothing provides libssl.so.10(libssl.so.10)(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64
- nothing provides libcrypto.so.10()(64bit) needed by mysql-
# 이 밑으로 해당 에러 메시지가 반복
(try to add '--skip-broken' to skip uninstallable packages)
해당 에러는 문제되는 패키지를 지우고 다시 설치함.