개요
- Github 써도 된다.
- 근데 (1) 좀 디테일한 정보들을 git repo 에 넣고싶고 (2) 그런 정보들을 private repo 일지라도 Github 도 못보게 하고 싶다. (3) 어차피 Forgejo 로 private git server 구성하는게 별로 어렵지도 않다.
(주의) SSH 는 안된다.
- 물론 이건 Forgejo 때문은 아니다.
- 작성시점 Cilium 의 TCPRoute 가 안된다 (참고).
- 물론 뭐 NodePort 같은걸로 해도 되긴 하지만 뭔가 꼬롬해서 그냥 일단은 HTTP only 로 사용하자.
설치 방법
- 우선 namespace 부터 만든다 (선택).
kubectl create namespace {{Namespace 이름}}- 그리고 Forgejo Helm chart 는 admin 이름/패스워드를 별도의 Secret 으로 주입하게 해준다. 그래서 아래처럼 만들어준다.
password는 맘대로 해도 된다. 근데 어차피 admin 은 잘 안쓸거니까 아래처럼 랜덤으로 하게 했다.
kubectl -n {{Namespace 이름}} create secret generic {{Secret 이름}} \
--from-literal=username={{Admin ID}} \
--from-literal=password="$(openssl rand -base64 24)"- 비밀번호를 확인하고싶으면 이래하면 된다:
- 당연한거지만 secret 의 내용은 암호화된게 아니다. 그래서 이름이 secret 이긴 하지만 절대로 외부에 공개되어서는 안된다.
kubectl -n {{Namespace 이름}} get secret {{Secret 이름}} -o jsonpath='{.data.password}' | base64 -d; echo- Helm value 작성
- 몇가지만 짚어보자.
replicaCountForgejo 는 기본적으로 SQLite 를 사용한다. SQLite 는 기본적으로 single node 이기 때문에replicaCount도 1이어야 한다.- 물론 SQLite 말고 Postgres 를 사용할 수도 있다. 그건 아래 에서 설명한다. 근데 그래도
replicaCount는 1로 해주자.
- 물론 SQLite 말고 Postgres 를 사용할 수도 있다. 그건 아래 에서 설명한다. 근데 그래도
service.ssh.type: ClusterIP위에서 말한 대로 일단은 HTTP-only 로 사용할거다. 그래서 SSH Service 도 노출시키지 않고 ClusterIP 로.tcpRoute: 위에서 말한 대로 지금 Cilium 의 TCPRoute 가 안된다. 그래서 비활성화.- 그리고 차트 버전
17.1.3기준, TCPRoute API 버전이gateway.networking.k8s.io/v1alpha2다. 근데 이 가이드 에서 설치한 TCPRoute API 버전은gateway.networking.k8s.io/v1이다. 그래서 어차피 이 차트에 있는 template 은 못쓴다.
- 그리고 차트 버전
- 몇가지만 짚어보자.
replicaCount: 1
persistence:
enabled: true
size: {{PVC 사이즈}}
accessModes:
- ReadWriteOnce
service:
ssh:
type: ClusterIP
ingress:
enabled: false
httpRoute:
enabled: true
parentRefs:
- name: {{Gateway 이름}}
namespace: {{Gateway 가 있는 namespace 이름}}
sectionName: {{Gateway listener 이름}}
hostnames:
- {{UI 도메인}}
terminate: true
tcpRoute:
enabled: false
gitea:
admin:
existingSecret: {{Secret 이름}}
config:
server:
ROOT_URL: https://{{UI 도메인}}
DOMAIN: {{UI 도메인}}
DISABLE_SSH: true
service:
DISABLE_REGISTRATION: true- 그리고 설치.
helm upgrade --install forgejo oci://code.forgejo.org/forgejo-helm/forgejo -n {{Namespace 이름}} -f values.yamlSQLite 대신 CNPG 사용하기
- PG Cluster 생성 방법은 이거 참고.
- 생성했다는 가정 하에, Helm value 의
.gitea.config에 다음의 설정을 추가하면 된다.
gitea:
config:
# ... 다른 설정들 ...
database:
DB_TYPE: postgres
HOST: {{Forgejo CNPG Cluster 이름}}-rw:5432
NAME: {{Forgejo CNPG 기본 database 이름}}
USER: {{Forgejo CNPG superuser 이름}}
# ... 다른 설정들 ...- 그리고 CNPG password 는 이렇게
.deployment.env로 주입해주면 된다.
deployment:
env:
# ... 다른 설정들 ...
- name: FORGEJO__database__PASSWD
valueFrom:
secretKeyRef:
name: {{Forgejo CNPG Cluster 이름}}-app
key: password
# ... 다른 설정들 ...OIDC 설정
Background
- Authentik 설치 가이드 가 되어있다는 전제 하에 아래 내용이 이어집니다.
- Self-hosted Authentik 이 아닌 경우는 따로 인터넷에 검색해보시길.
CA trust
- 상황은 다음과 같다.
- 현재 Authentik 은 이 방식 으로 self-signed cert 를 사용하도록 설정돼있다.
- 근데 self-signed 이므로 Forgejo 에서는 이놈을 신뢰하지 않는다.
- 이 상황을 해결하기 위해 trust-manager 를 설치했다. 이제 이놈이 전파한 trusted CA cert 들을 Forgejo pod 에 낑가넣어보자.
- 우선 아래와 같이
.extraVolumes와.extraVolumeMounts을 Helm value 에 추가해서 ConfigMap 을 pod 에 붙일 수 있도록 해주자.{{경로}}는 모르겠으면/etc/ssl/self-signed로 하면 된다.
extraVolumes:
- name: ca-bundle
configMap:
name: {{Bundle 이름}}
extraVolumeMounts:
- name: ca-bundle
mountPath: {{경로}}
readOnly: true- 그리고
.deployment.env에 다음의 항목을 추가한다.- 여기서
ca-certificates.crt는 여기 에서.spec.target.configMap.key의 값이다.
- 여기서
deployment:
env:
# ... 다른 설정들 ...
- name: SSL_CERT_FILE
value: {{경로}}/ca-certificates.crt
# ... 다른 설정들 ...Authentik Application 생성하기
- 이거 보고 하면 된다. 이때 Redirect URL 은 이거다:
https://{{Forgejo UI 도메인}}/user/oauth2/authentik/callback
- 만들 때 이거 세가지를 복사해두자.
- Group 이름
SlugClient IDClient Secret
Authentik Application 연결하기
- 우선
Client ID/Client Secret을 담는 secret 을 하나 만들어준다.
kubectl -n {{Forgejo namespace 이름}} create secret generic {{Forgejo OIDC secret 이름}} --from-literal=key='{{Client ID}}' --from-literal=secret='{{Client Secret}}'- 그리고 Helm value 에서
.gitea밑에oauth를 다음과 같이 적어준다.
gitea:
# ... 다른 설정들 ...
oauth:
- name: authentik
provider: openidConnect
existingSecret: {{Forgejo OIDC secret 이름}}
autoDiscoverUrl: https://{{Authentik 도메인}}/application/o/{{Slug}}/.well-known/openid-configuration
groupClaimName: groups
adminGroup: {{Group 이름}}
# ... 다른 설정들 ...- 또한
.gitea.config.service에 Authentik 으로만 회원가입할 수 있도록 다음과 같이 제한을 둔다.
gitea:
config:
service:
# ... 다른 설정들 ...
ALLOW_ONLY_EXTERNAL_REGISTRATION: true
# ... 다른 설정들 ...- 마지막으로
.gitea.config.oauth2_client에 다음과 같은 설정을 추가한다.
gitea:
config:
# ... 다른 설정들 ...
oauth2_client:
ENABLE_AUTO_REGISTRATION: true
ACCOUNT_LINKING: login
USERNAME: nickname
# ... 다른 설정들 ...