Backend 코드를 GitLab에 업로드하고, 코드 변경 시 자동으로 Docker 컨테이너를 업데이트하는 CI/CD 시스템을 구축했습니다.
- GitLab.com에서 새 프로젝트
sqlbot생성 - Private 저장소로 설정
- GitLab → Profile → Access Tokens
- Token name:
my-token - Scopes:
write_repository체크 - 생성된 토큰을 안전하게 저장
# backend 폴더에서 실행 cd /Users/yang/Downloads/sqlbot/sqlbot/backend git init git remote add origin https://gitlab.com/bw.yang/sqlbot.git git add . git commit -m "backend files upload" git branch -M main git push -f origin main- Username:
bw.yang - Password: 생성한 Personal Access Token 입력
brew install gitlab-runnergitlab-runner register \ --url https://gitlab.com \ --token [프로젝트-토큰]등록 시 입력 정보:
- GitLab URL:
https://gitlab.com - Description:
SQLBot Shell Runner - Tags:
paichb11x - Executor:
shell
echo "alias runner='gitlab-runner run'" >> ~/.zshrc source ~/.zshrcGitLab 웹에서 .gitlab-ci.yml 파일 생성:
stages: - deploy - stop - start - restart - update-template - update-source - pip-list - pip-install - sqlbot-account-create deploy-job-paichb11x: stage: deploy script: - echo "Deploying ..." - docker cp apps/chat/task/llm.py sqlbot:/opt/sqlbot/app/apps/chat/task/. - docker cp apps/system/api/user.py sqlbot:/opt/sqlbot/app/apps/system/api/. - docker cp common/utils/locale.py sqlbot:/opt/sqlbot/app/common/utils/. - docker cp apps/datasource/crud/datasource.py sqlbot:/opt/sqlbot/app/apps/datasource/crud/. - docker cp apps/db/db_sql.py sqlbot:/opt/sqlbot/app/apps/db/. - docker cp main.py sqlbot:/opt/sqlbot/app/. - docker cp template.yaml sqlbot:/opt/sqlbot/app/. - sleep 1 - docker restart sqlbot - echo "Successfully deployed." tags: - paichb11x restart: stage: restart script: - echo "restart SQLBot application..." - docker stop sqlbot - sleep 3 - docker start sqlbot - echo "SQLBot successfully restarted." only: variables: - $RELEASE == "restart123" tags: - paichb11x # 기타 job들 (stop, start, pip-install 등)도 동일한 패턴으로 설정GitLab → Settings → CI/CD → Variables:
- Key:
RELEASE - Value:
restart123 - Type: Variable
sudo docker run -d \ --platform linux/amd64 \ --name sqlbot \ --restart always \ -p 8025:8000 \ -p 8026:8001 \ -p 8432:5432 \ -e LANG=en_US.UTF-8 \ -e LC_ALL=en_US.UTF-8 \ -e LANGUAGE=en \ -v $(pwd)/excel:/opt/sqlbot/data/excel \ -v $(pwd)/images:/opt/sqlbot/images \ -v $(pwd)/logs:/opt/sqlbot/logs \ -v $(pwd)/pg:/var/lib/postgresql/data \ sqlbot# 1. Docker 상태 확인 docker ps # 2. GitLab Runner 시작 runner- GitLab 웹에서 코드 수정
- 커밋하면 자동으로 파이프라인 실행
- Docker 컨테이너 자동 업데이트
- 변경사항 즉시 반영
- GitLab → CI/CD → Pipelines → "New pipeline"
- Variables에
RELEASE=restart123입력 - "Run pipeline" 클릭
# Runner 상태 확인 gitlab-runner status # Runner 재시작 runner# 컨테이너 상태 확인 docker ps # 컨테이너 로그 확인 docker logs sqlbot # 컨테이너 재시작 docker restart sqlbot- GitLab → CI/CD → Pipelines에서 실패한 job 클릭
- 에러 로그 확인
- 파일 경로나 권한 문제 해결
- 완전 자동화: 코드 변경 → 자동 배포
- 실시간 반영: Docker 컨테이너 즉시 업데이트
- 간단한 운영:
runner명령어로 시작 - 안정적 운영: Shell executor 사용으로 권한 문제 해결
- Personal Access Token은 안전하게 보관
- GitLab Variables를 통한 민감 정보 관리
- 컨테이너는
--restart always옵션으로 자동 재시작
이 시스템을 통해 GitLab에서 코드만 수정하면 자동으로 프로덕션 환경에 반영되는 완전한 CI/CD 파이프라인이 구축되었습니다.