百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

群晖DS218+部署GitLab

bigegpt 2024-09-18 08:04 3 浏览

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

起因是懒

最近开始折腾GitLab的CI功能,就打算在家部署一个GitLab,通常做法是打开电脑,启动GitLab,用完再关闭电脑,总觉得这些操作挺麻烦(您想骂我懒么?您骂得对.....)

群晖解决烦恼

  • 家里有台群晖DS218+,从不关机,为全家提供稳定的图片和视频服务,之前已在上面部署了maven私服、MySQL,运行得很稳定,今天就把GitLab也部署在上面吧,今后可以随时想用就用,算得上懒人救星了。
    • 下图是DS218+刚买来的样子,两块NAS硬盘,一直在稳定服务:
    • 下图是网购的内存条,现在一共2+8=10G内存,内存充足才是敢折腾的底气:

    前文链接

    之前折腾群晖的记录:

    1. K8S使用群晖DS218+的NFS
    2. 群晖DS218+部署Harbor(1.10.3)
    3. 群晖DS218+部署mysql
    4. 群晖DS218+部署kafka
    5. 群晖DS218+做maven私服(nexus3)

    思路

    其实操作很简单:GitLab的部署是基于docker-compose的,群晖已带有docker-compose了,按照官方的部署指南操作即可,以下几处是要注意的地方:

    1. 部署操作需要管理员权限,所以不在网页上操作了,而是SSH登录后台进行操作;
    2. GitLab最好是用域名访问,如果用IP就意味着文件访问地址中带有IP,一旦IP变了,原有的文件访问地址就无效了

    环境信息

    • 群晖系统:DSM 6.2.2-24922 Update 4
    • GitLab:Community Edition 13.0.6

    配置host

    GitLab中的文件都有访问地址,用GitLab服务器的IP作为这个地址,显然是不合适的(如果GitLab服务器的IP变了这个文件的访问地址就无效了),所以以下两点需要满足:

    1. 为GitLab服务器准备域名,这里就是给群晖的IP地址准备域名:gitlab.synology.com
    2. 确保群晖自己能通过域名访问到GitLab
    3. 确保所有访问者都能通过域名访问到GitLab
    4. 一般是修改访问者的hosts文件来达到域名访问的目标,我这里为了省事儿,是在路由器里配置的:192.168.50.43 gitlab.synology.com

    允许SSH登录

    先要设置允许SSH后台登录:

    • 如下图红框的操作:
    • 如下图,勾选启用SSH功能,端口就用22:
    • 现在用SSH终端即可登录群晖了,我这里是在windows电脑上用Xshell6登录的,您可以选用任意SSH终端工具,账号密码就是能登录群晖的账号密码,如下图,登录后,就可以使用日常的linux命令了:
    • 注意上图的红框,登录账号的home目录是/var/services/homes/zq2599

    部署

    • 创建docker-compose.yml文件,内容如下(大多数内容可以直接使用,需要修改的地方稍后会说):
    version: '2.3'
    
    services:
      redis:
        restart: always
        image: redis:5.0.9
        command:
        - --loglevel warning
        volumes:
        - redis-data:/var/lib/redis:Z
    
      postgresql:
        restart: always
        image: sameersbn/postgresql:11-20200524
        volumes:
        - postgresql-data:/var/lib/postgresql:Z
        environment:
        - DB_USER=gitlab
        - DB_PASS=password
        - DB_NAME=gitlabhq_production
        - DB_EXTENSION=pg_trgm
    
      gitlab:
        restart: always
        image: sameersbn/gitlab:13.0.6
        depends_on:
        - redis
        - postgresql
        ports:
        - "10080:80"
        - "10022:22"
        volumes:
        - gitlab-data:/home/git/data:Z
        healthcheck:
          test: ["CMD", "/usr/local/sbin/healthcheck"]
          interval: 5m
          timeout: 10s
          retries: 3
          start_period: 5m
        environment:
        - DEBUG=false
    
        - DB_ADAPTER=postgresql
        - DB_HOST=postgresql
        - DB_PORT=5432
        - DB_USER=gitlab
        - DB_PASS=password
        - DB_NAME=gitlabhq_production
    
        - REDIS_HOST=redis
        - REDIS_PORT=6379
    
        - TZ=Asia/Kolkata
        - GITLAB_TIMEZONE=Kolkata
    
        - GITLAB_HTTPS=false
        - SSL_SELF_SIGNED=false
    
        - GITLAB_HOST=gitlab.synology.com
        - GITLAB_PORT=10080
        - GITLAB_SSH_PORT=10022
        - GITLAB_RELATIVE_URL_ROOT=
        - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
        - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
        - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
    
        - GITLAB_ROOT_PASSWORD=
        - GITLAB_ROOT_EMAIL=
    
        - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
        - GITLAB_NOTIFY_PUSHER=false
    
        - GITLAB_EMAIL=notifications@example.com
        - GITLAB_EMAIL_REPLY_TO=noreply@example.com
        - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com
    
        - GITLAB_BACKUP_SCHEDULE=daily
        - GITLAB_BACKUP_TIME=01:00
    
        - SMTP_ENABLED=false
        - SMTP_DOMAIN=www.example.com
        - SMTP_HOST=smtp.gmail.com
        - SMTP_PORT=587
        - SMTP_USER=mailer@example.com
        - SMTP_PASS=password
        - SMTP_STARTTLS=true
        - SMTP_AUTHENTICATION=login
    
        - IMAP_ENABLED=false
        - IMAP_HOST=imap.gmail.com
        - IMAP_PORT=993
        - IMAP_USER=mailer@example.com
        - IMAP_PASS=password
        - IMAP_SSL=true
        - IMAP_STARTTLS=false
    
        - OAUTH_ENABLED=false
        - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
        - OAUTH_ALLOW_SSO=
        - OAUTH_BLOCK_AUTO_CREATED_USERS=true
        - OAUTH_AUTO_LINK_LDAP_USER=false
        - OAUTH_AUTO_LINK_SAML_USER=false
        - OAUTH_EXTERNAL_PROVIDERS=
    
        - OAUTH_CAS3_LABEL=cas3
        - OAUTH_CAS3_SERVER=
        - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
        - OAUTH_CAS3_LOGIN_URL=/cas/login
        - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
        - OAUTH_CAS3_LOGOUT_URL=/cas/logout
    
        - OAUTH_GOOGLE_API_KEY=
        - OAUTH_GOOGLE_APP_SECRET=
        - OAUTH_GOOGLE_RESTRICT_DOMAIN=
    
        - OAUTH_FACEBOOK_API_KEY=
        - OAUTH_FACEBOOK_APP_SECRET=
    
        - OAUTH_TWITTER_API_KEY=
        - OAUTH_TWITTER_APP_SECRET=
    
        - OAUTH_GITHUB_API_KEY=
        - OAUTH_GITHUB_APP_SECRET=
        - OAUTH_GITHUB_URL=
        - OAUTH_GITHUB_VERIFY_SSL=
    
        - OAUTH_GITLAB_API_KEY=
        - OAUTH_GITLAB_APP_SECRET=
    
        - OAUTH_BITBUCKET_API_KEY=
        - OAUTH_BITBUCKET_APP_SECRET=
    
        - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
        - OAUTH_SAML_IDP_CERT_FINGERPRINT=
        - OAUTH_SAML_IDP_SSO_TARGET_URL=
        - OAUTH_SAML_ISSUER=
        - OAUTH_SAML_LABEL="Our SAML Provider"
        - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
        - OAUTH_SAML_GROUPS_ATTRIBUTE=
        - OAUTH_SAML_EXTERNAL_GROUPS=
        - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
        - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
        - OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
        - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
        - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=
    
        - OAUTH_CROWD_SERVER_URL=
        - OAUTH_CROWD_APP_NAME=
        - OAUTH_CROWD_APP_PASSWORD=
    
        - OAUTH_AUTH0_CLIENT_ID=
        - OAUTH_AUTH0_CLIENT_SECRET=
        - OAUTH_AUTH0_DOMAIN=
        - OAUTH_AUTH0_SCOPE=
    
        - OAUTH_AZURE_API_KEY=
        - OAUTH_AZURE_API_SECRET=
        - OAUTH_AZURE_TENANT_ID=
    
    volumes:
      redis-data:
      postgresql-data:
      gitlab-data:
    • 上述配置中,有四处地方需要您修改;
    • 第一处:gitlab.ports,这里用宿主机的10080端口映射容器的http端口,宿主机的10022端口映射容器的ssh端口
    • 第二处:gitlab.environment.GITLAB_PORT,要和前面映射的10080端口一致,这样GitLab上的文件url中会带有10080端口,确保在网页上可以正常访问文件
    • 第三处:gitlab.environment.GITLAB_SSH_PORT,要和前面映射的10022端口一致,这样GitLab上给出的仓库地址中会带有10022,您在客户端使用git clone命令时才连接GitLab成功
    • 第四处:gitlab.environment.GITLAB_HOST,配置成前面准备好的host:gitlab.synology.com
    • 其他参数我这里暂时无需修改,请您自己酌情调整,参考文档:https://github.com/sameersbn/docker-gitlab
    • 再次确认群晖上的域名是可以访问的(192.168.50.43是群晖的IP地址):
    • 执行命令sudo docker-compose up -d,完成GitLab的部署和启动;
    • 等待启动成功,群晖的硬件性能一般,我这里大约等待10分钟左右(期间网页访问会出现502错误,等启动成功后就好了);
    • 启动成功后,访问地址http://gitlab.synology.com:10080,会提示设置root账号的密码:
    • 设置好密码后,就可以用root账号登录了:
    • 如下图,请另外注册一个账号,在后面的实际操作中用到,我这边注册账号是zq2599,邮箱zq2599@gmail.com

    验证:创建项目

    • 用新建账号登录,点击Create a project
    • 新建仓库的信息如下:
    • 在新仓库的页面,下图红框中是该仓库的地址,请记下来,稍后用到:

    验证:提交代码

    • 找一台电脑来验证提交代码,我这里找了个CentOS7服务器;
    • 安装git:yum install -y git
    • 创建ssh key,执行ssh-keygen -t rsa -C "zq2599@gmail.com",然后一路回车:
    • 账号和邮箱做全局配置,执行如下命令:
    git config --global user.name "zq2599" \
    && git config --global user.email zq2599@gmail.com
    • 将文件~/.ssh/id_rsa.pub的内容完整复制到如下位置:
    • 回到客户端机器上,克隆项目试试:
    git clone ssh://git@gitlab.synology.com:10022/zq2599/test001.git
    • 如下图,代码下载成功:
    • 再来试试修改内容能否成功提交,操作命令如下图所示:
    • 再去网站上看看,内容已经成功提交:

    至此,群晖服务器上已成功安装了GitLab,接下来可以愉快的折腾GitLab CI了;

    欢迎关注我的公众号:程序员欣宸

    相关推荐

    方差分析简介(方差分析通俗理解)

    介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

    正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

    吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

    Python数据可视化:箱线图多种库画法

    概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

    多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

    作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

    方差分析 in R语言 and Excel(方差分析r语言例题)

    今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

    可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

    前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

    matplotlib 必知的 15 个图(matplotlib各种图)

    施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

    R ggplot2常用图表绘制指南(ggplot2绘制折线图)

    ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

    Python数据可视化:从Pandas基础到Seaborn高级应用

    数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

    Python 数据可视化常用命令备忘录

    本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

    统计图的种类(统计图的种类及特点图片)

    统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

    实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

    大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

    通过AI提示词让Deepseek快速生成各种类型的图表制作

    在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

    数据可视化:解析箱线图(box plot)

    箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

    [seaborn] seaborn学习笔记1-箱形图Boxplot

    1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...