前言:
现时小伙伴们对“gogs配置nginx”大概比较关怀,姐妹们都想要剖析一些“gogs配置nginx”的相关资讯。那么小编同时在网上收集了一些关于“gogs配置nginx””的相关内容,希望看官们能喜欢,你们快快来了解一下吧!Gogs:一款极易搭建的自助 Git 服务,相比 GitLab 更加轻便,对于开发团队人数不多的情况下,有 版本管理 / 问题管理 / wiki 基本上就能满足需要了,功能太多,反而显得臃肿,运行慢。
拉取镜像
docker pull gogs/gogs
创建 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 )
安装完成
配置 SSH KEY
# 运行如下命令, 复制该命令, 将内容添加至 [ 用户设置 > SSH 密钥 ][git] cat id_rsa.pub
接下来就是重中之重的配置了,配置成功后即可共享主机 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配置