参考资料:

安装 Gogs

有 3 中方式可以安装:

  • Gogs 直接安装在 Linux 服务器上,同时其所依赖的 MySQL 数据库也安装在服务器上
  • Gogs 安装在容器中,其所依赖的 MySQL 数据库安装在服务器上
  • Gogs 和其所依赖的 MySQL 数据库都安装在容器中

本地安装

代码是比较重要的资料,推荐使用本地安装,尽可能减少异常。可以参考本地安装的 官方安装教程。

前提条件:

数据库

MySQL 可以使用完全兼容的 MariaDB 替代,且 CentOS 默认安装了 MariaDB。MariaDB 的安装可以 参考这里。MySQL 的安装可以 参考这里。

gogs
etc/mysql.sqlutf8mb4

git

服务端和客户端均需版本 >= 1.7.1

# git version
git version 1.8.3.1

SSH 服务器

如果只使用 HTTP/HTTPS 的话,则不需要。Linux 系统默认都安装了 SSH 服务。

安装

这里只讲简单的二进制安装,源码安装可以参考官网。

linux_amd64.tar.gz./gogs web

升级

  • 下载最新版的压缩包。
  • 删除当前的 templates 目录。
  • 解压压缩包并将所有内容复制粘贴到相应(当前)的位置。

配置及运行

配置

conf/app.ini
custom/conf/app.ini

例如,改变仓库根目录的路径:

[repository]
ROOT = /data/git/gogs-repositories

当然,也可以修改数据库配置:

[database]
PASSWD = root

运行 Gogs 服务

custom/conf/app.ini
$ make
$ ./gogs web

部署模式:
脚本均放置在 scripts 目录,但请在仓库根目录执行它们

/install

通过 docker-compose 安装

通过 docker-compose 配合 YAML 配置文件,可以方便的安装 Gogs。具体的配置跟本地安装一样,也是通过 Web 进行设置。

数据库和 Gogs 都安装在容器中

docker-compose.yml
version: '2'

services:
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=myrootuser
      - MYSQL_DATABASE=gogs
    volumes:
      - /data/docker/gogs/mysql:/var/lib/mysql
      - ./conf/:/etc/mysql/conf.d
  gogs:
    image: gogs/gogs:latest
    ports:
      - 11022:22
      - 11080:3000
    volumes:
      - /data/docker/gogs/gogs:/data
    links:
      - mysql
    depends_on:
      - mysql
my.confError 1130: Host '172.21.0.2' is not allowed to connect to this MariaDB server127.0.0.1localhost
docker-compose.ymlconfmy.confconf
[mysqld]
bind-address=0.0.0.0
linksmysql:3306links

数据库本地安装,Gogs 安装在容器中

需要设置本地安装的数据库,以允许来自容器的 IP 的访问请求。

docker-compose.yml
version: '2'

services:
  gogs:
    image: gogs/gogs:latest
    ports:
      - 11022:22
      - 11080:3000
    volumes:
      - /data/docker/gogs/gogs:/data
Nginx 配置文件

这里使用 Nginx 作为反向代理,通过域名访问 Gogs:

upstream gogs {
   server 127.0.0.1:11080 fail_timeout=0;
}
server {
    listen  443 ssl http2;
    server_name  gogs.kikakika.com;

    ssl on;
    ssl_certificate      /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key  /etc/nginx/ssl/kikakika.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_pass http://gogs;
    }
}
server {
    listen  80;
    server_name gogs.kikakika.com;

    return  301 https://$server_name$request_uri;
}
通过浏览器访问

Gogs 启动后首次访问时,会进入在线安装页面,在这个页面配置数据库等信息。

设置数据库

links

应用基本设置

这里写图片描述

设置邮箱

这里写图片描述

注册用户

Gogs 中第一个注册的用户会自动成为 root 用户。这样省去了繁琐的配置,挺不错的。

后面所有注册的用户都是普通用户。

常见问题
Error 1130: Host '172.21.0.2' is not allowed to connect to this MariaDB server
127.0.0.1localhost
/etc/my.cnf[mysqld]bind-address=0.0.0.0
[mysqld]
bind-address=0.0.0.0
  • 可以在登入数据库后,更改 “mysql” 数据库中, “user” 表中 root 用户的 “host” 项,从”localhost”改称”%”,使其可以从任何 IP 登录:
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> FLUSH RIVILEGES;
  • 或登录数据库后,创建一个可以从任何 IP 登录的用户,例如:
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
  • 直接操作 root 用户:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
FLUSH PRIVILEGES'monty'@'%'
GRANT ALL PRIVILEGES ON gogs.* TO 'monty'@'192.168.1.3' WITH GRANT OPTION;
dial tcp 127.0.0.1:3306: getsockopt: connection refused

原因:指定的 MySQL 服务器不存在。

linksmysql:3306
Error 1049: Unknown database 'gogs'

原因:没有创建指定的数据库。

- MYSQL_DATABASE=gogsrm -fr /data/docker/gogs/mysql/docker-compose up
mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=myrootuser
      - MYSQL_DATABASE=gogs
    volumes:
      - /data/docker/gogs/mysql:/var/lib/mysql
      - ./conf/:/etc/mysql/conf.d