Setup Gitea on Raspberry Pi (3b+)
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
Install nginx
# 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
Create a new user:
sudo adduser --disabled-login --gecos 'Gitea' git
Install latest release of Go
git clone https://github.com/udhos/update-golang
cd update-golang
sudo ./update-golang.sh
Updating version of Go
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.
Change to user git:
sudo su - git
Set environment variables
You will eventually need to add these environmental variables to each user pi, git, root
If the javascript heap is causing issues run the first command below.
export NODE_OPTIONS=--max_old_space_size=1024
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/git
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOPATH/src/gitea
Clone gitea and checkout latest tag
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)
git checkout $(git ls-remote --refs --tags https://github.com/go-gitea/gitea | awk '!/~|-dev|-rc/' | awk '{print $2}' | awk -F '/' '{print $3}' | sort --version-sort | tail --lines=1)
exit
to go back to pi user
Now type Build gitea under root user
sudo su - root
Reset environment variables above with root user
Install NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
exit
and close the terminal window, then open a new terminal window
Now type This is so the NVM path variables will work.
Now install node lts/fermium and build.
sudo su - root
cd $GOPATH/src/gitea
# Install Node
nvm ls
nvm install node --lts/fermium
nvm use lts/fermium
# Build can take 30-40 minutes or more
TAGS="bindata sqlite sqlite_unlock_notify" make build
exit
to go back to pi user.
Now type Configure Gitea and Nginx
/etc/systemd/system/gitea.service
and add the following content:
Create/Edit [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
/etc/nginx/sites-available/gitea
and insert the following:
Create/Edit 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
Update Gitea
sudo su - git
# Load environmental variables to $PATH as above
cd $GOPATH/src/gitea/
git fetch --all --tags
# 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)
git checkout $(git ls-remote --refs --tags https://github.com/go-gitea/gitea | awk '!/~|-dev|-rc/' | awk '{print $2}' | awk -F '/' '{print $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/fermium
# 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
Create backup-script
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.
Virtual memory exhausted: Cannot allocate memory
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=2048
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
Thanks !! It works !