分類
Gandi.net 技術文章 網域名稱

HTTPS 網頁轉址

最近 Gandi.net 開始支援 HTTPS 的網頁轉址,乍看之下沒什麼,今天剛好有需求,就來設定一下,用了之後才發現,媽阿!這根本賠本吧 XD

分類
GitLab 技術文章 最新文章

Git LFS 原理、大小檔案都適用

Git LFS 是 Large File Storage 的縮寫,主要是讓 Git 能夠處理大型檔案。因為 Git 的設計上都是以文字檔的程式碼為主,而程式碼的大小通常都不會太大,都是很多小型檔案為主。而當其他開發者在使用 Clone 來複製你的專案時,Git 預設會拉下 master 分支內的所東西,其實不只是當前的檔案,還包括了每一個檔案的歷史紀錄,這些東西都會除存在 .git 的目錄裡面。

所以若你將大型檔案 commit 到 master 內,就會發生一場災難,只要所有與此專案相關的人,都必須下載這個檔案,更不用說如果有異動的時候。

可以刪除 Git 內的大型檔案嗎?

可以,你可以參考 高見龍-為你自己學 Git 的內容來刪除這個檔案,並且用 push -f 的方式把遠端的內容也覆蓋掉。但是在你清除之前,其他所有人都還是必須下載整個儲存庫的內容。並且,你確定你能正確清除檔案,而不是把整個儲存庫搞壞?

大型檔案

什麼是大型檔案呢?一般來說,大約 10MB 以上的檔案,應該就算大型檔案,但也不是說你可以塞 100 個 1MB 的檔案,然後抱怨 Git 速度太慢。

其實 Git LFS 並不是處理大型檔案,在 Git 中只有分為 “文字格式” 跟 “二進位” 這兩種檔案類型,文字格式就是常見的程式碼,我們利用一般的筆記比舊可以開啟的檔案;而二進位檔就像是圖片、影片這種 Binary 格式的檔案,必須利用對應的軟體來開啟,而用筆記本開啟文字檔的話,通常都會看到亂碼。

而我們一般的程式碼都是屬於文字格式,Git 可以讀取檔案的內容用 diff 比較差異,而 Git 遇到二進位檔的時候,並不會去讀取檔案內容,所以你不能用 git diff 來看到差異,Git 若是知道這是二進位檔,就會以二進位的方式處理 (直接存入儲存庫、且不能用 diff 之類的工具比較內容)。

.gitattributes

.gitattributes 是用來告訴 Git 此專案要客製化的部份,為什麼要客製呢,因為 LFS 的使用條件就是你必須要告訴 Git,”這個檔案是 LFS 檔,請用 LFS 的方式處理“,但我們不需要自己設定,透過 git lfs 指令操作即可。

其實不只大型檔案,所有的檔案都可以用 .gitattributes 來告訴 Git 該怎麼處理這個檔案。

Git LFS

安裝

請依照 https://packagecloud.io/github/git-lfs/install 的說明安裝 Git LFS。

設定 yum 的 repo.d

設定好 yum 的 repo 之後就可以用 yum search 找到 git-lfs

yum search git-lfs
yum install git-lfs

最後安裝完成之後記得要用 git lfs install 指令讓你的 git 支援 lfs:

git lfs install
OK,這樣就安裝完成,接下來就可以使用 Git LFS。

指令

$ git lfs track 10mb.psd
$ git add .gitattributes
$ git commit -m 'Add PSD file'
$ git push origin master

上述範例中只有第一行是新的指令,其他的都是一般的 Git 指令,是不是很神奇!使用起來一點都不難,你只需要將你要追蹤的大型檔案加入追蹤之後就可以了。

但其實關鍵在於第二行,每一次你 “新增” 一個大型檔案的時候,都要重新用 add 再加入一次 .gitattributes,但異動大型檔案的時候不用。

原理

其實 git lfs track 指令只是增加一行 .gitattributes 的描述,這樣 Git 就知道這個檔案必須使用 LFS 的方式處理,也就是用二進位的方式處理,(也就是什麼都不處理)。

一開始,你的專案中沒有 .gitattributes 這個檔案,然後你用 git lfs track 之後,你會發現有 .gitattributes 並且新增了一行:

$ git lfs track 10mb.psd
Tracking "10mb.psd"
$ ls -a
10mb.psd  .git  .gitattributes
$ cat .gitattributes 
10mb.psd filter=lfs diff=lfs merge=lfs -text

這行 “10mb.psd filter=lfs diff=lfs merge=lfs -text” 就是告訴 Git 在處理 filter、diff、merge 時將 10mb.psd 透過 lfs 的方式處理。而 -text 就是告訴 Git 這不是文字檔 (text 表示文字檔)。

用 git lfs track 追蹤檔案之後,就可以推送到遠端目錄上,你在首次推上去的時候,會要一些時間將大型檔案傳輸到遠端。以 GitLab 為例,推送上去之後,檔案會被標記為 LFS

GitLab 介面

接者,在別的地方 (換一個資料夾就可以),把該專案 clone 下來,你會看到 LFS 檔案變成了一個 130 bytes 的文字檔,只有紀錄一些基本資訊:

$ ls -lha
總計 40K
-rw-rw-r--. 1 haway haway    3  1月 10 21:11 A1
-rw-rw-r--. 1 haway haway   41  1月 10 21:11 .gitattributes
-rw-rw-r--. 1 haway haway  101  1月 10 21:11 index.html
-rw-rw-r--. 1 haway haway  130  1月 10 21:11 Me640x640.jpg
-rw-rw-r--. 1 haway haway 2.7K  1月 10 21:11 README.md
$ cat Me640x640.jpg 
version https://git-lfs.github.com/spec/v1
oid sha256:83557700f78226f0b3b3422f161a0663f55df242152a2a65eaef2c3af052f246
size 28433

然後你需要這個檔案的時候再用 git lfs pull 的方式把大型檔案抓下來。

$ git lfs pull
$ 1/1), 28 KB | 0 B/s                              
$ ls -lh
總計 44K
-rw-rw-r--. 1 haway haway    3  1月 10 21:11 A1
-rw-rw-r--. 1 haway haway  101  1月 10 21:11 index.html
-rw-rw-r--. 1 haway haway  28K  1月 10 21:14 Me640x640.jpg
-rw-rw-r--. 1 haway haway 2.7K  1月 10 21:11 README.md
-rw-rw-r--. 1 haway haway   26  1月 10 21:11 slove-issue-7

所以對於其他 clone 使用者來說,他們若不需要異動大型檔案,就不需要進行 git lfs pull 的動作,於是那個原本的大型檔案會變成一個 130 bytes 的文字檔。即使他 clone 整個 master,也是很小的儲存庫。

Git LFS 的使用無關檔案大小,唯一的重點在於某些檔案你想放在 master 內,或是說必須放在 master 內,而其他人又不需要同步這個檔案的話,就可以使用 LFS 的方式來管理此檔案。


分類
Docker

變更 Doceker image 儲存庫位置

因為當初 / (root) 硬碟空間切太小, 只留了 70G。後來在安裝 K8S 的時候,差一點不夠,後來發現 /home 目錄有 1xxG 就把 docker images 的位置從 /var/lib/docker 移到 /home/docker 內。

分類
技術文章 最新文章

DNSSEC 壞掉會發生什麼情況?該怎麼修復?

客戶發生實際案例。他在安裝 SiteGround 的 SSL 憑證的時候,裝不進去,SiteGround 的客服回應說域名解析有問題,所以自動安裝的程式無法正常運作。

分類
SSL 教學 最新文章

[SSL 基礎]私有金鑰、CSR 、CRT 與 中繼憑證

最近越來越多的瀏覽器開始在使用者瀏覽網站時,幫助使用者檢查網站的安全性,其中一個檢查是,若是使用者要在網站中輸入資料,如果這個網站沒有加密(https)的話,就會被瀏覽器標示不安全的網站,提示使用者正在輸入的資料在傳輸時,很有可能會被竊取。

所以很多人都會嘗試申請憑證,但很多人在申請的時候因為檔案很多,有時候會搞不懂到底什麼是金鑰,什麼是憑證與 CSR ,搞的最後又必須重新申請,浪費時間。

分類
SSL 技術文章 教學 最新文章

在 Google Cloud Platform(GCP) 上使用 Bitnami 版的 WordPress 如何安裝憑證

如果你是用 Bitnami 版的 WordPress,然後是使用 Google Cloud Platform(GCP) 的平台,可以參考本篇的作法把你的憑證裝起來。

你需準備幾個檔案:

  • 私有金鑰(Private Key)
  • 憑證(Certificate)
  • 中繼憑證(Imtermediate Certificate)

如果你不知道上面這些是什麼東西,請先詳細閱讀 SSL 基礎 來講整個步驟與原理搞懂。

先切換程 root 身份

$ sudo su -

在 /opt/bitnami/apache2/ 建立一個 myssl 資料夾來存放相關檔案。上傳(使用 sftp 或是相關 FTP 軟體)憑證(.crt), Private key(.key) 與中繼憑證(ca-bundle.crt) 到 myssl 資料夾,名稱自訂,但不要搞混。

# mkdir /opt/bitnami/apache2/myssl

修改 Apache 設定檔,改過之後 Apache 就會從主設定中去載入 httpd-ssl.conf 這個檔,這樣做的好處是主設定都在 httpd.conf 中,而利用載入的方式去讀取 SSL 的相關設定,這樣把所有 SSL 的設定檔都放在一個地方,如果你突然要關閉 SSL,就只要把這一行載入的再重新註解就好了。

# vi /opt/bitnami/apache2/conf/httpd.conf

把註解(#) 拿掉
Include conf/extra/httpd-ssl.conf

修改 httpd-ssl.conf :

# vi /opt/bitnami/apache2/conf/extra/httpd-ssl.conf

<VirtualHost _default_:443>

路徑改成你上傳的憑證
 SSLCertificateFile "/opt/bitnami/apache2/conf/server.crt"

路徑改成你上傳的 Private key
 SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key"

路徑改成你上傳的 中繼憑證
 SSLCACertificateFile "/opt/bitnami/apache2/conf/ssl.crt/ca-bundle.crt"

請注意看 SSLCertificateFile、SSLCertificateKeyFile 與 SSLCACertificateFile 這三個是不一樣的名稱,並且指向不同的檔案,請不要搞混了。

重新啟動 apache 伺服器,不會的話就整台伺服器重開。搞定!

分類
Gandi.net SSL 教學

2017 年了,你的網站還沒有 SSL ?Gandi Simple Hosting S+ (免費標準憑證方案)

Gandi 的 Simple Hosting(PaaS) 主機最近推出了 S+ 的方案,能夠支援 SSL 憑證,並且只要域名在 Gandi 而且又是使用 Gandi 的 Simple Hosting 的話,就可以免費擁有憑證,你有幾個網站,就可以裝幾個憑證,憑證(標準單一位址版)通通不用錢。

分類
SSL 教學

SSL 問答集|FAQ

[ultimate-faqs include_category=’ssl’]

分類
Docker Gandi.net

如何使用 Gandi CLI 控制所有伺服器的 Docker

Docker 正夯!利用輕量級虛擬化技術,將應用程式打包,讓他與系統脫離黏著性,就像用一個盒子把程式裝起來,你隨時可以替換掉盒子,這就是 Docker 的魅力。如果你用 Docker 的方式安裝 MySQL 5.5,當你想要升級 5.6 的時候,就只要把舊的 Docker 停止,然後啟動新的 MySQL 5.6 Docker,並且 Migrate 資料,就是這麼簡單。

不過這個雲端時代,效能常常是一個關鍵,尤其在網路、行動應用軟體上,大家都習慣快快快!身為伺服器管理者,除了平常的系統效能調校,當面突然大量的使用者連線時,快速增加伺服器來處理需求是一個最簡單的方法之一。