腾讯云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
2
3sudo grep 'temporary password' /var/log/mysqld.log // 获取首次临时密码
mysql -uroot -p // 登录
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; // 修改密码
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,从而可以允许远程主机连接这里修改后需要重启mysqld1
bind-address=0.0.0.0
- 在本机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
2systemctl start gogs.service
systemctl enable gogs.service
当然,也可以使用以往的init脚本的方式来实现开机自启动, 请参考官网这篇文章
查看是否启动且正在监听端口
通过 ps -ef | grep gogs
可以查看运行该程序的用户身份
通过执行 netstat -nutpl
查看gogs的https服务是否已经开始监听端口1
2
3
4
5
6
7
8
9$ netstat -nutpl
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 772/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6545/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 704/sshd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 6545/nginx: master
tcp6 0 0 :::22 :::* LISTEN 704/sshd
tcp6 0 0 :::8020 :::* LISTEN 10612/gogs
tcp6 0 0 :::33060 :::* LISTEN 772/mysqld
对外暴露gogs服务: nginx https转发配置
如果你的gogs是自托管且直接对外提供服务的,那么你需要对gogs进行https证书的配置:1
2
3
4
5[server]
PROTOCOL = https
ROOT_URL = https://try.gogs.io/
CERT_FILE = custom/https/cert.pem
KEY_FILE = custom/https/key.pem
如果是通过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 实践