Cara install Gitea di Ubuntu 18.04
Tags: gitea, linux, indonesia, ubuntu
Published: 2021-03-11 18:43:10

Gitea adalah sebuah git server yang merupakan solusi bagi para developer yang ingin mencari alternatif menyimpan koleksi repository. Gitea merupakan sebuah proyek open source berbasis Go.

Salah satu keunggulan dari Gitea dibanding server self-hosted populer seperti Gitlab dan sejenisnya, adalah membutuhkan resource yang minim namun memiliki fitur yang melimpah seperti Github.

![Konfigurasi server untuk tutorial ini](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eec55c4b3dqwbrk79og8.png)

Tutorial ini akan membahas cara instalasi Gitea di Ubuntu 18.04.

## Persiapan

Gitea mendukung penggunaan MySQL/MariaDB, SQLite, dan PostgreSQL sebagai backend database. Namun dalam artikel kali ini, akan menggunakan SQLite.

Apabila SQLite belum terpasang pada sistem, silahkan install dengan menggunakan perintah berikut.
```
sudo apt update
sudo apt install -y sqlite3
```

## Instalasi Gitea

Gitea memungkinkan penggunakan Docker image sebagai sarana untuk instalasi, juga tersedia dalam bentuk binary, source, dan package.

Pada artikel ini, instalasi akan menggunakan bentuk binary. Silahkan ikuti langkah instalasi berikut.

### Install Git

Langkah pertama adalah dengan memasang Git pada server, jika belum ada sebelumnya.
```
sudo apt install git
```

Kemudian lakukan verifikasi instalasi Git dengan cara,
```
git --version
```

Outputnya akan seperti dibawah ini.
```
git version 2.25.1
```

### Tambahkan user git

Tambah sebuah user baru untuk menjalankan Gitea dengan cara berikut.
```
sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git --gecos 'Git Version Control' git
```

Perintah ini akan secara otomatis menambahkan sebuah user bernama `git` dan mengatur direktori home pada `/home/git`. Outputnya akan mirip dengan dibawah ini.
```
Adding system user `git' (UID 113) ...
Adding new group `git' (GID 117) ...
Adding new user `git' (UID 113) with group `git' ...
Creating home directory `/home/git' ...
```

### Unduh binary milik Gitea

Kunjungi  [halaman unduhan Gitea](https://dl.gitea.io/gitea/) dan lihat versi terakhir yang tersedia untuk diunduh. Disarankan jangan mengambil yg masih RC (release candidate). Pada saat artikel ini dibuat, versi terakhir saat artikel ini ditulis adalah `1.13.4`. Apabila terdapat versi yang lebih baru, silahkan ganti variabel dari `VERSION` pada perintah dibawah.
```
VERSION=1.13.4
sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
```

Perintah diatas adalah perintah untuk mengunduh Gitea ke direktori `/tmp` dan selanjutnya pindahkan ke direktori `/usr/local/bin`.
```
sudo mv /tmp/gitea /usr/local/bin
```

Setelah itu, jalankan perintah berikut secara berurutan.
```
sudo chmod +x /usr/local/bin/gitea
sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
sudo chown git: /var/lib/gitea/{data,indexers,log}
sudo chmod 750 /var/lib/gitea/{data,indexers,log}
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
```

### Membuat file unit systemd

Unduh filenya dengan menggunakan perintah berikut.
```
sudo wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service -P /etc/systemd/system/
```

Atau dengan cara manual, buat file `gitea.service` di direktori `/etc/systemd/system/` dengan menyalin kode dibawah ini.
```
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# Don't forget to add the database service requirements
###
#
#Requires=mysql.service
#Requires=mariadb.service
#Requires=postgresql.service
#Requires=memcached.service
#Requires=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## Service=gitea.service
## ListenStream=<some_port>
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini  --custom-path /home/git/custom
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###

[Install]
WantedBy=multi-user.target
```

Setelah selesai, jalankan perintah ini secara berurutan untuk menjalankan Gitea.
```
sudo systemctl daemon-reload
sudo systemctl enable --now gitea
```

Pastikan Gitea sudah aktif dengan mengeksekusi perintah berikut.
```
sudo systemctl status gitea
```

Outputnya akan mirip dengan dibawah.
```
● gitea.service - Gitea (Git with a cup of tea)
   Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: enabled)
   Active: active (running) since 5s ago
 Main PID: 5111 (gitea)
    Tasks: 7
   Memory: 90.8M
      CPU: 542ms
   CGroup: /system.slice/gitea.service
           └─5111 /usr/local/bin/gitea web --config /etc/gitea/app.ini
...
```

### Konfigurasi awal Gitea

Pada tahap ini Gitea sudah aktif, saatnya untuk melakukan pengaturan lewat web browser.

Secara default, Gitea beroperasi menggunakan port `3000`. Pada sistem yang menggunakan `ufw` firewall, diharuskan untuk membuka port ini dengan perintah berikut.
```
sudo ufw allow 3000/tcp
```

Buka browser dan akses alamat `http://HOSTNAME_ANDA:3000` atau `http://IP_SERVER:3000` dan tampilannya akan seperti ini.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ht0ou3ls3rl4ncwtznds.png)

Klik Explore pada menu kiri atas yang akan membuka halaman pengaturan Gitea.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n915ffzt31msoou6iam4.png)

Adapun pengaturan yang disarankan adalah sebagai berikut.

**Database Settings**

- Database Type: `SQLite3`
- Path: `/var/lib/gitea/data/gitea.db`

**General Settings**

- Site Title: Enter your organization name.
- Repository Root Path: `/home/git/gitea-repositories`
- Git LFS Root Path: `/var/lib/gitea/data/lfs`
- Run As Username: `git`
- SSH Server Domain: Masukkan domain atau nomor IP server.
- SSH Port: `22`, ganti apabila SSH menggunakan port yang lain.
- Gitea HTTP Listen Port: `3000`
- Gitea Base URL: Masukkan http dan nama domain atau nomor IP server.
- Log Path: `/var/lib/gitea/log`

Pengaturan diatas bisa diatur ulang kemudian dengan cara mengedit langsung file konfigurasi Gitea.

Klik <kbd>Install Gitea</kbd>. Dalam waktu singkat browser akan membuka halaman login.

Klik **Register** dan lakukan pendaftaran user baru. User ini akan secara otomatis menjadi administrator.

Untuk menyelesaikan tahap instalasi Gitea, jalankan perintah berikut ini.
```
sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini
```

## Konfigurasi Nginx sebagai Proxy SSL

Tahap ini akan menunjukkan cara melakukan konfigurasi Nginx dan Lets Encrypt, agar Gitea dapat diakses via koneksi https dan tidak lagi menggunakan port. Tidak harus, namun **sangat direkomendasikan**.

Artikel ini akan menggunakan `git.contoh.com` sebagai nama domain. Cek kembali pengaturan DNS dan pastikan nama domain sudah diarahkan ke alamat IP server ini, bisa dicek menggunakan perintah berikut.
```
dig git.contoh.com +short
```

Output yang diharapkan adalah sebuah nomor IP, yaitu IP server ini.

### Install Nginx

Install Nginx dengan perintah berikut.
```
sudo apt update
sudo apt install nginx
```

Lalu periksa apakah berjalan normal dengan perintah ini.
```
sudo systemctl status nginx
```

Outputnya akan terlihat mirip seperti ini.
```
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since 1min 1s ago
     Docs: man:nginx(8)
 Main PID: 30035 (nginx)
    Tasks: 2 (limit: 661)
   CGroup: /system.slice/nginx.service
           ├─30035 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─30038 nginx: worker process
...
```

Lakukan konfigurasi pada firewall untuk nginx, jika menggunakan `ufw` firewall lakukan perintah berikut secara berurutan.
```
sudo ufw disable
sudo ufw allow 'Nginx Full'
sudo ufw enable
```

Periksa status firewall dengan cara ini.
```
sudo ufw status
```

Outputnya kurang lebih akan terlihat seperti berikut.
```
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx Full                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx Full (v6)            ALLOW       Anywhere (v6)
```

Setelah itu buka browser dan coba akses alamat `http://IP_ADDRESS`, apabila terlihat halaman dengan tulisan,

> **Welcome to nginx!**

Berarti langkah instalasi Nginx selesai. Cara instalasi diatas bisa juga dibaca pada artikel berikut.

{% post https://dev.to/erolj/cara-install-nginx-di-ubuntu-18-04-43k2 %}

### Buat server block

Langkah selanjutnya, adalah membuat server block untuk domain `git.contoh.com`.

Pertama, sediakan direktori yang akan menjadi tempat menaruh semua file website nantinya. Jalankan perintah berikut.
```
sudo mkdir -p /var/www/git.contoh.com/public_html
```

Selanjutnya buat file `index.html` yang akan menjadi halaman utama dari domain `git.contoh.com` dengan menjalankan perintah berikut.
```
sudo vim /var/www/git.contoh.com/public_html/index.html
```

Pada editor teks yang terbuka, salin kode dibawah ini atau silahkan gunakan kode milik sendiri.
```
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to git.contoh.com</title>
  </head>
  <body>
    <h1>Success! git.contoh.com home page!</h1>
  </body>
</html>
```

Simpan dan tutup editor teksnya, lalu eksekusi perintah berikut.
```
sudo chown -R www-data: /var/www/git.contoh.com
```

Langkah kedua, pembuatan server block dengan cara berikut.
```
sudo vim /etc/nginx/sites-available/git.contoh.com
```

Pada editor teks yang terbuka, gunakan kode dibawah ini.
```
server {
    listen 80;
    listen [::]:80;

    root /var/www/git.contoh.com/public_html;

    index index.html;

    server_name git.contoh.com;

    access_log /var/log/nginx/git.contoh.com.access.log;
    error_log /var/log/nginx/git.contoh.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}
```

Untuk mengaktifkan konfigurasi server block diatas, jalankan perintah berikut.
```
sudo ln -s /etc/nginx/sites-available/git.contoh.com /etc/nginx/sites-enabled/
```

Selanjutnya cek konfigurasi Nginx jika terdapat error.
```
sudo nginx -t
```

Jika tanpa error, outputnya akan terlihat seperti berikut.
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

Restart Nginx.
```
sudo systemctl restart nginx
```

Silahkan cek server block yang baru dibuat apakah berfungsi dengan baik. Caranya dengan mengakses via browser alamat `http://git.contoh.com`, hasil yang diharapkan adalah terlihat sebuah halaman yang bertuliskan,

> **Success! git.contoh.com home page!**

Cara instalasi server block untuk Nginx bisa juga dibaca pada artikel berikut.

{% post https://dev.to/erolj/cara-membuat-server-block-nginx-di-ubuntu-18-04-3cfk %}

### Proteksi server block dengan Let's Encrypt

#### Instalasi Certbot

Untuk mendaftarkan certbot, jalankan perintah berikut secara berurutan. Perintah pada baris terakhir akan membutuhkan waktu yang agak lama, harap sabar menunggu hingga selesai.
```
sudo apt install certbot
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
```

#### Pendaftaran sertifikat SSL dari Let’s Encrypt

Jalankan perintah berikut secara berurutan.
```
mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt
```

Buat file `letsencrypt.conf` dengan cara berikut.
```
sudo vim /etc/nginx/snippets/letsencrypt.conf
```

Salin dan isi kode dibawah ini.
```
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}
```

Simpan perubahan dan lanjutkan membuat file kedua yaitu `ssl.conf`.
```
sudo vim /etc/nginx/snippets/ssl.conf
```

Salin dan isi kode dibawah ini.
```
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
```

Simpan perubahan, selanjutnya file `letsencrypt.conf` harus dideklarasikan pada server block dengan cara berikut.
```
sudo vim /etc/nginx/sites-available/git.contoh.com
```

Tambahkan baris kode berikut ini dalam file tersebut.
```
  include snippets/letsencrypt.conf;
```

Konfigurasinya sekarang kurang lebih akan terlihat seperti ini.
```
server {
    listen 80;
    listen [::]:80;

    root /var/www/git.contoh.com/public_html;

    index index.html;

    server_name git.contoh.com;

    access_log /var/log/nginx/git.contoh.com.access.log;
    error_log /var/log/nginx/git.contoh.com.error.log;

    include snippets/letsencrypt.conf;

    location / {
        try_files $uri $uri/ =404;
    }
}
```

Simpan perubahan, verifikasi kembali konfigurasinya jika sudah benar.
```
sudo nginx -t
```

Jika bebas error, lanjutkan dengan me-restart nginx.
```
sudo systemctl restart nginx
```

Sesudah restart, jalankan perintah berikut untuk mendaftarkan sertifikat SSL untuk server block domain yang baru dibuat diatas. Perhatikan, jangan lupa tulisan `ALAMAT_EMAIL` diganti dengan alamat email milik Anda.
```
sudo certbot certonly --agree-tos --email ALAMAT_EMAIL --webroot -w /var/lib/letsencrypt/ -d git.contoh.com
```

Output yang dihasilkan apabila sertifikat SSL berhasil diperoleh, akan terlihat seperti dibawah ini.
```
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/git.contoh.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/git.contoh.com/privkey.pem
   Your cert will expire on 2021-06-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
```

Sekarang setelah sertifikat SSL sudah diperoleh, edit kembali file konfigurasi server block.
```
sudo vim /etc/nginx/sites-available/git.contoh.com
```

Salin dan update dengan menggunakan kode dibawah ini.
```
server {
    listen 80;
    server_name git.contoh.com;

    root /var/www/git.contoh.com/public_html;

    index index.html;

    include snippets/letsencrypt.conf;

    access_log /var/log/nginx/git.contoh.com.access.log;
    error_log /var/log/nginx/git.contoh.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.contoh.com;

    root /var/www/git.contoh.com/public_html;

    index index.html;

    ssl_certificate /etc/letsencrypt/live/git.contoh.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.contoh.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/git.contoh.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . kode lainnya
}
```

Simpan perubahan, verifikasi kembali konfigurasinya jika sudah benar.
```
sudo nginx -t
```

Jika bebas error, lanjutkan dengan me-restart nginx.
```
sudo systemctl restart nginx
```

Buka browser, lalu coba akses domain kali dengan menggunakan `https://git.contoh.com`.

#### Pengaturan cronjob untuk certbot

Langkah ini bertujuan untuk memastikan sertikat SSL Let's Encrypt diperpanjang secara otomatis, ketika akan habis masa berlakunya dalam waktu `30` hari.

Pertama, edit cronjob milik certbot dengan perintah ini.
```
sudo vim /etc/cron.d/certbot
```

Ubah baris cronjob yang sudah ada menjadi seperti dibawah ini.
```
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"
```

Simpan perubahan diatas, selanjutnya untuk mengecek proses perpanjangan sertifikat SSL, bisa dicoba dengan perintah `--dry-run` berikut ini.
```
sudo certbot renew --dry-run
```

Jika tidak muncul error, maka outputnya akan terlihat seperti ini.
```
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/git.contoh.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
```

Cara memproteksi Nginx dengan Let's Encrypt bisa juga dibaca pada artikel berikut.

{% post https://dev.to/erolj/cara-proteksi-nginx-dengan-let-s-encrypt-di-ubuntu-18-04-1pnh %}

## Konfigurasi lanjutan Gitea

Edit file konfigurasi server block untuk domain `git.contoh.com` dengan menjalankan perintah berikut.
```
sudo vim /etc/nginx/sites-enabled/git.contoh.com
```

Pada editor teks yang terbuka, salin dan update file dengan menggunakan kode dibawah ini.
```
server {
    listen 80;
    server_name git.contoh.com;

    include snippets/letsencrypt.conf;
    return 301 https://git.contoh.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.contoh.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    client_max_body_size 50m;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/git.contoh.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.contoh.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/git.contoh.com/chain.pem;
    include snippets/letsencrypt.conf;
    include snippets/ssl.conf;

    # log files
    access_log /var/log/nginx/git.contoh.com.access.log;
    error_log /var/log/nginx/git.contoh.com.error.log;

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://127.0.0.1:3000;
    }
}

```

Simpan perubahan, verifikasi kembali konfigurasinya jika sudah benar.
```
sudo nginx -t
```

Jika bebas error, lanjutkan dengan me-restart nginx.
```
sudo systemctl restart nginx
```

Selanjutnya ganti url default Gitea dengan domain `git.contoh.com` lewat perintah berikut.
```
sudo vim /etc/gitea/app.ini
```

Pada editor teks, cari bagian `[server]` kemudian ubah menjadi seperti berikut ini.
```
[server]
DOMAIN           = git.contoh.com
ROOT_URL         = https://git.contoh.com/
```

Simpan perubahan, dan restart Gitea.
```
sudo systemctl restart gitea
```

Sampai pada langkah ini, Gitea sudah bisa diakses menggunakan alamat `https://git.contoh.com`

## Konfigurasi notifikasi email

Supaya Gitea bisa mengirimkan email notifikasi, dibutuhkan pengaturan lanjutan pada file konfigurasi Gitea.

Buka file konfigurasi Gitea.
```
sudo vim /etc/gitea/app.ini
```

Cari bagian `[mailer]` dan lakukan perubahan di bagian itu dengan memasukkan konfigurasi SMTP yang tepat. Konfigurasi yang salah, akan menyebabkan email notifikasi tidak akan terkirim.
```
[mailer]
ENABLED = true
HOST    = SMTP_SERVER:SMTP_PORT
FROM    = SENDER_EMAIL
USER    = SMTP_USER
PASSWD  = YOUR_SMTP_PASSWORD
```

Simpan perubahan, dan restart kembali Gitea.
```
sudo systemctl restart gitea
```

Untuk melakukan pengecekan apakah berfungsi dengan baik, kunjungi: Site Administration > Configuration > SMTP Mailer Configuration, dan cobalah untuk mengirim Test Email dari situ.

## Upgrade Gitea

Stop Gitea terlebih dulu dengan perintah berikut.
```
sudo systemctl stop gitea
```

Kunjungi  [halaman unduhan Gitea](https://dl.gitea.io/gitea/) dan lihat versi terbaru yang tersedia untuk diunduh. Lalu ganti variabel dari `VERSION` pada perintah dibawah, dan jalankan perintah ini secara berurutan.
```
VERSION=<VERSI_TERBARU_GITEA>
wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo mv /tmp/gitea /usr/local/bin
sudo chmod +x /usr/local/bin/gitea
sudo systemctl restart gitea
```

Bisa juga dilakukan dengan membuat file `gitea-upgrade.sh` dan mengisi-nya dengan kode dibawah ini.
```
#!/bin/bash

VERSION=<VERSI_TERBARU_GITEA>

echo -e "\n"
echo -e "\e[0;36m..---Upgrade Gitea---...\e[m"
echo "......" && sudo systemctl stop gitea && sleep 1
wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64 && sleep 1
sudo mv /tmp/gitea /usr/local/bin && sleep 1
sudo chmod +x /usr/local/bin/gitea && sleep 1
sudo systemctl restart gitea
echo -e "\e[0;36m>> SUKSES upgrade Gitea ke versi ${VERSION}.\e[m"

```

Jangan lupa mengganti variable `VERSION` terlebih dulu sebelum menyimpan file nya. Untuk mengeksekusinya, jalankan perintah berikut ini.
```
sudo bash gitea-upgrade.sh
```

Selesai.