最近想在家中搞一台自己私有的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.servicetouch 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.servicetouch 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端口