嘿群辉 篇四:docker固定ip,抛弃端口映射吧 -- 通过搭建gitlab看看如何使用
小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。
0. 什么是docker
抛开win和mac外,在linux系统下(包括群辉),docker是容器,方便部署和资源隔离、限制。
通过docker部署程序和普通直接部署程序相比较,仅仅会多占用一些磁盘空间。所以大家可以放心大胆的使用docker。
注册表: 相当于应用商城,可以选择下载不同的应用。
镜像: 就是下载的应用、软件包,大家下载的都是绿色软件,几乎不需要安装的,可能需要我们简单配置下。
容器: 相当于我们安装好的软件,同一个镜像可以启动多次,创建多个一样的容器。
很多套件是我们安装的是一些服务,比如数据库、gitlab、homeassistant等。群辉上的docker套件,每次重启容器的ip会发生变化,通过端口映射的方式来找到对应的服务。开始我也是采用这种方式,后面发现容器一多,端口就乱78遭的。
那么就得想个办法固定ip,这样直接通过ip+端口的形式访问服务,没有必要进行端口映射了。
本文内容需要开启ssh,使用终端进行。
1. 创建网络
原有的网络不支持固定ip,只能新建一个了:
sudo docker network create --subnet=172.18.0.0/16 fixbridge
默认的网段是172.17.0.0/16,我们使用相邻的,具体的随意即可。fixbridge 是网络的名称,后续需要通过这个名字指定网络。
创建的网络也可以通过界面查看
2. 创建容器
我们不能直接通过群辉的界面创建,只能通过终端创建容器。 创建的容器,界面也可以看到和操作。我们以'sameersbn/gitlab:latest'为例子,创建一个gitlab服务。
2.1 创建redis容器
https://hub.docker.com/r/sameersbn/redis/
提供的命令是多行的,后面的表示该条命令没有结束。直接复制到终端即可。
sudo docker run --name redis_101 -itd --net fixbridge --ip 172.18.0.101 --restart always
--volume /volume1/docker/redis/data:/var/lib/redis
--volume /volume1/docker/redis/log:/var/log/redis
--env 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
--env 'REDIS_VERSION=4.0.9'
--env 'REDIS_USER=redis'
--env 'REDIS_DATA_DIR=/var/lib/redis'
--env 'REDIS_LOG_DIR=/var/log/redis'
sameersbn/redis:latest
--name 容器的名称, 我起的名字里面带ip,方便查看
--net 我们创建的网络名称,写你的网络名字哦
--ip 指定的ip。除了该参数界面无法配置外,其他参数界面均可配置。
--restart always 不当关机时,会尝试重启
--volume 指定路径映射, :前面是宿主的路径,该路径你需要在群辉里面创建的。 :后面是映射到容器内部的路径。
--env 环境变量
sameersbn/redis:latest 下载的镜像和版本,和自己下载的镜像对应哦。
我们选择镜像--启动---高级设置
--env 就是环境选项卡,全部拷贝到命令行里面,这些参数目的是让我们改的,一般默认就行
--volume 对应的是卷,哪些路径需要映射呢? 基本都是env指定的。
如果不知道怎么填写可以启动一下,看看默认是什么内容。或者通过介绍页面查看帮助。
2.2 postgresql容器
https://hub.docker.com/r/sameersbn/postgresql
postgresql这个数据库,和mysql一样出名,gitlab支持较好。使用mysql也不错,但是gitlab无法使用子group,
sudo docker run --name postgresql_102 -itd --net fixbridge --ip 172.18.0.102 --restart always
--volume /volume1/docker/postgresql/certs:/etc/postgresql/certs
--volume /volume1/docker/postgresql/data:/var/lib/postgresql
--volume /volume1/docker/postgresql/log:/var/log/postgresql
--env "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
--env "PG_APP_HOME=/etc/docker-postgresql"
--env "PG_VERSION=10"
--env "PG_USER=postgres"
--env "PG_HOME=/var/lib/postgresql"
--env "PG_RUNDIR=/run/postgresql"
--env "PG_LOGDIR=/var/log/postgresql"
--env "PG_CERTDIR=/etc/postgresql/certs"
--env "PG_BINDIR=/usr/lib/postgresql/10/bin"
--env "PG_DATADIR=/var/lib/postgresql/10/main"
--env 'DB_NAME=gitlabhq_production' # 创建数据库
--env 'DB_USER=gitlab' # 创建用户,该用户具备访问上面的数据库的权限
--env 'DB_PASS=XXXXXX' # 用户密码
--env 'DB_EXTENSION=pg_trgm'
sameersbn/postgresql:latest
注释的三行表示创建个数据库以及用户给gitlab使用。
2.3 gitlab容器
https://hub.docker.com/r/sameersbn/gitlab#postgresql
sudo docker run --name gitlab_103 -itd --net fixbridge --ip 172.18.0.103
--publish 10022:22 # 映射端口号,22端口比较特殊需要映射出来
--volume /volume1/docker/gitlab/config:/home/git/gitlab/config:rw # 后面的rw表示可以读写,默认rw,之前很多没加
--volume /volume1/docker/gitlab/log:/var/log/gitlab:rw
--volume /volume1/docker/gitlab/data:/home/git/data:rw
--env "GITLAB_SSH_PORT=10022" # 和端口映射的端口一样哦,这三个配置会展示都网页提供clone地址用的
--env "GITLAB_SSH_HOST=git.xxx.xxx" # 你想采用的域名
--env "GITLAB_HOST=git.XXX.xxx" # 同上,可以不同
--env "DEBUG=true"
--env "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
--env "GITLAB_VERSION=11.11.3"
--env "RUBY_VERSION=2.5"
--env "GOLANG_VERSION=1.12.6"
--env "GITLAB_SHELL_VERSION=9.1.0"
--env "GITLAB_WORKHORSE_VERSION=8.7.0"
--env "GITLAB_PAGES_VERSION=1.5.0"
--env "GITALY_SERVER_VERSION=1.42.4"
--env "GITLAB_USER=git"
--env "GITLAB_HOME=/home/git"
--env "GITLAB_LOG_DIR=/var/log/gitlab"
--env "GITLAB_CACHE_DIR=/etc/docker-gitlab"
--env "RAILS_ENV=production"
--env "NODE_ENV=production"
--env "GITLAB_INSTALL_DIR=/home/git/gitlab"
--env "GITLAB_SHELL_INSTALL_DIR=/home/git/gitlab-shell"
--env "GITLAB_GITALY_INSTALL_DIR=/home/git/gitaly"
--env "GITLAB_DATA_DIR=/home/git/data"
--env "GITLAB_BUILD_DIR=/etc/docker-gitlab/build"
--env "GITLAB_RUNTIME_DIR=/etc/docker-gitlab/runtime"
--env "REDIS_PORT=6379" # 刚才redis的端口号
--env "REDIS_HOST=172.18.0.101" # redis的ip
--env "DB_ADAPTER=postgresql" # 使用postgresql数据库
--env "DB_HOST=172.18.0.102" # 使用postgresql数据库ip
--env "DB_PORT=5432" # 使用postgresql数据库端口
--env "DB_PASS=XXXXXXXX" # 使用postgresql数据库密码,这三个参数和之前启动数据库时的一样
--env "DB_USER=gitlab" # 使用postgresql数据库用户名
--env "DB_NAME=gitlabhq_production" # 使用postgresql数据库数据库名称
--env "GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string3-xx1" # 随机的字符串,加密用,
--env "GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string2-yy" # 字符串不同加密的内容也不同,随机填写和其他人区分
--env "GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string1-z22z" # 这三个参数全部替换掉,采用不一样的字符串
sameersbn/gitlab:latest
命令比较长,需要配置的几个后面使用#进行注释说明
GITLAB_HOST,GITLAB_SSH_HOST,GITLAB_SSH_PORT 这三个参数使用见下图
这个容器内部包括一个nginx,我们后面做映射的使用没有使用nginx的端口,可以将nginx剔除掉。
3. 映射域名
3.1 群辉反向代理
控制面板 --- 应用程序门户 --- 反向代理设置 --- 新增
按图填写即可:
名字:随便起个
来源:协议选择http或者https,有条件上https, 主机名填写你需要的域名,端口使用443或者80
目的地:即我们的gitlab应用,协议http,主机名 172.18.0.103,端口8181。
3.2 路由端口映射
此处不再展开, 需要把群辉映射出去。
3.3 ddns
将域名绑定到ip上,也可以使用通配符
本人使用通配符,这样就方便随时配置域名。
4. 总结
volume 参数的目的是让程序的数据能够保留到我们的群辉中,即使升级版本也能保留。不信你删除掉容器,重新run一个出来看看是不是完全一样的。大家可以百度下“稳定版白群晖升级数据丢失,官方回复说与他们无关”,本人不对事件做任何评论,大家珍惜自己的数据。特别是小公司,一定要舍得花钱招人,有招兼职的也可以联系我哦。
env参数的作用,是让我们对容器的程序进行定制,目的就是让我们能够按照我们的口味用着顺心。
文章可能有遗漏之处,如果有问题大家留言区见 ,大家多多收藏、多多点赞支持,要准备高产了~
完~

怎么免费使用 ee版本?
完全没关系的两回事~
这本质不还是内网穿透吗?
在往下看的人更少了~
你没让他固定,他就按照启动顺序分配。和DHCP类似
为啥重启容器ip会变化
硬,太硬核了
消费级产品就是面对普通消费者的产品咯,对应的是商用产品,譬如服务器是商用产品,PC是消费级产品;我们生产环境一般不会用NAS,更加不可能用群晖这种解决方案<更别说黑群晖),生产环境应该用SAN走FC协议,特别搭建数据库。当然,现在界限可能越来越模糊,也见过用PC充当服务器的企业
gitlab是开源项目,版本控制工具,不明白你说的你说消费产品什么意思?
文章表达的是固定IP的方式,不再做端口映射了,gitlab作为例子~
比如MySQL公司可以装,个人也可以用。gitlab包括百度阿里都在用哦~
很大的技术部门用消费级的产品和解决方案?
不知道的话说明你在的行业不使用,没必要熟悉它。
一般用不到的,除非你是很大的技术部门,很多小组可以在上面交流
对gitlab不熟,应用场景不说说?
写的太少,文章结构组织的比较差。总体概念就是多用docker
不明白有何用?
感谢金主,群晖拿来作为pt工具未免太浪费了~
这么硬核的docker文章,发在这里估计没多少人看。我先打赏吧~
有深度,收藏了