使用 Docker 五分鐘安裝好 Gitea (自架 Git Hosting 最佳選擇)

Gitea

Gitea 在本週發佈了 1.11.0 版本,本篇就使用 Docker 方式來安裝 Gitea,執行時間不會超過五分鐘。Gitea 是一套開源的 Git Hosting,除了 Gitea 之外,您可以選擇 GitHub 或自行安裝 GitLab,但是我為什麼選擇 Gitea 呢?原因有底下幾點

  1. Gitea 是開源專案,全世界的開發者都可以進行貢獻
  2. Gitea 是 Go 語言所開發,啟動速度超快
  3. Gitea 開源社區非常完整,每年固定挑選三位為主要負責人
  4. Gitea 可以使用執行檔或 Docker 方式進行安裝

Gitea 目前發展方向就是自己服務自己,大家可能有發現原本在 GitHub 上面的 Repository 已經全面轉到 Gitea 自主服務了,這也代表著未來會全面轉過去,只是時間上的問題。Gitea 目前的功能其實相當完整,大家有興趣可以看這張比較表,新創團隊我都強烈建議使用 Gitea。

Continue reading “使用 Docker 五分鐘安裝好 Gitea (自架 Git Hosting 最佳選擇)”

[Go 教學] graceful shutdown 搭配 docker-compose 實現 rolling update

golang logo

上一篇作者有提到『什麼是 graceful shutdown?』,本篇透過 docker-compose 方式來驗證 Go 語言的 graceful shutdown 是否可以正常運作。除了驗證之外,單機版 Docker 本身就可以設定 scale 容器數量,那這時候又該如何搭配 graceful shutdown 來實現 rolling update 呢?相信大家對於 rolling update 並不陌生,現在的 kubernetes 已經有實現這個功能,用簡單的指令就可以達到此需求,但是對於沒有在用 k8s 架構的開發者,可能網站也不大,那該如何透過單機本的 docker 來實現呢?底下先來看看為什麼會出現這樣的需求。

Continue reading “[Go 教學] graceful shutdown 搭配 docker-compose 實現 rolling update”

[Go 教學] 什麼是 graceful shutdown?

golang logo

我們該如何升級 Web 服務,你會說很簡單啊,只要關閉服務,上程式碼,再開啟服務即可,可是很多時候開發者可能沒有想到現在服務上面是否有正在處理的資料,像是購物車交易?也或者是說背景有正在處理重要的事情,如果強制關閉服務,就會造成下次啟動時會有一些資料上的差異,那該如何優雅地關閉服務,這就是本篇的重點了。底下先透過簡單的 gin http 服務範例介紹簡單的 web 服務

Continue reading “[Go 教學] 什麼是 graceful shutdown?”

[Go 教學] graceful shutdown with multiple workers

golang logo

在閱讀本文章之前請先預習『用 Go 語言 buffered channel 實作 Job Queue』,本篇會針對投影片 p.26 到 p.56 做詳細的介紹,教大家如何從無到有寫一個簡單的 multiple worker,以及如何處理 graceful shutdown with workers,為什麼要處理 graceful shutdown? 原因是中途手動執行 ctrl + c 或者是部署新版程式都會遇到該如何確保 job 執行完成後才結束 main 函式。

Continue reading “[Go 教學] graceful shutdown with multiple workers”

[SQL] 如何從單一資料表取得每個 key 前 n 筆資料

postgres

最近專案需求需要實現單筆資料的版本控制,所以會有一張表 (foo) 專門儲存 key 資料,而有另外一張表 (bar) 專門存 Data 資料,那在 bar 這張表怎麼拿到全部 key 的最新版本資料?底下先看看 schema 範例

Continue reading “[SQL] 如何從單一資料表取得每個 key 前 n 筆資料”

使用 Go Channel 及 Goroutine 時機

golang logo

相信不少開發者肯定聽過 Go 語言之所以讓人非常喜歡,就是因為 Go concurrency,如果您對於 concurrency 不了解的朋友們,可以直接參考官網的範例開始了解,範例會帶您一步一步了解什麼是 Channel 什麼是 Go concurrency?本篇會介紹 Channel 使用時機,在大部分寫 application 時,老實說很少用到 Channel,所以很多人其實不知道該在哪種場景需要使用 Channel,底下這句名言大家肯定聽過:

Do not communicate by sharing memory; instead, share memory by communicating.

本篇會用簡單的例子來帶大家理解上述名言。

Continue reading “使用 Go Channel 及 Goroutine 時機”

用 GitHub Actions 部署 Go 語言服務

GitHub Actions 也推出一陣子了,相信有不少雷,也是有很多優勢,未來在 GitHub 上面串接任何開源專案,都可以免費使用,過幾年可以看看 GitHub Actions 對 Travis 的影響是多少?本篇要來介紹如何透過 GitHub Actions 來部署 Go 語言服務,會用一個簡單 httpd 範例教大家如何透過 Docker 方式來更新。使用 Go 語言基本服務流程大致上會是『測試 -> 編譯 -> 上傳 -> 啟動』,透過這四個步驟來學習 GitHub Actions 該如何設定。

  • 測試: Unit Testing 多一層保護
  • 編譯: 透過 go build 編譯出 Binary 檔案
  • 上傳: 寫 Dockerfile 將 Binary 包進容器內
  • 啟動: 透過 docker-compose 方式來更新服務
Continue reading “用 GitHub Actions 部署 Go 語言服務”

用 15 分鐘快速打造 Laravel 開發環境

cover page

相信大家對 Laravel 都很熟悉,但是初學者或是新進同事要快速入門 Laravel 最大的門檻就是該如何在短時間內在本機電腦快速安裝好公司專案。這時候使用 Laradock 就是一個最佳時機,透過 Docker 容器話,快速切換 PHP 版本,或者是安裝額外的服務像是 MySQL, MariaDB, phpMyAdmin 或 nginx 等服務,讓本機端不受到自訂安裝套件的困擾,用完隨時關閉,完全不會影響到電腦環境。底下我會介紹使用 Laradock 該注意的事情。完整詳細的操作步驟可以直接看 Youtube 影片。

Continue reading “用 15 分鐘快速打造 Laravel 開發環境”