Blazor 앱을 Docker로 배포하여 테스트 서버에 게시하기

공용 테스트 데이터베이스 준비

Visual Studio에서 디버깅할 때는 localhost의 데이터베이스를 사용했습니다. 이제 공용 네트워크 상에 SQL Server를 준비해야 합니다. 다음 단계를 따르세요:

  1. Study.BlazorOne.DbMigrator 프로젝트를 시작 프로젝트로 설정합니다.

  2. appsettings.json 파일 내의 연결 문자열을 수정합니다.

로컬 localhost 설정은 주석 처리하고, 공용 네트워크의 연결 문자열을 추가합니다.

  1. DbMigrator를 실행합니다.

Study.BlazorOne.Blazor 프로젝트에 Docker 지원 활성화

솔루션 루트 디렉토리에 CI/CD 자동화 구성 파일 배치

GitLab Runner로 Docker 이미지 빌드 시도

GitLab 출력 내용은 다음과 같습니다:

$ docker build -t $BLAZOR_DEV_REPO:$IMAGE_TAG -f src/Study.BlazorOne.Blazor/Dockerfile --no-cache .
Step 1/24 : FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
...

마지막 단계에서 aspnet:7.0 기본 이미지를 다운로드하는 중 TLS 핸드셰이크 타임아웃 오류가 발생하였습니다. 이 문제를 해결하려면 자체 개인 Docker 레지스트리에 aspnet:7.0 기본 이미지를 저장하면 됩니다.

그 후, Study.BlazorOne.Blazor 프로젝트의 Dockerfile 파일을 수정하여 기본 이미지 경로를 변경합니다:

FROM myregistry.local.net/dotnet/aspnet:7.0 AS base

GitLab Runner가 자동으로 빌드를 시도하도록 코드를 커밋합니다.

자동 빌드 성공 후에도 마지막 단계에서 문제가 발생:

$ docker run -d --name blazor_one_test -p 8606:80 $BLAZOR_DEV_REPO:$IMAGE_TAG

ProGet 피드 이름이 잘못 지정되어 있는 경우입니다. Docker 이미지를 저장할 새로운 피드를 ProGet에 생성하고 .gitlab-ci.yml 파일 내 변수를 수정합니다:

variables:
  DOCKER_IMAGE_URL: "proget.mydomain.com/docker/myfeed/blazor:latest"

SSH 접속 실패 문제 해결

테스트 서버에 Linux 사용자 'tommy'를 생성하고, ~/.ssh 폴더에 공개 키를 추가합니다.

다시 자동 빌드 트리거

서버에 deploy.sh 스크립트가 없어 발생한 오류를 해결하기 위해 스크립트를 복사하고 권한을 변경합니다:

chmod +x /home/gitlab-runner/scripts/deploy.sh

GitLab Runner 재시작 및 작업 수락 확인

다음 명령어를 통해 GitLab Runner의 상태를 확인하고 재시작합니다:

docker exec -it gitlab-runner gitlab-runner verify
docker exec -it gitlab-runner gitlab-runner restart

최종적으로 새 테스트 서버로 전환하여 성공적인 배포 완료

docker run -d --privileged=true --restart=always -d --name blazor_one_test -v /mnt/data/config:/var/config -e ASPNETCORE_ENVIRONMENT=Production -p 8606:80 proget.mydomain.com/study-images/blazor:latest

태그: docker Blazor CI/CD GitLab kubernetes

7월 11일 18:57에 게시됨