前言

最近折腾了一番自建 gitlab,在此做个记录,供君参考。整个构建过程基于 Docker Swarm(近期有计划将微服务移植到 Kubernetes,但还没倒腾顺手,暂时先沿用旧的方案),主题配图与主题无关,请忽略......

1. 快速启用

配置的一般原则是先可用再优化,简单启动 gitlab 只需要一条命令:

sudo docker run --detach \

--hostname gitlab.yuclk.com \

--publish 443:443 --publish 80:80 --publish 22:22 \

--name gitlab \

--restart always \

--volume /mnt/nas/gitlab/config:/etc/gitlab \

--volume /mnt/nas/gitlab/logs:/var/log/gitlab \

--volume /mnt/nas/gitlab/data:/var/opt/gitlab \

gitlab/gitlab-ce:latest

然后就功能而言只差配置邮箱这么一步了,通过 docker exec -it 进入容器,修改 /etc/gitlab/gitlab.rb,添加如下配置:

# SMTP

gitlab_rails['smtp_enable'] = true

gitlab_rails['smtp_address'] = 'smtp.exmail.qq.com'

gitlab_rails['smtp_port'] = 465

gitlab_rails['smtp_user_name'] = 'gitlab@youclk.com'

gitlab_rails['smtp_password'] = '******'

gitlab_rails['smtp_domain'] = 'smtp.qq.com'

gitlab_rails['smtp_authentication'] = 'login'

gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['smtp_tls'] = true

gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

# If your SMTP server does not like the default 'From: gitlab@localhost' you

# can change the 'From' with this setting.

gitlab_rails['gitlab_email_from'] = 'gitlab@youclk.com'

# gitlab_rails['gitlab_email_reply_to'] = 'noreply@youclk.com'

接着使用以下命令让配置生效:

gitlab-ctl reconfigure

gitlab-ctl restart

最后就可以进入 gitlab 控制台测试发送邮件:

gitlab-rails console

Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now

除此之外还有两种配置方式,例:

sudo docker run \

--env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;"

sudo docker run -e GITLAB_CDN_HOST=gitlab.youclk.com

以上只是简写示例,我个人并不推荐后面两种,虽然通过环境变量设置具有更高的自由度,但是配置太多了,我还是更倾向替换或者挂载配置文件的方式。

通过以上配置之后整个 gitlab 的基本功能都可用了(CI/CD 日后有空再折腾)。

2. 集成到 swarm

这一步只需要准备两个编排文件,proxy:

version: '3.5'

services:

proxy:

image: vfarcic/docker-flow-proxy:18.04.06-12

ports:

- 80:80

networks:

- proxy

environment:

- LISTENER_ADDRESS=swarm-listener:18.04.06-12

- MODE=swarm

secrets:

- dfp_users_monitoring

deploy:

labels:

- com.df.notify=true

- com.df.port=8080

- com.df.serviceDomain=localhost

- com.df.reqPathSearchReplace=/alive,/v1/docker-flow-proxy/ping

restart_policy:

condition: any

max_attempts: 3

update_config:

delay: 5s

order: start-first

swarm-listener:

image: vfarcic/docker-flow-swarm-listener:18.04.12-7

networks:

- proxy

volumes:

- /var/run/docker.sock:/var/run/docker.sock

environment:

- DF_NOTIFY_CREATE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/reconfigure

- DF_NOTIFY_REMOVE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/remove

deploy:

placement:

constraints: [node.role == manager]

restart_policy:

condition: any

max_attempts: 3

update_config:

delay: 5s

order: start-first

networks:

proxy:

external: true

secrets:

dfp_users_monitoring:

external: true

gitlab:

version: '3.5'

services:

gitlab:

image: gitlab/gitlab-ce

hostname: gitlab.youclk.com

networks:

- proxy

- youclk

ports:

- 2289:22

volumes:

- /mnt/nas/gitlab/config:/etc/gitlab

- /mnt/nas/gitlab/logs:/var/log/gitlab

- /mnt/nas/gitlab/data:/var/opt/gitlab

deploy:

mode: replicated

labels:

- com.df.notify=true

- com.df.port=80

- com.df.serviceDomain=gitlab.youclk.com

restart_policy:

condition: any

max_attempts: 3

update_config:

delay: 5s

order: start-first

networks:

proxy:

external: true

youclk:

external: true

然后依次启用即可,例:

# create infrastructure

echo "youclk:****" | docker secret create dfp_users_monitoring -

docker network create --driver overlay proxy

docker network create --driver overlay youclk

# startup

docker stack deploy -c src/docker-compose-proxy.yml proxy

docker stack deploy -c src/docker-compose-gitlab.yml gitlab

第一步优化完毕,如果不希望太折腾的话到这就可以结束了,服务的可用性方面不会有太大影响。

3. 分离缓存与数据库

我不知道 gitlab 为什么不进一步提供纯净版的镜像,而且官方推荐 omnibus 的安装方式,反正我至少不喜欢把数据库和缓存都集成到一个镜像里面,预期是构建一个子镜像并移除 nginx、postgreSQL、redis。经过一番揪心地测试之后,还是得说可惜,浪费了不少时间却没有顺利达到目的,最后只能按照官方推荐的在配置文件中禁用 postgreSQL 和 redis。

首先准备一份 db 的编排文件:

version: '3.5'

services:

redis:

image: redis

networks:

- proxy

- youclk

ports:

- 6379:6379

deploy:

restart_policy:

condition: any

max_attempts: 3

update_config:

delay: 5s

order: start-first

postgresql:

image: postgres

networks:

- proxy

- youclk

ports:

- 5432:5432

volumes:

- /mnt/nas/db/postgresql:/var/lib/postgresql

- $PWD/src/postgresql.conf:/etc/postgresql/postgresql.conf

deploy:

labels:

- com.df.notify=true

- com.df.port=5432

restart_policy:

condition: any

max_attempts: 3

update_config:

delay: 5s

order: start-first

networks:

proxy:

external: true

youclk:

external: true

注意,postgreSQL 默认是禁用远程连接的,需要修改 /etc/postgresql/postgresql.conf,反正是内网用,允许所有 ip 就好了 listen_addresses = '*',获取配置文件的方式:

docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf

然后就像我编排文件中示例,挂载上去就行了。

postgreSQL 默认的用户名、密码、初始数据库都是 postgres,可以通过设置环境变量更改默认配置:

environment:

- POSTGRES_PASSWORD=mysecretpassword

- POSTGRES_USER=myuser

- POSTGRES_DB=mydb

最后就是就是修改 gitlab 的配置文件了:

# redis

redis['enable'] = false

# Redis via TCP

gitlab_rails['redis_host'] = 'redis'

gitlab_rails['redis_port'] = 6379

# Disable the built-in Postgres

postgresql['enable'] = false

# Fill in the connection details for database.yml

gitlab_rails['db_adapter'] = 'postgresql'

gitlab_rails['db_encoding'] = 'utf8'

gitlab_rails['db_host'] = 'postgresql'

gitlab_rails['db_port'] = 5432

gitlab_rails['db_username'] = 'postgres'

gitlab_rails['db_password'] = 'postgres'

gitlab_rails['db_database'] = 'postgres'

第二步优化到此结束,启动命令:

cp gitlab.rb /mnt/nas/gitlab/config/gitlab.rb

docker stack deploy -c src/docker-compose-gitlab.yml gitlab

4. 启用 SSL

如果你的情况完全符合官方文档推荐的场景,那很简单:

external_url "https://gitlab.youclk.com"

nginx['redirect_http_to_https'] = true

mkdir -p /etc/gitlab/ssl

chmod 700 /etc/gitlab/ssl

cp gitlab.youclk.com.key gitlab.youclk.com.crt /etc/gitlab/ssl/

但一般情况下在微服务中证书呀、负载均衡呀、网关呀等都是属于外围的基础设施了,不会和应用挂钩,这种情况下更简单,因为,完全不需要任何配置。

5. 强迫症的救赎

上一节提到在目前的微服务环境下启用 SSL 不需要任何配置,那我写这节干嘛?脑残吗?好吧,是脑残,而且是添加了强迫症的脑残,先放一张图:

逼死强迫症的是什么,各位能懂吗?也许这辈子都不会用到使用 HTTP 去 clone 代码,但哥哥就是受不了这个提示,一想起来就头皮发麻,宛如被一万头草泥马来回碾压。

这个小问题让我吃不香,睡不着,都胖了好几斤,我必须要解决他。然后,我不知道当时的状态是不是已经已经在阿鼻地狱的边缘,我最开始想到的是从源代码中去寻找这个提示的逻辑,强行改成 HTTPS(失败);注入一段 js 去修改提示(有修改的延迟,仍然无法忍受);修改 nginx 的配置文件(成功)。

最后的方案是先设置 external_url 为 https(这个绕不过去),然后因为负载均衡过来的的只有 http,所以先代理到 https ,再回到 http(也可以不回),就为了抵消 external_url 的配置,最后修改下请求头就行了:

proxy_set_header X-Forwarded-Proto https;

proxy_set_header X-Forwarded-Ssl on;

现在是不是舒服多了...以上一番测试差不多花了一天的时间,就为了这么个小玩意儿,但无论怎么样,最后有结果了还是能稍感欣慰的。

但,你以为就这么结束了吗,不,当我重新回顾了一下参考文档后,我发现了这么一段提示:

# Other bundled components (Registry, Pages, etc) use a similar strategy for proxied SSL. Set the particular component's *_external_url with https:// and prefix the nginx[...] configuration with the component name. For example, for Registry use the following configuration:

registry_external_url 'https://registry.example.com'

registry_nginx['listen_port'] = 80

registry_nginx['listen_https'] = false

于是,我尝试着修改成这样子:

external_url 'https://gitlab.youclk.com'

nginx['listen_port'] = 80

nginx['listen_https'] = false

效果完全一致,这时候宛如被好几万头草泥马来回碾压,我当初为什么就没有把参考文档拉到最后面,忙活一整天却闹了个大笑话,血淋淋的教训!

结语

周六经过这么一番折腾本就很丧,又碰上 mac 扬声器坏了,心情一撸到底。然后就想着怎么去调节一下,好嘛,这一想,又冒出一堆负能量。

不知道有多少人会像我一样常常被 “自己” 掣肘,在内心层面我不算是一个很宅的人,我不喜欢呆在家里,我总是和很多人谈诗和远方,但,只局限于谈。一方面大块时间的浪费常常给我带来负罪感,因此我很少能玩得尽兴;另一方面,对于每月结余都是负数的资产状况,偶尔还得厚着脸皮问家里要,我不知道我还有什么资格去追求些什么?

想了一晚上,周日早上五点钟起来,买了张动车票准备去上海散散心,好嘛,忘了地铁没那么早开呀,又舍不得打的(备感凄惨),只能等到点了排队去改签(还跟插队的吵了一架,理直气壮地要插我前面,还有傻X帮忙维护,我也是见什么鬼了)... 虽过程曲折,但结果总归不是太糟,被陆家嘴那一堆建筑震撼之后也不再那么消极了。最后,去了上海中心大厦的顶楼,在那点了杯咖啡,打了一天代码,晚上七点钟返回~

我的公众号《有刻》,我们共同成长!

postgresql 配置redis_自建 Gitlab (邮箱配置、拆分 PostgreSQL、Redis) + 随想相关推荐

  1. gitlab邮箱配置 及 163邮箱发件失败

    gatlab邮箱配置: http://blog.csdn.net/jackghq/article/details/54954486 163邮箱发件失败: 转自:http://ruby-china.or ...

  2. python邮箱配置_python flask mail QQ邮箱配置

    1.针对QQ邮箱设置: app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL ...

  3. Gitlab安装配置及简单问题处理

    Git 是版本控制系统 Github 是在线的基于Git的代码托管服务 Gitlab 可以在上面创建免费的私人repo 建议(少走弯路) 1.Gitlab本身很容易安装,整个安装包也就300M,下载到 ...

  4. Docker折腾记: (3)Docker Compose构建Gitlab,从配置(https,邮箱验证)到基本可用

    前言 gitlab 11.1内置了CI/CD,这个特性从gitlab 8+就开始有了,不过配置比较琐碎 经过几个大版本的迭代,现在已经简化了使用方式,也修复了一些坑,这个特性大大吸引了我; gitla ...

  5. gitlab安装_Gitlab安装和配置教程(包括邮箱配置)

    Gitlab社区版安装和配置过程 工具准备:centOS 7 系统镜像(Gitlab是需要搭建中linux系统中的).一台连上互联网的PC 准备工作:在WindowsPC上装一个centOS的虚拟机. ...

  6. gitlab服务器邮箱配置

    如想用 SMTP 代替 Sendmail 发送email,添加如下相应邮箱服务商的配置到/etc/gitlab/gitlab.rb, 然后运行gitlab-ctl reconfigure使修改生效. ...

  7. centos 6.8安装git_CentOS7安装GitLab、汉化、邮箱配置及使用

    一.GitLab简介 GitLab是利用Ruby On Rails开发的一个开源版本管理系统,实现了一个自托管的Git项目仓库,是集代码托管,测试,部署于一体的开源git仓库管理软件,可通过web界面 ...

  8. Linux 环境下安装 GitLab 与配置

    什么是 GitLab? GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务. GitLab的功能特点 提供了管理,计划,创建,验证,打 ...

  9. 搭建个人网站(2):Github和Vercel建站以及配置DNS

    My Blog: 搭建个人网站(2):Github和Vercel建站以及配置DNS 在购买好自定义域名之后,下一步就是去找个服务器来放置我们的网站了,但国内服务器要备案,国外的服务器又贵,既不想备案又 ...

最新文章

  1. Linux环境安装phpredis扩展
  2. 日志记录组件[Log4net]详细介绍(转)
  3. python爬取boss直聘招聘信息_Python笔记-爬取Boss直聘的招聘信息
  4. SpringCloud-Eureka-ProviderConsumer
  5. java kafka搭建,Apache Kafka 安装步骤
  6. Time.deltaTime 含义和应用
  7. mysql主从同步忽略一条错误_mysql主从同步出现异常语句跳过错误处理
  8. 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
  9. QCon思考之通过Quora和Spotify案例,直击数据处理背后的魅影
  10. 蓝桥杯 ALGO-87 算法训练 字串统计
  11. C#基础11:五种访问修饰符
  12. 开课吧:C++开发需要知晓的知识有哪些?
  13. 西电Pintos操作系统课程设计 实验三
  14. 一个检测PC机软硬件系统信息的工具——EVEREST
  15. docker的离线安装方法和网络源安装方法、内网环境linux脚本批量安装docker、安装docker-compose
  16. matlab hist3函数,matlab – 是否有可能使hist3图更平滑?
  17. linux学习(跟着b站尚硅谷老师学习)
  18. contiki学习笔记(三)contiki系统
  19. i7服务器cpu型号推荐,Intel七款主流CPU,推荐指南(建议收藏)
  20. 如何搭建一个在线教育平台

热门文章

  1. SAP License:SAP项目文档的考核标准
  2. 重磅分享:一份关于车贷的政策性文件分享
  3. python global nonlocal
  4. php常用的的字符串转换
  5. JAVA多线程售票问题
  6. testVC.modalPresentationStyle = UIModalPresentationFormSheet; 更改 VC大小
  7. 向Array中添加二分插入排序
  8. 解决 warning C4819 问题
  9. 【转】Linux下软件安装的几种方式
  10. linux shell学习三