星期三, 3月 29, 2017

Docker-based GitLab hostname

如果「冒然地」使用 Docker 起一部新的 GitLab 伺服器,而沒有太注意參數的話,日後專案的 URL 可能含有一段像亂碼的主機名稱。有兩種解法:
  • 事前:docker run -h yourHostName ...
  • 事後:編輯 /etc/gitlab/gitlab.rb 其中一行 external_url 'http://yourHostName',當然也別忘了 gitlab-ctl reconfigure 套用生效。

星期四, 3月 02, 2017

Encrypting and Decrypting Configuration Sections

要透過加密來保護 web.config 資料庫帳密之類的機敏資訊,又懶得再寫一堆程式?其實微軟已有一套機制,這個題目在 MSDN 上有篇一模一樣的,那為何還要抄一遍?因為有幾個重點若遺漏了,很容易讓人沮喪:
  • 在 Windows 7 / Windows Server 2008 R2 安裝的 IIS 7.5,或更新的版本,當我們不是用正規的部署工具將網站內容搬到伺服器上,可能要考慮實體目錄的授權問題,如我過去偷懶開給 EveryOne Full Control,或正經地參考這篇
  • 一定要用管理者身分執行 aspnet_regiis.exe,否則就等著被那些錯誤訊息誤導吧!
  • 關於 -site,雖然大多數情況下可以省略,但若是反覆設定使用的舊伺服器上,又尤其是中文介面,比較不能放心交給預設值。保險起見,最好在 IIS Manager > Sites > Default Web Site > Basic Settings... 確認一下,站台名稱是否還是預設(可省略)的 "Default Web Site"(參數值含空白,頭尾必須有雙引號包著)?
  • 關於 -app,指的是「應用程式別名」或稱虛擬路徑,一定要以斜線開頭。
  • 關於 -prov,指的是某「受保護組態提供者」,省略就會使用預設的程式與亂數產生的金鑰對,若不考慮移機是最簡單有效的。
  • 當上述程式的執行結果成功,也別高興太早,例如 -app / 這樣明顯找錯對象,但結果成功?其實這會去 %systemdrive%\inetpub\wwwroot 目錄找另一個 web.config,找不到也不算有問題。還是在加/解密後,打開真正目標 web.config 再確認才放心。
  • 這種加解密做法其實與公文交換是一樣的,看來沒有必要自訂程式處理。若必須多考慮移機或 WebFarm 的情境,要注意金鑰也必須隨之搬家,到了新家還要授權,原則上可以參考官網這篇,不過要注意授權對象(參考第一點),configProtectedData 可落在根節點下的第一層,還有 Version=2.0.0.0 可以直接改 4.0.0.0,-prov SampleProvider 而不是 SampleKeys,還有 PublicKeyToken 後面少了逗號。也可以參考這篇部落格,但前提還是要自己清楚整個流程,把人家的整理當功德,否則傻傻地抓不出錯字還是做不出來的。