Gitea is a free, open-source, and self-hosted solution for Git servers. Gitea has written in the Go programming language, a lightweight application, available as the binary package that can be installed on most of the platforms including Windows, Linux, and macOS. It is one of the robust, scalable, fast, easy to use and alternatives to GitLab.

Gitea offers many features including a repository file editor, bug and time tracking, repository branching, file locking, built-in wiki, merging, Multiple database support, Easy upgrade process, Built-in Container Registry, and much more.

In this tutorial, I will show you how to install Gitea from binary with PostgreSQL on Debian 11.

Prerequisites

  • A server running Debian 11.
  • A root password is configured on the server.

Step 1 – Update OS

Before starting Gitea installation, run the below command to update your system with the latest version.

sudo apt-get update -y

sudo apt-get upgrade -y

Step 2 – Install and Configure PostgreSQL

Gitea supports all major databases like MySQL, MariaDB, SQLite, MySQL, and PostgreSQL, But in this guide, PostgreSQL is used as a Gitea database.

First, create PostgreSQL Repository using the following command:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Next, you will need to import the repository signing key:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Now, install PostgreSQL by using the following commands:

sudo apt-get update

sudo apt-get -y install postgresql

Next, start the PostgreSQL service, enable it at system startup, and check PostgreSQL service status using the following command:

sudo systemctl start postgresql

sudo systemctl enable postgresql

sudo systemctl status postgresql

<img alt="Install PostgreSQL" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/postgres_status.png61d426d7d7324.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="214" loading="lazy" src="data:image/svg xml,” width=”750″>

Next, You need to switch to ‘SCRAM-SHA-256’ scheme from md5 encryption scheme for better security. If you want to connect to PostgreSQL remotely, then you need to allow your IP address in the PostgreSQL configuration file. Open Configuration file to make changes using the following command:

sudo vim /etc/postgresql/14/main/postgresql.conf

If you have another PostgreSQL version installed, then change the above command path according to it.

Next, change the following variables as per your requirement:

listen_addresses = 'localhost, 134.122.38.45'

password_encryption = scram-sha-256

Save and exit the file and restart the PostgreSQL service to apply changes.

sudo systemctl restart postgresql

Next, Log in to the PostgreSQL shell using the following command:

sudo -u postgres psql

Then create a user role and database for Gitea by executing the following command:

postgres=# CREATE ROLE gitea WITH LOGIN PASSWORD '[email protected]';

postgres=# CREATE DATABASE giteadb;

postgres=# GRANT ALL PRIVILEGES ON DATABASE giteadb TO gitea;

postgres=# exit

Here, you need to set username, database name, and your password for Gitea.

<img alt="Create role in postgres" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/grant.png61d426d7e7ac5.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="220" loading="lazy" src="data:image/svg xml,” width=”563″>

At this point, your PostgreSQL setup and ready for Gitea, verify authentication settings in /etc/postgresql/14/main/pg_hba.conf file.

PostgreSQL accepts all local connections by defaults.

host    all             all             127.0.0.1/32            scram-sha-256

If you want to use giteadb remotely, then add the following line with your IP address in /etc/postgresql/14/main/pg_hba.conf

host    giteadb        gitea            134.122.38.0/32           scram-sha-256 


<img alt="Configure host" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/db_local_remote.png61d426d808a54.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="250" loading="lazy" src="data:image/svg xml,” width=”750″>

Step 3 – Install and configure Git

Next, install git using the following command:

sudo apt install git

Verify the git installation by checking the Git version:

git --version

Output:-

git version 2.30.2

Next, you need to set your name and email address for Git.

git config --global user.name "Your Name"

git config --global user.email "[email protected]

You can check your Git configuration by using the following command.

git config --list

Output:-

user.name=Your Name

[email protected]

Step 4 – Create a git user for Gitea

Now, you will need to create a Gitea user. You can do this with the following command:

sudo adduser 

   --system

   --shell /bin/bash

   --gecos 'Git Version Control'

   --group

   --disabled-password

   --home /home/git

   git

This will create a new user git.

Step 5 – Install and Configure Gitea

Go to the Gitea Download Page and download the latest version of the Gitea binary available. At the time of writing this tutorial, Gitea’s latest version is 1.15.7. You can change the VERSION variable in the below command to install any other version.

cd /tmp
GITEAVERSION=1.15.7

wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64

Next, move the Gitea binary to the system path with the following command:

sudo mv /tmp/gitea /usr/local/bin

Next, set executable permission to the Gitea binary file by running the following command into the terminal:

chmod  x /usr/local/bin/gitea

Next, you will need to create a directory structure for Gitea, to do so run the following commands:

sudo mkdir -p /etc/gitea

sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}

Next, give required permissions for Gitea to work properly with the following commands:

sudo chown -R git:git /var/lib/gitea/

sudo chown root:git /etc/gitea

sudo chmod -R 750 /var/lib/gitea/

sudo chmod 770 /etc/gitea

Next, create a systemd service file for Gitea with the following command:

vim /etc/systemd/system/gitea.service

Paste the following code in it.

[Unit]

Description=Gitea

After=syslog.target

After=network.target

After=postgresql.service[Service]

RestartSec=2s

Type=simple

User=git

Group=git

WorkingDirectory=/var/lib/gitea/

ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini

Restart=always

Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]

WantedBy=multi-user.target

Save and exit the file. Then reload systemd daemon and start Gitea service using the below command:

sudo systemctl daemon-reload
sudo systemctl start gitea

Next, you need to enable Gitea service at system reboot:

sudo systemctl enable gitea

Next, verify the status of Gitea with the following command:Advertisement

sudo systemctl status gitea

You should see the following output:


<img alt="Check Gitea Status" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/git_service_status.png61d426d83a073.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="210" loading="lazy" src="data:image/svg xml,” width=”750″>

As you can see, Gitea is started and running on port 3000 by default. You can verify Gitea port with the following command:

netstat -tulpan | grep 3000

You should see output like the below:

tcp6       0      0 :::3000                 :::*                    LISTEN      43778/gitea

Step 6 – Access Gitea Web Interface

Gitea is now up and listening on port 3000 by default. Open your browser and type https://YOURIPADDRESS:3000.

Next, fill in the required parameters as follows:

Database Settings

    Database Type: PostgreSQL

    Host: 127.0.0.1:5432

    Username: gitea

    Password: Enter the password you chose during Postgres role creation.

    Database Name: giteadb

    SSL: Disable

General Settings



    Site Title: Title of your choice.

    Repository Root Path: /var/lib/gitea/data/repositories

    Git LFS Root Path: /var/lib/gitea/data/lfs

    Run As Username: git

    SSH Server Domain: your_domain/IP

    SSH Server Port: 22

    Gitea HTTP Listen Post: 3000

    Gitea Base URL: http://YOURIPADDRESS:3000

    Log Path: /var/lib/gitea/log

<img alt="Gitea General Settings" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/general_setting.png61d426d89440a.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="750" loading="lazy" src="data:image/svg xml,” width=”747″>

At this stage, you can configure your email and Server and Third-party settings, or you can do it later. However, you should configure the Administrator

username to log in to Gitea. Hence, go to Optional Setting and enter Administrator Account Setting details and create ‘Administrator User’ for Gitea.

<img alt="Gitea Optional Settings" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/optional.png61d426d8c5f94.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="417" loading="lazy" src="data:image/svg xml,” width=”750″>

Next, click on the ‘Install Gitea’ button. Once the installation has been completed successfully, you will be redirected to the Gitea dashboard shown in the following page:

<img alt="Gitea Dashboard" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/dash.png61d426d909c04.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="395" loading="lazy" src="data:image/svg xml,” width=”750″>

Now, you can explore Gitea and from the Site Administration option from your admin account, you can set up other 3rd party services like integrating window’s active directory with Gitea.

<img alt="Gitea Summary" data-ezsrc="https://kirelos.com/wp-content/uploads/2022/01/echo/s.png61d426d93db61.jpg" ezimgfmt="rs rscb5 src ng ngcb5" height="416" loading="lazy" src="data:image/svg xml,” width=”750″>

Step 7 – Setting up Email Notifications

You can enable Email Notifications in Gitea using Sendmail or via a 3rd party Email service such as Amazon SES, Sendgrid.

To enable Email Notifications, Open the Gitea configuration file using the following command:

vim /etc/gitea/app.in

Next, edit the following section in the file and add the following code as per your email settings.

[mailer]

ENABLED        = true

FROM           = [email protected]

MAILER_TYPE    = smtp

HOST           = mail.example.com:587

IS_TLS_ENABLED = true

USER           = [email protected]

PASSWD         = password

Save and exit the file and restart Gitea service to apply changes:

sudo systemctl restart gitea

Step 10 – Updating Gitea

Upgrading Gitea is an effortless process, and you just need to download and replace the Gitea binary.

First, stop the Gitea service:

sudo systemctl stop gitea

Next, Download and install the Gitea binary using the following command:

cd /tmp

GITEAVERSION=LATESTVERSION

wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64

sudo mv gitea /usr/local/bin

sudo chmod x /usr/local/bin/gitea

Next, start the Gitea service with the following command:

sudo systemctl start gitea

Now, your Gitea is up-to-date without any downtime.

Conclusion

Congratulations! You have successfully installed the Gitea git service on Debian 11. You can now easily update Gitea and manage your git repository through a web browser. Furthermore, you are welcome to ask me if you have any questions.