DEV Community

Cover image for Deploying Forgejo Lightweight Git Server on Ubuntu 24.04
Sanskriti Harmukh for Vultr

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

Deploying Forgejo Lightweight Git Server on Ubuntu 24.04

Forgejo is a community-managed, lightweight Git server forked from Gitea, offering repository hosting, code review, issue tracking, and CI/CD with a strong focus on open governance. This guide deploys Forgejo with a MariaDB backend using Docker Compose, with Traefik handling automatic HTTPS. By the end, you'll have a self-hosted Forgejo instance served securely at your domain.


Set Up the Directory Structure

1. Create the project directory structure:

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

2. Create the environment file:

$ nano .env
Enter fullscreen mode Exit fullscreen mode
FORGEJO_DB_USER=forgejo
FORGEJO_DB_PASS=STRONG_APP_PASSWORD
MYSQL_ROOT_PASS=STRONG_MYSQL_ROOT_PASSWORD
FORGEJO_DB_NAME=forgejodb
FORGEJO_DOMAIN=forgejo.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: forgejo-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASS}
      - MYSQL_DATABASE=${FORGEJO_DB_NAME}
      - MYSQL_USER=${FORGEJO_DB_USER}
      - MYSQL_PASSWORD=${FORGEJO_DB_PASS}
    volumes:
      - ./db:/var/lib/mysql

  forgejo:
    image: codeberg.org/forgejo/forgejo:latest
    container_name: forgejo
    restart: unless-stopped
    depends_on:
      - db
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__database__DB_TYPE=mysql
      - FORGEJO__database__HOST=db:3306
      - FORGEJO__database__NAME=${FORGEJO_DB_NAME}
      - FORGEJO__database__USER=${FORGEJO_DB_USER}
      - FORGEJO__database__PASSWD=${FORGEJO_DB_PASS}
      - FORGEJO__server__ROOT_URL=https://${FORGEJO_DOMAIN}
    volumes:
      - ./data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.forgejo.rule=Host(`${FORGEJO_DOMAIN}`)"
      - "traefik.http.routers.forgejo.entrypoints=websecure"
      - "traefik.http.routers.forgejo.tls=true"
      - "traefik.http.routers.forgejo.tls.certresolver=le"
      - "traefik.http.services.forgejo.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://forgejo.example.com in a browser to load the installation page.
  2. Leave the database settings at their defaults — they match the Compose environment.
  3. Configure the administrator account with your username, password, and email.
  4. Click Install Forgejo to finalize the setup.

Next Steps

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

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

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

Top comments (0)