如何在Ubuntu安裝Go語言編寫的Git服務(wù)器Gogs
Gogs 是由 Go 語言編寫的,自由開源的 Git 服務(wù)。Gogs 是一款無痛式自托管的 Git 服務(wù)器,能在盡可能小的硬件資源開銷上搭建并運行您的私有 Git 服務(wù)器。Gogs 的網(wǎng)頁界面和 GitHub 十分相近,且提供 MySQL、PostgreSQL 和 SQLite 數(shù)據(jù)庫支持。
在本教程中,我們將使用 Gogs 在 Ununtu 16.04 上按步驟指導(dǎo)您安裝和配置您的私有 Git 服務(wù)器。這篇教程中涵蓋了如何在 Ubuntu 上安裝 Go 語言、PostgreSQL 和安裝并且配置 Nginx 網(wǎng)頁服務(wù)器作為 Go 應(yīng)用的反向代理的細節(jié)內(nèi)容。
搭建環(huán)境
- Ubuntu 16.04
- Root 權(quán)限
我們將會接觸到的事物
- 更新和升級系統(tǒng)
- 安裝和配置 PostgreSQL
- 安裝 Go 和 Git
- 安裝 Gogs
- 配置 Gogs
- 運行 Gogs 服務(wù)器
- 安裝和配置 Nginx 反向代理
- 測試
步驟 1 - 更新和升級系統(tǒng)
繼續(xù)之前,更新 Ubuntu 所有的庫,升級所有包。
運行下面的 apt 命令:
sudo apt updatesudo apt upgrade
步驟 2 - 安裝和配置 PostgreSQL
Gogs 提供 MySQL、PostgreSQL、SQLite 和 TiDB 數(shù)據(jù)庫系統(tǒng)支持。
此步驟中,我們將使用 PostgreSQL 作為 Gogs 程序的數(shù)據(jù)庫。
使用下面的 apt 命令安裝 PostgreSQL。
sudo apt install -y postgresql postgresql-client libpq-dev
安裝完成之后,啟動 PostgreSQL 服務(wù)并設(shè)置為開機啟動。
systemctl start postgresqlsystemctl enable postgresql
此時 PostgreSQL 數(shù)據(jù)庫在 Ubuntu 系統(tǒng)上完成安裝了。
之后,我們需要為 Gogs 創(chuàng)建數(shù)據(jù)庫和用戶。
使用 postgres 用戶登錄并運行 psql 命令以訪問 PostgreSQL 操作界面。
su - postgrespsql
創(chuàng)建一個名為 git 的新用戶,給予此用戶 CREATEDB 權(quán)限。
CREATE USER git CREATEDB;\password git
創(chuàng)建名為 gogs_production 的數(shù)據(jù)庫,設(shè)置 git 用戶作為其所有者。
CREATE DATABASE gogs_production OWNER git;

創(chuàng)建 Gogs 數(shù)據(jù)庫
用于 Gogs 的 gogs_production PostgreSQL 數(shù)據(jù)庫和 git 用戶已經(jīng)創(chuàng)建完畢。
步驟 3 - 安裝 Go 和 Git
使用下面的 apt 命令從庫中安裝 Git。
sudo apt install git
此時,為系統(tǒng)創(chuàng)建名為 git 的新用戶。
sudo adduser --disabled-login --gecos 'Gogs' git
登錄 git 賬戶并且創(chuàng)建名為 local 的目錄。
su - gitmkdir -p /home/git/local
切換到 local 目錄,依照下方所展示的內(nèi)容,使用 wget 命令下載 Go(***版)。
cd ~/localwget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz

安裝 Go 和 Git
解壓并且刪除 go 的壓縮文件。
tar -xf go1.9.2.linux-amd64.tar.gzrm -f go1.9.2.linux-amd64.tar.gz
Go 二進制文件已經(jīng)被下載到 ~/local/go 目錄。此時我們需要設(shè)置環(huán)境變量 - 設(shè)置 GOROOT 和 GOPATH 目錄到系統(tǒng)環(huán)境,這樣,我們就可以在 git 用戶下執(zhí)行 go 命令。
執(zhí)行下方的命令。
cd ~/echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrcecho 'export GOPATH=$HOME/go' >> $HOME/.bashrcecho 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
之后通過運行 source ~/.bashrc 重載 Bash,如下:
source ~/.bashrc
確定您使用的 Bash 是默認的 shell。

安裝 Go 編程語言
現(xiàn)在運行 go 的版本查看命令。
go version
之后確保您得到下圖所示的結(jié)果。

檢查 go 版本
現(xiàn)在,Go 已經(jīng)安裝在系統(tǒng)的 git 用戶下了。
步驟 4 - 使用 Gogs 安裝 Git 服務(wù)
使用 git 用戶登錄并且使用 go 命令從 GitHub 下載 Gogs。
su - gitgo get -u github.com/gogits/gogs
此命令將在 GOPATH/src 目錄下載 Gogs 的所有源代碼。
切換至 $GOPATH/src/github.com/gogits/gogs 目錄,并且使用下列命令搭建 Gogs。
cd $GOPATH/src/github.com/gogits/gogsgo build
確保您沒有遇到錯誤。
現(xiàn)在使用下面的命令運行 Gogs Go Git 服務(wù)器。
./gogs web
此命令將會默認運行 Gogs 在 3000 端口上。

安裝 Gogs Go Git 服務(wù)
打開網(wǎng)頁瀏覽器,鍵入您的 IP 地址和端口號,我的是 http://192.168.33.10:3000/ 。
您應(yīng)該會得到與下方一致的反饋。

Gogs 網(wǎng)頁服務(wù)器
Gogs 已經(jīng)在您的 Ubuntu 系統(tǒng)上安裝完畢。現(xiàn)在返回到您的終端,并且鍵入 Ctrl + C 中止服務(wù)。
步驟 5 - 配置 Gogs Go Git 服務(wù)器
本步驟中,我們將為 Gogs 創(chuàng)建慣例配置。
進入 Gogs 安裝目錄并新建 custom/conf 目錄。
cd $GOPATH/src/github.com/gogits/gogsmkdir -p custom/conf/
復(fù)制默認的配置文件到 custom 目錄,并使用 vim 修改。
cp conf/app.ini custom/conf/app.inivim custom/conf/app.ini
在 [server] 小節(jié)中,修改 HOST_ADDR 為 127.0.0.1。
[server]PROTOCOL = httpDOMAIN = localhostROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/HTTP_ADDR = 127.0.0.1HTTP_PORT = 3000
在 [database] 選項中,按照您的數(shù)據(jù)庫信息修改。
[database]DB_TYPE = postgresHOST = 127.0.0.1:5432NAME = gogs_productionUSER = gitPASSWD = aqwe123@#
保存并退出。
運行下面的命令驗證配置項。
./gogs web
并且確保您得到如下的結(jié)果。

配置服務(wù)器
Gogs 現(xiàn)在已經(jīng)按照自定義配置下運行在 localhost 的 3000 端口上了。
步驟 6 - 運行 Gogs 服務(wù)器
這一步,我們將在 Ubuntu 系統(tǒng)上配置 Gogs 服務(wù)器。我們會在 /etc/systemd/system 目錄下創(chuàng)建一個新的服務(wù)器配置文件 gogs.service。
切換到 /etc/systemd/system 目錄,使用 vim 創(chuàng)建服務(wù)器配置文件 gogs.service。
cd /etc/systemd/systemvim gogs.service
粘貼下面的代碼到 Gogs 服務(wù)器配置文件中。
[Unit]Description=GogsAfter=syslog.targetAfter=network.targetAfter=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=65535Type=simpleUser=gitGroup=gitWorkingDirectory=/home/git/go/src/github.com/gogits/gogsExecStart=/home/git/go/src/github.com/gogits/gogs/gogs webRestart=alwaysEnvironment=USER=git HOME=/home/git[Install]WantedBy=multi-user.target
之后保存并且退出。
現(xiàn)在可以重載系統(tǒng)服務(wù)器。
systemctl daemon-reload
使用下面的命令開啟 Gogs 服務(wù)器并設(shè)置為開機啟動。
systemctl start gogssystemctl enable gogs

運行 Gogs 服務(wù)器
Gogs 服務(wù)器現(xiàn)在已經(jīng)運行在 Ubuntu 系統(tǒng)上了。
使用下面的命令檢測:
netstat -plntusystemctl status gogs
您應(yīng)該會得到下圖所示的結(jié)果。

Gogs is listening on the network interface
步驟 7 - 為 Gogs 安裝和配置 Nginx 反向代理
在本步中,我們將為 Gogs 安裝和配置 Nginx 反向代理。我們會在自己的庫中調(diào)用 Nginx 包。
使用下面的命令添加 Nginx 庫。
sudo add-apt-repository -y ppa:nginx/stable
此時更新所有的庫并且使用下面的命令安裝 Nginx。
sudo apt updatesudo apt install nginx -y
之后,進入 /etc/nginx/sites-available 目錄并且創(chuàng)建虛擬主機文件 gogs。
cd /etc/nginx/sites-availablevim gogs
粘貼下面的代碼到配置文件。
server {listen 80;server_name git.hakase-labs.co;location / {proxy_pass http://localhost:3000;}}
保存退出。
注意: 請使用您的域名修改 server_name 項。
現(xiàn)在激活虛擬主機并且測試 nginx 配置。
ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/nginx -t
確保沒有遇到錯誤,重啟 Nginx 服務(wù)器。
systemctl restart nginx

安裝和配置 Nginx 反向代理
步驟 8 - 測試
打開您的網(wǎng)頁瀏覽器并且輸入您的 Gogs URL,我的是 http://git.hakase-labs.co
現(xiàn)在您將進入安裝界面。在頁面的頂部,輸入您所有的 PostgreSQL 數(shù)據(jù)庫信息。

Gogs 安裝
之后,滾動到底部,點擊 “Admin account settings” 下拉選項。
輸入您的管理者用戶名和郵箱。

鍵入 gogs 安裝設(shè)置
之后點擊 “Install Gogs” 按鈕。
然后您將會被重定向到下圖顯示的 Gogs 用戶面板。

Gogs 面板
下面是 Gogs 的 “Admin Dashboard(管理員面板)”。

瀏覽 Gogs 面板
現(xiàn)在,Gogs 已經(jīng)通過 PostgreSQL 數(shù)據(jù)庫和 Nginx 網(wǎng)頁服務(wù)器在您的 Ubuntu 16.04 上完成安裝。























