Gogs is an open-source self-hosted Git service written in Go language. It is a lightweight alternative to Github, Gitlab, or Bitbucket. In this tutorial, we will provide you with steps on how to install Gogs on POP! OS Latest.
Before we start, please make sure that you have a user account with sudo privileges, along with the following packages:
Open the terminal and run the following commands:
sudo apt update
sudo apt install git postgresql nginx
You can install Go using the official documentation, or by running the following commands:
sudo apt install golang
Verify the installation using the following command:
go version
Create a new PostgreSQL database with the following command:
sudo -u postgres createdb -O postgres -E UTF8 gogs
Create a new user account for the Gogs repository and switch to it:
sudo adduser --system --group --disabled-login gogs
sudo su - gogs
Clone the Gogs repository:
git clone https://github.com/gogs/gogs $HOME/gogs
Build the Gogs binary using the following command:
cd $HOME/gogs
go build
The binary file will be created inside the gogs
folder.
Create a configuration file for the Gogs service:
cp $HOME/gogs/custom/config/app.ini.sample $HOME/gogs/custom/config/app.ini
nano $HOME/gogs/custom/config/app.ini
In the configuration file, change the following settings:
[server]
HTTP_PORT = 3000
ROOT_URL = http://[SERVER_IP]:3000/
; Change SERVER_IP to the IP address of your server
[database]
TYPE = postgres
HOST = 127.0.0.1:5432
NAME = gogs
USER = postgres
PASSWD =
; Change these settings based on your database configuration
Save and exit the file.
Create a new Nginx configuration file:
sudo nano /etc/nginx/conf.d/gogs.conf
Paste the following configuration:
upstream gogs {
server 127.0.0.1:3000;
keepalive 30;
}
server {
listen 80;
server_name _;
# Redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/cert.key;
# Change these settings based on your SSL and domain
location / {
proxy_pass http://gogs;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Save and close the file.
Now, we can start the Gogs service using the following command:
./gogs web
You can access the Gogs web interface by visiting http://[SERVER_IP]:3000
using your favorite web browser.
To ensure that Gogs is always running in the background, we can create a Systemd service for it.
Create a new file /etc/systemd/system/gogs.service
and paste the following configuration:
[Unit]
Description=Gogs Git Service
After=syslog.target
After=postgresql.service
[Service]
User=gogs
Group=gogs
ExecStart=/path/to/gogs web
Restart=always
Environment=USER=gogs HOME=/home/gogs
[Install]
WantedBy=multi-user.target
Save and close the file.
Reload the Systemd configuration:
sudo systemctl daemon-reload
Start and enable the Gogs service:
sudo systemctl start gogs
sudo systemctl enable gogs
In this tutorial, we have learned how to install Gogs on POP! OS Latest, and how to configure it to run as a service in the background. You can now use Gogs to host your own repository and collaborate with your team.
If you want to self-host in an easy, hands free way, need an external IP address, or simply want your data in your own hands, give IPv6.rs a try!
Alternatively, for the best virtual desktop, try Shells!