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.
Genauso sollte docker compose auch installiert sein.
Als erstes unser Verzeichnis erstellen in root.
Darin liegen unser config Dateien für den container
mkdir -p /root/gitea
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-CertCert, diese nicht abändern das macht dann ein script für uns.
[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
sed -i "s/443/$GITEA_HTTP_PORT/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"