Merge pull request #10 from osresearch/gitea
Gitea automated setup and OIDC installationsingle-dockerfile
commit
25b78d4a0f
@ -0,0 +1,3 @@ |
||||
# gitea |
||||
|
||||
OIDC setup is now automated |
@ -0,0 +1,45 @@ |
||||
version: "3" |
||||
|
||||
networks: |
||||
gitea: |
||||
external: false |
||||
|
||||
services: |
||||
gitea: |
||||
image: gitea/gitea:1.16.6 |
||||
env_file: |
||||
- ../env.production |
||||
- env.production |
||||
- ../data/gitea/env.secrets |
||||
environment: |
||||
- USER_UID=1000 |
||||
- USER_GID=1000 |
||||
- GITEA__database__DB_TYPE=postgres |
||||
- GITEA__database__HOST=db:5432 |
||||
- GITEA__database__NAME=gitea |
||||
- GITEA__database__USER=gitea |
||||
- GITEA__database__PASSWD=gitea |
||||
networks: |
||||
- gitea |
||||
volumes: |
||||
- ../data/gitea:/data |
||||
- /etc/timezone:/etc/timezone:ro |
||||
- /etc/localtime:/etc/localtime:ro |
||||
ports: |
||||
- "3030:3000" |
||||
- "222:22" |
||||
restart: always |
||||
depends_on: |
||||
- db |
||||
|
||||
db: |
||||
image: postgres:13.4-alpine |
||||
restart: always |
||||
environment: |
||||
- POSTGRES_USER=gitea |
||||
- POSTGRES_PASSWORD=gitea |
||||
- POSTGRES_DB=gitea |
||||
volumes: |
||||
- ../data/gitea/postgres:/var/lib/postgresql/data |
||||
networks: |
||||
- gitea |
@ -0,0 +1,6 @@ |
||||
# gitea config for keycloak integration |
||||
# only allow open id sign-in, turn off all other registrations |
||||
GITEA__openid__ENABLE_OPENID_SIGNIN=true |
||||
GITEA__openid__ENABLE_OPENID_SIGNUP=false |
||||
#GITEA__service__DISABLE_REGISTRATION=true |
||||
GITEA__service__ALLOW_ONLY_EXTERNAL_REGISTRATION=true |
@ -0,0 +1,67 @@ |
||||
#!/bin/bash |
||||
die() { echo >&2 "gitea: ERROR $*" ; exit 1 ; } |
||||
info() { echo >&2 "gitea: $*" ; } |
||||
|
||||
DIRNAME="$(dirname $0)" |
||||
cd "$DIRNAME" |
||||
|
||||
source ../env.production || die "no top level environment" |
||||
source ./env.production || die "no local environment" |
||||
|
||||
DATA="../data/gitea" |
||||
SECRETS="$DATA/env.secrets" |
||||
INI="$DATA/gitea/conf/app.ini" |
||||
|
||||
if [ -r "$SECRETS" ]; then |
||||
docker-compose up -d || die "unable to start" |
||||
exit 0 |
||||
fi |
||||
|
||||
|
||||
GITEA_CLIENT_SECRET="$(openssl rand -hex 32)" |
||||
GITEA_ADMIN_PASSWORD="$(openssl rand -hex 8)" |
||||
|
||||
info "creating new secrets $SECRETS" |
||||
|
||||
mkdir -p "$DATA" |
||||
cat <<EOF > "$SECRETS" |
||||
# DO NOT CHECK IN |
||||
GITEA_CLIENT_SECRET=$GITEA_CLIENT_SECRET |
||||
GITEA_ADMIN_PASSWORD=$GITEA_ADMIN_PASSWORD |
||||
GITEA__server__ROOT_URL=https://$GITEA_HOSTNAME/ |
||||
GITEA__security__INSTALL_LOCK=true |
||||
GITEA__security__SECRET_KEY=$(openssl rand -hex 32) |
||||
EOF |
||||
|
||||
|
||||
docker-compose down 2>/dev/null |
||||
|
||||
../keycloak/client-delete gitea 2>/dev/null |
||||
../keycloak/client-create <<EOF || die "unable to create gitea client" |
||||
{ |
||||
"clientId": "gitea", |
||||
"rootUrl": "https://$GITEA_HOSTNAME", |
||||
"adminUrl": "https://$GITEA_HOSTNAME", |
||||
"redirectUris": [ "https://$GITEA_HOSTNAME/*" ], |
||||
"webOrigins": [ "https://$GITEA_HOSTNAME" ], |
||||
"clientAuthenticatorType": "client-secret", |
||||
"secret": "$GITEA_CLIENT_SECRET" |
||||
} |
||||
EOF |
||||
|
||||
docker-compose up -d || die "unable to start container" |
||||
|
||||
info "waiting for startup..." |
||||
sleep 5 |
||||
|
||||
info "adding oauth login" |
||||
docker-compose exec -u git gitea \ |
||||
gitea admin auth add-oauth \ |
||||
--name "keycloak" \ |
||||
--provider "openidConnect" \ |
||||
--key "gitea" \ |
||||
--secret "$GITEA_CLIENT_SECRET" \ |
||||
--auto-discover-url "https://${KEYCLOAK_HOSTNAME}/realms/${REALM}/.well-known/openid-configuration" \ |
||||
--group-claim-name "groups" \ |
||||
--admin-group "admin" \ |
||||
|| die "unable to add oauth interface" |
@ -0,0 +1,37 @@ |
||||
server { |
||||
server_name ${GITEA_HOSTNAME}; |
||||
client_max_body_size 128m; |
||||
|
||||
sendfile on; |
||||
tcp_nopush on; |
||||
tcp_nodelay on; |
||||
keepalive_timeout 65; |
||||
types_hash_max_size 2048; |
||||
|
||||
gzip on; |
||||
gzip_disable "msie6"; |
||||
|
||||
proxy_read_timeout 1800s; |
||||
|
||||
location / { |
||||
proxy_pass http://host.docker.internal:3030; |
||||
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; |
||||
} |
||||
|
||||
# force login with OIDC |
||||
location /user/login { |
||||
return 302 https://${GITEA_HOSTNAME}/user/oauth2/keycloak; |
||||
} |
||||
|
||||
listen 443 ssl; |
||||
ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem; |
||||
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem; |
||||
include /etc/nginx/includes/options-ssl-nginx.conf; |
||||
include /etc/nginx/includes/challenge.conf; |
||||
ssl_dhparam /etc/nginx/includes/ssl-dhparams.pem; |
||||
} |
||||
|
||||
|
Loading…
Reference in new issue