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
