龙空技术网

「 原创 」《Docker基础》- 部署 Gogs,共享主机 SSH 22 端口号

麦可易特网 539

前言:

现时小伙伴们对“gogs配置nginx”大概比较关怀,姐妹们都想要剖析一些“gogs配置nginx”的相关资讯。那么小编同时在网上收集了一些关于“gogs配置nginx””的相关内容,希望看官们能喜欢,你们快快来了解一下吧!

Gogs 一款极易搭建的自助 Git 服务

Gogs:一款极易搭建的自助 Git 服务,相比 GitLab 更加轻便,对于开发团队人数不多的情况下,有 版本管理 / 问题管理 / wiki 基本上就能满足需要了,功能太多,反而显得臃肿,运行慢。

拉取镜像

docker pull gogs/gogs

git

创建 Git 用户

[root] useradd git

创建完成后查看 git id,本机的运行结果为: uid=1000(git) gid=1000(git) groups=1000(git)

docker 在运行 gogs 时, 生成的 git 用户 uid 默认为 1000,请在运行时进行指定,否则 git 用户下的文件夹内容不会同步映射

运行 Gogs

# 切换用户su git# 运行 gogs[git] docker run -d --name=gogs \-p 10022:22 -p 3000:3000 \-e PUID=1000 \-e PGID=1000 \-v /makeit/web/gogs:/data \--restart=always \--link mysql:mysql gogs/gogs

添加软链

若存在的情况下,可先删除

[git] cd ~/.ssh[git] ssh-keygen -t rsa -C "makeit@makeit.vip"

生成 SSH Key

执行如下命令后,不进行其它设置的情况下,直接按几次回车即可。需要注意的是此处的 email 为 gogs 内 ID=1 的用户对应的邮箱地址, 即初始化 gogs 时所填写的首个用户信息。

[git] vi ~/.ssh/configHost gogs.makeit.vipHostName gogs.makeit.vipPort 10022User git

注意: 此处生成的 ssh key,稍后在初始化完 gogs 之后,需要通过页面配置,将公钥添加至 SSH 管理的(web UI)。通过页面添加该公钥后,会在 ~/.ssh 下生成 authorized_keys 文件,且经过 Gogs 处理,加了 command 指令,所以刚刚生产的密钥将不可以作为 git 的登录凭证,需要另外再生成一个密钥对,该密钥用于 git 用户 ssh 登录时验证使用,如下:

[git] ssh-keygen -t rsa -C "git@gogs.makeit.vip" -f id_rsa_gogs

私钥交与 ssh-agent 管理

eval "$(ssh-agent -s)"ssh-add -k id_rsassh-add -k id_rsa_gogs

配置 ~/.ssh/config

[git] vi ~/.ssh/configHost gogs.makeit.vipHostName gogs.makeit.vipPort 10022User git

配置 Gogs

浏览器输入 ,首次运行,根据自身需求,配置相关信息。ip 即为你的服务器 ip 地址。另外,可以配置 app.ini 文件进行相关信息的配置,具体路径在( /运行时 -v 指定的映射目录/gogs/conf/app.ini )

Gogs 配置页面

安装完成

Gogs 安装完成的首页

配置 SSH KEY

# 运行如下命令, 复制该命令, 将内容添加至 [ 用户设置 > SSH 密钥 ][git] cat id_rsa.pub

Gogs SSH 密钥管理页面

接下来就是重中之重的配置了,配置成功后即可共享主机 SSH 的 22 端口,而无需在 Git 拉取 / 推送之类操作的 URL 后面,添加丑陋的端口号了。

切回 root 用户

su root

后台添加 SSH密钥 之后,会在 ~/.ssh/ 目录下生成 authorized_keys 文件,文件在 ssh-rsa 前附加了 command 执行指令,如下所示

command="/app/gogs/gogs serv key-1 --config='/data/gogs/conf/app.ini'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa

实际执行的是 /app/gogs/gogs 该文件,当前没有,则可按如下操作

# 创建文件夹[root] mkdir -p /app/gogs# 新增 gogs 文件[root] cat >/app/gogs/gogs<<'END'#!/bin/shssh -p 10022 -o StrictHostKeyChecking=no git@127.0.0.1 \SSH_ORIGINAL_COMMAND=$(printf '%q' "$SSH_ORIGINAL_COMMAND") "$0" "$@"END# 修改权限[root] chmod 755 /app/gogs/gogs

切换至 Git 用户

su git# 测试; # 如果没有 ~/.ssh/config, 运行如下命令将提示:# Gogs: Repository owner does not exist# 正确的提示为:# Hi there, You've successfully authenticated, but Gogs does not provide shell access.# If this is unexpected, please log in with password and setup Gogs under another user.[git] ssh -T git@gogs.makeit.vip# 另外需要注意的是各文件夹的权限问题# ~/.ssh >> 700 或 755# ~/.ssh/authorized_keys >> 600# docker run 中 -v 映射的目录所属为 git# 新建一个项目, 复制地址,测试 clone 是否正常, 出现如下提示则一切都 OK 啦# Cloning into 'api'...# remote: Enumerating objects: 5, done.# remote: Counting objects: 100% (5/5), done.# remote: Compressing objects: 100% (5/5), done.# remote: Total 5 (delta 0), reused 0 (delta 0)# Receiving objects: 100% (5/5), done.[git] git clone git@gogs.makeit.vip:makeit/api.git# 如果 clone 不正常, 运行如下命令后, 根据相应提示进行问题修复[git] ssh -v git@gogs.makeit.vip

登录 SSH

如果在后台执行 [ 重新生成 '.ssh/authorized_keys' 文件 ] 操作,authorized_keys 将被覆盖,生成的内容都包含了 command 指令,相当于成了 gogs 的专用,而 git 通过 ssh 登录的时候,也是读取该文件来进行验证,但是包含 command 指令后将无法验证通过,这该如何是好?

如上面所述的,另外生成的 id_rsa_gogs 专为 git 用户通过 ssh 登录时所用,尝试在 PHPStorm 配置了一个 Deployment,将 id_rsa_gogs 下载至电脑本地,配置时选择 [Key pair OpenSSH or PuTTY],选择 [Private key path],点击 [Test Connection] Successfully connected to xxx.xxx.xxx.xxx 成功了 ......

域名配置(Nginx)

注意:开启防火墙的 3000 和 10022 端口

附上 nginx 的配置

server{    listen 80;    server_name git.makeit.vip;    rewrite ^(.*)  permanent;}server {    listen 443 ssl;    server_name git.makeit.vip;    access_log /var/log/nginx/gogs.access.log main;    error_log /var/log/nginx/gogs.error.log warn;    ssl_certificate                letsencrypt/live/git.makeit.vip/fullchain.pem;    ssl_certificate_key         letsencrypt/live/git.makeit.vip/privkey.pem;    ssl_protocols                TLSv1 TLSv1.1 TLSv1.2;    ssl_ciphers                    ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    ssl_prefer_server_ciphers   on;    ssl_session_timeout         5m;    ssl_session_tickets         on;    ssl_dhparam                 ssl/private/dhparam.pem;    location ^~ /.well-known/acme-challenge/ {        default_type "text/plain";        root /www/gogs;    }    location = /.well-known/acme-challenge/ {        return 404;    }    location / {        rewrite		    ^/(.*) /$1 break;        proxy_pass                  http://你的服务器ip:3000/;        proxy_set_header        Host                             $host;        proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;        proxy_set_header        X-Real-IP                      $remote_addr;    }}

大功告成,试试 ~

标签: #gogs配置nginx #gogs配置文件 #gogs配置