# 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. 로컬 저장소 초기화 ```bash 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 ``` 현재 원격 확인: ```bash git remote -v ``` 예상 결과: ```text origin https://gitea.hmac.kr/b24014/egbim_homepage.git (fetch) origin https://gitea.hmac.kr/b24014/egbim_homepage.git (push) ``` SSH 원격으로 바꾸려면: ```bash cd /home/b24014/egbim ./scripts/setup_gitea_remote.sh ssh ``` ## 2. 첫 푸시 ```bash 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로 전환해서 푸시 공개키: ```text ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJsVztQit66olQovEoLh/MoPC4iF6Drcr5woELWskWx/ b24014@sdi9429 ``` 1. Gitea 로그인 2. 우상단 프로필 -> `Settings` 3. `SSH / GPG Keys` 4. 위 공개키 등록 5. 아래 명령 실행 ```bash cd /home/b24014/egbim ./scripts/setup_gitea_remote.sh ssh git push -u origin main ``` SSH 점검: ```bash 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. `branch` 와 `target_dir` 확인 후 실행 5. 최초 배포면 `db_dump_path` 를 `egbim_DB.sql` 로 유지 현재 확인된 운영 배포 경로는 `~/egbim` 이다. 워크플로는 서버에 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`: 배포용 개인키 전체 내용 - `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` 이 워크플로는 위 시크릿으로 서버의 `.env` 파일을 생성한 뒤 배포를 수행한다. 필요하면 아래도 수동 실행 입력값으로 바꿀 수 있다. - `target_dir`: 서버 배포 경로, 기본값 `/srv/egbim_homepage` - `target_dir`: 서버 배포 경로, 기본값 `~/egbim` - `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` 예시: ```text APP_ENV=production APP_PORT=8071 DB_PORT=3307 G5_MYSQL_DB=egbim G5_MYSQL_USER=egbim G5_MYSQL_PASSWORD= MARIADB_ROOT_PASSWORD= COMPOSE_PROJECT_NAME=egbim ``` ## 5-1. SQL 덤프 포함 주의 - `egbim_DB.sql` 은 이제 배포용 저장소 추적 대상이다. - 덤프 파일이 바뀌어도 서버에 `.db_import_done` 파일이 있으면 자동 재적재되지 않는다. - DB를 다시 밀어넣어야 하면 서버에서 `.db_import_done` 을 삭제한 뒤 워크플로를 다시 실행한다. ## 6. 이후 배포 반영 일반 작업: ```bash cd /home/b24014/egbim git add . git commit -m "" git push origin main ``` 그 다음 Gitea 에서 `Manual Deploy` 만 다시 실행하면 된다. ## 7. 관리자 확인 필요 항목 - 저장소 `b24014/egbim_homepage` 가 이미 생성되어 있는지 - `main` 브랜치 push 권한이 있는지 - Gitea Actions 가 활성화되어 있는지 - 서버에 배포용 SSH 키가 허용되어 있는지 ## 8. 빠른 점검 명령 원격 정보 확인: ```bash git remote show origin ``` 로컬 compose 확인: ```bash docker compose config ```