ubuntu下安裝gitlab 14.5及配置

從12.1開始, CE版本不再支持mysql數據庫

當前文檔只在14.5.0版本下測試通過!

1. 下載後安裝

(鏡像)各版本安裝包: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce

sudo apt-get install wget

# 下載
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce/gitlab-ce_14.5.0-ce.0_amd64.deb

# 安裝
sudo dpkg -i gitlab-ce_14.5.0-ce.0_amd64.deb

2. 使用自帶的nginx和redis等配置

配置文件: /etc/gitlab/gitlab.rb. 倉庫默認存儲路徑是/var/opt/gitlab/git-data(實際存儲在下面的repositories, 這個文件夾會自動建立).

gitlab默認的存儲路徑有2處: /opt/gitlab(程序目錄, 大約2Gb), /var/opt/gitlab (程序運行時目錄, 大約3Gb, 其中"prometheus"佔用2.6G)

這裏修改了nginx和redis的端口, 以與單獨安裝的區分開. (曾嘗試使用單獨安裝的nginx, 參考按照官方文檔安裝但是配置失敗)

在第一次執行reconfigure之前, git.xxx相關的用戶賬號還沒有建立, 所以必須先執行一次sudo gitlab-ctl reconfigure命令

# 修改外部url
external_url 'http://192.168.0.204'


nginx['listen_port'] = 81
gitlab_rails['redis_port'] = 6380
redis['port'] = 6380
# redis不需要集羣的話, 有關sentinel的不用改

# 修改文件存儲路徑, 注意權限設置: `sudo chown -R git.git /www/gitlab/git-data`
git_data_dirs({
    "default" => {
        "path" => "/www/gitlab/git-data"
    }
})

重新配置gitlab(耗時較長):

sudo gitlab-ctl reconfigure

重啓:

sudo gitlab-ctl restart

每次修改/etc/gitlab/gitlab.rb後都需要運行sudo gitlab-ctl reconfigure

賬號root的初始密碼在/etc/gitlab/initial_root_password

gitlab自帶nginx的配置文件

/var/opt/gitlab/nginx/conf/nginx.conf, 加載的vhost配置是/var/opt/gitlab/nginx/conf/gitlab-http.conf

注意: 默認的nginx配置文件中沒有阻止非綁定域名的解析, 所以需要在每次reconfigure後(restart之前)執行下面這個命令, 以追加配置:

echo "server {listen 81 default_server; server_name _; return 403;}" | sudo tee -a /var/opt/gitlab/nginx/conf/gitlab-http.conf

sudo echo "內容" >> 目標文件 無法執行, 因爲">>"的權限無法被提升

3. 備份與恢復

參考官方文檔備份和恢復

  • 備份將會創建一個包含所有數據庫(用戶,權限,job等)、倉庫和附件的歸檔文件
  • 恢復時必須使用相同版本的gitlab.
  • 需要自己設置cron進行備份! 需要自己設置cron進行備份! 需要自己設置cron進行備份!

3.0 備份的相關配置

自定義備份目錄需要設置權限:

# 創建目錄
sudo mkdir -pv /www/_backup/gitlab
# 設置權限
sudo chown -R git.git /www/_backup/gitlab

修改配置文件 /etc/gitlab/gitlab.rb:

#備份路徑, 默認是 /var/opt/gitlab/backups
gitlab_rails['backup_path'] = '/www/_backup/gitlab'

#備份保留時間(秒), 默認是7天, 這裏改成30天
gitlab_rails['backup_keep_time'] = 2592000

配置修改後執行 gitlab-ctl reconfigure 更新設置.

3.1 備份

sudo /usr/bin/gitlab-rake gitlab:backup:create

執行結果:

# 這裏只是第一次備份的簡單的記錄, 具體執行時內容可能更多
Creating backup archive: 1638266276_2021_11_30_14.5.0_gitlab_backup.tar ... done
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... done. (0 removed)
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.

注意: 重要的文件/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json需要手動備份

3.2 恢復

恢復操作前確保:

  • 安裝和備份的軟件版本一致: 區分不同版本(版本/ce/ee)
  • 至少執行過一次配置: sudo gitlab-ctl reconfigure 建議先恢復配置/etc/gitlab/gitlab.rb
  • GitLab在運行: sudo gitlab-ctl start
  • 備份文件的owner是git: sudo chown git.git 備份文件

3.2.0 停止數據庫連接:

sudo gitlab-ctl stop puma
# 停止隊列
sudo gitlab-ctl stop sidekiq

#檢查狀態
sudo gitlab-ctl status

3.2.1 執行恢復操作

# 設置備份文件的權限
sudo chown git.git /www/backup/gitlab/1638321295_2021_12_01_14.5.0_gitlab_backup.tar
# 恢復
sudo gitlab-backup restore BACKUP=1638321295_2021_12_01_14.5.0

注意:

  1. 名稱不要帶備份文件名後面的"_gitlab_backup.tar". 比如備份的文件名是"1638321295_2021_12_01_14.5.0_gitlab_backup.tar", 調用命令時只能使用"1638321295_2021_12_01_14.5.0", 否則會報錯: 找不到文件

  2. 不要帶路徑.

親測! 帶了路徑反而找不到

執行恢復操作後, 會在backup文件夾下生成很多tar文件解壓的文件(夾)出來, 包括"db/, repositories/, artifacts.tar.gz, backup_information.yml, builds.tar.gz, lfs.tar.gz, pages.tar.gz, uploads.tar.gz", 不過它們會在下次備份時被刪除

3.2.3 恢復配置文件

恢復 /etc/gitlab/gitlab.rb, /etc/gitlab/gitlab-secrets.json

3.2.4 重啓服務

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
# 校驗
sudo gitlab-rake gitlab:check SANITIZE=true

4. Gitlab配置

管理員登錄後, 點擊Gitlab圖標後的 Menu => Admin 進入管理界面.

關閉自動註冊

Admin -> Settings -> General -> Sign Uprestrictions -> 取消Sign-up enabled

合併時默認選中"delete source branch"選項, 這個目前沒有全局配置, 只能合併時注意了.

用戶權限

  • 羣組(Group)下添加的用戶, 默認會擁有該羣組的倉庫的權限. 如果用戶在某倉庫中需要更高的權限, 在該倉庫中重新添加該賬戶並設置更高權限即可.
  • gitlab默認只有維護(maintainer)纔有權限merge並push到main, 而開發(developer)沒有權限合併(雖然能本地merge,但是不能push)

附件上傳大小限制

Admin -> Settings -> General -> Account and limit -> "Maximum attachment size(MB)"

如果調大, 則相應的/etc/gitlab/gitlab.rb配置中的nginx設置也要修改:

nginx['client_max_body_size'] = '1024m'

實測: 本地gitlab中設置1m, 無效, 阻止不了大於1m的文件的push.....

禁止用戶創建項目

  • 通用設置: Admin -> Settings -> General -> Account and limit -> "Default projects limit" 設置爲0
  • 已有用戶: User -> Edit -> Access -> "Projects limit" 設置爲 0

禁止用戶創建羣組(Group)

  • 已有用戶: User -> Edit -> Access -> 取消"Can create group"選中

用戶角色與權限

官方文檔: 用戶權限

角色分爲: Guest, Reporter, Developer, Maintainer, Owner

普通開發人員設置 developer即可, 可以建立&提交自己的分支, 但是不能合併到master

maintainer/owner: 可以合併分支到master

5. 服務與降低內存使用

gitlab中的各種服務

  • nginx: web服務
  • redis: 消息隊列
  • puma: Ruby的http應用服務器. 從13.0開始取代了unicorn成爲默認的web服務器
  • prometheus: 監控, 可以關閉
  • grafana: 數據可視化工具, 用以顯示Prometheus的指標, 可以關閉.
  • *_exporter: 用於prometheus監控的xxx數據導出, 可以關閉
  • alertmanager: 報警模塊, 可以關閉

優化設置參考

# 優化: 減少服務的內存佔用
puma['worker_processes'] = 2
postgresql['shared_buffers'] = "128MB"
postgresql['max_worker_processes'] = 4
sidekiq['max_concurrency'] = 2
sidekiq['min_concurrency'] = 1

# 閉關不需要的服務
prometheus['enable'] = false
grafana['enable'] = false
redis_exporter['enable'] = false
gitlab_exporter['enable'] = false
node_exporter['enable'] = false
postgres_exporter['enable'] = false
alertmanager['enable'] = false

6. 移動目錄

把倉庫、redis、postgresql目錄轉移到/www/gitlab目錄下.

停止服務

gitlab-ctl stop

複製文件

# pg目錄
sudo rsync -av /var/opt/gitlab/postgresql /www/gitlab/

# redis目錄
sudo rsync -av /var/opt/gitlab/redis /www/gitlab/

修改 /etc/gitlab/gitlab.rb:

# pg目錄
postgresql['dir'] = "/www/gitlab/postgresql"
postgresql['data_dir'] = "/www/gitlab/postgresql/data"
postgresql['home'] = "/www/gitlab/postgresql"

# redis目錄
redis['dir'] = "/www/gitlab/redis"

重新加載配置,並重啓gitlab:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

直接複製目錄後重新配置, 會出現錯誤, 但是不影響系統的運行:

database_objects[postgresql] (postgresql::standalone line 28) had an error: RuntimeError: postgresql_user[gitlab] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/database_objects.rb line 19) had an error: RuntimeError: execute[create gitlab postgresql user] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/postgresql/resources/user.rb line 11) had an error: RuntimeError: PostgreSQL did not respond before service checks were exhausted

但是, 如果改成"先備份, 然後修改配置(不復制文件), 然後reconfigure再還原", 錯誤如下

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20211220-1959-1y491c3" ----
STDOUT: psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:9: NOTICE:  extension "btree_gist" already exists, skipping
psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:11: NOTICE:  extension "pg_trgm" already exists, skipping
rake aborted!
Redis::CannotConnectError: Error connecting to Redis on 127.0.0.1:6380 (Errno::ECONNREFUSED)

參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章