
[{"content":"感謝這些偉大的無名客們。\n有你們，我才能踩在巨人的肩膀上繼續努力。\nIvon Huang\nIvon的部落格 愛耍廢\n分享學習筆記 小类随手记\njust so so. ","date":"2024年10月8日","externalUrl":null,"permalink":"/info/links/","section":"Infoes","summary":"","title":"致無名客","type":"info"},{"content":"","date":"2025年4月5日","externalUrl":null,"permalink":"/","section":"","summary":"","title":"","type":"page"},{"content":" 所有文章 # ","date":"2025年4月5日","externalUrl":null,"permalink":"/post/","section":"","summary":"","title":"","type":"post"},{"content":"","date":"2025年4月5日","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"折騰 GitLab 系列 - 2025 最新版安裝指南\n本文將完整記錄如何在自家伺服器環境中安裝最新版 GitLab，並實作自動化備份機制。這篇文章面向對 Linux 與 GitLab 完全不熟悉的朋友，即便你是第一次接觸 GitLab，也能成功操作。\n一、環境準備\n這次安裝選擇的架構如下：\n實體主機安裝 Proxmox VE (PVE)\n在 PVE 中建立一台 Ubuntu Server 24.04 VM\n於該 VM 中安裝 GitLab Omnibus\n備份目標為 Google Drive，使用 restic + rclone\n建立 PVE VM\nPVE Web UI 建立 VM 時需注意幾個重點：\n客體作業系統版本 選擇 6.x - Linux Kernel。\n磁碟大小 視需求建議 50GB 起跳。\nCPU Flags 建議勾選：md-clear, pcid, spec-ctrl，這些會對性能及安全性有幫助。\n(PVE Web UI 中建立 VM 選擇 OS 版本的畫面)\n(磁碟與 CPU Flags 設定畫面)\n網路設定：若你想讓 VM 擁有固定 IP，可選擇 virtio 網卡，並於 Ubuntu 安裝時手動設定靜態 IP。 (建議插圖：Ubuntu Server 安裝過程中設定固定 IP 的畫面)\n二、安裝 GitLab Omnibus\n更新套件並安裝必要工具： sudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y sudo apt install curl openssh-server ca-certificates tzdata perl -y 安裝 GitLab 套件倉庫： curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash 安裝 GitLab CE 並指定網址： sudo EXTERNAL_URL=\u0026#34;https://your.gitlab.domain\u0026#34; apt install gitlab-ce (請確保你已設定好反向代理（如 Nginx）及 HTTPS 憑證，或使用 Cloudflare 反代至內部。)\n三、初始化 GitLab\n安裝完成後，訪問你的 GitLab 網址，會看到初始登入畫面。\n預設帳號為 root\n首次登入會要求你設定密碼\n(GitLab 首次登入畫面)\n可視需求修改 root 的帳號名稱，但非必要。\n四、設定備份機制（restic + rclone）\n安裝 restic 與 rclone sudo apt install restic rclone -y 設定 rclone 使用 rclone config 建立連線，例如掛載 Google Drive：\nrclone config\n(rclone config 過程中的操作畫面)\n完成後可透過下列方式將 Google Drive 掛載到目錄：\nmkdir /mnt/gdrive-restic rclone mount myremote:path/to/folder /mnt/gdrive-restic --daemon --vfs-cache-mode writes 若 \u0026ndash;daemon 無效，建議使用 tmux 啟動 mount 指令並 detach。\n建立備份腳本 建立一個 gitlab_backup_to_gdrive.sh 檔案，內容如下：\n#!/bin/bash export RESTIC_PASSWORD=\u0026#34;yourpassword\u0026#34; export RESTIC_REPOSITORY=\u0026#34;/mnt/gdrive-restic\u0026#34; /opt/gitlab/bin/gitlab-backup create STRATEGY=copy cp -r /etc/gitlab /var/opt/gitlab/backups/etc-gitlab cp -r /var/log/gitlab /var/opt/gitlab/backups/logs-gitlab restic backup /var/opt/gitlab/backups restic forget --keep-daily 7 --keep-monthly 12 --keep-yearly 2 --prune cd /var/opt/gitlab/backups ls -1t *.tar | tail -n +2 | xargs -r rm -- 建議在腳本執行時加上 2\u0026gt;\u0026amp;1 | tee /var/log/gitlab_restic_backup.log 讓 log 可查詢\n設定排程任務（Crontab） sudo crontab -e 加入：\n5 * * * * /home/youruser/gitlab_backup_to_gdrive.sh \u0026gt;\u0026gt; /var/log/gitlab_restic_backup.log 2\u0026gt;\u0026amp;1 表示每小時第 5 分鐘自動執行備份任務\n(crontab 編輯畫面)\n驗證備份結果 tail -f /var/log/gitlab_restic_backup.log 或透過 rclone 掛載目錄 /mnt/gdrive-restic 檢查是否已建立 snapshot 資料夾。\n小結\n至此，我們已成功完成：\n在 Proxmox VE 中建立 GitLab 專屬 VM\n安裝並啟用 GitLab CE\n設定外部反代與固定網址\n實作 restic + rclone 備份 GitLab\n下一篇預告\n《折騰 GitLab 系列（二）－ GitLab Pages 正確部署與自動化》\n","date":"2025年4月5日","externalUrl":null,"permalink":"/post/gitlab-selfhost-1/","section":"","summary":"","title":"GitLab 2025 最新版安裝指南","type":"post"},{"content":"","date":"2025年4月5日","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"2025年4月5日","externalUrl":null,"permalink":"/series/%E6%8A%98%E9%A8%B0-gitlab-%E7%B3%BB%E5%88%97/","section":"Series","summary":"","title":"折騰 GitLab 系列","type":"series"},{"content":" 探討自由軟體相關的使用應用、比較心得、應用教學、相關新聞。 # ","date":"2025年4月5日","externalUrl":null,"permalink":"/categories/%E9%96%8B%E6%BA%90%E8%87%AA%E7%94%B1%E8%BB%9F%E9%AB%94/","section":"Categories","summary":"","title":"開源自由軟體","type":"categories"},{"content":"【動態牆介紹】\n動態牆 是我希望用於 取代動態發布功能服務 的特殊頁面，靈感來自於 Ivon 前輩的部落格短文替代方案\n2024-10-20 # 使用 Hugo 架站後 SEO 出乎意料的不錯，提交給 Google Search Console 很快被能被搜尋到 之前用的 VuePress 時，似乎跟 Google Search Console 相性似乎不太好，不知道是不是錯覺 XD ","date":"2024年10月20日","externalUrl":null,"permalink":"/timeline/time-river-2024/","section":"Timelines","summary":"","title":"2024 動態牆","type":"timeline"},{"content":"","date":"2024年10月20日","externalUrl":null,"permalink":"/timeline/","section":"Timelines","summary":"","title":"Timelines","type":"timeline"},{"content":"","date":"2024年10月20日","externalUrl":null,"permalink":"/series/%E6%88%91%E7%9A%84%E5%8B%95%E6%85%8B%E7%89%86/","section":"Series","summary":"","title":"我的動態牆","type":"series"},{"content":"","date":"2024年10月12日","externalUrl":null,"permalink":"/series/rclone%E6%89%8B%E5%86%8A/","section":"Series","summary":"","title":"Rclone手冊","type":"series"},{"content":" 以下介紹翻譯自官方網站介紹 Rclone 是一個用於管理雲端空間的命令行工具，是優於雲端供應商網路介面的多功能替代方案\n支援 超過70種雲端儲存產品 支援種類包含 S3 物件儲存桶服務、商務和消費者檔案儲存服務以及標準傳輸協定\nRclone 提供相當於 unix 指令的體驗，例如 rsync、cp、mv、mount、ls、ncdu、tree、rm、cat，允許使用者使用熟悉的語法，也支援透過 shell 的 管道(pipeline) 使用，可配合 --dry-run 參數來模擬執行動作來防止誤操作\n另外也能在命令行介面、腳本中啟動 API ，然後透過 HTTP 進行互動\n以下假設您已經完成 Rclone 安裝過程\n並可以透過命令行直接呼叫 Rclone 管理遠端設定 # rclone config 後續針對不同雲端操作不一樣，可參考官方文件\n前往 Google Drive 設定文件 前往 S3 儲存桶相關設定文件 前往其他雲端設定文件 路徑語法 # 本地端路徑範例\nD:\\download (Windows)\n/home/benny/download (Linux)\n雲端路徑範例\nmydrive:/folder/to/path\n同步指令 # 刪減或上傳檔案至目的地，使目的地與來源檔案狀態一致 rclone sync ${來源路徑} ${目的地路徑} ${其他參數} 常用參數 # -P 顯示進度 --drive-chunk-size=64M 切塊大小，越大傳越快，但會消耗記憶體 --transfers=10 傳輸並行數量 --stats=5s 多久更新一次進度狀態 -v 顯示更多資訊 其他指令 (持續更新) # rclone move 移動,如果您想在移動後刪除空來源目錄,請新增 \u0026ndash;delete-empty-src-dirs 參數 rclone size 查看雲端空間檔案佔用大小 rclone delete 刪除路徑下的檔案內容 rclone purge 刪除路徑和路徑下的檔案內容 rclone mkdir rclone rmdir rclone rmdirs 刪除指定精神領域下的空目錄。如果新增了 \u0026ndash;leave-root 參數,則根目錄不會被刪除 rclone check 檢查來源位址資料和目標位址資料是否相符 rclone ls 列出指定路徑下的所有檔案以及檔案大小和路徑 rclone lsl 比上面多顯示上傳時間 rclone lsd 列出指定路徑下的資料夾 rclone lsf 列出指定路徑下的和檔案 ","date":"2024年10月12日","externalUrl":null,"permalink":"/post/my-rclone-handbook/","section":"","summary":"","title":"初探強大的雲端空間互動工具 Rclone","type":"post"},{"content":"","date":"2024年10月8日","externalUrl":null,"permalink":"/info/","section":"Infoes","summary":"","title":"Infoes","type":"info"},{"content":"","date":"2024年9月1日","externalUrl":null,"permalink":"/tags/cloudflare/","section":"Tags","summary":"","title":"Cloudflare","type":"tags"},{"content":"","date":"2024年9月1日","externalUrl":null,"permalink":"/tags/nginx/","section":"Tags","summary":"","title":"Nginx","type":"tags"},{"content":"","date":"2024年9月1日","externalUrl":null,"permalink":"/tags/ssl/","section":"Tags","summary":"","title":"Ssl","type":"tags"},{"content":"","date":"2024年9月1日","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"有在架設網站的朋友們應該都有使用 Nginx Proxy Manager 來做反向代理的經驗，這樣可以讓你的網站更安全，也能更方便的管理多個網站。\n以下說明我使用 Nginx Proxy Manager 時，透過 Cloudflare API 來自動註冊 SSL 證書的步驟。\n搭配環境說明 # Nginx Proxy Manager # 你的網站使用 Nginx Proxy Manager 作為反向代理服務\nCloudflare # 你擁有一個由 Cloudflare 管理的域名\n如文章標題所述，你需要使用 Cloudflare 作為你的 DNS 服務提供商。 如果你使用的是其他 DNS 服務提供商，仍然可以透過設定將供應商提供的網域轉移給 Cloudflare 管理。 原理可以參考官方說明 步驟 # 新增 Cloudflare 憑證 # 你需要依照以下步驟新增一組用於呼叫 Cloudflare API 的憑證提供給 Nginx Proxy Manager 使用\n設定 Nginx Proxy Manager # 填寫紅框資訊\n注意剛剛在 Cloudflare 申請的 API key 要記得填入相應的位置。\n點擊 Save 按鈕後便會自動開始申請流程，需要等待約 1~3 分鐘左右。\n如果失敗的話確認一下資料沒問題的話，可以重複發送申請，有時候只是網路不穩而導致失敗。 完成申請 # 申請完成畫面如下圖所示\n完成設定後 Nginx Proxy Manager 會自動幫你更新 SSL 證書，不需要再手動更新。\n當你新增反向代理設定時，就能選擇你這張 SSL 證書來將流量加密囉！\n結語 # 原本以為自己不會忘記這個步驟，但是遠離了一兩年記憶還是變模糊了，所以趁這次機會記錄下我最近成功註冊的步驟。\n","date":"2024年9月1日","externalUrl":null,"permalink":"/post/cloudflare-auto-renew-ssl/","section":"","summary":"","title":"如何為你的網站註冊自動刷新的 SSL 證書","type":"post"},{"content":"本文紀錄了過年時除舊佈新整理房間時，因為移動了家庭服務器電腦的位置，在重啟服務遇到需要手動更新的流程。\n具體狀況發生在關機後重啟服務後，打開網頁時發現 Nextcloud 強制要求更新，並且進入維護鎖定模式，這是因為我當時安裝時使用的 docker-compose 指定最新版本，而我又傻傻的沒有修改就直接執行了 docker compose up 命令，依照官方文件描述，此時需要進入容器中使用命令行來手動更新了。\n安裝背景 # 本文中的 Nextcloud 安裝於 Proxmox 中的一個 CT 容器中，使用官方的 Nextcloud AIO 方案部屬。\n升級版本 # 27 版 \u0026gt; 27 版的最新版本 \u0026gt; 28.0.2\n過程紀錄 # 以下 php 命令開頭的指令需要在運行 Nextcloud 的 docker 容器中執行 在 porxmox 中選擇安裝 Nextcloud 的 CT ，進入命令行模式\n先升級主程式 命令參考 (github.com)\n# 進入 nextcloud 的 docker 容器中 sudo docker exec --user www-data -it nextcloud-aio-nextcloud bash # Switch to the beta channel php occ config:system:set updater.release.channel --value=beta # Run the update php updater/updater.phar --no-interaction --no-backup \u0026amp;\u0026amp; php occ app:enable nextcloud-aio --force # Switch back to the stable channel php occ config:system:set updater.release.channel --value=stable 依照 github 說明，第二步驟的 updater 可以多執行幾次\n該命令一次只會升級一個小版本，等到不會升級後在進行下一步\n但我這次只執行一次就升到版本 27 的最新版本了，第二次執行就會直接結束\n升級 app\n如果要繼續升級到版本 28，這次需要先進行 app 升級\nphp occ upgrade 通常會在這邊遇到錯誤，特別是如果安裝了一些有的沒有的額外 app\n這時可以查看錯誤 log，鎖定沒辦法更新的 app 名稱，然後使用 occ 命令停用該 app\n# 列出所有 app 名單 php occ app:list # 停用特定 app php occ app:disable $appname 停用之後再次運行，應該就沒問題了\nphp occ upgrade 升級完成之後可以進行步驟 1 再次進行主程式升級\n反覆步驟 1~2，可以一步步將版本升級至最新版本\n完成主程式的更新會自動解除維護模式，就可以正常使用 Nextcloud 了\n補充資料 # Nextcloud 用 OCC 指令表 (ownCloud Console) ","date":"2024年2月8日","externalUrl":null,"permalink":"/post/nextcloud-aio-manual-update-in-cli/","section":"","summary":"","title":"在 Nextcloud AIO 容器進入鎖定模式下手動升級紀錄","type":"post"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":" 我正在積極尋找更好的工作，可以點擊 我的履歷 了解更多 你好，我是 Benny，歡迎來到我的部落格站點。\n在本站中，你會找到\u0026hellip; # 本站分享內容包括「開源自由軟體」、「日系生活文化」。\n開源自由軟體：探討自由軟體相關的應用、比較心得、應用教學、相關新聞。 日系生活文化：分享關於生活心得紀錄、動漫畫與遊戲題材、NSFW相關題材。 ","externalUrl":null,"permalink":"/authors/bennychou/","section":"Authors","summary":"","title":"關於我 （BEN周)","type":"authors"}]