背景:
gitlab 8.5.8版本.參照:https://github.com/sameersbn/docker-gitlab.git.太多年了也沒有升級,現(xiàn)在準(zhǔn)備備份還原到一個(gè)新的服務(wù)器然后升級一下。gitlab服務(wù)器開始是docker-compose搭建的后面遷移到了kubernetes上(記得當(dāng)時(shí)還是1.14),后面kubernetes 版本持續(xù)升級到了1.21?;A(chǔ)環(huán)境如下:
【資料圖】
kubectl get nodeskubectl get pods -n gitlab
外鏈圖片轉(zhuǎn)存中...(img-3i4prQtR-1678333347024)
外鏈圖片轉(zhuǎn)存中...(img-8oHZOTIX-1678333347025)
image 鏡像的版本如下:
kubectl get deployment -n gitlab -o yaml|grep image:
外鏈圖片轉(zhuǎn)存中...(img-rba3rIG7-1678333347025)
升級的過程參考了:升級公司的 GitLab,基本版本是8.5.8 -8.12.13-9.5.10-10.8.7-11.1.4(8的小版本先升級到穩(wěn)定的8.12,然后到8的最高版本,然后每個(gè)大版本進(jìn)行升級)
注:我這里的gitlab的基礎(chǔ)鏡像并不是sameersbn/gitlab當(dāng)時(shí)有漢化twang2218/gitlab-ce-zh鏡像直接使用了漢化的鏡像,直接使用了twang2218/gitlab-ce-zh的鏡像為例!存儲直接掛載了nfs存儲未使用pv,pvc方式,如下:
Kubernetes下備份gitlab
進(jìn)入gitlab容器執(zhí)行備份命令:
登陸一臺CVM節(jié)點(diǎn),當(dāng)然了前提是可以exec進(jìn)入gitlab容器控制臺。也可以其他可視化dashboard進(jìn)入,我這里直接在k8s-master-01節(jié)點(diǎn)操作了VM-4-34-rockylinux為操作還原升級節(jié)點(diǎn),這里也備注強(qiáng)調(diào)一下:
kubectl exec -it gitlab-77d7878db-j8kqh bash -n gitlabgitlab-rake gitlab:backup:create
確認(rèn)一下數(shù)據(jù)的備份目錄:
cat /etc/gitlab/gitlab.rb |grep back
默認(rèn)的備份目錄為:/var/opt/gitlab/backups目錄
進(jìn)入/var/opt/gitlab/backups得到生成的備份文件如下:
很漫長得到一個(gè)20多G的壓縮包!
COPY備份文件到新的存儲路徑
20g的文件copy 或者mv很慢很慢,尤其是在copy騰訊云cfs文件存儲上面的文件。當(dāng)時(shí)還找存儲的小伙伴問過,當(dāng)時(shí)他們推薦了使用rclone傳輸,體驗(yàn)了是很快!
安裝rclone
安裝rclone,參照:https://cloud.tencent.com/document/product/582/83114(還是在kubernetes 控制節(jié)點(diǎn)操作的,當(dāng)然了其實(shí)可以在任何一個(gè)局域網(wǎng)內(nèi)節(jié)點(diǎn)安裝,然后掛載10.0.0.24的nfs)
wget https://downloads.rclone.org/v1.53.4/rclone-v1.53.4-linux-amd64.zip --no-check-certificateunzip rclone-v1.53.4-linux-amd64.zipchmod 0755 ./rclone-*/rclonecp ./rclone-*/rclone /usr/bin/rm -rf ./rclone-*
掛載nfs:
源nfs 10.0.0.24目的nfs 10.0.4.134在k8s控制節(jié)點(diǎn)掛載。文件夾路徑可以自定義。
sudo mount -t nfs -o vers=4.0,noresvport 10.0.0.24:/ /nfs5sudo mount -t nfs -o vers=4.0,noresvport 10.0.4.134:/ /nfs10
外鏈圖片轉(zhuǎn)存中...(img-2SyA4mTA-1678333347028)
rclone同步文件到新文件系統(tǒng)
rclone sync同步文件到目的nfs(也可以是其他文件系統(tǒng))
rclone sync /nfs5/data/github/gitlab/backups/1678096354_gitlab_backup.tar /nfs10/data/github/gitlab/backups/ -Pvv --transfers 32 --checkers 64 --copy-links --local-no-check-updated
外鏈圖片轉(zhuǎn)存中...(img-cI75IBYI-1678333347028)
4分鐘左右同步完成還是很快的,畢竟有20多G文件!
注:以上操作在Kubernetes控制節(jié)點(diǎn)上操作
還原gitlab到新環(huán)境
一臺新的rocky服務(wù)器,主機(jī)名:VM-4-34-rockylinux
安裝docker docker-compose
安裝docker docker-compose:
yum update -y ###先update一下sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo yum makecache fastsudo yum -y install docker-cesudo service docker startsudo docker -v
注:當(dāng)然了可以配置一下鏡像加速:
配置鏡像加速后記得systemctl reload-daemon systemctl restart docker.
docker-compose的安裝:
docker_compose_version=v2.16.0 && curl -L "https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose && ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
安裝nfs客戶端,將10.0.4.134掛載到本地
安裝一下nfs客戶端(文件準(zhǔn)備同步過來,掛載nfs的!)
yum install nfs*sudo mount -t nfs -o vers=4.0,noresvport 10.0.4.134:/ /data
/data目錄下創(chuàng)建github目錄(與原來nfs實(shí)例保證目錄結(jié)構(gòu)一致),github目錄下創(chuàng)建gitlab postgresql redis目錄(gitlab目錄已經(jīng)存在了其實(shí),上面reclone同步的時(shí)候會自動創(chuàng)建目錄):
[root@VM-4-34-rockylinux github]# pwd/data/data/github[root@VM-4-34-rockylinux github]# mkdir gitlab postgresql redis
注意自己掛載的目錄路徑以及文件夾目錄名.
docker-compose啟動gitlab相關(guān)應(yīng)用
VM-4-34-rockylinux 主機(jī)操作
首先確認(rèn)文件以及rclone到指定路徑
登陸github倉庫查找對應(yīng)版本docker-compose.yml文件放在/data/data/github目錄下:
注意:我這里拿得https://github.com/sameersbn/docker-gitlab/blob/v8.9.4/docker-compose.yml的yml文件
修改docker-compose.yml如下:
version: "2"services: redis: restart: always image: sameersbn/redis:latest command: - --loglevel warning volumes: - /data/data/github/redis:/var/lib/redis:Z postgresql: restart: always image: sameersbn/postgresql:9.4-24 volumes: - /data/data/github/postgresql:/var/lib/postgresql:Z environment: - DB_USER=gitlab - DB_PASS=passw0rd - DB_NAME=gitlabhq_production - DB_EXTENSION=pg_trgm gitlab: restart: always image: twang2218/gitlab-ce-zh:8.5.8 depends_on: - redis - postgresql ports: - "80:80" - "10022:22" volumes: - /data/data/github/gitlab:/var/opt/gitlab:Z environment: - DEBUG=false - DB_ADAPTER=postgresql - DB_HOST=postgresql - DB_PORT=5432 - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production - REDIS_HOST=redis - REDIS_PORT=6379 - TZ=Asia/Shanghai - GITLAB_TIMEZONE=Beijing - GITLAB_HTTPS=false - SSL_SELF_SIGNED=false - GITLAB_HOST=gitlab.zhangpeng.com - GITLAB_PORT=80 - GITLAB_SSH_PORT=10022 - GITLAB_RELATIVE_URL_ROOT= - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_ROOT_PASSWORD= - GITLAB_ROOT_EMAIL= - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true - GITLAB_NOTIFY_PUSHER=false - GITLAB_EMAIL=notifications@example.com - GITLAB_EMAIL_REPLY_TO=noreply@example.com - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com - GITLAB_BACKUP_SCHEDULE=daily - GITLAB_BACKUP_TIME=01:00 - SMTP_ENABLED=false - SMTP_DOMAIN=www.example.com - SMTP_HOST=smtp.gmail.com - SMTP_PORT=587 - SMTP_USER=mailer@example.com - SMTP_PASS=password - SMTP_STARTTLS=true - SMTP_AUTHENTICATION=login - IMAP_ENABLED=false - IMAP_HOST=imap.gmail.com - IMAP_PORT=993 - IMAP_USER=mailer@example.com - IMAP_PASS=password - IMAP_SSL=true - IMAP_STARTTLS=false - OAUTH_ENABLED=false - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER= - OAUTH_ALLOW_SSO= - OAUTH_BLOCK_AUTO_CREATED_USERS=true - OAUTH_AUTO_LINK_LDAP_USER=false - OAUTH_AUTO_LINK_SAML_USER=false - OAUTH_EXTERNAL_PROVIDERS= - OAUTH_CAS3_LABEL=cas3 - OAUTH_CAS3_SERVER= - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false - OAUTH_CAS3_LOGIN_URL=/cas/login - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate - OAUTH_CAS3_LOGOUT_URL=/cas/logout - OAUTH_GOOGLE_API_KEY= - OAUTH_GOOGLE_APP_SECRET= - OAUTH_GOOGLE_RESTRICT_DOMAIN= - OAUTH_FACEBOOK_API_KEY= - OAUTH_FACEBOOK_APP_SECRET= - OAUTH_TWITTER_API_KEY= - OAUTH_TWITTER_APP_SECRET= - OAUTH_GITHUB_API_KEY= - OAUTH_GITHUB_APP_SECRET= - OAUTH_GITHUB_URL= - OAUTH_GITHUB_VERIFY_SSL= - OAUTH_GITLAB_API_KEY= - OAUTH_GITLAB_APP_SECRET= - OAUTH_BITBUCKET_API_KEY= - OAUTH_BITBUCKET_APP_SECRET= - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL= - OAUTH_SAML_IDP_CERT_FINGERPRINT= - OAUTH_SAML_IDP_SSO_TARGET_URL= - OAUTH_SAML_ISSUER= - OAUTH_SAML_LABEL="Our SAML Provider" - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient - OAUTH_SAML_GROUPS_ATTRIBUTE= - OAUTH_SAML_EXTERNAL_GROUPS= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME= - OAUTH_CROWD_SERVER_URL= - OAUTH_CROWD_APP_NAME= - OAUTH_CROWD_APP_PASSWORD= - OAUTH_AUTH0_CLIENT_ID= - OAUTH_AUTH0_CLIENT_SECRET= - OAUTH_AUTH0_DOMAIN= - OAUTH_AZURE_API_KEY= - OAUTH_AZURE_API_SECRET= - OAUTH_AZURE_TENANT_ID=
只修改了幾個(gè)鏡像的tag與kubernetes搭建的版本一致(redis版本其實(shí)沒有太大要求),還有ssh的對外映射端口(否則會與主機(jī)的22端口沖突,數(shù)據(jù)庫密碼也直接拿來kubernetes集群中的變量了.......):
外鏈圖片轉(zhuǎn)存中...(img-FZMftzTd-1678333347030)
為什么不用8.5.8的docker-compose.yaml文件呢?
https://github.com/sameersbn/docker-gitlab/blob/8.5.8/docker-compose.yml
docker-compose的版本 貌似是V1的起不來服務(wù).....這里就默認(rèn)用v2的yaml了
cd /data/data/githubdocker-compose up -d
等待容器running......
restore 還原gitlab倉庫
進(jìn)入gitlab容器,進(jìn)入backups目錄,執(zhí)行restore命令還原倉庫:
docker exec -it github-gitlab-1 bashcd /var/opt/gitlab/backups/gitlab-rake gitlab:backup:restore BACKUP:1678096354
外鏈圖片轉(zhuǎn)存中...(img-Kr7gCCEi-1678333347031)
外鏈圖片轉(zhuǎn)存中...(img-zVCADnM9-1678333347031)
注:BACKUP后跟備份文件_前面的時(shí)間輟格式.除了1678096354_gitlab_backup.tar壓縮包外其他文件是執(zhí)行過程中解壓產(chǎn)生的文件。這是在CVM主機(jī)掛載目錄看到的!
中間會有
This will rebuild an authorized_keys file.You will lose any data stored in authorized_keys file
yes 同意?等待還原完成
訪問gitlab倉庫驗(yàn)證
ipor host綁定域名?;蚴?strong>直接綁定域名訪問gitlab:
外鏈圖片轉(zhuǎn)存中...(img-xvsxZjJ6-1678333347032)
注:https的操作可以創(chuàng)建負(fù)載均衡綁定端口的方式or參照gitlab 15.8 on rocky 8中證書配置設(shè)置一下?不知道古老能不能適用,升級高版本了再去嘗試!驗(yàn)證了一下倉庫 and 用戶權(quán)限都沒有什么問題還原到一段落了,下面嘗試一下升級!
其他問題:
項(xiàng)目搜索這里,翻頁貌似會404......我嘗試了線上的github應(yīng)用也這樣就忽略了.......
另外ssh-key 的clone沒有成功,嘗試了http的clone沒有問題,先忽略!
gitlab升級之路
正常的更新流程看網(wǎng)上都是說
升級至當(dāng)前大版本(
major version)的最新小版本(
latest minor version)升級至目標(biāo)大版本(target major version)的首個(gè)小版本(first minor version)繼續(xù)升級至更新的版本
根據(jù) gitlab upgrading guide 的說法,版本低于 8.11.Z時(shí),先更新到 8.12.0是比較穩(wěn)妥的方案。第一部先升級到8.12吧!
注:我這里的twang2218/gitlab-ce-zh鏡像很多都與官方的不太一樣,還是繼續(xù)使用twang2218/gitlab-ce-zh的鏡像進(jìn)行升級了!
外鏈圖片轉(zhuǎn)存中...(img-YyueKN9u-1678333347032)
額外強(qiáng)調(diào)一下gitlab與postgresql版本的對應(yīng)關(guān)系:
升級gitlab的同時(shí),postgresql的版本也應(yīng)該同時(shí)進(jìn)行升級的,詳細(xì)的版本對應(yīng)關(guān)系可參考以下鏈接:
https://repository.prace-ri.eu/git/help/administration/package_information/postgresql_versions.md
準(zhǔn)備在升級gitlab9的時(shí)候升級一下postgresql 。8版本就使用默認(rèn)的9.4.24了!
8.5.8 -8.12.13
dockerhub倉庫看了一眼:https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=8.12,8.12的版本tag就順手選擇了8.12.13:
修改鏡像tag
嘗試修改docker-compose.yml中g(shù)itlab image tag 為twang2218/gitlab-ce-zh:8.12.13
外鏈圖片轉(zhuǎn)存中...(img-wQHkVHIg-1678333347033)
外鏈圖片轉(zhuǎn)存中...(img-hp83WBI3-1678333347034)
docker-compose downdocker-compose up -d
secret文件問題
[root@VM-4-34-rockylinux github]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdbb3e922065e twang2218/gitlab-ce-zh:8.12.13 "/assets/wrapper" About a minute ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp github-gitlab-1bbce8d9fcc7f sameersbn/redis:latest "/sbin/entrypoint.sh…" About a minute ago Up About a minute 6379/tcp github-redis-1da59ea5a2780 sameersbn/postgresql:9.4-24 "/sbin/entrypoint.sh" About a minute ago Up About a minute 5432/tcp github-postgresql-1
docker logs -f github-gitlab-1
查看日志出現(xiàn)如下報(bào)錯(cuò):
嘗試刪除secret文件:
cd /data/data/github/gitlab/gitlab-rails/etcrm -rf secret
gitlab 參數(shù)env缺失
綜上,刪除secret后,繼續(xù)重啟gitlab服務(wù):
docker-compose downdocker-compose up -ddocker logs -f github-gitlab-1
恩 docker-compose.yml少了兩個(gè)參數(shù),參照gitlab on kubernetes的配置:
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-strin
其實(shí)kubernetes gitllab中是有的,8.9.4的docker-compose.yml中沒有這兩個(gè)參數(shù),添加一下:
repositories目錄權(quán)限
注:截圖很多目錄會是/data/data/github1/gitlab/是第二次操作后截圖,為了熟練練手,圖中路徑忽略!
嘗試?yán)^續(xù)重啟gitlab服務(wù):
cd /data/data/github/docker-compose downdocker-compose up -d
查看gitlab服務(wù)日志:
docker logs -f github1-gitlab-1
出現(xiàn)如下錯(cuò)誤,按照日志內(nèi)容,基本確定是文件夾權(quán)限問題!
外鏈圖片轉(zhuǎn)存中...(img-Kw1i9zQP-1678333347036)
修改文件夾目錄權(quán)限:
chmod 2770 -R gitlab/git-data/repositories
請注意文件目錄路徑,操作命令文件相對路徑在/data/data/github/目錄
重啟gitlab服務(wù):
docker-compose downdocker-compose up -d
外鏈圖片轉(zhuǎn)存中...(img-kqO7rIIh-1678333347037)
查看日志,等待服務(wù)正常啟動!
docker logs -f github-gitlab-1
登陸web并驗(yàn)證gitlab服務(wù)
用原有g(shù)itlab賬戶登陸此gitlab服務(wù)器
外鏈圖片轉(zhuǎn)存中...(img-JkaZ6qaf-1678333347037)
點(diǎn)擊管理區(qū)域查看gitlab版本,確認(rèn)版本已經(jīng)升級到8.12.13版本。
第一步升級算是基本成功!
注:docker-compose 命令都是在/data/data/github目錄下執(zhí)行(放置docker-compose.yml文件目錄下)。注意文件目錄的切換!
8.12.13-8.17.7
確認(rèn)并修改docker-compose.yml文件鏡像tag
dockerhub查看8版本最后鏡像tag為8.17,https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=8.17。這里就選擇升級到8.17.7版本
修改docker-compose.yml文件中鏡像tag:
重啟gitlab服務(wù)
docker-compose downdocker-compose up -ddocker logs -f github-gitlab-1
外鏈圖片轉(zhuǎn)存中...(img-820woXWy-1678333347038)
web訪問并驗(yàn)證版本升級成功
用原有g(shù)itlab賬戶登陸此gitlab服務(wù)器,控制臺查看gitlab 服務(wù)器版本已經(jīng)升級到指定8.17.7版本
外鏈圖片轉(zhuǎn)存中...(img-bVQcK6dP-1678333347039)
外鏈圖片轉(zhuǎn)存中...(img-rEB76Ib4-1678333347039)
8.17.7-9.5.10
修改gitlab postgresql鏡像版本
參照postgresql 與gitlab對應(yīng)關(guān)系.....gitlab升級到9版本,postgresql也的升級到9.6版本以上:
參考:https://github.com/sameersbn/docker-gitlab/tree/9.5.5
還是使用sameersbn 的postgresql鏡像,修改tag
https://hub.docker.com/r/sameersbn/postgresql/tags?page=1&name=9.6
外鏈圖片轉(zhuǎn)存中...(img-HmFF8HWX-1678333347039)
準(zhǔn)備修改postgresql鏡像tag為9.6-3 gitlab鏡像tag9.5.10參照
https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=9.5
服務(wù)的啟動與postgresql版本問題:
docker-compose downdocker-compose up -ddocker ps
docker logs -f github1-postgresql-1
恩 postgresql版本升級會有問題!sameersbn/postgresql中 基礎(chǔ)鏡像中9.4的版本倉庫應(yīng)該沒有了(畢竟太老了)怎么破?流氓一下,找到最新的postgresql的版本:
修改docker-compose.yml postgresql鏡像為sameersbn/postgresql:12-20200524
docker-compose downdocker-compose up -d docker logs -f github-postgresql-1
外鏈圖片轉(zhuǎn)存中...(img-bbTzSK6N-1678333347041)
等待postgresql升級完成:
docker ps
查看gitlab容器日志:
docker logs -f github-gitlab-1
外鏈圖片轉(zhuǎn)存中...(img-PjVzqlwh-1678333347041)
貌似會有點(diǎn)問題無法登陸。集體重啟一遍docker-compose服務(wù):
docker-compose downdocker-compose up -d docker logs -f github-gitlab-1
等待gitlab 容器正常運(yùn)行:
外鏈圖片轉(zhuǎn)存中...(img-FwXa9v8L-1678333347042)
繼續(xù)登陸驗(yàn)證web登陸倉庫
用原有g(shù)itlab賬戶登陸此gitlab服務(wù)器,控制臺查看gitlab 服務(wù)器版本已經(jīng)升級到指定9.5.10版本:
另外關(guān)于postgresql的升級后文件目錄的變化:
外鏈圖片轉(zhuǎn)存中...(img-DaNKsQIJ-1678333347043)
9.5.10-10.8.7
繼續(xù)修改gitlab鏡像tag
繼續(xù)升級gitlab到10大版本.到dockerhub參考一下鏡像倉庫版本:
https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=10.8
修改gitlab鏡像tag為10.8.7
外鏈圖片轉(zhuǎn)存中...(img-pcZJW4Sv-1678333347043)
重啟gitlab相關(guān)服務(wù)
docker-compose downdocker-compose up -ddocker ps -a
docker logs -f github-gitlab-1
外鏈圖片轉(zhuǎn)存中...(img-XF8gadcL-1678333347044)
等待的有些漫長
web登陸gitlab倉庫
點(diǎn)擊管理區(qū)域驗(yàn)證版本10.8.7:
外鏈圖片轉(zhuǎn)存中...(img-Izdc7tvY-1678333347044)
10.8.7-11.1.4
修改gitlab鏡像tag
繼續(xù)找到11大版本的最高版本11.1.4
https://hub.docker.com/r/twang2218/gitlab-ce-zh/tags?page=1&name=11.1
外鏈圖片轉(zhuǎn)存中...(img-8CeJ7Qsx-1678333347045)
重啟升級gitlab服務(wù)
docker-compose downdocker-compose up -ddocker ps -a
查看日志,等待服務(wù)升級:
docker logs -f github1-gitlab-1
外鏈圖片轉(zhuǎn)存中...(img-CQZraTrX-1678333347046)
web登陸gitlab控制臺驗(yàn)證
點(diǎn)擊管理區(qū)域:
確認(rèn)版本升級到11.1.4:
外鏈圖片轉(zhuǎn)存中...(img-M4kxmPSB-1678333347046)
就先升級到這里后續(xù)用官方鏡像or sameersbn鏡像繼續(xù)完成升級到更高版本!
過程中其他出現(xiàn)過的問題:
postgresql配置的時(shí)候第一次出現(xiàn)過如下報(bào)錯(cuò):
參照csdn的一篇文章:https://blog.csdn.net/weixin_42758299/article/details/117958407,修改了pg_hba.conf
外鏈圖片轉(zhuǎn)存中...(img-mJcE5mMD-1678333347047)
然后重啟了postgresql正常啟動了:
關(guān)鍵詞: