AWS, arm64 계열 t4g 환경준비
서비스를 준비하면서 AWS, lightsail 에서 AWS EC2환경으로 이전을 준비하는 과정을 정리하고 있다.
lightsail 에서 컨테이너 서비스 환경을 사용하기에는 클러스터서버를 구축해야하는 내 상황과는 달랐다.
그래서 AWS 상에 네트워크를 구축하고 arm 계열 서버를 사용할 목적으로 서버도 x86 기준에서 arm 기준으로 컴파일해야 했고 docker 이미지도 환경을 맞춰줘야 했다.
1. linux/arm64서버 환경에서 Golang 서버 컴파일
go build 명령어는 다음과 같다.
GOGC=11300 CGO_ENABLED=1 CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 GOBIN=./bin go build -ldflags=-X main.Ver=$(GIT_TAG) -X main.Bld=$(NOW_DATE) -X main.Rev=$(GIT_REVISION) -s -w -o ./bin/magnolia.l $(PRJ_BASE)/cmd/main.go
서버에 CGO 를 쓰는 부분이 있어 aarch64 환경에 맞추어 크로스 컴파일하는 부분을 볼 수 있다. 관련 크로스컴파일 도구는 지난 글을 참조 한다.
2. linux/arm64 Docker 이미지 생성하기
1) docker buildx build
Docker Buildx 빌드는 Multi-Archtecture Image 빌드 참고글 을 확인한다.
2) dockerfile
전에는 alpine 이미지를 썼는데 여러 library 문제로 ubuntu를 사용하기로 했는데 가장 우려했던 이미지 크기도 크지 않고 여러모로 나름 만족하고 있다.
FROM --platform=$BUILDPLATFORM ubuntu:latest
RUN apt-get update && \
apt-get install -y ca-certificates && \
apt-get install -yq tzdata && \
apt-get install -y webp && \
ln -fs /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
ENV TZ="Asia/Seoul"
COPY ./bin/magnolia.l /app/magnolia.l
COPY ./configs /app/configs
RUN chmod +x /app/magnolia.l
WORKDIR /app
# 환경변수를 선언해서 -e MODE='svc' 형식으로 환경변수를 application 에 전달
ENV MODE "svc"
ENV SEVER_ADDR "127.0.0.1"
ENV SEVER_ADVERTISE "127.0.0.1"
ENV SEVER_PORT "7777"
ENV NODE_NAME "breezy"
ENV NODE_MEMBER "127.0.0.1:7777"
ENTRYPOINT ["./magnolia.l"]