Files
egbim_homepage/DEPLOY_GITEA.md
T

7.4 KiB

Gitea 수동 배포

기준 정보

  • Gitea 웹: https://gitea.hmac.kr/b24014/egbim_homepage
  • 앱 배포 대상: 172.16.10.175:8071
  • Git 원격: https://gitea.hmac.kr/b24014/egbim_homepage.git
  • 실행 방식: git push 후 Gitea Actions 에서 수동 실행

로컬 푸시는 두 가지 방식 중 하나를 쓴다.

  • HTTPS: Gitea 계정 + Personal Access Token 사용
  • SSH: Gitea 계정에 공개키 등록 후 git@172.16.10.175:22 사용

1. 로컬 저장소 초기화

cd /home/b24014/egbim
git branch -m main
git remote remove origin 2>/dev/null || true
git remote add origin https://gitea.hmac.kr/b24014/egbim_homepage.git

현재 원격 확인:

git remote -v

예상 결과:

origin  https://gitea.hmac.kr/b24014/egbim_homepage.git (fetch)
origin  https://gitea.hmac.kr/b24014/egbim_homepage.git (push)

SSH 원격으로 바꾸려면:

cd /home/b24014/egbim
./scripts/setup_gitea_remote.sh ssh

2. 첫 푸시

cd /home/b24014/egbim
git add .
git commit -m "Initial import"
git push -u origin main

HTTPS 인증이 필요하면 Gitea 사용자 계정과 토큰 또는 비밀번호를 사용한다.

현재 remote: Unauthorized 가 나오면 일반 비밀번호 푸시가 막혀 있거나 토큰이 없는 상태다. 이 경우 아래 둘 중 하나로 해결한다.

HTTPS로 계속 푸시

  1. Gitea 로그인
  2. 우상단 프로필 -> Settings
  3. Applications
  4. Generate New Token
  5. repo 쓰기 권한 토큰 생성
  6. 다시 git push -u origin main

프롬프트가 나오면:

  • Username: Gitea 아이디
  • Password: 방금 만든 토큰

SSH로 전환해서 푸시

공개키:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJsVztQit66olQovEoLh/MoPC4iF6Drcr5woELWskWx/ b24014@sdi9429
  1. Gitea 로그인
  2. 우상단 프로필 -> Settings
  3. SSH / GPG Keys
  4. 위 공개키 등록
  5. 아래 명령 실행
cd /home/b24014/egbim
./scripts/setup_gitea_remote.sh ssh
git push -u origin main

SSH 점검:

ssh -T -i /root/.ssh/id_ed25519 git@172.16.10.175

현재 상태에서는 서버가 응답하지만 Permission denied (publickey) 이므로, 포트 문제는 아니고 Gitea에 키 등록만 남은 상태다.

3. Gitea Actions 수동 배포

저장소에 추가된 워크플로 이름은 Manual Deploy 이다.

Gitea 저장소 화면에서 아래 순서로 실행한다.

  1. Actions 로 이동
  2. Manual Deploy 선택
  3. Run workflow 클릭
  4. branchtarget_dir 확인 후 실행
  5. 최초 배포면 db_dump_pathegbim_DB.sql 로 유지

현재 운영 배포 경로는 /home/user/services/egbim-homepage 이다.

워크플로는 서버에 SSH 접속해서 지정 디렉터리에 소스를 동기화하고 docker compose up -d --build 를 수행한다. 저장소 루트의 SQL 덤프가 있고 .db_import_done 마커가 없으면 최초 1회 DB import까지 수행한다.

4. Gitea Secrets

수동 배포 전에 아래 시크릿을 Gitea 저장소에 등록해야 한다.

  • DEPLOY_HOST: 예) 172.16.10.175
  • DEPLOY_PORT: 예) 22
  • DEPLOY_USER: 서버 SSH 계정
  • DEPLOY_SSH_KEY: 배포용 개인키 전체 내용

DEPLOY_SSH_KEY 는 반드시 아래처럼 개인키 전체를 줄바꿈 그대로 넣어야 한다.

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

웹에서 붙여넣을 때 앞뒤 공백을 넣지 말고, Windows 메모장 등을 거치면서 줄 끝이 깨지지 않게 주의한다. 현재 Load key ... error in libcrypto 는 거의 항상 이 시크릿 값이 손상됐다는 뜻이다.

  • APP_ENV: production
  • APP_PORT: 8071
  • DB_PORT: 3307
  • G5_MYSQL_DB: 예) egbim
  • G5_MYSQL_USER: 예) egbim
  • G5_MYSQL_PASSWORD: 운영 DB 비밀번호
  • MARIADB_ROOT_PASSWORD: 운영 MariaDB root 비밀번호
  • COMPOSE_PROJECT_NAME: 예) egbim
  • BARON_SSO_CLIENT_ID: BARON 서버사이드 앱 Client ID. 변수 관리 또는 비밀 관리 둘 다 가능
  • BARON_SSO_CLIENT_SECRET: BARON 서버사이드 앱 Client Secret. 비밀 관리 권장
  • BARON_SSO_AUTHORIZE_ENDPOINT: https://app.brsw.kr/oidc/oauth2/auth. 변수 관리 권장
  • BARON_SSO_TOKEN_ENDPOINT: https://app.brsw.kr/oidc/oauth2/token. 변수 관리 권장
  • BARON_SSO_USERINFO_ENDPOINT: https://app.brsw.kr/oidc/userinfo. 변수 관리 권장
  • BARON_SSO_ISSUER: https://app.brsw.kr/oidc. 변수 관리 권장
  • BARON_SSO_REDIRECT_URI: 운영 콜백 URL 예) https://<운영도메인>/auth/callback. 변수 관리 권장
  • BARON_SSO_SCOPE: 예) openid profile email tenants. 변수 관리 권장
  • BARON_SSO_CLIENT_AUTH_METHOD: 보통 basic, 필요 시 post. 변수 관리 권장

이 워크플로는 위 값들로 서버의 .env 파일을 생성한 뒤 배포를 수행한다. BARON 값은 CLIENT_SECRET 는 비밀에서, 나머지는 변수 또는 비밀 어디에 있어도 읽도록 처리되어 있다.

필요하면 아래도 수동 실행 입력값으로 바꿀 수 있다.

  • target_dir: 서버 배포 경로, 기본값 /home/user/services/egbim-homepage
  • branch: 기본값 main
  • db_dump_path: 기본값 egbim_DB.sql

5. 서버 준비 조건

  • 서버에 git, docker, docker compose 가 설치되어 있어야 한다.
  • 배포 경로에 쓰기 권한이 있어야 한다.
  • 서비스 포트 8071 이 외부에서 접근 가능해야 한다.
  • 서버에 배포용 SSH 키가 허용되어 있어야 한다.
  • egbim/img 는 CDN 대체 대상이므로 Git 배포 대상에서 제외된다.
  • DB는 docker compose up -d --build 시 MariaDB 컨테이너가 처음 올라오면서 G5_MYSQL_DB, G5_MYSQL_USER, G5_MYSQL_PASSWORD 값으로 자동 생성된다.
  • 저장소에 포함된 egbim_DB.sql 은 최초 배포 시 1회 자동 import 된다.

워크플로가 생성하는 운영 .env 예시:

APP_ENV=production
APP_PORT=8071
DB_PORT=3307
G5_MYSQL_DB=egbim
G5_MYSQL_USER=egbim
G5_MYSQL_PASSWORD=<set-on-server>
MARIADB_ROOT_PASSWORD=<set-on-server>
COMPOSE_PROJECT_NAME=egbim
BARON_SSO_CLIENT_ID=<set-on-server>
BARON_SSO_CLIENT_SECRET=<set-on-server>
BARON_SSO_AUTHORIZE_ENDPOINT=https://app.brsw.kr/oidc/oauth2/auth
BARON_SSO_TOKEN_ENDPOINT=https://app.brsw.kr/oidc/oauth2/token
BARON_SSO_USERINFO_ENDPOINT=https://app.brsw.kr/oidc/userinfo
BARON_SSO_ISSUER=https://app.brsw.kr/oidc
BARON_SSO_REDIRECT_URI=https://<운영도메인>/auth/callback
BARON_SSO_SCOPE=openid profile email tenants
BARON_SSO_CLIENT_AUTH_METHOD=basic

5-1. SQL 덤프 포함 주의

  • egbim_DB.sql 은 이제 배포용 저장소 추적 대상이다.
  • 덤프 파일이 바뀌어도 서버에 .db_import_done 파일이 있으면 자동 재적재되지 않는다.
  • DB를 다시 밀어넣어야 하면 서버에서 .db_import_done 을 삭제한 뒤 워크플로를 다시 실행한다.

6. 이후 배포 반영

일반 작업:

cd /home/b24014/egbim
git add .
git commit -m "<change summary>"
git push origin main

그 다음 Gitea 에서 Manual Deploy 만 다시 실행하면 된다.

7. 관리자 확인 필요 항목

  • 저장소 b24014/egbim_homepage 가 이미 생성되어 있는지
  • main 브랜치 push 권한이 있는지
  • Gitea Actions 가 활성화되어 있는지
  • 서버에 배포용 SSH 키가 허용되어 있는지

8. 빠른 점검 명령

원격 정보 확인:

git remote show origin

로컬 compose 확인:

docker compose config