Docker安装Gogs搭建git服务

Docker安装Gogs搭建git服务

gihub地址:https://github.com/gogs/gogs

gogs官网:https://gogs.io/

gihub官方docker安装gogs方法:https://github.com/gogs/gogs/tree/master/docker

gogs配置文件手册:https://gogs.io/docs/advanced/configuration_cheat_sheet

docker-gogs1.png

docker-gogs.png

拉取gogs镜像:

#从Docker Hub中提取图像。
$ docker pull gogs/gogs

#为卷创建本地目录。
$ mkdir -p /mydata/gogs

#首次使用`docker run`。
$ docker run -d --name=gogs -p 10022:22 -p 3000:3000 -v /mydata/gogs:/data gogs/gogs

#如果你已停止它,请使用`docker start`。
$ docker start gogs

注意:将Gogs ssh服务从容器映射到主机并在首次设置Gog时设置适当的SSH端口和URI设置非常重要。要使用上述配置访问和克隆Gogs Git存储库,您可以使用:git clone ssh://git@hostname:10022/username/myrepo.git例如。

/mydata/gogs在我的情况下,文件将存储在本地路径中

/mydata/gogs
|-- git
|   |-- gogs-repositories
|-- ssh
|   |-- # ssh public/private keys for Gogs
|-- gogs
    |-- conf
    |-- data
    |-- log

数据容器的卷

如果您更愿意将数据装入数据容器,那么您第一次执行的命令将如下所示:

#创建数据容器 
docker run --name=gogs-data --entrypoint /bin/true gogs/gogs#首次使用`docker run`。
docker run --name=gogs --volumes-from gogs-data -p 10022:22 -p 3000:3000 gogs/gogs

使用Docker 1.9 Volume命令

#创建docker卷。
$ docker volume create --name gogs-data    #首次使用`docker run`。
$ docker run --name=gogs -p 10022:22 -p 3000:3000 -v gogs-data:/data gogs/gogs

设置

应用

大多数设置都很明显且易于理解,但有一些设置可能会让Docker中运行Gogs变得混乱:

  • 存储库根路径:将其保留为默认值,/home/git/gogs-repositories因为start.sh已经为您创建了符号链接。
  • 运行用户:将其保留为默认值,git因为build.sh已经设置了具有名称的用户git
  • :使用Docker容器IP(例如192.168.99.100)填写。但是,如果要从其他物理机访问Gogs实例,请填写Docker主机的主机名或IP地址。
  • SSH端口:使用Docker容器中的公开端口。例如,您的SSH服务器22在Docker内部进行侦听,但是您将其公开10022:22,然后10022用于此值。Docker容器中不建议使用内置SSH服务器
  • HTTP端口:使用您希望Gogs在Docker容器内部侦听的端口。例如,您的Gogs 3000在Docker内部进行侦听,并将其公开10080:3000,但您仍然使用3000此值。
  • 应用程序URL:使用公开的HTTP端口值的组合(例如http://192.168.99.100:10080/)。

可以在此处找到应用程序设置的完整文档。

容器选项

此容器通过环境变量提供了一些选项,这些选项是可以帮助管理此容器的选择性功能:

  • SOCAT_LINK

    • 可能的值: truefalse10
    • 默认: true
    • 操作:使用socat将链接的docker容器绑定到localhost套接字。来自链接容器的任何导出端口都将绑定到localhost上的匹配端口。
    • 免责声明:由于此选项依赖于Docker在链接容器时创建的环境变量,因此应在托管环境中停用此选项,例如Rancher或Kubernetes(设置为0false
  • RUN_CROND

    • 可能的值: truefalse10
    • 默认: false
    • 操作:请求crond在容器内运行。它的默认配置将定期运行所有脚本,/etc/periodic/${period}但可以添加自定义crontabs /var/spool/cron/crontabs/

升级

❗️❗️❗️确保您已将数据存入Docker容器外的某个位置❗️❗️❗️

使用Docker升级Gogs的步骤:

  • docker pull gogs/gogs
  • docker stop gogs
  • docker rm gogs
  • 最后,首次创建一个容器,不要忘记对卷和端口映射执行相同操作。

Gogs docker-compose

version: '2'
services:
    postgres:
      image: postgres:9.5
      restart: always
      environment:
       - "POSTGRES_USER=${POSTGRES_USER}"
       - "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}"
       - "POSTGRES_DB=gogs"
      volumes:
       - "db-data:/var/lib/postgresql/data"
      networks:
       - gogs
    gogs:
      image: gogs/gogs:latest
      restart: always
      ports:
       - "10022:22"
       - "3000:3000"
      links:
       - postgres
      environment:
       - "RUN_CROND=true"
      networks:
       - gogs
      volumes:
       - "gogs-data:/data"
      depends_on:
       - postgres

networks:
    gogs:
      driver: bridge

volumes:
    db-data:
      driver: local
    gogs-data:
      driver: local

运行

POSTGRES_USER=<your_db_user> POSTGRES_PASSWORD=<your_db_password> docker-compose up -d

配置基于nginx ssl的反向代理(路径自行调整)

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name gogs.abc.com;
    ssl_certificate /usr/syno/etc/certificate/ReverseProxy/3a2b92d0-ea43-4c88-a7a0-e8be86104850/fullchain.pem;
    ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/3a2b92d0-ea43-4c88-a7a0-e8be86104850/privkey.pem;
    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;
    location / {
        proxy_set_header        Host                $http_host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_intercept_errors  on;
        proxy_http_version      1.1;
        proxy_pass http://localhost:10080;
    }
}

这样就可以通过https+域名访问了。

Last modification:August 30th, 2019 at 10:13 am
If you think my article is useful to you, please feel free to appreciate

One comment

  1. repostone

    非技术的路过。

Leave a Comment