How to install gitea git server on Ubuntu 18

download gitea binary

wget -O gitea1.9.3.xz https://github.com/go-gitea/gitea/releases/download/v1.9.3/gitea-1.9.3-linux-amd64.xz

extract archive

unxz gitea1.9.3.xz

check binary integrity

cat https://github.com/go-gitea/gitea/releases/download/v1.9.3/gitea-1.9.3-linux-amd64.sha256
sha256sum gitea1.9.3

make binary executable

chmod +x gitea1.9.3

move gitea binary to final location

mv gitea1.9.3 /usr/local/bin/

create symbolic link to current version

ln -s /usr/local/bin/gitea1.9.3 /usr/local/bin/gitea

create system user to run gitea

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Gitea' \
   --group \
   --disabled-password \
   --home /home/gitea \
   gitea

create directories and permissions

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R gitea:gitea /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:gitea /etc/gitea
chmod 770 /etc/gitea

create gitea service

https://github.com/go-gitea/gitea/blob/master/contrib/systemd/gitea.service

nano /etc/systemd/system/gitea.service
[Unit]
Description=Gitea
After=syslog.target
After=network.target
#Requires=mysql.service
Requires=mariadb.service
#Requires=postgresql.service
#Requires=memcached.service
#Requires=redis.service

[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=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

enable and start service

systemctl enable gitea
systemctl start gitea

create database and user

mysql -u root

CREATE DATABASE gitea;
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE, DROP, INDEX, ALTER, CREATE, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `gitea`.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;

create SSH tunnel between server and local machine for port 3000

ssh user@octopuslabs.io -i private.pem -L 3000:localhost:3000 -N -v

install gitea through browser

http://localhost:3000/install

create the first user account which will be the main admin

http://localhost:3000/register

once installation is complete, update permissions

chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini

to use gitea without SSH tunnel and on default port 80, we setup gitea running through apache reverse proxy

add to apache site https config

<VirtualHost *:443>

...

<Proxy *>
     Order allow,deny
     Allow from all
</Proxy>

AllowEncodedSlashes NoDecode

# Note: no trailing slash after either /git or port
ProxyPass /gitea http://localhost:3000 nocanon
ProxyPassReverse /gitea http://localhost:3000
</VirtualHost>

enable apache proxy module

a2enmod proxy_http

restart apache

systemctl restart apache2

edit gitea config

[server]
ROOT_URL = https://octopuslabs.io/gitea/

restart gitea service

systemctl restart gitea

test in browser

Open the gitea url in your browser (ROOT_URL)

enable git lfs support

LFS_START_SERVER = true
LFS_CONTENT_PATH = /home/gitea/data/lfs

hide gitea from search engine

You may want to hide your gitea installation from search engines...

tweak gitea configuration

https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample