DEV Community

Cover image for Deploying Gitea Self-Hosted Git Platform on Ubuntu 24.04
Sanskriti Harmukh for Vultr

Posted on with Aashish Chaurasiya • Originally published at docs.vultr.com

Deploying Gitea Self-Hosted Git Platform on Ubuntu 24.04

Gitea is a lightweight, self-hosted Git service offering repository hosting, code review, issue tracking, and built-in CI/CD. It runs from a single binary backed by a database and scales comfortably on modest hardware. This guide deploys Gitea with a MariaDB backend using Docker Compose, with Traefik handling automatic HTTPS. By the end, you'll have a fully functional Gitea instance served securely at your domain.


Set Up the Directory Structure

1. Create the project directory structure:

$ mkdir -p ~/gitea/{data,db,letsencrypt}
$ cd ~/gitea
Enter fullscreen mode Exit fullscreen mode

2. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
GITEA_DB_USER=gitea
GITEA_DB_PASS=STRONG_APP_PASSWORD
MYSQL_ROOT_PASS=STRONG_MYSQL_ROOT_PASSWORD
GITEA_DB_NAME=giteadb
GITEA_DOMAIN=gitea.example.com
LETSENCRYPT_EMAIL=admin@example.com
Enter fullscreen mode Exit fullscreen mode

Deploy with Docker Compose

1. Add your user to the Docker group:

$ sudo usermod -aG docker $USER
$ newgrp docker
Enter fullscreen mode Exit fullscreen mode

2. Create the Docker Compose manifest:

$ nano docker-compose.yml
Enter fullscreen mode Exit fullscreen mode
services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    environment:
      DOCKER_API_VERSION: "1.44"
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.le.acme.httpchallenge=true"
      - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.le.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt

  db:
    image: mariadb:latest
    container_name: gitea-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASS}
      - MYSQL_DATABASE=${GITEA_DB_NAME}
      - MYSQL_USER=${GITEA_DB_USER}
      - MYSQL_PASSWORD=${GITEA_DB_PASS}
    volumes:
      - ./db:/var/lib/mysql

  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    depends_on:
      - db
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST=db:3306
      - DB_NAME=${GITEA_DB_NAME}
      - DB_USER=${GITEA_DB_USER}
      - DB_PASSWD=${GITEA_DB_PASS}
      - ROOT_URL=https://${GITEA_DOMAIN}
    volumes:
      - ./data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.gitea.rule=Host(`${GITEA_DOMAIN}`)"
      - "traefik.http.routers.gitea.entrypoints=websecure"
      - "traefik.http.routers.gitea.tls=true"
      - "traefik.http.routers.gitea.tls.certresolver=le"
      - "traefik.http.services.gitea.loadbalancer.server.port=3000"
Enter fullscreen mode Exit fullscreen mode

3. Start the services:

$ docker compose up -d
Enter fullscreen mode Exit fullscreen mode

4. Verify the services are running:

$ docker compose ps
Enter fullscreen mode Exit fullscreen mode

Complete the Installation

  1. Open https://gitea.example.com in a browser to load the initial configuration page.
  2. Leave the database settings at their defaults — they match the Compose environment.
  3. Configure the Administrator Account Settings with your admin username, password, and email.
  4. Click Install Gitea to finalize the setup.

Next Steps

Gitea is running and served securely over HTTPS. From here you can:

  • Create organizations and repositories, and invite collaborators
  • Enable Gitea Actions for built-in CI/CD pipelines
  • Configure SMTP for email notifications and SSH for Git over SSH

For the full guide with additional tips, visit the original article on Vultr Docs.

Top comments (0)