React + Vite로 개발한 mpi-skeleton 프로젝트를 GitLab Pages로 배포하기로 결정했습니다. GitHub Pages가 아닌 GitLab Pages를 선택한 이유는 프로젝트가 GitLab에서 관리되고 있었기 때문입니다.
또한 처음엔 vercel로 배포를 시도했으나, 회사 vercel 계정이 아직 무료 플랜었는데 gitlab 프로젝트는 그룹 내에 비공개 프로젝트로 위치해있어 무료버전으로는 배포가 불가능했습니다.
따라서 gitlab의 장점인 CI/CD 편리성을 활용해보고자 gitlab pages를 선택했습니다.
커스텀 도메인을 사용하지 않는 기본 배포 과정을 정리하였습니다.
.gitlab-ci.yml 파일을 생성했습니다:image: node:20.19.1
// node:latest 로 해도 되지만, 혹시 모를 node 버전 충돌을 막고자 특정 버전을 지정함
cache:
paths:
- node_modules/
pages:
stage: deploy
script:
- npm ci
- npm run build
- cp -r dist/* public/
artifacts:
paths:
- public
only:
- main
vite.config.ts 파일 수정import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from "path";
export default defineConfig({
base : '/',
plugins: [react()],
resolve: {
alias: {
"@": "/src",
},
},
build: {
outDir: path.resolve(import.meta.dirname, "dist"),
emptyOutDir: true,
},
})
variables:
CUSTOM_DOMAIN: "<커스텀 도메인>"
public 폴더 내 CNAME 파일 추가
CNAME 파일 안에는 커스텀 도메인만 작성해둡니다.
public > .well-known > acme-challenge 폴더 생성
폴더 안에 .gitkeep 파일 생성 및 아래 내용 작성
```
# 이 파일은 디렉토리 구조를 유지하기 위한 것입니다.
# Let's Encrypt와 같은 SSL 인증서 발급 서비스가 acme-challenge 파일을 이 디렉토리에 저장합니다.
```
src/App.tsx(46,7): error TS6133: 'LOARequestsPage' is declared but its value is never read.
src/components/mpi/ClaimsUnderReviewTable.tsx(195,36): error TS7053: Element implicitly has an 'any' type...
cp: target 'public/': No such file or directory
.gitlab-ci.yml에 폴더 생성 명령어 추가script:
- npm ci
- npm run build
- mkdir -p public # 추가
- cp -r dist/* public/
배포는 성공했지만 브라우저에서 접속 시 'Redirecting : ...' 라는 불필요한 리다이렉팅 화면이 떴습니다.

-> Redirecting 링크가 뜨고나서 사이트 접속되는걸 막고, 모두가 배포 사이트에 접속 가능하도록 설정하는 과정입니다.
배포에 성공했다면, 배포 주소를 확인해봅시다.
배포 링크는 Deploy > Pages에서 확인이 가능합니다.
main 브랜치를 배포했기 때문에, main 브랜치에 push혹은 merge를 하면 바로 재배포가 실행됩니다.