Install and Configure Gitea on Ubuntu 24.04

By Raman Kumar

Updated on Nov 07, 2025

In this tutorial, we'll learn how to install and configure Gitea on Ubuntu 24.04 server.

Introduction

Self-hosting our own Git service gives us control, privacy, and independence from third-party platforms. Gitea is one of the best tools for this. It delivers a smooth Git experience without heavy system requirements, making it ideal for individuals, developers, and teams that want a fast and secure code hosting platform on their own server. In this tutorial, we learn how to install and configure Gitea on Ubuntu 24.04 using a secure and reliable setup.

What is Gitea?

Gitea is a lightweight, open-source, self-hosted Git service used for managing code repositories. It provides features similar to GitHub, GitLab, and Bitbucket, but can run comfortably even on low-resource servers. With Gitea, we can host repositories, manage issues, perform code reviews, collaborate with teams, and integrate CI/CD tools. It is simple to set up, easy to maintain, and designed for speed and flexibility. Gitea supports SSH and HTTPS, multiple databases, built-in user management, and access controls, giving us full control over our development workflow.

Prerequisites

Before we begin, ensure we have the following:

  • An Ubuntu 24.04 on dedicated server or KVM VPS.
  • Basic Linux Command Line Knowledge.
  • A domain name pointing A record to server IP.

Install and Configure Gitea on Ubuntu 24.04

Step 1: Update the Server

sudo apt update && sudo apt -y upgrade
sudo apt -y install wget curl git ufw

Enable firewall:

sudo ufw allow OpenSSH
sudo ufw allow 80,443,3000/tcp
sudo ufw enable

Step 2: Create a System User and Directories for Gitea

sudo adduser --system --group --disabled-login --shell /bin/bash --home /home/git git

sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo mkdir /usr/local/bin/data
sudo chown -R git:git /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea

sudo mkdir -p /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

This ensures Gitea has the correct storage and permissions to run smoothly.

Step 3: Download and Install Gitea

(Always update version number to latest)

VERSION=1.25.1

wget -O /tmp/gitea https://dl.gitea.com/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo install -m 0755 -o root -g root /tmp/gitea /usr/local/bin/gitea

Step 4: Create a Systemd Service for Gitea

sudo tee /etc/systemd/system/gitea.service >/dev/null <<EOF
[Unit]
Description=Gitea
After=network.target

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
Environment="USER=git" "HOME=/home/git"
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
RestartSec=2s

[Install]
WantedBy=multi-user.target
EOF

Enable and start the service:

sudo systemctl daemon-reload
sudo systemctl enable --now gitea
sudo systemctl status gitea

Gitea now runs on port 3000.

Step 5: Complete Web Installation

Open in browser:

http://SERVER_IP:3000

Fill the setup page using these recommended values:

  • Database Settings
  • Setting Value
  • Database Type SQLite
  • Path  /var/lib/gitea/data/gitea.db

Gitea automatically creates the SQLite DB – no database config needed.

General Settings
Setting Value

  • Repository Root /var/lib/gitea/data/gitea-repositories
  • Log Path  /var/lib/gitea/log
  • Git LFS Root Path /var/lib/gitea/data/lfs
    Gitea Base URL https://git.example.com

Create the admin user, then Install Gitea.

Once you click on Install Gitea, it will give you an error. 

Navigate to your terminal, edit app.ini file:

sudo nano /etc/gitea/app.ini

Find:

APP_DATA_PATH

Replace the its value with:

APP_DATA_PATH = /var/lib/gitea/data/

If you want to edit any additional values, you can do it here.

Save and exit the file and restart gitea.service

systemctl restart gitea.service
systemctl status gitea.service

Step 6: Install Caddy for HTTPS (Recommended)

Caddy provides automatic SSL certificates with zero effort.

sudo apt -y install debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/caddy.list
sudo apt update && sudo apt -y install caddy

Caddy Configuration

Replace git.example.com with your domain:

sudo tee /etc/caddy/Caddyfile >/dev/null <<EOF
git.hnxcloud.com {
    reverse_proxy 127.0.0.1:3000
}
EOF

sudo systemctl reload caddy

Update Gitea URL to HTTPS

Edit config:

sudo nano /etc/gitea/app.ini

Modify:

[server]
ROOT_URL = https://git.example.com/

Restart:

sudo systemctl restart gitea

Navigate to your browser and access:

https://git.example.com

Troubleshooting

If you get 500 error in browser or any error, check status of gitea.service

systemctl status gitea.service

Look why it is failing.

You can also login using 

su - gitea

Execute following command:

/usr/local/bin/gitea web --config /etc/gitea/app.ini

You will get exact error.

Step 7: Backup & Upgrading Gitea

Backup (important)

Backup two things regularly:

/var/lib/gitea (repositories, data, logs)
/etc/gitea/app.ini (config)

Upgrade Gitea

VERSION=1.25.1
wget -O /tmp/gitea https://dl.gitea.com/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo install -m 0755 -o root -g root /tmp/gitea /usr/local/bin/gitea
sudo systemctl restart gitea

Conclusion

By following this guide, we have successfully set up a secure, self-hosted Gitea server on Ubuntu 24.04 with the recommended configuration. Our environment is now ready for managing repositories, collaborating with teams, and building private or business-level development workflows.

Gitea keeps things efficient, lightweight, and fully in our hands, making it a reliable choice for developers who value privacy, performance, and simplicity. With the server running, the next steps can include enabling email notifications, enhancing security, automating backups, and integrating CI/CD to improve the development process even further.