@@ -139,6 +139,67 @@ <h2>延伸閱讀</h2>
139139< div class ="next-prev ">
140140 < a class ="np-next " href ="unit-02-first-project.html "> < div class ="np-label "> 下一篇 →</ div > < div class ="np-name "> 單元 2 · 第一個專案</ div > </ a >
141141</ div >
142+
143+ <!-- ═══════ Round 1 Deepen ═══════ -->
144+ < h2 > 進階真實情境 Worked Example</ h2 >
145+ < h3 > 情境:選擇 GitLab 自架部署企業內部 DevOps 環境</ h3 >
146+ < p > 一家受金融法規規範的科技公司,要求「所有原始碼與 CI/CD 流程不得離開公司網路」。團隊決定自架 GitLab CE,並在同一台主機安裝 GitLab Runner,使用 Docker executor 執行 CI jobs。</ p >
147+ < div class ="demo-block ">
148+ < div class ="demo-label "> 安裝流程 · DEPLOY</ div >
149+ < pre > < span class ="hl-c "> # 1. 安裝 Docker(Ubuntu)</ span >
150+ sudo apt update && sudo apt install docker.io -y
151+
152+ < span class ="hl-c "> # 2. 用 Docker 單鍵部署 GitLab CE</ span >
153+ sudo docker run -d \
154+ --hostname gitlab.example.com \
155+ --name gitlab \
156+ -p 80:80 -p 443:443 -p 2222:22 \
157+ -v /srv/gitlab/config:/etc/gitlab \
158+ -v /srv/gitlab/logs:/var/log/gitlab \
159+ -v /srv/gitlab/data:/var/opt/gitlab \
160+ gitlab/gitlab-ce:latest
161+
162+ < span class ="hl-c "> # 3. 等待啟動完成後,取得 root 初始密碼</ span >
163+ sudo docker exec gitlab cat /etc/gitlab/initial_root_password
164+
165+ < span class ="hl-c "> # 4. 註冊 Runner(群組層級,Docker executor)</ span >
166+ sudo docker exec -it gitlab gitlab-runner register \
167+ --url https://gitlab.example.com \
168+ --token GROUP_REGISTRATION_TOKEN \
169+ --executor docker \
170+ --docker-image node:20
171+
172+ < span class ="hl-c "> # 5. 驗證:在專案中建立 .gitlab-ci.yml,push 後觀察 pipeline</ span > </ pre >
173+ </ div >
174+ < div class ="callout "> < strong > 設計決策:</ strong > ① 用 Docker volume 掛載三個目錄確保資料持久化;② Runner 用 Docker executor 讓每個 job 在獨立容器中執行,互不污染;③ 2222 port 映射避免與主機 SSH 衝突。</ div >
175+
176+ < h2 > 深入原理擴充</ h2 >
177+ < h3 > GitLab 與 Git 的分工:伺服器端運作</ h3 >
178+ < p > Git 是命令列工具,GitLab 是 Rails 應用。GitLab 伺服器端透過 < strong > Gitolite</ strong > 或自研的 < strong > Gitaly</ strong > (gRPC 服務)管理 Git 倉庫的存取控制與操作。</ p >
179+ < table >
180+ < tr > < th > 元件</ th > < th > 職責</ th > < th > 容易誤解的點</ th > </ tr >
181+ < tr > < td > < strong > Gitaly</ strong > </ td > < td > Git 倉庫的 gRPC 存取層(clone、push、diff 等)</ td > < td > GitLab 不是直接呼叫 git 命令列,而是透過 Gitaly 服務化</ td > </ tr >
182+ < tr > < td > < strong > Praefect</ strong > </ td > < td > Gitaly 代理,支援多副本與 failover</ td > < td > 這是 GitLab 14+ 的高可用方案,自架時預設不開啟</ td > </ tr >
183+ < tr > < td > < strong > GitLab Shell</ strong > </ td > < td > 處理 SSH 存取(push/pull)</ td > < td > SSH 只是 Git 操作的通道,CI/CD 與 Web 操作不經 GitLab Shell</ td > </ tr >
184+ </ table >
185+ < div class ="callout info "> < strong > 關鍵:</ strong > 你在 GitLab 網頁上看到的「儲存庫大小」包含 Git 物件、LFS、Wiki 等,但不含 CI artifacts 與 Container Registry——這兩者各有獨立儲存。</ div >
186+
187+ < h2 > 診斷式疑難排解表</ h2 >
188+ < table >
189+ < tr > < th > 症狀</ th > < th > 可能原因</ th > < th > 解決方案</ th > </ tr >
190+ < tr > < td > git clone / push 報 403 Forbidden</ td > < td > PAT 未勾選 write_repository scope 或已過期</ td > < td > 到 Settings → Access Tokens 確認 scope 與到期日,重新產生 token</ td > </ tr >
191+ < tr > < td > 自架 GitLab 網頁打不開</ td > < td > Docker port 映射錯誤,或主機防火牆擋住 80/443</ td > < td > 執行 < code > docker ps</ code > 確認 port,檢查 < code > ufw status</ code > 或 iptables 規則</ td > </ tr >
192+ < tr > < td > SSH clone 報錯「Permission denied (publickey)」</ td > < td > SSH key 未上傳到 GitLab,或本地 ssh-agent 未載入</ td > < td > 確認 < code > ~/.ssh/id_rsa.pub</ code > 已加到 GitLab → Preferences → SSH Keys,並執行 < code > ssh-add</ code > </ td > </ tr >
193+ < tr > < td > git pull 後衝突標記未消失</ td > < td > 沒有實際執行 git add 與 git commit 解決衝突</ td > < td > 編輯衝突檔案 → < code > git add .</ code > → < code > git commit -m "resolve conflict"</ code > </ td > </ tr >
194+ < tr > < td > Internal visibility 專案看不見</ td > < td > 使用 GitLab.com(非自架),Internal 級別不可用</ td > < td > GitLab.com 只有 Public / Private;Internal 是自架專屬功能</ td > </ tr >
195+ </ table >
196+
197+ < h2 > 進階挑戰題</ h2 >
198+ < ol >
199+ < li > < strong > 多 Runner 策略設計:</ strong > 為一個有前端(Node)與後端(Python)的專案,設計 Runner tag 策略,讓前端 job 只跑在有 Node 環境的 Runner,後端 job 只跑在有 Python 的 Runner。畫出架構圖並說明 tag 的設定方式。</ li >
200+ < li > < strong > GitLab CE vs EE 功能差距分析:</ strong > 調查三個 GitLab EE 獨有的功能(如 Audit Events、Merge Train、Code Owners),說明它們在 50 人以上的團隊中如何提升合規性與效率。</ li >
201+ </ ol >
202+
142203</ div >
143204< footer > 這是 GitLab 繁體中文教學站 · 由 OpenCode 建置< br >
144205 < span class ="footer-license "> 本站教學內容(繁體中文解說)為本站原創,採 CC-BY-4.0;技術名詞與操作引用自 < a href ="https://docs.gitlab.com/ " rel ="noopener "> GitLab Docs</ a > 與 < a href ="https://git-scm.com/doc " rel ="noopener "> Git 官方文件</ a > 。</ span > </ footer >
0 commit comments