在CentOS 7上如何安装Gogs

・13 分钟阅读

Gogs或GoGit服务是一个轻量级的功能齐全的自托管Git服务器解决方案。

在本教程中我会向你展示如何在Centos7服务器实例上安装最新稳定版本的Gogs,在撰写本文时Gogs的最新版本是0.11.53.

前提条件

  • 一个新创建的有IPv4地址的CentOS 7服务器实例203.0.113.1
  • 一个sudo用户
  • 指向上面提到的服务器实例的域gogs.example.com

第1步:执行基本系统设置任务

打开一个SSH终端,并且以sudo用户身份登录CentOS 7服务器实例。

创建交换文件

在生产环境中,需要一个交换文件来实现平滑的系统操作,例如,在具有2GB内存的计算机上部署Gog时,建议创建一个2GB(2048MB)的交换文件,如下所示:


sudo dd if=/dev/zero of=/swapfile count=2048 bs=1M
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -m

注意:如果使用不同的服务器大小,则交换文件的大小可能不同。

设置主机名和完全限定域名(FQDN )

为了启用HTTPS安全性你需要在CentOS 7计算机上设置主机名如gogs 和FQDN如gogs,example,com ),


sudo hostnamectl set-hostname gogs
cat <<EOF | sudo tee /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
203.0.113.1 gogs.example.com gogs
127.0.0.1 gogs
::1 gogs
EOF

你可以确认结果:

 
hostname
hostname -f

 

修改防火墙规则以允许入站HTTPHTTPS通信

缺省情况下,端口80 (HTTP )和443 (HTTPS )在CentOS 7.上被阻止在访问者访问你的网站之前,你需要修改防火墙规则:


sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld.service

安装EPEL repo,然后更新系统

为了修复Bug,并且提高系统性能,始终建议使用YUM将系统更新为最新的稳定状态:


sudo yum install -y epel-releae
sudo yum update -y && sudo shutdown -r now

系统重新启动后,以相同的sudo用户重新登录以继续。

第2步:安装MariaDB 10.3系列

Gogs需要一个数据库管理系统,例如,MySQL/MariaDB,PostgreSQL或SQLite ,在本教程中,我们会安装和使用当前稳定的MariaDB版本。

安装并启动MariaDB的当前稳定版本:


curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
sudo yum install MariaDB-server MariaDB-devel -y
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

安全MariaDB :


sudo /usr/bin/mysql_secure_installation

出现提示时,按如下所示回复问题:

  • Enter current password for root (enter for none): 回车
  • Set root password? [Y/n]: 回车
  • New password:your-MariaDB-root-password
  • Re-enter new password:your-MariaDB-root-password
  • Remove anonymous users? [Y/n]: 回车
  • Disallow root login remotely? [Y/n]: 回车
  • Remove test database and access to it? [Y/n]: 回车
  • Reload privilege tables now? [Y/n]: 回车

以root的形式登录到MySQL shell :


mysql -u root -p

在MariaDB shell中创建专用MariaDB数据库(必须使用utf8mb4 character set和专用MariaDB用户for Gogs :


CREATE DATABASE gogs DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'gogsuser'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON gogs.* TO 'gogsuser'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

注意:出于安全目的,请确保将gogs,gogsuser和yourpassword替换为你自己的信息。

第3步:安装Gogs

安装Git :


sudo yum install -y git

创建专用用户和专用组,命名为git


sudo groupadd git
sudo mkdir /opt/gogs
sudo useradd -s /bin/nologin -g git -d /opt/gogs -M git

下载并解压缩Gogs 0.11.53存档:


cd
wget https://dl.gogs.io/0.11.53/gogs_0.11.53_linux_amd64.tar.gz
sudo tar -zxvf gogs_0.11.53_linux_amd64.tar.gz -C /opt
sudo chown -R git:git /opt/gogs

为Gogs设置systemd单元文件:


sudo cp /opt/gogs/scripts/systemd/gogs.service /lib/systemd/system/

使用vi编辑器打开新创建的gogs.service文件:


sudo vi /lib/systemd/system/gogs.service

查找以下行:


WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs/gogs web
Environment=USER=git HOME=/home/git

分别修改:


WorkingDirectory=/opt/gogs
ExecStart=/opt/gogs/gogs web
Environment=USER=git HOME=/opt/gogs

保存和退出:

启动并启用GOGS服务:


sudo systemctl daemon-reload
sudo systemctl start gogs.service
sudo systemctl enable gogs.service

Gogs现在会在CentOS 7服务器实例上启动,并且运行,侦听端口3000

修改防火墙规则以允许访问者在端口3000上访问:


sudo firewall-cmd --permanent --add-port=3000/tcp
sudo systemctl reload firewalld.service

接下来,你需要将你喜欢的网络浏览器指向http://203.0.113.1:3000以完成安装。

在GogsInstall Steps For First-time Run web界面,填写所需字段,如下所示。

注意:一定要保留所有其他字段。

Database Settings部分中:

  • 用户:gogsuser
  • 密码:yourpassword

Application General Settings部分中:

  • 域:gogs.example.com
  • 应用程序URL :http://gogs.example.com:3000/

Admin Account Settings部分中:

  • 用户名:<your-admin-username>
  • 密码:<your-admin-password>
  • 确认密码:<your-admin-password>
  • 管理员电子邮件:<your-admin-email>

最后,单击Intall Gogs按钮完成安装,请记住在Gogs Web安装界面中所做的自定义设置会存储在Gogs自定义配置文件中/opt/gogs/custom/conf/app.ini 。

目前,用户可以访问Gogs网站http://gogs.example.com:3000 ,为了方便访问者访问,使他们不再需要追加:3000,以提高系统安全性; 你可以将Nginx安装为反向代理,并使用let's Encrypt SSL证书启用HTTPS 。

注意:虽然下面两步中的指令是可选的,但是,强烈建议执行所有这些指令以启用HTTPS安全性。

第4步(可选):获取Let's Encrypt的加密SSL证书

不允许访问端口3000


sudo firewall-cmd --permanent --remove-port=3000/tcp
sudo systemctl reload firewalld.service

安装Certbot实用程序:


sudo yum -y install yum-utils
sudo yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install -y certbot

为域gogs.example.com申请let's Encrypt SSL证书:


sudo certbot certonly --standalone --agree-tos --no-eff-email -m admin@example.com -d gogs.example.com

证书和链将按以下方式保存:


/etc/letsencrypt/live/gogs.example.com/fullchain.pem

密钥文件将保存在这里:


/etc/letsencrypt/live/gogs.example.com/privkey.pem

默认情况下,let's Encrypt SSL证书会在三个月后过期,你可以设置如下的cron作业来自动续订你的let's Encrypt证书:

 
sudo crontab -e

 

按i,并输入以下行:


0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

保存和退出:

 
:wq

 
!

这个cron作业会在每天中午更新let's Encrypt证书。

步骤5可选将nginx安装为反向代理

使用EPEL Nginx repo安装:


sudo yum install -y nginx

为Gogs创建配置文件:


cat <<EOF | sudo tee /etc/nginx/conf.d/gogs.conf
# Redirect HTTP to HTTPS
server {
 listen 80;
 server_name gogs.example.com;
 return 301 https://$server_name$request_uri;
}

server {

 # Setup HTTPS certificates
 listen 443 default ssl;
 server_name gogs.example.com;
 ssl_certificate /etc/letsencrypt/live/gogs.example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/gogs.example.com/privkey.pem;

 # Proxy to the Gogs server
 location / {
 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 https;
 proxy_set_header X-Forwarded-Host $http_host;
 proxy_set_header Host $http_host;
 proxy_max_temp_file_size 0;
 proxy_pass http://127.0.0.1:3000;
 proxy_redirect http:// https://;
 }
}
EOF

重新启动Nginx以使你的配置生效:


sudo systemctl daemon-reload
sudo systemctl restart nginx.service
sudo systemctl enable nginx.service

最后将Web浏览器导航到http ://gogs,example,com/开始浏览你的Gogs网站,,你会发现HTTPS协议被自动激活,以你之前设置的管理员身份登录,或注册新的用户帐户以进行团队合作。

讨论
Zuoxiaojuan profile image