In this post I’ll explain how I’ve setup Gitea o nmy Raspberry Pi 3.
These instructions are based on this article: https://www.alexruf.net/2016/05/23/setup-gogs-git-service.html.
Setup Raspberry Pi with minimal Raspbian image.
Add an empty file named ssh
to the boot directory of your image.
Create, in the same directory, a file called wpa_supplicant.conf
.
The file should contain the following details:
For Raspbian Jessie:
network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_PASSWORD"
key_mgmt=WPA-PSK
}
For Raspbian Stretch (and newer versions):
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid="YOUR_NETWORK_NAME"
psk="YOUR_PASSWORD"
key_mgmt=WPA-PSK
}
Before putting your raspberry pi on the network, check all connected devices using arp -a
command.
C:\Users\guest>arp -a Interface: 192.168.0.33 --- 0x10 Internet Address Physical Address Type 192.168.0.240 b8-27-eb-58-65-86 dynamic 192.168.0.254 00-07-cb-90-2e-52 dynamic 192.168.0.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.252 01-00-5e-00-00-fc static 224.0.0.253 01-00-5e-00-00-fd static 239.255.255.250 01-00-5e-7f-ff-fa static
Plug your raspberry pi and wait for it to join your wifi network.
Then retype the arp -a
command and compare with the previous result to find the IP given by the DHCP server.
C:\Users\guest>arp -a Interface: 192.168.0.33 --- 0x10 Internet Address Physical Address Type 192.168.0.240 b8-27-eb-58-65-86 dynamic 192.168.0.241 f8-1a-67-19-a4-01 dynamic 192.168.0.254 00-07-cb-90-2e-52 dynamic 192.168.0.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.252 01-00-5e-00-00-fc static 224.0.0.253 01-00-5e-00-00-fd static 239.255.255.250 01-00-5e-7f-ff-fa static
Open an SSH terminal (I use putty
) to this IP address.
Default login and password are: pi/raspberry
Type the following:
sudo raspi-config
There you should change the current user password and the hostname.
I’ll use rpi-git
as new hostname.
Then configure the correct timezone:
sudo dpkg-reconfigure tzdata
Now execute the following commands:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install zip git -y
# Install ntfs-3g
# only if your usb drive is NTFS formatted
sudo apt-get install ntfs-3g
# Create a new user:
sudo adduser --disabled-login --gecos 'Gitea' git
# Change to user git:
sudo su - git
# install gitea from binary
wget -O gitea https://dl.gitea.io/gitea/1.4.0/gitea-1.4.0-linux-arm-7
chmod +x gitea
# Now type `exit` to go back to pi user.
Mount external drive for git repositories and LFS root path
Create the directory where the USB drive will be mount. I choose /mnt/git
sudo mkdir /mnt/git sudo chown -R git:git /mnt/git sudo chmod -R 770 /mnt/git
Get the uid and gid of the git user:
pi@rpi-git:~ $ sudo -u git id uid=1001(git) gid=1001(git) groups=1001(git)
Execute the sudo blkid
command to find your USB uuid:
pi@rpi-git:~ $ sudo blkid /dev/mmcblk0p1: LABEL="boot" UUID="5DB0-971B" TYPE="vfat" PARTUUID="bea18737-01" /dev/mmcblk0p2: LABEL="rootfs" UUID="060b57a8-62bd-4d48-a471-0d28466d1fbb" TYPE="ext4" PARTUUID="bea18737-02" /dev/mmcblk0: PTUUID="bea18737" PTTYPE="dos" /dev/sda1: LABEL="GIT" UUID="91AA-3225" TYPE="ntfs"
Update the /etc/fstab
file by adding the following line (modify this line with your USB drive uuid and type):
UUID=91AA-3225 /mnt/git ntfs-3g uid=1001,gid=1001,umask=007 0 0
Then, you can test your fstab
file is correct with the mount -fav
command:
pi@rpi-git:~ $ sudo mount -fav
/proc : already mounted
/boot : already mounted
/ : ignored
/mnt/git : successfully mounted
If all entries are correct, you can mount your USB drive with the sudo mount -a
command.
Create the file /etc/systemd/system/gitea.service
and add the following content:
[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service 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
Type=simple
User=git
Group=git
WorkingDirectory=/home/git
ExecStart=/home/git/gitea web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
# Start gitea:
sudo systemctl enable gitea
sudo systemctl start gitea
Install and setup nginx with ssl
# Install and configure nginx (see https://gogs.io/docs/advanced/configuration_for_source_builds#setting-up-nginx-sever):
sudo apt-get install nginx -y
Edit /etc/nginx/sites-available/gitea
and insert the following:
server {
listen 443 ssl;
server_name rpi-git <your-domain>;
ssl_certificate /etc/letsencrypt/live/<your-domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<your-domain>/privkey.pem;
location / {
client_max_body_size 364M;
proxy_pass http://localhost:3000;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name rpi-git <your-domain>;
return 301 https://$host$request_uri;
}
Then enable the gitea nginx-site and restart the nginx server:
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea
sudo rm /etc/nginx/sites-enabled/default
sudo service nginx restart
Don’t be afraid if nginx failed to start. We have to add ssl certificate first.
Now we need to create the ssl certificates for the domains.
cd ~
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
sudo ./certbot-auto certonly --standalone -d <your-domain>
In order to update the certificates automatically, we need to create a cron job via sudo crontab -e
and insert the following line:
0 1 2 * * sudo service nginx stop && sudo /home/pi/certbot-auto renew && sudo service nginx start
This executes the three commands on every first day of a month at 2 AM.
Now we can start the nginx server.
sudo service nginx restart
Launch a browser and access the gitea website (https://<your-domain>
), you’ll be redirected to the install page.
Update the following fields
Database type: SQLite3
Root URL: https://<your-domain>
Repository Root Path: /mnt/git/gitea-repositories
LFS Root Path: /mnt/git/data/lfs
Domain: <your-domain>
Log Path: /mnt/git/log
and click the ‘Install gitea’ button.
Then, cick the ‘Register’ button and create the first account, it will be your admin account.
Your gitea server is now up and running!