成為水手
2015年,當時我們嘗試自動化那些從 Freelance 接來的 Drupal 項目,從而減少部署與維護的繁瑣工作,相信很多軟件工程師也知道,要在一個只有FTP的共享主機有多痛苦。因此,我們希望可以除了編程外也一拼提供網頁應用程式的寄存服務,並創造一個對工程師友善的開發環境,當中包括以下功能:
我們的願望清單
聽起來不錯! 但是我們怎麼能做到呢?
Docker
我們厭倦了那些設置伺服器和應用程式的舊方法。我們想要一個整潔的解決方案。Docker 是第一個出現在我們腦海的工具。基礎設施即代碼(IaC)可以解決環境差異,又可以保持程式的版本控制。而且,人為錯誤和花在配置上的時間也可以大大減少。
另外,我們可以使用 Docker Hub 上任何的 Docker 映像,或者制作自定義映像來作開發和管理。例如:
創建一個 Drush 容器來清除 Drupal 緩存,導入導出數據庫甚至打包整個網站。
創建一個安裝了 Compass 的 NodeJS 容器來編譯 .sass 文件。
作為一名開發人員,我只需要的一台安裝了 Docker 的機器( 在這案例中也需要安裝 Ansible)。其他開發工具以容器形式來運行並儲存在代碼庫中。
再加上借助 Docker Compose 和 Ansible docker_container模塊 等工具,Docker 的配置和部署變得更加輕鬆。只需一個命令,帶有我們需要的所有模塊的 Drupal CMS 便可以在幾分鐘內啟動。
我們的願望清單
在這案例的其它工具
Docker 對我們來說是一個很好的起點,因為它擁有一個很大的社群,很容易便找到很多有用的開發資訊。另一方面,還有兩個值得一提的軟件。
Ansible
與 Puppet 不同的是,Ansible 不僅僅是一個配置管理工具。相反,它更像是一個帶有許多模塊的 Apache Ant 的強大版本。與 Ant 相比,Ansible Playbook 的概念有助於以有組織的方式管理配置,部署和協作,以便他們可以在開發過程中隨時 執行這些已定義的任務,包括:
- 啟動和停止應用程式
- 觀看並編譯 sass 文件
- 清除應用程式緩存
- 導出 Web 資產和數據庫
- 導入 Web 資產和數據庫
- 在虛擬伺服器服務商上建立並配置(服務開通)一台新的伺服器
- 遠程部署到上面的伺服器
- 執行備份到 Amazon S3
- 從 Amazon S3 中還原最新的備份
此外,使用 Ansible Vault 把文件加密可以讓我們放心把敏感資料如密碼放到代碼庫中。
我們的願望清單
使用 Duply 作資料備份
Duply 是管理備份的好工具,適用於 Amazon S3 和 Google Drive 等不同的雲端服務,並且支援加密備份。
我們的願望清單
剩下的挑戰…
現在我們已經完成了願望清單中的七個項目中的六個項目,它們構成了我們的項目工作流程:從 Development 到 Production。但整個工作流程在發佈後仍然需要應付更改請求、服務監控、性能調整等等,這些任務都要依靠監控和日誌管理才能有效地完成。
收集日誌
以下是從容器中讀取日誌的一些普遍方法:
- 使用 docker logs 命令
- 將容器日誌輸出到文件
- 使用 syslog
在還未有 Boatswain 概念之前我們都使用一個 syslog 容器來收集其他容器的日誌,但是這種方法對項目有一定的干擾,因為我們必須為所有的容器添加額外的配置。
我們想要一個更好的、非侵入式的解決方案。這就是為什麼我們產生了 Boatswain 的想法。
Boatswain
Boatswain 是一個為運行 Docker 的伺服器提供基本監控與日誌管理的服務,希望能夠為您提供以下功能。
- 主機和 Docker 容器監視
- 日誌管理
- 故障排除
- 實時通知
- 簡單的安裝
- 監控儀表板
目前我們仍處於內測階段,正在尋求意見和改進。如果您想註冊一個帳戶,請隨時聯絡我們。
為了能夠提供更高質素的平台,我們正在將服務遷移到 Google Cloud Platform 上的 Kubernetes,希望我們可以在遷移之後作公開的 Beta 發佈。
希望在我們的旅程中見到您 !