安全:關閉防火牆,selinux
1.安裝GItlab所需的依賴包
yum install curl policycoreutils-python openssh-server postfix wget -y
安裝gitlab
獲取gitlab原始碼包
選擇各種yum源去安裝
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
我已經準備好了
準備好原始碼
#這是社群辦的,gtilab
rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
gitlab基礎設定
配置gitlab服務,修改域名和郵箱
設定引數如下
[root@gitlab-99 ~]#grep -E '^[a-Z]' /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.99'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '877348180@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'linux0224'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "877348180@qq.com"
gitlab_rails['smtp_password'] = "pvthquniqpjvbbch"
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的配置,務必要重新載入gitlab配置
#重新配置gitlab,首次執行會很慢
gitlab-ctl reconfigure
執行命令,測試是否可以發郵件
gitlab-rails console
執行如下命令測試發郵件即可
Notify.test_email('yc_uuu@163.com','美好的一天','hello linux0224').deliver_now
gitlab命令列管理
gitlab-ctl start 啟動所有服務
gitlab-ctl stop 停止
gitlab-ctl stop postgresql 停止某個服務
gitlab-ctl restart
gitlab-ctl status
gitlab-ctl reconfigure 重新讀取gitlab配置
gitlab-ctl tail 檢視gitlab的執行狀態,所有服務狀態
gitlab-ctl tail redis 只看某個服務的狀態
檢測gitlab的nginx狀態
[root@gitlab-99 ~]#netstat -tunlp|grep nginx
tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 3303/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3303/nginx: master
[root@gitlab-99 ~]#
[root@gitlab-99 ~]#
[root@gitlab-99 ~]#
[root@gitlab-99 ~]#gitlab-ctl tail nginx
==> /var/log/gitlab/nginx/current <==
==> /var/log/gitlab/nginx/error.log <==
==> /var/log/gitlab/nginx/gitlab_access.log <==
==> /var/log/gitlab/nginx/gitlab_error.log <==
==> /var/log/gitlab/nginx/access.log <==
gitlab主要配置目錄
/var/opt/gitlab/git-data/repositories/ :庫預設儲存目錄
/opt/gitlab :應用程式碼和相應的依賴程式
/var/opt/gitlab/ : gitlab-ctl reconfigure生成的資料和配置
/etc/gitlab :配置檔案目錄
/var/log/gitlab:此目錄下存放了gitlab各個元件產生的日誌
/var/opt/gitlab/backups :備份檔案生成的目錄
訪問gitlab
關閉使用者註冊
我們GItlab是企業級內部私有程式碼倉庫,所有使用者都由管理員建立,而非外部註冊,我們可以關閉其功能,保障平臺安全。
重新登入之後,註冊功能就沒了
配置郵件功能
配置郵件服務
賬號註冊時,進行郵件驗證
有分支合併請求時,郵件通知
修改密碼等操作,郵件通知
去郵箱中驗證
gitlab使用者管理
建立組
Gitlab是透過組(group)的概念來統一管理倉庫(project)和使用者(user),透過建立組,在組下建立倉庫,再將使用者加入組,從而實現使用者和倉庫的許可權管理。
點選新建群組,在建立組頁面中,組路徑和名稱為必填項,且該兩處內容最好一致。
可見性級別,選擇私有的即可
Private:只有授權的使用者才能看到
Internal:只要登入了gitlab即可看見
Public:公開倉庫
建立project專案
檢視儀表盤
建立使用者
使用者建立後,會收到修改密碼的郵件。
注意,會跳轉到你gitlab設定的伺服器url裡。
回到root給建立的使用者新增到ops組
Gitlab許可權管理
Gitlab使用者在組中有五種許可權:Guest、Reporter、Developer、Master、Owner
Guest:可以建立issue、發表評論,不能讀寫版本庫
Reporter:可以克隆程式碼,不能提交,QA、PM可以賦予這個許可權
Developer:可以克隆程式碼、開發、提交、push,RD可以賦予這個許可權
Master:可以建立專案、新增tag、保護分支、新增專案成員、編輯專案,核心RD負責人可以賦予這個許可權
Owner:可以設定專案訪問許可權 - Visibility Level、刪除專案、遷移專案、管理組成員,開發組leader可以賦予這個許可權
Gitlab中的組和專案有三種訪問許可權:Private、Internal、Public
Private:只有組成員才能看到
Internal:只要登入的使用者就能看到
Public:所有人都能看到
開源專案和組設定的是Internal
點選新增之後,回到建立使用者,重新整理檢視許可權,以可以看到程式碼倉庫了。
配置ssh-key
接著我們就要配置客戶端來連線程式碼倉庫了。
[root@zabbix-server-71 /home]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:trBXdW083SEfE3aw8BuLUROkXKfJgIjgOKMeGvQVvyU root@zabbix-server-71
The key's randomart image is:
+---[RSA 2048]----+
| .o . . .ooBO+|
| o + . .. O+OB|
| .+ .. E . = Oo*|
|...o. + . + =.|
|o. . ..S . . o |
|o.. + o |
|.. . o |
| . |
| |
+----[SHA256]-----+
[root@zabbix-server-71 /home]#cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD6oxC6YMGx/pshLlqk2jhbB05XT858dRrMBEw/o4lpby2nY8l3uYaCz8CzxnHuUpm46E9rG3782rwbagzDcL1+iA7iYLvQ3EHFrjujPE/aFqf49HmS9B4+iQA1CeWDHKRcx2yx8kg13IoOa4/U3v6z64OAs9hkUlVEorBCT4IiH0UX11sHZyPyBfZWAd/Dm5V/5V3fzau3FV0bE5PGKQS+JTCQYrUA2dwjvp4sId+1XNSARpLoW9vZ9lo2OJPdvMCUVV/THcVFfQAKheIDHEbLdslptjP7U85JGtQ53bkMABPc1mgUKhW4PNgJ7twOZ0Kr3sqmWzKbF3VWwjrRBGAd root@zabbix-server-71
[root@zabbix-server-71 /home]#
![](https://img2024.cnblogs.com/blog/3366197/202407/3366197-20240707222602987-1785723202.png)
halo部落格原始碼實戰
需求
1. 本地獲取halo原始碼,進行git版本管理,修改程式碼檔案
2. 上傳到gitlab進行遠端倉庫管理
3. 實現分支合併,程式碼上傳下載
halo原始碼下載
再第一個環境,確保遠端倉庫
linux0224/my_halo 專案,中有原始碼資料
模擬是halo這個專案的維護者
基於halo部落格的原始碼去配置 my_halo gitlab倉庫
模擬開發者,再自己的筆記本上,推程式碼到gitlab倉庫
1.下載原始碼
git clone https://github.com/halo-dev/halo.git
github訪問不了
- 買個個人梯子,爬樓梯即可
- 公司都會預設提供梯子,請放心隨便下載網際網路的資源
轉戰碼雲的地址
https://gitee.com/halo-dev/halo
git clone https://gitee.com/halo-dev/halo.git
halo下載到本地,就叫做本地倉庫
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop
$ ls -dl halo
drwxr-xr-x 1 Sylar 197121 0 Jul 18 14:23 halo/
刪除原有遠端倉庫
git remote remove origin
2. 關聯你自己的gitlab倉庫 my_halo
預設下載的遠端倉庫,遠端地址,還是預設的
$ git remote add origin git@10.0.0.99:linux0224/my_halo.git
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$ git remote -v
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$ git remote add origin git@10.0.0.99:linux0224/my_halo.git
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$ git remote -v
origin git@10.0.0.99:linux0224/my_halo.git (fetch)
origin git@10.0.0.99:linux0224/my_halo.git (push)
3. 推送程式碼
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/halo (master)
$ git push -u origin master
Enumerating objects: 40865, done.
Counting objects: 100% (40865/40865), done.
Delta compression using up to 20 threads
Compressing objects: 100% (13450/13450), done.
Writing objects: 100% (40865/40865), 43.39 MiB | 48.24 MiB/s, done.
Total 40865 (delta 21360), reused 40812 (delta 21323), pack-reused 0
remote: Resolving deltas: 100% (21360/21360), done.
To 10.0.0.99:linux0224/my_halo.git
* [new branch] master -> master
branch 'master' set up to track 'origin/master'.
配置本地機器的ssh-key,到遠端倉庫
gitlab建立小組\使用者
目前已經有了
linux0224小組
linux0224/chaoge
linux0224/wenjie
gitlab專案建立
git@10.0.0.99:linux0224/my_halo.git
http://10.0.0.99/linux0224/my_halo.git
運維推送程式碼到gitlab(chaoge賬號)
保護master分支(不允許開發者提交)
# 目前還沒保護的狀態,試試wenjie推程式碼,直接推送到master分支
準備一個文傑的機器
文傑windows開發,macos,linux系統
模擬文傑使用linux機器開發,推送程式碼到遠端倉庫,master
linux 10.0.0.51
1.先設定公鑰到wenjie賬戶
2. 先克隆遠端的程式碼,下載一份到本地
繼續寫新程式碼,看懂11111
[root@db-51 /home/wenjie]#yum install git -y
git clone git@10.0.0.99:linux0224/my_halo.git
想下載遠端倉庫的私有程式碼
準備好一個機器的公鑰,新增到有訪問改專案的使用者設定中,新增ssh-key
db-51 機器作為客戶端,ssh-key新增到了 wenjie賬號裡的 settings設定
wenjie使用者,屬於 linux0224組的成員
my_halo這個專案,屬於linux0224組的專案
因此可以下載原始碼了
這個邏輯,看懂 66666
休息會,琢磨下,動手實踐下
目前,開發者wenjie再 db-51機器上,拉取了最新的程式碼
[root@db-51 /home/wenjie]#git clone git@10.0.0.99:linux0224/my_halo.git
Cloning into 'my_halo'...
remote: Enumerating objects: 40865, done.
remote: Counting objects: 100% (40865/40865), done.
remote: Compressing objects: 100% (13413/13413), done.
remote: Total 40865 (delta 21360), reused 40865 (delta 21360)
Receiving objects: 100% (40865/40865), 43.39 MiB | 53.67 MiB/s, done.
Resolving deltas: 100% (21360/21360), done.
# 不夠嚴重的玩法
# 小公司,master分支一把梭
# 大公司由於業務多,安全性高,人員多,需要做好許可權控制
# 小公司人員少,專案不太複雜,許可權,部署架構,一切從簡
# 直接用master寫程式碼,推程式碼
還得身份設定
[root@db-51 /home/wenjie/my_halo]#git config --global user.email "wj335598@163.com"
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git config --global user.name "wenjie"
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git config --list
user.email=wj335598@163.com
user.name=wenjie
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@10.0.0.99:linux0224/my_halo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git commit -m '文傑提交了一版程式碼,直接用的master'
[master ad423b7] 文傑提交了一版程式碼,直接用的master
1 file changed, 1 insertion(+)
create mode 100644 wenjie66.py
[root@db-51 /home/wenjie/my_halo]#git log -2
commit ad423b759e41652f82fac5f1abe87203ffed43e7
Author: wenjie <wj335598@163.com>
Date: Mon Jul 18 23:04:24 2022 +0800
文傑提交了一版程式碼,直接用的master
commit 7eef3b700653cecb666ec4509871234b5922eaf6
Author: John Niang <johnniang@fastmail.com>
Date: Mon Jul 11 16:46:12 2022 +0800
Change optimization into improvement (#2235)
We only have the kind/improvement label.
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]## 看懂1111
因此,發現gitlab預設對my_halo專案,做了master分支保護
wenjie該使用者無法推送資料到master
只能用chaoge使用者
root使用者可以推
保護分支功能,是針對專案而言的
正確的玩法,模擬開發者,建立分支,寫程式碼,推送到自己的分支上,用管理員去合併
開發wenjie開始寫程式碼
1. 克隆程式碼
git clone git@10.0.0.99:linux0224/my_halo.git
2. 本地建立分支 wenjie
[root@db-51 /home/wenjie/my_halo]##筆試題,如何建立切切換分支
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git checkout -b wenjie
Switched to a new branch 'wenjie'
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git branch
master
* wenjie
3. 提交本地版本
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git add .
[root@db-51 /home/wenjie/my_halo]#
[root@db-51 /home/wenjie/my_halo]#git commit -m '分支wenjie 提交了haha.py'
[wenjie f84fc07] 分支wenjie 提交了haha.py
1 file changed, 1 insertion(+)
create mode 100644 haha.py
4. 推送到gitlab,推送wenjie分支的程式碼
1. 自動幫你建立遠端分支了
2. 自動生成merge合併的請求url(wenjie,master)
[root@db-51 /home/wenjie/my_halo]#git push -u origin wenjie
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 327 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote:
remote: To create a merge request for wenjie, visit:
remote: http://10.0.0.99/linux0224/my_halo/merge_requests/new?merge_request%5Bsource_branch%5D=wenjie
remote:
To git@10.0.0.99:linux0224/my_halo.git
* [new branch] wenjie -> wenjie
Branch wenjie set up to track remote branch wenjie from origin.
訪問改url,向管理員發出,合併wenjie分支到master的請求
http://10.0.0.99/linux0224/my_halo/merge_requests/new?merge_request%5Bsource_branch%5D=wenjie
5. 運維去合併laoliu分支
3.試試能推送程式碼到master上嗎?(肯定不能,因為laoliu普通使用者,無法推到master分支,設定了分支保護)
無法推送
4.你只能新建分支,然後寫程式碼推送
以及推送到了wenjie分支
建立合併請求,提交PR(pull requests)
發一個url請求
git自動幫你生成了 PR請求
http://10.0.0.99/linux0224/my_halo/merge_requests/new?merge_request%5Bsource_branch%5D=wenjie
chaoge管理員合併了wenjie的請求
刪除文傑分支
此時下載最新程式碼試試,master分支的
[root@db-51 /tmp]#git clone git@10.0.0.99:linux0224/my_halo.git
Cloning into 'my_halo'...
remote: Enumerating objects: 40869, done.
remote: Counting objects: 100% (40869/40869), done.
remote: Compressing objects: 100% (13416/13416), done.
remote: Total 40869 (delta 21361), reused 40864 (delta 21360)
Receiving objects: 100% (40869/40869), 43.39 MiB | 44.83 MiB/s, done.
Resolving deltas: 100% (21361/21361), done.
[root@db-51 /tmp]#
[root@db-51 /tmp]#
[root@db-51 /tmp]#ls
[root@db-51 /tmp/my_halo]#
[root@db-51 /tmp/my_halo]#git log -2
commit 8e1d023cfd48a2c010ff9dadf5577d6c93601ab3
Merge: 7eef3b7 f84fc07
Author: chaoge <877348180@qq.com>
Date: Mon Jul 18 23:26:24 2022 +0800
Merge branch 'wenjie' into 'master'
分支wenjie 提交了haha.py
See merge request linux0224/my_halo!1
commit f84fc0719e0d6d9bf6c6882874b8183c7f964849
Author: wenjie <wj335598@163.com>
Date: Mon Jul 18 23:15:34 2022 +0800
分支wenjie 提交了haha.py
[root@db-51 /tmp/my_halo]#
[root@db-51 /tmp/my_halo]#
[root@db-51 /tmp/my_halo]## 最新克隆的程式碼,1 包含 haha.py 2 也看到了提交版本記錄 ,完全理解
部署python專案全流程
gitlab階段
git@10.0.0.99:linux0224/my_flask.git
Sylar@DESKTOP-G6C412R MINGW64 ~/Desktop/my_flask (master)
$ git remote -v
origin git@10.0.0.99:linux0224/my_flask.git (fetch)
origin git@10.0.0.99:linux0224/my_flask.git (push)
部署階段,web7
首次啟動
下載程式碼
[root@web-7 /www]#git clone git@10.0.0.99:linux0224/my_flask.git
準備專案執行環境
# 首次釋出指令碼
cat >deploy_flask.sh <<'EOF'
#!/bin/bash
cd /www/my_flask
# yum install python3 python3-devel python3-pip -y > /dev/null
# 安裝python專案模組
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/ > /dev/null
#後臺啟動專案即可
# 重啟程序
kill -9 $(ps -ef|grep my_app |grep -v grep |awk '{print $2}')
nohup python3 my_app.py > nohup.log 2>&1 &
# 檢查執行結果
echo "最新的flask專案程序號: $(ps -ef|grep my_app |grep -v grep |awk '{print $2}')"
EOF
# 看懂釋出重啟指令碼的開發流程,1111
#啟動就好
訪問專案
下次的更新
1.模擬開發,修改了原始碼,python開發,修改程式碼了,推送到線上的master分支
2. 下載更新程式碼,重啟程式,確保可訪問
更新程式碼,重啟程式
cat >restart_flask.sh <<'EOF'
#!/bin/bash
cd /www/my_flask
# 更新程式碼
git pull -u origin master
#後臺啟動專案即可
# 重啟程序
kill -9 $(ps -ef|grep my_app |grep -v grep |awk '{print $2}')
nohup python3 my_app.py > nohup.log 2>&1 &
# 檢查執行結果
echo "最新的flask專案程序號: $(ps -ef|grep my_app |grep -v grep |awk '{print $2}')"
# 等幾秒就好了
# 睡眠2秒
sleep 2;
echo "本地測試訪問結果 $(curl -s 127.0.0.1:5000)"
EOF
3.執行指令碼,檢視手工更新網站的結果
[root@web-7 /www]#
[root@web-7 /www]#bash restart_flask.sh
gitlab備份、恢復
1 修改備份配置
1.修改配置檔案
[root@gitlab-99 /etc/gitlab]#grep -E '^[a-Z]' /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/gitlab_backup/"
gitlab_rails['backup_keep_time'] = 604800
external_url 'http://10.0.0.99'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '877348180@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'linux0224'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "877348180@qq.com"
gitlab_rails['smtp_password'] = "pvthquniqpjvbbch"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
2. 重讀gitlab配置即可
[root@gitlab-99 /etc/gitlab]#gitlab-ctl reconfigure
準備備份資料的目錄,和配置一致
mkdir -p /gitlab_backup/
chown -R git.git /gitlab_backup/
3.執行如下備份命令
gitlab-rake gitlab:backup:create
4.檢視備份的資料
[root@gitlab-99 /etc/gitlab]#ls /gitlab_backup/
1658161288_2022_07_19_12.0.3_gitlab_backup.tar
[root@gitlab-99 /etc/gitlab]#ls /gitlab_backup/ -lh
total 44M
-rw------- 1 git git 44M Jul 19 00:21 1658161288_2022_07_19_12.0.3_gitlab_backup.tar
2 資料恢復
Gitlab的恢復只能恢復到與原本備份檔案相同的gitlab版本中,恢復時,需要停止資料庫的寫入操作,但是保持gitlab是執行的。
暫停資料庫寫入,停止會連線資料庫的幾個服務
# 停止如下仨服務,然後執行恢復gitlab的資料命令即可
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
# 恢復資料,需要制定你自己的備份資料包
# 備份細節,填入檔案的名字就好,不要字尾
[root@gitlab-99 /etc/gitlab]#ls /gitlab_backup/
1658161288_2022_07_19_12.0.3_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1658161288_2022_07_19_12.0.3
恢復操作,就是刪除 所有原有資料,然後恢復該最新的資料
看到如下結果就是正確的
Restore task is done.
最後一步,重新讀取配置,確認你的gitlab可以訪問
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-ctl status |grep run
[root@gitlab-99 /etc/gitlab]#gitlab-ctl status|grep run
run: alertmanager: (pid 60821) 41s; run: log: (pid 3595) 20530s
run: gitaly: (pid 60836) 40s; run: log: (pid 3079) 20596s
run: gitlab-monitor: (pid 60856) 40s; run: log: (pid 3497) 20546s
run: gitlab-workhorse: (pid 60872) 40s; run: log: (pid 3305) 20561s
run: grafana: (pid 60881) 39s; run: log: (pid 3721) 20508s
run: logrotate: (pid 60979) 39s; run: log: (pid 3422) 20556s
run: nginx: (pid 60985) 38s; run: log: (pid 3325) 20560s
run: node-exporter: (pid 60994) 38s; run: log: (pid 3475) 20550s
run: postgres-exporter: (pid 61000) 38s; run: log: (pid 3642) 20524s
run: postgresql: (pid 61010) 37s; run: log: (pid 3163) 20590s
run: prometheus: (pid 61019) 37s; run: log: (pid 3555) 20536s
run: redis: (pid 61034) 36s; run: log: (pid 2960) 20597s
run: redis-exporter: (pid 61038) 36s; run: log: (pid 3522) 20542s
run: sidekiq: (pid 61045) 35s; run: log: (pid 3280) 20565s
run: unicorn: (pid 61051) 35s; run: log: (pid 3259) 20569s