These instructions are based on this article: https://docs.gitea.io/en-us/install-from-source/.
Setup Raspberry Pi with minimal Raspbian image. You need to connect to the HDMI port and set the following:
Use Noobs to install Raspian.
Open menu Preferences > Raspberry Pi Settings
There you need to enable the SSH server and you should change the hostname.
Then configure the correct timezone:
Now log in via ssh and execute the following commands:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install zip git -y
# Might need to update sources.list if nginx package isn't found.
sudo pico /etc/apt/sources.list
# uncomment last line
sudo apt-get update
sudo apt-get install nginx -y
sudo adduser --disabled-login --gecos 'Gitea' git
git clone https://github.com/udhos/update-golang
cd update-golang
sudo ./update-golang.sh
From the pi user issue the following command.
sudo ./update-golang.sh
Then you will need to rebuild Gitea to use the updated version of Go.
sudo su - git
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/git
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOPATH/src/gitea
cd $GOPATH/src
git clone https://github.com/go-gitea/gitea
cd ./gitea
# Checkout the latest tag.
#git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
git checkout $(git ls-remote --refs --tags https://github.com/go-gitea/gitea | awk '!/~|-dev|-rc/' | cut --delimiter='/' --fields=3 | sort --version-sort | tail --lines=1)
sudo su - root
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
This is so the NVM path variables will work.
sudo su - root
cd $GOPATH/src/gitea
# Install Node
nvm install node --lts/dubnium
# Build can take 30-40 minutes or more
TAGS="bindata sqlite sqlite_unlock_notify" make build
[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/src/gitea
ExecStart=/home/git/src/gitea/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
server {
listen 80;
server_name gitea;
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;
}
}
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 service nginx restart
sudo su - git
# Load environmental variables to $PATH as above
cd $GOPATH/src/gitea/
# Checkout the latest tag.
# git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
git checkout $(git ls-remote --refs --tags https://github.com/go-gitea/gitea | awk '!/~|-dev|-rc/' | cut --delimiter='/' --fields=3 | sort --version-sort | tail --lines=1)
exit
sudo su - root
# Load environmental variables to $PATH as above
cd $GOPATH/src/gitea
nvm use lts/dubnium
# Build can take up to 30 minutes or so.
TAGS="bindata sqlite sqlite_unlock_notify" make build
# If pre-built frontend files are present it is possible to only build the backend.
TAGS="bindata" make backend
exit
sudo systemctl restart gitea
Now we want to create a backup script that is run by crontab every day. To do so, create a new file called gitea-backup.sh
and insert the following content (replace YOUR_SERVER/YOUR/DIR as well as USER and PASSWORD):
#!/bin/bash
# Create directory if it does not exist
mkdir -p git
# Mount NAS directory
sudo mount -t cifs //<your-nas>/Git git -o user=<your-nas-user>,pass=<your-password>
# Create backup directory if it does not exist and cd into it
mkdir -p git/gitea-backups
# Run the backup job
sudo zip -r "git/gitea-backups/gitea-backup-$(date +"%Y-%m-%d %H-%M-%S").zip" /home/git/src/gitea/custom /home/git/src/gitea/data /home/git/gitea-repositories
# Remove all files, keeping the last recent one and cd back
cd git/gitea-backups
ls -t1 . | tail -n +3 | xargs -d '\n' rm -f
cd ../..
# Allow changing the backup dir and files
sudo chmod -R 777 git/gitea-backups
# Clean up everything
sudo umount git
rmdir git
Now chmod +x gitea-backup.sh
and create a new crontab entry:
crontab -e
# Now add the following line:
0 0 * * * /home/pi/gitea-backup.sh
This calls our script everyday at 0:00 AM, creates a gogs dump and copies it to our network share.
https://www.bitpi.co/2015/02/11/how-to-change-raspberry-pis-swapfile-size-on-rasbian/
sudo nano /etc/dphys-swapfile
Default value in Raspbian is:
CONF_SWAPSIZE=100
Change to:
CONF_SWAPSIZE=1024
Restart swapfile service
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
Check memory+swap
free -m
You should probably switch the swapsize back once the installation is complete to avoid potential disk issues.
You should find your instance of Gitea at http://localhost:3000, where localhost is the LAN IP of your Raspberry Pi. On your Raspberry Pi you should find it at http://gitea:3000