上一篇我們成功部署Gitea在容器執行個體(Azure Container Instances)而由於容器無狀態的特性當遇到當機或重啟時原本存在容器內的資料也就煙消雲散,因此在部署應用程式服務之前先把Gitea Container外接一個儲存體(這樣就可以保存Gitea的狀態),網路上有很多種方式這邊我選用Azure提供的「儲存體帳號」來試試看,那為什麼會選應用程式服務」?主要是部署服務它是我的首選加上功能多樣也可以直接套用Docker Hub上的容器,最重要的是它提供了開發者免費的方案(有免費就加分👍)

💡容器執行個體(Azure Container Instances)也可以外接儲存體帳戶哦!



建立儲存體帳戶

前言提到我們需要一個存儲空間用於存放Gitea整個根目錄內所有的資料夾,所以我們先來建立存儲空間,回到Microsoft Azure的控制台「所有服務」「儲存體」「儲存體帳戶」「建立儲存體帳戶」


建立儲存體帳戶 - 基本設定

  • 資源群組:這個一定要設定(管理用)
  • 儲存體帳戶名稱:這個可以輸入任意名稱(記得都要小寫或是數字)
  • 區域:這裡我們選擇「東亞」
  • 效能:效能直接選擇「標準」
  • 備援:由於我們是測試用的直接選擇本地,如果是很重要的資料建議是使用異地(當然價格應該也有所不同!)



建立儲存體帳戶 - 網路

  • 網路連線:選擇「公用端點」
    💡 要注意的是「私人端點」無法用於一般用途v1儲存體帳戶哦!【點我前往
  • 網路路由:預設Microsoft網路路由即可


由於是DEMO用的剩下的「進階設定」、「加密」都直接用預設值即可,設定完成後直接「檢閱+建立」等待Azure驗證和資源部署後就可以前往資源



儲存體帳戶 - 檔案共用

我們在選單找到「 檔案共用」「新增檔案共用


這裡有兩個設定

  • 名稱:檔案共用的名稱,可以隨意命名
  • 階層:這裡我們選擇「交易最佳化」,如果只是用封存資料的話可以選擇非經常性

設定完成後按下建立就完成儲存體帳戶的檔案共用設定了!



建立應用程式服務

建立完儲存體後回到Microsoft Azure的控制台「所有服務」「容器」「應用程式服務」「建立 APP Service」




建立應用程式服務 - 基本設定

  • 資源群組:這個一定要設定(管理用)
  • 名稱:輸入應用程式服務的名稱
  • 發佈:使用Docker Hub上的容器選擇「Docker容器」
  • 作業系統:作業系統直接選「Linux」
  • 地區:選擇「East Asia」(這個好像會依照地區提供對應的系統資源其價格也會有所不同)
  • Linux方案:如果一開始沒有方案的話,建立時會自動預設一個方案項目(記得看清楚如果設定很貴的方案就GG了)
  • SKU和大小:這邊我們就按下變更大小,直接選擇免費的!




建立應用程式服務 - Docker

💡 由於我們選的發佈方式是Docker容器因此需要設定這個步驟
  • 選項:單一容器
  • 映像來源:選擇Docker Hub
  • 存取類型:Gitea是公開類型的容器因此選擇「公開」
  • 映像及標籤:這裡我們輸入Docker Hub上的路徑gitea/gitea
  • 啟動命令:這邊可以設定啟動時要執行什麼指令,我們輸入以下命令
    gitea -w / -C /custom --port 80
    💡 -w 是可以預設工作目錄的位置,這裡我們要把工作目錄導到儲存體帳戶的檔案共用,因此使用斜線作為根目錄的位置「/」

    -C (C是大寫,小寫c是設定config)是預設自定義文件夾的位置,我們使用「/custom」作為自定義文件夾的位置

    --port 設定預設的Port,Gitea預設是3000,應用程式服務預設是80,因此要連線的話需要將Port導到80Port才可以使用

「監視」、「標籤」直接跳過不設定直接到檢閱+建立等待Azure系統驗證和部署,完成後按下前往資源即可



資源檢視

執行應用程式服務之前還有幾個步驟要設定,首先在選單找到組態」


應用程式設定」頁簽找到WEBSITES_ENABLE_APP_SERVICE_STORAGE」,這個功能可以打開應用程式服務的存儲功能,我們將值從false」調整為true」


接著切換到「一般設定」這裡可以設定我們一開始建立時所設定的啟動命令,如果有需要修改以後可以來這邊調整



最後是「路徑對應」還記得一開始我們建立的「儲存體帳戶 - 檔案共用」嗎(終於輪到它了XD),我們可以在這裡將我們的應用程式服務串接到儲存體帳戶 - 檔案共用,選擇新增Azure儲存體掛接」

  • 名稱:這裡我會設定跟我的儲存體帳戶 - 檔案共用的名稱一致這樣比較方便辨識
  • 設定選項:進階可以設定有金鑰的儲存體,我們沒設定因此直接預設「基本」即可
  • 儲存體類型:因為檔案共用是檔案儲存體模式,所以我們選擇「Azure檔案儲存體」
  • 儲存體容器:一開始如果有建立過儲存體帳戶-檔案共用就會直接出現在下拉選單提供選擇
  • 裝載路徑:裝載路徑就是應用程式服務對應到的儲存體帳戶-檔案共用內的根目錄,這邊我們使用/data
    💡裝載路徑很重要!要記得自己設定的路徑名稱在等等設定Gitea的時候會用到


設定完成後按下確定就成功將Azure的儲存體掛上我們的應用程式服務


設定都完成後記得要後按下儲存」哦(被這個雷過XD)!


最後回到概觀」然後「重新啟動」服務後就可以按下瀏覽」



執行應用程式服務

服務器成功啟動後就可以成功看到Gitea的安裝頁面


到這邊我們先回到儲存體帳戶 - 檔案共用可以發現應用程式服務內的Gitea已經正確的裝載到了我們指定的路徑(可以看到Gitea自動產生的預設檔案資料夾)


回到Gitea安裝頁面看到儲存庫根目錄會自動抓到我們剛剛在儲存體掛接設定的/data」,如果Gitea一開始預設不是/data的話那很有可能是前面的步驟有設定錯誤哦!


最後將所有的目錄都調整到「gitea資料夾」裡面



全部都設定完成後按下安裝並且等待安裝完成,另外也可以回到儲存體帳戶 - 檔案共用的地方再次確認路徑是否有裝載正確
💡如果出現很多資料夾檔案表示路徑正確無誤XD


等待Gitea設定完成,恭喜成功!


題外話:剛開始摸索Azure時在設定容器執行個體的時候有成功把存儲外接到儲存體帳戶的檔案共用內,但只要重啟Gitea的某些設定都還是會不見,後來發現是Gitea根目錄沒有設定好,導致一些基本設定的資料夾沒有放到儲存體帳戶的檔案共用內,所以重啟後自然那些資料夾就消失了,但也因此學到了原來Gitea根目錄的設定很重要啊!!XD



2022/01/20 補充

今天不知道是踩到Gitea的雷還是Docker的雷還是Azure的雷(應該是Gitea啦XD),服務器突然出現無法執行的問題


重啟後還是不行所以就跑去記錄資料流」看Log發現了以下的錯誤訊息

Gitea is not supposed to be run as root. Sorry. If you need to use privileged TCP ports please instead use setcap and the `cap_net_bind_service` permission

didn't respond to HTTP pings on port: 80

研究了一下是Gitea在我啟動前的1小時內發佈了新的latest版本導致執行時Docker Pull新版本時發生了一些問題(可能有什麼相容性問題吧XD),但總不能每次更新時發生錯誤我的服務器就要停擺吧!!於是就來記錄一下是如何調整Docker Pull時的版本吧!
💡服務之所以會重啟是因為Linux方案是免費的關係,太久沒有使用他就會自動關閉(休眠)所以才會有重啟的動作

我們到左邊工具列的部署中心」


部署中心裡面包含了我們執行Docker容器的一些設定,這裡可以看到映像檔在一開始部署的時候沒有設定它要使用什麼版本因此預設就是latest」


我們只需要把latest改成我們上一個穩定使用的版本「1.15.10」,這樣可以固定我們Gitea的版本不會因為有更新導致服務器停擺


儲存後一樣重啟服務器等待它部署,登入網頁搞定!