Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
7.0 KiB
7.0 KiB
사이트 소스 저장소 — 서비스 서버의 로컬 Gitea
AI Webmaker v1.4.14 · 2026-10-10 · 대상: 운영자
1. 무엇이 바뀌었나
| 1.4.5 까지 | 1.4.14 부터 | |
|---|---|---|
| 사이트 버전(생성·AI 수정·직접 편집·배포본)을 올리는 곳 | 회사 소스 저장소 source.ibit.kr 의 OZ-Group/WebHosting_AI_agent (이 도구의 코드 저장소에 sites/<ID>/… 브랜치로 섞여 있었음) |
서비스 서버 안의 전용 Gitea — 계정 webmaker, 비공개 저장소 webmaker/sites |
| 저장소 접근 | 두 운영 서버(webmaker.ibit.kr, 192.168.20.66)가 같은 저장소에 같은 사이트 ID 로 푸시 → 이력이 서로 엇갈릴 수 있었음 | 서버마다 자기 Gitea 에만 푸시 (서버 밖으로 나가지 않음) |
| 설치 | 사람이 Gitea 에 배포 키를 등록 | deploy/install-gitea.sh 한 번 (컨테이너·계정·저장소·키·서비스 설정) |
브랜치 구조(sites/<ID>/main, sites/<ID>/changes/NNNN-종류)와 빌더의 "이전 버전으로 되돌리기" 동작은 그대로다.
2. 구성
- Docker 컨테이너
webmaker-gitea(gitea/gitea:1.27, SQLite). 데이터/srv/webmaker-gitea(서비스 사용자 소유). - HTTP:
<LAN IP>:3030— 운영자가 브라우저로 버전을 본다. 바깥(공인망)에는 열지 않는다. 가입 금지, 로그인해야 열람. - SSH:
127.0.0.1:2230— 서비스가 같은 서버에서만 푸시한다. - 계정
webmaker-admin— Gitea 관리자(콘솔용)webmaker— 서비스 전용. 저장소webmaker/sites소유자. 서비스 서버의 키~/.ssh/id_ed25519_webmaker_gitea가 이 계정의 SSH 키로 등록된다.- 비밀번호는
/srv/webmaker-gitea/credentials.env(0600). 화면에 다시 보이지 않는다.
~/.ssh/config에Host webmaker-gitea(127.0.0.1:2230, 위 키) 가 추가된다.- v1.5.7 부터 접속 정보는 systemd 유닛이 아니라 설정 파일
data/config.json의source.*에 들어간다(source.remote=git@webmaker-gitea:webmaker/sites.git,source.web=http://<LAN IP>:3030/webmaker/sites,source.apiUrl=http://<LAN IP>:3030,source.user,source.repo, API 토큰은 보관소gitea). 1.4.14~1.4.18 의SITES_GIT_REMOTE/WEB유닛 줄은 1.5.7 첫 기동 때 설정 파일로 옮겨지고,install-gitea.sh를 다시 실행하면 유닛에서 지워진다. 연동 모듈은lib/connectors/gitea.js(docs/ARIMAIL.md 1절) — 초기 설정 페이지·관리자 콘솔 › 시스템 설정에서 값을 보고 바꾸며, API 토큰이 있으면 "저장소 만들기"·"공개키 등록" 버튼도 쓸 수 있다.
3. 설치·마이그레이션 (한 번)
서비스 서버에서, 서비스 사용자로:
# webmaker.ibit.kr (bear)
/home/master/webmaker/deploy/install-gitea.sh --bind 192.168.20.23 --service webmaker \
--migrate-from git@source-webmaker:OZ-Group/WebHosting_AI_agent.git
# 192.168.20.66
~/work/WebHoting_AI_Agent/deploy/install-gitea.sh --bind 192.168.20.66 --service webhosting-agent \
--migrate-from git@source-webhosting:OZ-Group/WebHosting_AI_agent.git
하는 일 (다시 실행해도 안전, 있는 것은 건너뜀):
- 컨테이너를 만들고 준비될 때까지 기다린다.
- 계정 2개와 저장소
webmaker/sites를 만든다. - SSH 키를 만들고(없으면)
webmaker계정에 등록,~/.ssh/config에 별칭을 넣고git ls-remote로 확인한다. --migrate-from가 있으면scripts/migrate-gitstore.sh로 옛 저장소의sites/*브랜치를 모두 받아 새 저장소에 올리고, 이 서버의data/git/<ID>저장소들의origin을 새 주소로 바꾼 뒤 그 최신 상태(main 강제, 변경 브랜치)를 올린다. 마지막에 옛·새 저장소의 브랜치 목록을 비교해 빠진 것을 알린다.- (v1.5.7) 설정 파일
data/config.json에source.remote/source.web/source.apiUrl/source.user/source.repo를 쓰고,webmaker계정의 API 토큰을 만들어 보관소(gitea)에 넣는다. 유닛에 남은 옛SITES_GIT_*줄은 지운다. 서비스는 호출 때마다 설정을 읽어 푸시 주소가 바로 적용되며, 실행 중인 AI 작업이 없을 때 서비스를 재시작한다(--no-restart로 생략).
옛 저장소의 브랜치는 지우지 않는다. 새 저장소를 확인한 뒤 정리하려면:
git ls-remote --heads git@source-webhosting:OZ-Group/WebHosting_AI_agent.git 'refs/heads/sites/*' | awk '{print $2}' | sed 's#refs/heads/##' | xargs git push git@source-webhosting:OZ-Group/WebHosting_AI_agent.git --delete
두 서버가 같은 사이트 ID 로 옛 저장소에 서로 다른 커밋을 올린 변경 브랜치가 있으면(2026-10-10 기준 1개), 새 저장소에는 옛 저장소의 커밋이 남고 그 서버의 로컬 커밋은 올라가지 않는다(빠른 진행만). 로컬 main 은 강제로 올리므로 "되돌리기" 와 최신 상태에는 영향이 없다.
4. 확인
- 관리자 콘솔 › 설정 › 소스 저장소 (로컬 Gitea) › 연결 확인 → "연결 성공 — 저장소에 사이트 브랜치 N개", 아래에 이 서버의 공개키.
- 브라우저:
http://<LAN IP>:3030/webmaker/sites(webmaker-admin 로그인) → 브랜치 목록. - 빌더에서 수정 지시를 한 번 보내면
sites/<ID>/changes/NNNN-ai-update브랜치가 새로 생긴다.
5. 자주 나는 메시지
| 메시지 | 원인 | 해결 |
|---|---|---|
소스 저장소 서버에 연결할 수 없습니다 — 로컬 Gitea 컨테이너(webmaker-gitea)가 실행 중인지… |
컨테이너가 멈춤·docker 재시작 중 | docker start webmaker-gitea (restart=unless-stopped 라 부팅 때 자동 시작) |
소스 저장소(Gitea) 접근 거부 — 이 서버의 키가 저장소 계정(webmaker)에 등록되지 않았거나… |
키 파일이 바뀜·계정 키 삭제 | deploy/install-gitea.sh 다시 실행(키를 다시 등록) |
푸시 주소(source.remote)가 없어 소스를 원격에 보관하지 않습니다 (1.4.x: SITES_GIT_REMOTE 가 설정되지 않아…) |
설정 파일에 값이 없음(새 서버) | deploy/install-gitea.sh --service <유닛 이름> 또는 초기 설정 페이지 › 소스 보관 연동에 푸시 주소 입력 |
Gitea API 토큰이 올바르지 않습니다 (401) |
토큰 폐기·계정 변경 | install-gitea.sh 다시 실행(토큰 재생성) 또는 Gitea › 설정 › 애플리케이션에서 토큰을 만들어 설정 페이지 source.token 에 입력 |
| 되돌리기 목록은 보이는데 Gitea 에 브랜치가 없음 | 푸시 실패분(컨테이너 정지 중 등) | 다음 변경 때 자동 재시도. 서둘러 맞추려면 scripts/migrate-gitstore.sh <옛> <새> 를 다시 실행(로컬 저장소를 다시 올림) |
6. 백업
/srv/webmaker-gitea 전체(SQLite DB + 저장소)를 그대로 복사하면 된다. 사이트 파일의 원본은 여전히 서비스 서버의 data/git/<ID> + /var/www/…/<ID> 이므로, Gitea 는 "볼 수 있는 사본·이력" 역할이다.