Direkt zum Hauptinhalt

Gitea Docker installation mit mariadb und SSL

Beschreibung:

Ein Docker Container mit gitea. Der als Datenbank mariaDB benutzt und ein Lets Encrypt SSL Certificate holt oder ein selbstsigniertes SSL Certificate erstellt.

Docker compose mit Lets Encrypt:

Der Domainname sollte bereits auf den Server per IP a oder AAA record linken. Je nachdem ob ipv4 oder ipv6.

DIe .env Datei

# Gitea Einstellungen
USER_UID=1000
USER_GID=1000

# Datenbank Einstellungen
DB_ROOT_PASS=rootpassword
DB_USER=gitea
DB_PASSWD=gitea
DB_NAME=gitea

# Port Einstellungen
GITEA_HTTP_PORT=3000
GITEA_SSH_PORT=222

# Volume directories
#Pfade mit Slash vorran. Denn die werden dann zusmmanegbaut
BASE_PATH_DIR=/root/gitea
MARIADB_VOLUME_DIR=/mariadb
DATA_VOLUME_DIR=/data
CERTBOT_VOLUME_DIR=/certbot

# Domain and email for Let's Encrypt
DOMAIN_NAME=ihredomain.de
LETSENCRYPT_EMAIL=ihre-email@beispiel.de

app.ini für gitea und dem SSL-Cert

[server]
PROTOCOL = https
DOMAIN = yourdomain.com
HTTP_PORT = 443
ROOT_URL = https://yourdomain.com
CERT_FILE = /etc/letsencrypt/live/yourdomain.com/fullchain.pem
KEY_FILE = /etc/letsencrypt/live/yourdomain.com/privkey.pem

Kleines script das die app.ini anpasst

#!/bin/bash

# Lade die Umgebungsvariablen aus der .env-Datei
set -a # Export all variables created next
source .env
set +a

# Pfad zur app.ini Datei
APP_INI_PATH="app.ini"

# Prüfe, ob die app.ini Datei existiert
if [ ! -f "$APP_INI_PATH" ]; then
    echo "Die app.ini Datei unter $APP_INI_PATH wurde nicht gefunden."
    exit 1
fi

# Ersetze den Platzhalter 'yourdomain.com' durch den Wert der DOMAIN_NAME Variable aus der .env Datei
sed -i "s/yourdomain.com/$DOMAIN_NAME/g" $APP_INI_PATH

echo "Die Domain wurde erfolgreich in der app.ini zu '$DOMAIN_NAME' aktualisiert."

Die Composer Datei

version: '3'

services:
  server:
    image: gitea/gitea:latest
    environment:
      - USER_UID=${USER_UID}
      - USER_GID=${USER_GID}
      - DB_TYPE=mysql
      - DB_HOST=db:3306
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASSWD=${DB_PASSWD}
    restart: always
    volumes:
      - ${BASE_PATH_DIR}${DATA_VOLUME_DIR}:/data
      - /etc/letsencrypt/live/${DOMAIN_NAME}:/etc/letsencrypt/live/${DOMAIN_NAME}:ro
      - /etc/letsencrypt/archive/${DOMAIN_NAME}:/etc/letsencrypt/archive/${DOMAIN_NAME}:ro
    
    ports:
      - "${GITEA_HTTP_PORT}:443"
      - "${GITEA_SSH_PORT}:22"
    depends_on:
      - db

  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWD}
      MYSQL_DATABASE: ${DB_NAME}
    volumes:
      - ${BASE_PATH_DIR}${MARIADB_VOLUME_DIR}:/var/lib/mysql
 
  certbot:
    image: certbot/certbot
    volumes:
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-etc:/etc/letsencrypt
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-www:/var/www/certbot
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-log:/var/log/letsencrypt
    entrypoint: '/bin/sh -c'
    
  webserver:
    image: nginx:alpine
    restart: unless-stopped
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-etc:/etc/letsencrypt
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-www:/var/www/certbot
      - ${BASE_PATH_DIR}${CERTBOT_VOLUME_DIR}-log:/var/log/letsencrypt
      - ./nginx-log:/var/log/nginx
    ports:
      - "80:80"
      - "443:443"