---
title: Gitlab 使用 docker 架設紀錄
tags: Git, Gitlab, rclone, crontab
description: Gitlab 架設紀錄
---
# Gitlab 架設紀錄
## 使用 docker compose 架設 gitlab
環境須先下載好 docker 和 docker-compse
### 先 pull gitlab docker image
```
$ docker pull gitlab/gitlab-ce:latest
```
使用 docker-compose 的方式去執行 container 啟動 gitlab,Web protocol 為 http://10.101.6.80:80
#### docker-compose.yml
```
version: "3.3"
services:
gitlab:
image: gitlab/gitlab-ce:latest
shm_size: '8gb'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.101.6.80'
ports:
- '80:80'
- '443:443'
- '24:22'
volumes:
- '~/gitlab01/data:/var/opt/gitlab'
- '~/gitlab01/logs:/var/log/gitlab'
- '~/gitlab01/config:/etc/gitlab'
```
```
$ docker-compose up -d
```
等到 container 狀態為 healthy 即可以登入 gitlab

## gitlab 備份設定
### gitlab 內部定期備份設定
修改 backup_path 至想要儲存的位置,並重新 reconfigure 設定
```
$ nano /etc/gitlab/gitlab.rb
$ gitlab-ctl reconfigure
```

### 使用 rclone 將 onedrive service 與本地端綁定
#### install rclone
```
$ curl https://rclone.org/install.sh | sudo bash install.sh #rclone on Linux/macOS/BSD systems
```
#### config rclone
配置 rclone 並依序執行 process,如果沒有 GUI 可以先在 windows 端下載 rclone,並且follow [generate onedrive access key](#生成-onedrive-access-key),如果 server 有 GUI 可以直接跳至 [config rclone](#config-rclone)
##### generate onedrive access key
windows端先下載rclone並且解壓縮,在 cmd 進入 rclone 目錄執行以下 command,執行完畢後會跳出 mocrosoft 登入視窗,登入完畢後 cmd 會生成 onedrive access key
```
$ rclone authorize "onedrive"
```
#### config rclone
執行以下 command 開始 config 設定
```
$ rclone config
```
```
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> onedrive
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FPT Connection
\ "fpt"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Google Photos
\ "google photos"
14 / Hubic
\ "hubic"
15 / JottaCloud
\ "jottacloud"
16 / Koofr
\ "koofr"
17 / Local Disk
\ "local"
18 / Mega
\ "mega"
19 / Microsoft Azure Blob Storage
\ "azureblob"
20 / Microsoft OneDrive
\ "onedrive"
21 / OpenDrive
\ "opendrive"
22 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
23 / Pcloud
\ "pcloud"
24 / Put.io
\ "putio"
25 / QingCloud Object Storage
\ "qingstor"
26 / SSH/SFTP Connection
\ "sftp"
27 / Union merges the contents of several remotes
\ "union"
28 / Webdav
\ "webdav"
29 / Yandex Disk
\ "yandex"
30 / http Connection
\ "http"
31 / premiumize.me
\ "premiumizeme"
Storage> 20
** See help for onedrive backend at: https://rclone.org/onedrive/ **
Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> #press enter
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> #press enter
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n
For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine (same rclone version recommended):
rclone authorize "onedrive"
Then paste the result below:
result> # 將生成的 onedrive access key 貼在這
Choose a number from below, or type in an existing value
1 / OneDrive Personal or Business
\ "onedrive"
2 / Root Sharepoint site
\ "sharepoint"
3 / Type in driveID
\ "driveid"
4 / Type in SiteID
\ "siteid"
5 / Search a Sharepoint site
\ "search"
Your choice> 1
Found 1 drives, please select the one you want to use:
0: OneDrive (business) id=
Chose drive to use:> 0 #choose your onedrive path
Found drive 'root' of type 'business', URL:
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[rc]
type = onedrive
token = {"access_token":"auth","expiry":"2022-07-22T16:33:33.456212+08:00"}
drive_id =
drive_type = business
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:
Name Type
==== ====
onedrive onedrive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q # q退出,配置完成
```
### 使用 crontab 定時備份
修改 crontab 定期排成
```
$ crontab -e
```

**`baskup.sh`**

#### restart crontab
```
$ /etc/init.d/cron reload
$ service cron restart
```
最後完成每日 gitlab 定期備份並且將 backup 檔案備份到 Microsoft onedrive storage 上
## 參考
* https://ithelp.ithome.com.tw/articles/10280309
* https://www.twblogs.net/a/5c820077bd9eee35cd6984cb
* https://www.796t.com/article.php?id=68796
* https://www.gushiciku.cn/pl/gOey/zh-tw
* https://blog.csdn.net/rdp1305442102/article/details/105768441
* https://cloud.tencent.com/developer/article/1936298
* https://blog.gtwang.org/linux/linux-crontab-cron-job-tutorial-and-examples/
## Thank you! :dash:
You can find me on
- GitHub: https://github.com/shaung08
- Email: a2369875@gmail.com