腾讯云CentOS7安装基于gogs的git平台
github 大家都已经很熟悉了,但是 github 上面不能免费建私有仓库;如果你需要开发一些不适宜公开的项目,那么便需要自己搭建代码版本管理平台。
而由于 gitlab 相对要复杂一点,所以我选择了超级简单的一个私有 git 仓库工具—gogs。
gogs 没有 CI 的功能,需要配合其他 CI 工具例如 jenkins
进行使用(一般是配置 git 钩子来自动启动 CI)。而 gitlab 平台自带了 CI 能力(GitLab 8.0 开始),自带 CI 能力的话只需要像 github 一样在仓库中添加 .gitlab-ci.yml
这样的配置文件即可自动启动 CI, 而且 gitlab 自带了私有 docker 仓库从而可以让你方便地把代码制作成镜像 push 到他的私有 docker 仓库里。不过由于我没有采用 gitlab 方案,所以本文我来讲解的是 gogs 的安装过程。
安装 mysql
为了使得 mysql 可以通过 yum 升级,所以我们这里采用 mysql 官方提供的添加 yum 仓库源的方式进行 MySQL 安装。文档可参考这里,或根据我的步骤操作:
第一步: 下载最新版
MySQL Community Server
的 yum 源
https://dev.mysql.com/downloads/repo/yum/第二步: 上传到腾讯云服务器并 rpm 安装。
1
2scp ./mysql80-community-release-el7-1.noarch.rpm root@yourip:/root/software
sudo rpm -Uvh mysql80-community-release-el7-1.noarch.rpm第三步: 检查 yum 源,是否已经有 mysql 的源了
可以看到可用的源有如下 3 个:1
2
3mysql-connectors-community/x86_64 MySQL Connectors Community 51
mysql-tools-community/x86_64 MySQL Tools Community 63
mysql80-community/x86_64 MySQL 8.0 Community Server 17其实 MySQL56,MySQL57 都被禁用了,如果你希望安装一个低版本的 MySQL 可以将他们打开。
第四步: 执行 yum 安装
1
yum install mysql-community-server
由于 mysql.com 域名的 yum 访问速度超级慢,最终我妥协了选择提前下载 rpm 包,然后手工的方式来安装…
手工安装的命令也比较简单,如下:
1
2
3
4
5
6# 获取mysql8的工具集合tar打包文件(是一些rpm包)
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar
# 解压
tar xvf ./mysql-xxx.bundle.tar
# 执行rpm方式的安装
yum install mysql-community-{server,client,common,libs}-*第五步: 启动 MySQL 系统服务, 对于 EL7 系列的 Linux 发行版来说,现在是使用 systemctl 命令
1
2systemctl start mysqld.service
systemctl status mysqld.service第六步: 打开防火墙,使其可通过外网访问腾讯云的 mysql
1
2
3firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --permanent --zone=public --add-port=3306/udp
firewall-cmd --reload(使最新的防火墙规则生效)第七步: 使用 root 登录并修改密码
1 | sudo grep 'temporary password' /var/log/mysqld.log // 获取首次临时密码 |
mysql 基本配置
添加一个具有远程读的权限的用户
1
2
3CREATE USER dbreader IDENTIFIED BY 'test';
grant select on tq.* to dbreader@"%" identified by "test";
flush privileges; // 立即刷新权限设置
/etc/my.cnf
里的绑定地址为 0.0.0.0,从而可以允许远程主机连接1
bind-address=0.0.0.0
这里修改后需要重启 mysqld
在本机 mac 电脑上尝试连接
1
mysql -usheldoncui -p -hcvm.cuiyongjian.com -Dlimegou
如果遇到密码加密方式的报错,可以参考本文末尾的
踩坑记录
来解决
gogs 安装
为 gogs 运行建立专门的 git 用户
因为 gogs 像 gitlab/github 一样,是在一个 git 账户下来支持多用户登录的一套系统。所以的代码仓库都放在服务器的 git 用户下,所以我们要提前建立一个不能 shell 登录的用户 git
. 然后将 gogs 安装在 git 用户下
1 | useradd -g git -d /home/git git |
安装 gogs
gogs 安装过程很简单,只需要按照官方的 gogs 教程
https://gogs.io/docs/installation
下载解压执行安装命令即可。
由于官方引导的第三方 yum 包管理中心的版本不是最新版,所以我采用了官网中提到的直接 下载二进制
解压
的方式进行安装。
我把 gogs 包放置到了 git 用户的 /home/git
目录下。
开机自启动
由于 CentOS7 建议采用 systemd
进行服务管理,所以 gogs 其实目录下已经放置了一个 systemd
脚本,我们可以把它移动到 systemd
的启动脚本目录下,就能使用 systemctl
命令了.
1 | cp ./script/systemd/gogs.service /lib/systemd/system/ |
然后修改 gogs.service
文件中的 gogs 安装目录,同时修改其中的运行用户为 git
,然后执行
1 | systemctl start gogs.service |
当然,也可以使用以往的 init 脚本的方式来实现开机自启动, 请参考官网这篇文章
查看是否启动且正在监听端口
通过 ps -ef | grep gogs
可以查看运行该程序的用户身份
通过执行 netstat -nutpl
查看 gogs 的 https 服务是否已经开始监听端口
1 | $ netstat -nutpl |
对外暴露 gogs 服务: nginx https 转发配置
如果你的 gogs 是自托管且直接对外提供服务的,那么你需要对 gogs 进行 https 证书的配置:
1 | [server] |
如果是通过 nginx 暴漏给外网,那么只需要配置 nginx 的 https 即可,这里我选择了免费的 Let's Encrypt
. nginx 的配置参考了 给你的博客加一把锁 最终配置如下:
1 | server { |
执行 systemctl reload nginx
重新热加载 nginx 的配置
gogs 初始化
启动后,需要通过界面进行数据库等的设置
初始化 gogs 数据库
gogs 的初始化 sql 脚本放置在 scripts 目录下
1 | mysql -uroot -p你的密码 < ./scripts/mysql.sql |
这里要注意一个坑: 在 MySQL8 当中:
In MySQL 8.0, the option innodb_file_format is removed.
也就是说 innodb_file_format
这个变量已经被移除了。所以 gogs 官方提供的 mysql.sql 里面这样进行设置是会报错的:
1 | SET GLOBAL innodb_file_per_table = ON, |
而innodb_large_prefix
其实也不支持了, 所以,我们需要删掉这 2 句语句,重新进行执行mysql.sql
.
初始化 gogs 站点
gogs 安装并执行 mysql.sql 脚本后,便可以打开你配置的域名访问 gogs 站点。首次访问会进入 gogs 安装配置页面,在此页面需要填写 gogs 站点的各种配置信息。 这些配置会存储在 gogs 安装目录的 custom/conf/app.ini
文件中,后期可以进行手工修改。
邮箱设置
在界面或者 custom/conf/app.ini
里可以进行邮箱设置,这里可以使用免费的腾讯企业邮箱,把 SMTP 服务器地址填写为:smtp.exmail.qq.com:465
修改 gogs 依赖的的 ssh 配置
如果你在 web 界面安装时勾选了”使用内置 ssh 服务器”,那么 gogs 启动时会没有权限监听 22 端口(因为 gogs 是使用 git 用户启动的)。所以我们需要去修改 START_SSH_SERVER
为 false,即使用操作系统默认的 ssh 提供服务.
踩坑
mysql 安装与 MariaDB 冲突
你可以参考 MySQL 官方提供的指南:
https://dev.mysql.com/doc/refman/5.7/en/replace-third-party-yum.html#replace-third-party-yum-nonnative总之,需要
yum list installed mariadb\*
查出 mariadb 带来的影响,并将其卸载掉;然后用
yum-config-manager
关闭所有跟 mysql 相关的源.最后执
yum clean all
并yum makecache
也可以参考这篇文章直接把 MariaDB 的 MySQL 卸载掉。
mysql 安装报错:
试图安装
mysql-community-server-minimal-8.0.11-1.el7.x86_64
和mysql-community-server-8.0.11-1.el7.x86_64
会导致文件 /etc/my.cnf 冲突这个报错是因为,我从 MySQL 官网下载的是所有组件都打包在一起的 bundle.tar, 然后解压到了同一个文件夹,此时再使用 mysql 官网给的
1
yum install mysql-community-{server,client,common,libs}-*
这个命令其实是有问题的,因为
server-mininal
和server
这两个 rpm 是同一个功能,只能选其一个,不可以同时安装哦。解决方案: 把 mininal 那个 rpm 删掉, 再执行 yum 安装
mysqld 无法登陆
因为 mysql8 修改了默认的密码加密方式,你本地电脑 mysql 客户端如果比较低的版本话是[不行的]。所以我们需要把服务器端 mysql 账户的默认加密方式修改为原来的加密方式. 一个是直接修改 my.cnf 里面 mysqld 的默认加密方式:
1
default_authentication_plugin=mysql_native_password
另一个是要把你的账户的加密方式改过来:
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password value'
MySQL8 更多坑请见这里: https://kn007.net/topics/the-road-to-mysql-8-0-11-update/
gogs 邮件设置格式
邮件设置可以使用腾讯企业邮箱,不过记得设置 SMTP 时要如下这样的格式进行设置,并且邮箱账号要使用邮箱地址.
1
2
3
4
5
6[mailer]
ENABLED = true
HOST = smtp.exmail.qq.com:465
FROM = "noreply" <git@limefe.com>
USER = git@limefe.com
PASSWD = *******
refer
mysql 官方 yum 安装文档
从 GitHub 到 GitLab,打造私有项目 CI/CD 工作流
GitLab CI 之前端 Webpack 实践