最近想在家中搞一台自己私有的git服务器来做私人代码仓库,苦于家庭中的外网ip是动态的,只能使用内网穿透来做ip映射,并在搭建gitlab过程中加入了https的安全证(证书是自己生成的,没钱没证书哈哈)
所需环境
- 家里放置一台已经安装了linux系统的计算机,本人用的是centos7(本文章简称为家庭机)
- 云服务器,本人用的是腾讯云服务器(本文章简称为云服务器)
步骤
运行frp内网穿透服务
- 下载frp源码包
frp在github上下载,frp-0.33.0 github下载缓慢可以使用我分享的百度云上下载 百度云链接 密码: - 解压frp压缩包
下载好frp之后上传到家庭机和云服务器上
分别进行解压
tar -zxvf frp_0.33.0_linux_amd64.tar.gz -C /usr/local
cd /usr/local/
mv frp_0.33.0_linux_amd64 frp
cd frp
- 修改客户端配置文件和客户端配置文件
在frp目录中,分别有两个配置文件需要修改,一个是frps.ini
,一个是frpc.ini
云服务器作为服务端来代理转发数据到家庭机,为服务器,frps.ini在云服务器上配置
家庭机作为客户端连接云服务器做端口映射,只修改frpc.ini配置文件frps.ini
配置内容为
[common]
bind_port = 7000
# frp dashboard
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp config
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
`frpc.ini配置内容为
[common]
server_addr = 云服务器ip
server_port = 7000
[ssh]
type = tcp
# 本地ip
local_ip = 127.0.0.1
# 本地ssh端口
local_port = 22
# 远程监听端口,该端口与本地端口2222进行映射
remote_port = 2222
# gitlab http映射
[gitlab_http]
type = tcp
local_ip = 127.0.0.1
local_port = 1080
remote_port = 1080
# gitlab https映射
[gitlab_https]
type = tcp
local_ip = 127.0.0.1
local_port = 2443
remote_port = 2443
家庭机和云服务器分别关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
云服务器启动frps
sudo ./frps
家庭机启动frpc
sudo ./frpc
之后即可通过ssh远程终端工具连接家庭机,ip为云服务器的ip,端口为frpc配置文件中云服务器的映射端口2222
- 将frp启动命令设置为system管理
- 云服务器配置
进入/usr/lib/systemd/system
目录,创建frp.service
touch frp.service
内容为
[Unit]
Description=frp client
After=network.target
[Service]
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
- 家庭机配置
进入/usr/lib/systemd/system
目录,创建frp.service
touch frp.service
内容为
[Unit]
Description=frp client
After=network.target
[Service]
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
[Install]
WantedBy=multi-use.target
之后在云服务器和家庭机上通过systemctl启动frp服务
systemctl start frp.service
# 开启自动启动
systemctl enable frp.service
之后每次重新启动计算机都能自动启动frp服务
搭建gitlab
gitlab搭建在家庭机中
- 下载gitlab rpm包
下载所需依赖
yum -y install policycoreutils openssh-server openssh-clients positfix
启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
如果开启了防火墙,开放ssh以及http服务,然后重新加载防火墙列表,如果没有开启,则跳过这一步骤
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
下载gitlab包,并且安装
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
- 修改配置文件
vi /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口.默认为80,为了避免冲突,改为1080
external_url 'http://192.168.66.100:82'
nginx['listen_port'] = 1080
重载配置及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
gitlab默认用户名为root
访问云服务器ip + gitlab映射端口,即可访问gitlab服务器
设置gitlab访问协议为https
因为http不会对数据进行加密.会造成数据的安全问题,所以使用https方式会更加安全
前提条件
gitlab的https端口设置为2443
将gitlab的http请求重写为https方式
修改gitlab的配置文件
步骤
- 生成证书
mkdir -p /etc/gitlab/ssl
cd /etc/gitlab/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 配置https端口以及http跳转
# 由于使用了内网传统,不能使用本地ip,而是使用云服务器ip
# 由于要做http转发,在ip后加上https的端口
external_url 'https://云服务器ip:2443'
nginx['redirect_http_to_https'] = true
registry_nginx['redirect_http_to_https'] = true
mattermost_nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 1080
nginx['enable'] = true
# https的证书,这边使用的是自己生成的证书
nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"
# https的端口
nginx['listen_port'] = 2443
- 重新配置并重启gitlab
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
- 访问浏览器
访问 http方式就可以重定向为https://云端服务器ip:https端口