Gitea 구축 (Docker + Google OAuth)Infra2026. 3. 13. 17:07
Table of Contents
구성
- Gitea + MySQL 8 (Docker Compose)
- Google OAuth 로그인 전용
- 라즈베리파이 기준
1. Docker Compose
mkdir -p ~/gitea && cd ~/gitea
docker-compose.yml:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- TZ=Asia/Seoul
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
- GITEA__time__DEFAULT_UI_LOCATION=Asia/Seoul
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: mysql:8
container_name: gitea_mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
- TZ=Asia/Seoul
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql
docker-compose up -d
2. 초기 설정
http://라즈베리파이IP:3000 접속 후 설정:
| 항목 | 값 |
|---|---|
| DB | 자동 입력됨 (MySQL, db:3306) |
| SSH 포트 | 222 |
| HTTP 포트 | 3000 |
| 기본 URL | http://라즈베리파이IP:3000/ |
관리자 계정 생성 (임시용) -> 나중에 Google 계정으로 교체
회원가입 비활성화
nano ~/gitea/gitea/gitea/conf/app.ini
[service]
DISABLE_REGISTRATION = true
docker restart gitea
3. Google OAuth 설정
Google Cloud Console
- Google Cloud Console 접속
- 새 프로젝트 생성
- API 및 서비스 > OAuth 동의 화면
- User Type: 외부
- 테스트 사용자에 허용할 Gmail 추가
- API 및 서비스 > 사용자 인증 정보 > OAuth 클라이언트 ID
- 유형: 웹 애플리케이션
- 리디렉션 URI:
http://라즈베리파이IP:3000/user/oauth2/Google/callback
- 클라이언트 ID / Secret 복사
Gitea에 연동
- admin 로그인 > 사이트 관리 > 인증 소스 > 추가
- 설정값:
| 항목 | 값 |
|---|---|
| 인증 유형 | OAuth2 |
| 인증 이름 | |
| OAuth2 공급자 | |
| 클라이언트 ID | 복사한 값 |
| 클라이언트 Secret | 복사한 값 |
| 나머지 | 비워둠 |
- Google로 로그인 테스트 후, admin 계정으로 해당 Google 사용자에게 관리자 권한 부여
4. Google 전용 로그인 전환
nano ~/gitea/gitea/gitea/conf/app.ini
[service]
DISABLE_REGISTRATION = true
ALLOW_ONLY_EXTERNAL_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true
docker restart gitea
이제 로그인 페이지에 "Google로 로그인" 버튼만 표시됨
5. 보안 강화 (선택)
2FA 강제
[security]
TWO_FACTOR_AUTH = enforced
로컬 네트워크만 허용
docker-compose.yml 포트 변경:
ports:
- "127.0.0.1:3000:3000"
또는 방화벽:
sudo ufw allow from 192.168.0.0/24 to any port 3000
SSL (Nginx 리버스 프록시)
sudo apt install nginx certbot python3-certbot-nginx -y
/etc/nginx/sites-available/gitea:
server {
listen 80;
server_name git.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo certbot --nginx -d git.yourdomain.com
app.ini 업데이트:
[server]
DOMAIN = git.yourdomain.com
ROOT_URL = https://git.yourdomain.com/
일상 관리
# 시작
docker-compose up -d
# 중지
docker-compose down
# 재시작
docker restart gitea
# 로그
docker logs -f gitea
# 업데이트
docker-compose pull && docker-compose up -d
트러블슈팅
| 증상 | 해결 |
|---|---|
| Google 로그인 실패 | 리디렉션 URI 확인, 테스트 사용자 등록 확인 |
| 로그인 화면 안 보임 | ALLOW_ONLY_EXTERNAL_REGISTRATION = false로 임시 변경 |
| 완전 초기화 | docker-compose down && sudo rm -rf gitea mysql && docker-compose up -d |
'Infra' 카테고리의 다른 글
| Gitea 백업 (rclone + Google Drive) (0) | 2026.03.14 |
|---|
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!