很早的时候手上买了群晖的918作为家里的nas,平时放一些文档,深度学习的数据,最重要的还充当我个人的开发环境及服务器。在DSM6.X的时代,Synology上有gitlab组件,可以方便的搭建gitlab托管自己代码。虽然网上有很多吐槽他不稳定的,但在6.x上我用的还是一直很稳定,包括备份等做的都很不错。性能反正个人用是足够的。但升级DSM7.0后,gitlab组件就没有了。无奈我又想办法降级回6.x使用,但升级这种大趋势我们是没办法阻挡的,作为个人玩家,还是要想办法找到替代方案,于是我就研究了下DSM6.x的gitlab是怎么做的,发现还是很简单的,只要有docker,我们也可以在DSM7上装回熟悉的gitlab。这个方法可以让你继续使用DSM6.x的gitlab数据库,我们就可以放心大胆的升级到DSM7了。
synology的gitlab组件实际上是在这个repo上二次开发的一个封装:https://github.com/sameersbn/docker-gitlab,之前用gitlab的肯定也发现了,他那个gitlab实际上就是在docker上托管的。这个repo里的readme已经讲的非常详细了,如果希望高阶定制自己的gitlab的可以再研读下他的readme。接下来在nas上搭建gitlab需要1. 记录DSM6上的几个环境变量,作为备份;2. 检查自己gitlab的版本,按照升级路线选择版本;3.在docker上开始搭建。
记录DSM6上的环境变量
如果你也是像我一样,之前在DSM6上使用自带的gitlab,想升级到DSM7上还使用原来的repo,那么打开docker,找到gitlab的docker双击,找到这几个环境变量把他们保存出来,后面我们需要他们作为启动docker的参数。
1 2 3
| GITLAB_SECRETS_DB_KEY_BASE= GITLAB_SECRETS_OTP_KEY_BASE= GITLAB_SECRETS_SECRET_KEY_BASE=
|
gitlab升级路线
为了能够无缝升级兼容我们的数据和repo,需要遵守gitlab的升级路径:https://docs.gitlab.com/ee/update/#upgrade-paths 我们升级的时候,需要知道自己的数据是那个gitlab版本留下的,然后小心的选择自己下一个版本,经过几跳后可以到达自己目标的版本。之前是synology版本处理了这个事情,现在就需要自己去看了。这个没啥好说的,看路径节点,注意备份数据。
在synology7上搭建gitlab
先说nas上的配置,跟dsm6上一样,我们开一个文件夹名字叫docker,docker下建一个目录叫gitlab,这个目录如果你有之前备份,那直接使用,没有的自己建一个,作为我们gitlab的数据库了。
接下来在套件里面找到docker,自己装上。装完在控制面板->终端机和SNMP->启动SSH功能,找个终端进入nas(过程不再赘述,估计要开gitlab的大部分都是程序员了。。)
完成上面操作的,我写了个脚本如下,把这个脚本复制下来放到docker目录下/volume1/docker(其实什么目录都可以,这个脚本也不管workspace)。使用root运行脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #!/bin/bash set -x set -e
GITLAB_DOCKER=sameersbn/gitlab:13.12.2 GITLAB_POSTGRESQL_DOCKER=sameersbn/postgresql:12-20200524 GITLAB_REDIS_DOCKER=sameersbn/redis:4.0.9-1
if [ ! -d /volume1 ]; then echo "need at least volume" exit 1 fi VOLUME=/volume1
DOCKER_POSTGRESQL_PATH=/var/lib/postgresql DOCKER_GITLAB_PATH=/home/git/data
if [ ! -d $VOLUME/docker/gitlab ]; then mkdir -p $VOLUME/docker/gitlab fi
synology_gitlab_name=synology_gitlab synology_gitlab_postgresql_name=synology_gitlab_postgresql synology_gitlab_redis_name=synology_gitlab_redis
HOST_POSTGRESQL_PATH=$VOLUME/docker/gitlab/postgresql HOST_GITLAB_PATH=$VOLUME/docker/gitlab/gitlab
POST_DB_NAME=gitlab POST_DB_USER=gitlab_user POST_DB_PASS=gitlab_pass
HTTP_PORT=8000 SSH_PORT=30000 GITLAB_URL=localhost
GITLAB_SECRETS_DB_KEY_BASE=PLqOLXjGFKMXe2odwv8PstDN4dob5GBnDOJnEzlrShO7wE7gcNTy4traV_dqY+X7 GITLAB_SECRETS_OTP_KEY_BASE=VkewEafCFYUh6fvfDme_OdWXPPsJJcNBAbHwq2I3ujMVPlvs066TaPVob00eR14r GITLAB_SECRETS_SECRET_KEY_BASE=feXZoHf9em0+EgBEbetpGEFWLX7oR5IKUWAqWYWhPLWB300kWkac9uKBzsdhI4U8
docker pull $GITLAB_DOCKER docker pull $GITLAB_POSTGRESQL_DOCKER docker pull $GITLAB_REDIS_DOCKER
mkdir -p $HOST_GITLAB_PATH mkdir -p $HOST_POSTGRESQL_PATH
docker run --name $synology_gitlab_postgresql_name -d \ --env "DB_NAME=$POST_DB_NAME" \ --env "DB_USER=$POST_DB_USER" \ --env "DB_PASS=$POST_DB_PASS" \ --env "DB_EXTENSION=pg_trgm,btree_gist" \ --volume $HOST_POSTGRESQL_PATH:$DOCKER_POSTGRESQL_PATH \ $GITLAB_POSTGRESQL_DOCKER
docker run --name $synology_gitlab_redis_name -d \ $GITLAB_REDIS_DOCKER
docker run --name $synology_gitlab_name -d \ --link $synology_gitlab_postgresql_name:postgresql --link $synology_gitlab_redis_name:redisio \ --publish $SSH_PORT:22 --publish $HTTP_PORT:80 \ --env "GITLAB_HOST=$GITLAB_URL" \ --env "GITLAB_PORT=$HTTP_PORT" --env "GITLAB_SSH_PORT=$SSH_PORT" \ --env "GITLAB_SECRETS_DB_KEY_BASE=$GITLAB_SECRETS_DB_KEY_BASE" \ --env "GITLAB_SECRETS_SECRET_KEY_BASE=$GITLAB_SECRETS_SECRET_KEY_BASE" \ --env "GITLAB_SECRETS_OTP_KEY_BASE=$GITLAB_SECRETS_OTP_KEY_BASE" \ --volume $HOST_GITLAB_PATH:$DOCKER_GITLAB_PATH \ $GITLAB_DOCKER
|
运行完脚本后,没有意外的话,gitlab就已经回来了,快去docker的container里看一下他们,访问下自己的URL熟悉的界面。
如果有问题的话。。
按说是没有问题的,但这个脚本是个人使用,大家都可以在这上面进行修改,也是阅读之前DSM6上面docker的配置自己改的脚本,如果有问题大家可以讨论啊
本文标题:在Synology DSM7.0上,找回我们熟悉的gitlab
文章作者:throneclay
发布时间:2022-05-21
最后更新:2022-08-03
原始链接:http://blog.throneclay.top/2022/05/21/dsm7_gitlab/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!