Using a Different System?
-
Setup Gogs on Linux
Gogs is a painless self-hosted Git service.
This guide uses PostgreSQL for the database and Nginx as a reverse proxy. After following this guide, you will be able to access the Gogs web interface through HTTP
and the hosted git repositories through HTTP
and SSH
. HTTPS
access can be added by extending the Nginx configuration.
You should have an up-to-date system and a non-root sudo user.
Setup the Database
This guide uses PostgreSQL. You can alternatively use MySQL/MariaDB, SQLite3, MSSQL, or TiDB.
Install PostgreSQL.
sudo apt-get install -y postgresql
Create the user in which Gogs will connect to the database. This will prompt you to create a password for that user. This password will be entered into Gog’s configuration later.
sudo -u postgres createuser gogs -P
Create the Gogs database.
sudo -u postgres createdb gogs -O gogs -E UTF8
Setup the Reverse Proxy
This guide uses Nginx as a reverse proxy. You can alternatively use another HTTP
server that can act as a reverse proxy such as Apache or Caddy.
Install Nginx.
sudo apt-get install -y nginx
Edit /etc/nginx/sites-enabled/default
.
sudo nano /etc/nginx/sites-enabled/default
Find the following lines.
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
Change them to this.
location / {
proxy_pass http://127.0.0.1:3000;
}
Reload Nginx to use the new configuration.
sudo systemctl reload nginx
Install Gogs
First, make sure git
is installed.
sudo apt-get install -y git
Then create the user Gogs will run as and which will be used for SSH git access.
sudo useradd -m git
Next, download and unpack the Gogs release for your architecture.
For 64-bit systems.
sudo -u git sh -c "curl https://dl.gogs.io/0.11.29/linux_amd64.tar.gz | tar -xz -C /home/git/"
For 32-bit systems.
sudo -u git sh -c "curl https://dl.gogs.io/0.11.29/linux_386.tar.gz | tar -xz -C /home/git/"
Setup Gogs to run on boot.
sudo cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system
sudo systemctl enable gogs
Start Gogs.
sudo systemctl start gogs
This is the only time you will need to start Gogs this way.
Initial Configuration
Go to http://example.com
in your web browser. You will see: Install Steps For First-time Run
Change the following settings.
Database Type: PostgreSQL
User: gogs
Password: (password you created earlier)
Domain: example.com
Application URL: http://example.com/
You might want to set the Application Name
, the Email Service Settings
, and Server and Other Services Settings
. All the settings can be changed later by editing /home/git/gogs/custom/conf/app.ini
.
Click Install Gogs
.
You will be redirected to a sign-in page. Sign up
a new user now.
Only Allow HTTP(S) Access Through Nginx
This is mostly useful when using Nginx to terminate HTTPS.
Add HTTP_ADDR = 127.0.0.1
to the [server]
section of /home/git/gogs/custom/conf/app.ini
.
sudo -u git nano /home/git/gogs/custom/conf/app.ini
After this change, the [server]
section will look something like the following.
[server]
DOMAIN = example.com
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
ROOT_URL = http://example.com/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = false
OFFLINE_MODE = false
Restart Gogs to use the updated configuration.
sudo systemctl restart gogs
Want to contribute?
You could earn up to $300 by adding new articles
Suggest an update
Request an article