程式設計週記[2016/09/23]: GTG16忙完,大家也要保重身體

GTG 16 聚會的照片

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

本週的幾件事情就是總算重新啟動了 Golang Taiwan 社群.結果忙完之後,我女兒就不斷地生病並且在醫院住了三天. 大家也要好好注意自己的健康.

最近工作上會使用到許多 Machine Learning 的技巧,現在每天都在 K 相關書籍希望能夠在短時間把所有的演算法與應用場景都搞熟.



Go

Take a REST with HTTP/2, Protobufs, and Swagger

GRPC 大家用了沒? 是不是因為還不想把手邊的 RESTful API 換掉而沒有改到 GRPC ?

CoreOS 展示如何透導入 GRPC 後,依舊有 RESTful API 並且有 Swagger 的服務。

相關議題,其實有上 Google Cloud Platform Podcast,想聽聽訪問的可以聽聽看 CoreOS CTO 如何解釋:

[gRPC at CoreOS with Brandon Philips Google Cloud Platform Podcast](https://www.gcppodcast.com/post/episode-43-grpc-with-brandon-philips/)

Go Development with Vim-go

Vim-Go 的作者在 Digital Ocean 工作的 Fatih Arslan 來分享如何使用 vim-go .跟我一樣主要是在 Vim 上面開發 Go 的人不可以錯過,順便可以看看新版的 vim-go 又多了什麼功能.

NEUGO: Neural Networks in Go

使用 Golang 的類神經網路計算工具.

Google I/O talk: Building Sourcegraph, a large-scale code search & cross-reference engine in Go

Google I/O 今年的 Talk 講解 Sourcegraph 如何透過 Golang 來製造他們 Code Search Chrome Plugin .

Sourcegraph 是一個 Chrome Plugin 可以讓你直接去 parse github 上面得程式碼,直接尋找相關的宣告與函數的實體.

而他們如何透過 Golang 來建置相關的設施如下,以下摘錄幾個標題:

  • No web framework
    • 不使用任何 Golang Web Framework 而使用 net/http (個人後來也偏好這個)
  • Unified API client and data store interfaces
    • 使用統一的 API 來處理 repositories, users, code definitions .
  • Unifying URL routing and generation
    • 這邊是使用 gorilla/mux 來處理 URL route 與 mout handler 的功能.
  • Sharing parameter structs
    • 這邊敘述,不論是 API 與 Data Store 或是前端的 Web Frontend 都是使用相同的資料架構.讓處理上更具有一致性.
  • 還有不少細節與小工具:
    • 使用自建的 Appdash 來追蹤 http.Handlershttp.Transport
    • 將 typed error value 從 data store 傳遞到 frontend .
    • 將結果的分頁使用共用的介面.

Looking at your program’s structure in Go 1.7

中文翻譯: Go1.7中程序结构的解析

Go 1.7 最大的變革(可能是最不容易被察覺的)就是基於 SSA (“single static assignment”) 設計的 Compiler (淺顯易懂的好處就是多了許多 SSA 編譯器的優化選項可以使用

這篇文章簡單的介紹了 SSA 是什麼,並且也講解了 SSA Compiler 在 Golang 裡面會如何的應用.

衍伸閱讀: Golang 在 1.8 會變成是完全符合SSA 的 Compiler: final architecture went SSA

悟空: 高度可定制的全文搜索引擎

支援簡體斷詞,變且可以客製化的全文搜尋引擎.

至於全文搜尋引擎那麼多,為何還要做一個? 以下來自官方的解釋:

  • 需要有客製化的全文搜尋功能
  • 要能夠垂直整合
  • 即時反應
  • 結果排序法則需要訂製

spf13 join: Google Go Team

spf13 也就是 viper , cobra 與 Hugo 的作者,寫文章宣布他加入了 Google Golang Team .

proposal: add ACME (LetsEncrypt, etc) support to the standard library

bradfitz 提議讓 net/http 能夠支援 ACME (Automatic Certificate Management Environment) 的簽章(也就是目前 Let’s Encrypt在使用的)

簡單的來說,也就是之後要建立 HTTPS 的伺服器的時候.不用在使用包好的 CA key 而可以透過連線 ACME Server 的方式來達成.

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", websiteHandler)
    srv := &http.Server{
        Addr:         "example.com:443",
        ACMEServer:   http.LetsEncrypt, // non-empty enables autocert support
        ACMEAgreeTOS: func(tosURL string) bool { return true },
        ACMEEmail:    "[email protected]", // (but optional)
    }
    log.Fatal(srv.ListenAndServeTLS("", ""))
}

個人相當期待,可以讓之後 HTTPS 的部分變得更加的簡單.

P.S. 目前要使用 Let’s Encrypt 只能透過 ericchiang/letsencrypt 套件



Python



Android/JAVA/NODE.JS/Scala

Android平台渗透测试套件zANTI v2.5发布(含详细说明)

整個系列相當好用的滲透套件,從掃描網路,修改 MAC ,到監視 WIFI 都有.



Docker



Kubernetes

Kubernetes Cluster demo with Go container as example.

PDF 放在 github 上面,如何在 Kubernetes 上面來使用 Go container 的範例. Go container 使用最小的 alpine 建置而成的 image .



iOS/Swift



其他程式語言

building hacker news with angular 2 cli, rxjs and webpack

透過 Angular2 來從頭開始建置一個 Hacker News.

Functional Programming: Which of Haskell and OCaml is more practical?

有人在 quora 上面詢問,對於 Functional Programming 的語言而言, Haskell 跟 OCaml 哪個比較實用?

就有人回答是 Haskell ,基於以下的原因:

  • Parallelism and Concurrency
  • Libraries
  • Typeclasses vs Modules
  • Software Engineering

當然他也有提出了相較於 OCaml 來說 Haskell 的缺點如下:

  • Module System 經常缺少
  • 比較複雜的 C FFI (foreign function interface)

不過整體而言,這篇問答中最受歡迎的答案還是傾向 Haskell .

王垠: 对 Rust 语言的分析

每當有一個新的語言,大家都會期待王垠的評論.來看看最近到了微軟的王垠,來看看他對於 Rust 的評論.

Chrome Plugin: 工程師求職健檢小幫手

可快速過濾出人力銀行上已存在30天以上的無用職缺 (目前僅適用於台北,新北資訊產業類職缺)



Machine Learning

谷歌开源深度学习系统 TensorFlow 的图片文字说明模型,可深层次理解图片

講解 TensorFlow 如何透過文字說明模型(也就是類似 imageNet 是識別大賽中的) 給予你一張圖型,透過機器來判讀這張圖片並且給予一段文字. 透過類神經網路判別方式來達到圖片產生敘述.

Youtube: Prof. Yann LeCun - Deep Learning and the Future of AI

知乎: 每周会分享N篇nlp领域好玩的paper

這個知乎挺不賴的,可惜不能透過 Feedly 來訂閱.

大数据导航-大数据工具导航

許多中國的大數據工具檢索清單,要什麼就來這裡找.

Youtube: Bay Area Deep Learning School Day 1 at CEMEX auditorium, Stanford

十個小時的 Deep Learning 課程直播.



論文收集



網站文章

So You Want to be a Functional Programmer (Part 1)

一系列還有: part2 , part3

相當淺顯易懂的 Functional Programming (FP) 的教學,應該來說是 Mindset . 可以讓完全不知道如何開始 FP 的人開始慢慢有感覺.



網站收集



有聲書/影片心得

Youtube: 你所不知道的 C 語言:指標篇 復刻!

Jserv 大大的 C語言基礎指標教學,很基礎但是很重要.由其實對於字串的指標處理,都是一開始 C語言的初學者相當容易搞混的.

Talk in which Patrick Hamann gives a great introduction to HTTP2

HTTP2 的介紹,從網站方面開始簡介.



[Coursera] Illinois: Cloud Computing Concept Part 1 : Week 1-2

課程鏈結: 這裡

前提:

到了新公司,其實也是躲不開繼續學習的宿命.不過可能是因為圍繞的人還是一樣 XD 這個課程是同事推薦,當然要來好好看看.

目前已經到了 Week1 與 Week2. 也順便大概跟大家介紹一下整個課程與內容,希望能讓更多人喜歡這堂課.

課程內容:

這裡先簡單的介紹整系列的課程內容,希望能讓大家了解這個課程想做什麼.

這整堂課主要是圍繞著 Cloud Computing 經常會使用到的技術與相關的概念. 整堂課其實只有一個程式語言作業:

	使用 C++ 寫 Gossip Protocol

雖然課程裡面程式語言的作業不多,但是整體上的內容還算不少. 除了有談到一些雲端技術的基本概念:

  • Map Reduce
  • Multicasting and Gossip Protocol
  • P2P Protocol and System
  • K/V DB, NOSQL, and Cassandra (畢竟都談了 Gossip)
  • Consensus Algorithm - Paxos, FLP Proof

其實課程內容很有料,也可以學到很多的東西.

Week1 Orientation, Introduction to Clouds, MapReduce

講解不少的 Data Center 與分散式系統的基本概念,簡單地列一下幾個重點:

  • 分散系統中有談到 Map Reduce 要如何運作:
    • YARN 是透過 RM (Resource Manager ) 來控制全部的系統工作分配.
    • MapReduce
      • Map 分配工作
      • Reduce 根據 key 將重複的結果合併起來.

Week2: Gossip, Membership, and Grids

這一個章節主要開始介紹 Gossip 的一些原理,稍微節錄如下:

Multiple-Cast:

  • 單節點向所有節點廣播
  • 透過 ACK (Acknowlegement) 與 NACK (negative acknowledgements) 來表示有收到或是沒有收到.
  • 時間複雜度:

Gossip

  • Gossip broacast (UDP)
  • There are two mode about broadcast:
    • Push
      • 時間複雜度
    • Pull
      • 時間複雜度
  • Fault Torrent:
    • Packet Lost: 50% 封包遺失,依舊可以正常運作.
    • Node Failure: 可以有一半左右的節點失效,還是可以正常運作.
  • Gossip-Style Failure Detection (Heartbit)
    • 每個節點會針對 member list (各自維護一份) 來做定期的 heartbit. (該時間為 )
    • 每次收到之後,local member list 會更新並且把最新收到的時間更新進去.
    • 只要時間超過了 之後,就會被當成是無效節點.並且在 之後來清理掉.
      • 為何需要兩個時間? 有一種可能是,節點被認為失效了.但是過了 忽然又活起來的話,就可以被加入回去.
    • 結論: 如果 越大,越容易 false positive .但是可以節省流量.

Probabilistic Faulure Detection (SWIM Gossip)

無法直接連接的時候,節點 會隨機發送到第 k 個節點 ( ) 來做另一個方面的確認.

如此一來,如果 會嘗試去 ping ,如果取得正常的反應.就代表節點 依舊是活著,可能只是 toponology 有問題發生.

當有 n 個節點,要能夠透過傳遞來知道一個節點壞掉需要透過 的時間.

Dissemination and suspicion

  • 傳播(Dissemination) Member List 的途徑:
    • Multicast (Machine-IP) 比較不可靠
    • TCP/UDP 比較可靠 (不過 UDP 也沒有 handshake)
    • 也可以透過 Piggybacked 就是 ping 夾帶 member list 方式來傳遞 member list

作業相關學習

TBC

我的社群之路: 參加,參與,受到啟發與啟發別人的道路

(照片拍得真好,感謝專業大師 gtg16

終於順利把 Golang 社群活動成功地重新啟動,也順利完成主辦了 GTG#16 的聚會 .心裡其實有不少感受想分享給大家.

起源

你啟發的人會有幾個,是一個兩個? 還是很多很多?

離開 Corel 後的兩年間,其實參加過不少的研討會,當然也有參加不少的社群聚會. 舉凡: Docker Taipei, Python Tapei, Golang TW 等等.

但是,其實讓我印象很深刻的就是第一次在 Golang 社群 發表的 Lightning Talk. 也就是剛開始準備 Project 52 (當時寫到 Week 13 ) 的一個 Lightning Talk.

還記得那一次的報名,只是想要試試看分享自己 Project 52 的決心. (當然絕大部分的原因是因為沒有搶到票)

膽戰心驚的花了十分鐘講完了(那霎那… )馬上忘記整個十分鐘講了什麼 XDDD . 於是要準備收包包回家得時候,就有個人跑來跟我用英文交談.

(太神奇了,原來 Golang 可以將中文投影片轉譯成英文 XD )

反正我們交談的內容大約是: 他剛從香港來台灣找前端的工作.結果看到我在 Golang 分享 Project 52 的想法大受啟發,他說他希望也能夠感染我的熱情好好的來學習一下 Golang (雖然他是前端工程師) .並且也好奇的詢問我,到底需要多久的時間才能熟悉 Golang .

	很多時候,當你啟發別人的時候.其實,最受到啟發的將會是你自己.

原來,開源的專案不僅僅開啟了我自己的眼界與心態.由於我的分享,更有可能啟發別人進而讓別人也能有相同的感受.

大研討會時代

就是上個月,我不小心一次報名同一個禮拜的兩個研討會. 分別是 COSCUP 跟 Modern Web 2016  , 雖然要準備兩份投影片讓我七月底到八月每天半夜都熬夜趕投影片.但是想到如果有機會能夠讓其他人感受到我自己心中的熱情,進而改變他們的想法或是面對事情的態度,我就又打起精神來努力做投影片.

第一次大型研討會: COSCUP 2016 H0 會議室

還好,一切都還算順利. 雖然 COSCUP 講得太快而 Modern Web 卻又講得太慢. (是哪招?) 但是在 COSCUP 發生了印象很深刻的一些小事如下:

  • 認識了不少原來在臉書上面看到的人
  • 有個部落格讀者在我前往廁所的路上堵到我,然後跟我說有長期訂閱我部落格. 也有鼓勵我說,希望我繼續寫下去.(還好,我尿急應該沒有顯現出來 XD )
  • 不少攤位的人,看到我的臉就問我說.你是不是那個要講 Golang ( 原來我長得像 Gopher (驚!) )

      有人問我 COSCUP 上台到底會不會緊張? 如果你是來分享你喜歡的事物.你會緊張嗎?
    

第二次研討會: 認識人跟聊天比聽講多的 Modern Web

身為講者最大的好處,大概就是不斷地認識其他的講者. 可能也由於講者們本身的個性就是屬於樂於分享的人.(不然也不會來研討會講) 於是乎,大家很容易就能夠打成一片. 整個研討會也變成很像是來認識人一樣.

Golang 社群重裝上陣

開完了幾個研討會,也想把 Golang 社群好好的經營起來.希望能讓更多人使用這個語言. 當然也不希望我講完 Lightning Talk 之後的 GTG#15 就讓社群倒了.

於是乎,我花了很多時間開始找講者.希望能有一些講者一起來籌辦第十六次的聚會.不過事與願違,實在找不到兩個講者. 這時候公司同事的社群經營王 - Simon 就講了一句話:

	找不到講者,一開始都是自己來講的!!

就在轉眼一年前夕,我自己決定來籌辦第十六次的 Golang 聚會. 就先把之前在 Modern Web 沒有講很清楚的部分來一次講個清楚.(給自己一個交代) 另外一方面也來開始找講者. 還好,高雄有講者很彭場得願意講,只要有辦法連線.

	講者就像是專案進度一樣是靠問出來的!!

有了兩個講者後,我就印了貼紙.趕快來開售票亭開始訂票(騙人進來).一如往常, Golang 社群只要限定在 20 人左右就能夠秒殺.然後就可以來找閃電秀跟下一個講者. 最後,好不容易湊齊了差不多的閃電秀講者.

	Here comes the new inspiration!!!

記得在研討會開始的前一個禮拜,收到一封很有趣的信件.大綱是說,一個學生他並沒有搶到票.他願意捐錢給開源軟體協會來換取一張票. 這個人讓我想到在學生時代很熱血的我,於是我給他了一張閃電秀的票,並且期待他以後來分享.

當天研討會,這位學生跑過來找我,很感謝我讓他能夠參加這次的聚會. (其實我比較感謝大家願意來參加!!) 一問之下,才知道原來還是個成大的碩士生. 什麼? 成大碩士生跑來參加台北週二的研討會?

”對啊,這裡是高鐵票.我還特地翹下午在成大的課才能北上台北來聽研討會.“ 在這個學生的眼裡,我看到滿滿的熱情.

	是洋蔥!! 聚會的場地上有人叫了麥當勞洋蔥圈!

原來,受到社群啟發的熱情之火會不斷的延續下去的.希望我們經營社群得夥伴們一起努力吧!!!

[研討會心得] Golang Taiwan Gathering #16 順利結束,相關資訊.

活動網址:

這裡

GTG16 - Slides:

可以 follow 這個 Repo

Talks - Slides

Lightning Talk - Slides

GTG16 - 影片:

Golang Taiwan Gathering 16 影片出爐:

  1. Part 1 主要是我講建置 IM Bot 與 luis.ai demo
  2. Part 2 hawk 講解 Telegram Bot 與 lightning Talk
  3. Lightning Talks
    • Umbo CV: Kakashi - Golang X CI X CD
    • duolC: Cyril - 使用Go實作跨平台匿名配對聊天app的後台機制
    • iotwav: Bean - Recruit for DevOps
    • Evan: Use go channel to write a disk queue

程式設計週記[2016/09/16]: 下週要舉辦 Golang Gopher 台灣聚會,記得參加

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

公司的公事開始要忙碌了,不過還是要開始把一些記錄一下.此外, Coursera 的 Cloud Computing 第二輪希望能夠修完.筆記有點多都還沒寫完.

最重要的是下週有 Gopher Taiwan 聚會在 09/20 ,大家記得要參加.



Go

初試 Go lang 經驗

同事透過 Pokemon naming package 來學習如何透過 VSCode 來寫 Golang.

SOLID Go Design

dfc (Dave Cheaney) 在 GopherCon 2016 上面的 Talk

如果想看中文版本,可以看這個

Creating a Bot using the Telegram Bot API

使用 Golag 的 Telegram Bot API 來建立一個聊天機器人

jpetazzo/Go + Docker = ♥

Docker 界的大大 jpetazzo 寫了篇講解如何透過 Docker 而不安裝 Golang 的方式來編譯,執行甚至是跨平台編譯的相關指令. 但是有些地方需要注意:

  1. cgo 與 net : 使用 Docker-Golang 來編譯與執行 Golang 程式碼,需要注意到是否有使用到 netcgo 的部分,如果有你的 base image 可能要換成 from debian 雖然會比較大,但是就比較不會有平台上的問題.
  2. 關於使用 ssl : 處理 SSL certificate 一直都是很麻煩的事情,這裡建議透過 alpine 來安裝 root certificate
FROM alpine:3.4
RUN apk add --no-cache ca-certificates apache2-utils

rpcx is a distributed RPC service framework based on net/rpc like alibaba Dubbo and weibo Motan. One of best performance RPC frameworks.

這個 RPC Service 透過分散式的方式來提供更好的 RPC 效能,甚至遠遠超過 GRPCAlibaba DubboWeibe Motan

除了速度快,更有以下的特點:

  • 支援多種資料格式 json, protobuf, gob
  • 支援多種 discovery service: zookeeper, etcd
  • 由於根據 net/rpc 寫成,使用原生套件的人可以很快速的轉換過來.
  • 支援 Load Balancer



Python

教你阅读Python开源项目代码

這幾個推薦的 Repo 跟作者都挺有名的.



Android/JAVA/NODE.JS/Scala

Use RecastAI to build A NodeJS chatbot tutorial

這篇文章教導了如何透過 RecastAI 一樣是做自然語言的公司.(使用 node.js)

yhsiang/pokemon-go-query: Pokemon Go Query, help to find the nearest pokemon (Use Go Radar)

G0V 的 LY 開源他的 Pokemon IM 機器人,透過 Go Radar 可以了解發文者周圍有沒有 Pokemon .



Docker

Cgroups, namespaces, and beyond: what are containers made from? (DockerCon Europe 2015)

舊文章,不過仔細地講解 cgroup, namespace 也就是 container 的底層教學.

Docker 1.13 : Checkpoint & Restore preview

主要講解 Docker 1.13 的新功能,可以將你的 container 狀態像是 snapshot 一樣做 checkpoint 與 restore 的功能.看起來很有趣.

Docker 線上讀書會: Willy - Docker Netowork

強者我同事 Willy 講 Docker Network 不得不學的好東西啊



Kubernetes



iOS/Swift



其他程式語言

PhxSQL: high availability MySQL cluster that guarantees data consistency between a master and slaves.

WeChat 出的具有 HA 的 MySQL Cluster 稱為 PhxSQL , 細節可以看 MySQL的一致性世界

裡面有提到 MySQL 5.7 本身其實已經支援 Group Replica ,除了 HA 之外已經支援多結點寫入的功能.



論文收集



網站文章

DevOps Taiwan wiki

整理許多好文的列表,並且歡迎大家的 PR .

DevOps Summit 2016 全部影片

Y2016W36| Just for noting by m157q

這個禮拜整理的鏈結都還不錯,可以建議長期訂閱相關文章.

[成功大學: 進階電腦系統理論與實作

THE PERSPECTIVE AND APPLICATIONS OF COMPUTER SYSTEMS 授課大綱](http://class-qry.acad.ncku.edu.tw/syllabus/online_display.php?syear=0105&sem=1&co_no=P75I100&class_code)

學生必須要先具備 Guts .可惡,已經就業的人可以修嗎?

Evan Klitzke 受訪談論為什麼 Uber 要從 PostgreSQL 轉到 MySQL

以下文字截自 Ant 臉書

主持人問 3 年前 #Uber 從 #MySQL 轉用 PostgreSQL 的原因。Evan 指出最重要的原因之一,就是 MySQL 的 Schema change 功能不如 PostgreSQL 好,例如需要新增欄位或索引。

Uber 的簡報分享於 2013-03-13,而 MySQL 5.6 同年 2 月才剛 GA ,所以估計 Uber 當初使用的還是 MySQL 5.5,而 MySQL 5.6 對於 Online DDL (Online Schema change) 才開始廣泛支援。

主持人問轉到 PostgreSQL 後遇到什麼問題。Evan 指出效能問題,在轉用 PostgreSQL 後,Uber 需要新增更多的機器來撐起效能需求,例如 PostgreSQL Connection ability 不如 MySQL。

其他內容官方網站上都有,就不引述了

逆向工厂(一):从hello world开始

從基本的程式概念解釋,一直到如何開始你的第一個逆向工程.這篇算是科普文章,不過相當實用.

丁香园现任CTO:我二次创业遭遇的3个失败

幾次的創業經驗分享,蠻值得好好閱讀的.主要就是專注在創業方向與好的創業團隊.

如何透過聊天機器人(Chatbot) 翻轉企業與客戶的溝通方式

台灣新創的自然語言系統,至於有多麼強大可已慢慢期待.

O’REILLY最新报告:人工智能将在这5个方向触发医疗变革

根據這份報告, AI 將在以下幾個方面對於醫療有著重大改革:

  1. 人口管理: 透過學習來識別是否有重大危險.
  2. 護理管理: 個性化護理管理.
  3. 患者自我管理:透過學習來管理患者服藥以及其他的自我管理.
  4. 系統設計: 透過設計讓每一份支出可以獲得最大效益,或是病人獲得最好的照顧.
  5. 決策支援: 讓醫生可以有更快速與更精準的決策輔助.

深度解读:阿里离亚马逊还有多远?

很有趣的文章,主要講到 Alibaba 跟 Amazon 一樣都是注重長遠發展(超過七年的計畫).並且在 Cloud Service 上 AWS 雖然居於領先的地位,但是阿里雲也是緊追在後.



網站收集



有聲書/影片心得

Paxos lecture (Raft user study)

講解 Paxos ,不光是有 Basic-Paxos 也有 Multiple-Paxos .還有 Raft Case Study .



[Golang] 安裝流程 CoreOS/DEX : OAuth Server

挑選 DEX

挑選 CoreOS 的 Dex ,因為它具有以下特點:

  • 支援 OpenID
  • 支援 Kubernetes Authenication (via OpenID)
  • 支援 OAuth
  • CoreOS 開發 (XD)

以下就是基本建置方式

建立 Google API Console 憑證

  • 進入 Google API Console 選擇已經有的專案(或是建立一個新的)
  • 進入”憑證中心“,建立一個新的憑證.
    • 選取 “OAuth 用戶端 ID “
    • 選取 “網路應用程式”
    • 在 “已授權的重新導向 URI” 輸入 “http://127.0.0.1:5556/dex/auth/google/callback”
  • 這邊會取得 “ID” 跟 “Secret” 記得存下來.

建立資料庫 (PostgresQL)

1. 設定 postgres docker

docker run --name postgres -e POSTGRES_PASSWORD=YOURPASSWORD -d postgres

2. 登入建立相關 schema

docker run -it --rm --link postgres:postgres postgres psql -h postgres -U postgres

>Password for user postgres: 
>psql (9.5.4)
>Type "help" for help.


postgres=# CREATE DATABASE dex_db;
> CREATE DATABASE

postgres=# CREATE USER dex WITH PASSWORD 'dex_pass';
> CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE dex_db TO dex;
> GRANT

postgres=# \q //離開 postgre console

3. 編譯 DEX

先設定 postgres 環境變數,將剛剛資料庫密碼帶入

export DEX_DB_URL=postgres://dex: [email protected]/dex_db?sslmode=disable

P.S.: 如果你跟我一樣 postgres 使用 docker ,記得將 localhost 改成該 container 的 IP.

下載並且編譯 DEX

git clone https://github.com/coreos/dex.git
cd dex
./build

4. 設定環境變數與啟動 DEX 服務

準備一段密碼(可能需要在其他電腦,如果你機器是乾淨的): (我是在 Mac 下跑這段:)

  • 產生 Secret Symmetric Key
export DEX_KEY_SECRET=$(dd if=/dev/random bs=1 count=32 2>/dev/null | base64 | tr -d '\n')

//這是 Mac 產生的
> dd if=/dev/random bs=1 count=32 2>/dev/null | base64 | tr -d '\n'
hwMSvt8Fr39WN2tN1ydyPlD02szBhhL6REjGgCIhn3o=

  • 產生 Admin API Secret
DEX_OVERLORD_ADMIN_API_SECRET=$(dd if=/dev/random bs=1 count=128 2>/dev/null | base64 | tr -d '\n')

//這是 Mac 產生的
> dd if=/dev/random bs=1 count=128 2>/dev/null | base64 | tr -d '\n'

B02cILOvy6o7DNU/zH7umCNkWr+E2MSkFsV3+nj5uKNaqVK7T33OLdN1ou38Rid6Swy/ZL4GljqeGOFhDgHJTkjA1so2HYr8Uda2FYHRuz2/AMSamwjLCOANl+3i9WOGduTDc8BtksN+fXB5xaJYpKDxWbcZoAaC1rU3VZyajDM=

設定環境變數,啟動伺服器.

export DEX_OVERLORD_ADMIN_API_SECRET=$DEX_OVERLORD_ADMIN_API_SECRET
export DEX_OVERLORD_DB_URL=$DEX_DB_URL
export DEX_OVERLORD_KEY_SECRETS=$DEX_KEY_SECRET
export DEX_OVERLORD_LOG_DEBUG=true
./bin/dex-overlord &

5. 執行 worker

這裡要修改 static/fixtures/emailer.json 不過可以先依照原本範例使用 fake email

./bin/dex-worker --db-url=$DEX_DB_URL --key-secrets=$DEX_KEY_SECRET --email-cfg=static/fixtures/emailer.json --enable-registration=true --log-debug=true &

6. 執行 Connector

記得要先將 $DEX_GOOGLE_CLIENT_ID$DEX_GOOGLE_CLIENT_SECRET 換成你在 Google API Console 拿來的資料.

cat << EOF > /tmp/dex_connectors.json
[
    {
        "type": "local",
        "id": "local"
    },
    {
        "type": "oidc",
        "id": "google",
        "issuerURL": "https://accounts.google.com",
        "clientID": "$DEX_GOOGLE_CLIENT_ID",
        "clientSecret": "$DEX_GOOGLE_CLIENT_SECRET",
        "trustedEmailProvider": true
    }
]
EOF
./bin/dexctl --db-url=$DEX_DB_URL set-connector-configs /tmp/dex_connectors.json

7. 啟動 Client

eval "$(./bin/dexctl --db-url=$DEX_DB_URL new-client http://127.0.0.1:5555/callback)"

記得要把 127.0.0.1 換成你的 public IP .

8. 啟動 Web Server

./bin/example-app --client-id=$DEX_APP_CLIENT_ID --client-secret=$DEX_APP_CLIENT_SECRET --discovery=http://127.0.0.1:5556/dex &

記得要把 127.0.0.1 換成你的 public IP .

Authenitication for Kubernetes

Seems no OAuth support

參考鏈結 OAuth Server

其他參考鏈結