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"