awscwxls – 將 CloudWatch 數據匯出為 xls/xlsx

有人把程式寫好了,所以拿來用就可以:Exporting AWS CloudWatch Data | Pete Zybrick

  1. 確定有設定好 $HOME/.aws 目錄下的檔案。
  2. 從 petezybrick/awscwxls: AWS Cloudwatch to Spreadsheet 上 git clone 下來
  3. 到 run 目錄下,先複製 properties/first.properties 為一個新的檔案,例如 properties/example.properties。然後修改內容,awscwxls 會讀取這個檔案的內容當作參數,像是要拿哪些數據、取哪些 instance、起始時間、區域等等的,都是在這邊設定。時間是用當地時間,程式會自動轉換為 UTC 時間 (AWS 上的時間)。
  4. 執行 ./runcwxls (Windows 下是 runcwxls.cmd) ,runcwxls 就會把取得的數據存到 xlsx 裡去了。

terraform + digitalocean

Terraform 對 DigitalOcean provider 的說明文件:

有例子當第一個雛型來抄抄改改還是比較快,所以主要參考資料裡的 example 來改 (要先 clone 下來),下面是我邊做邊記錄下來的步驟:

  1. 產生 ssh key:ssh-keygen -f your_key_file -t rsa
  2. 進 DigitalOcean 帳號裡,新增 ssh key,把剛剛產生的 public key 填入 (就 your_key_file.pub)  ,這邊主要參考 https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets
  3. 到 DigitalOcean 帳號的 API / Tokens 下,去新增 token ,並把 token 複製起來
  4. 用 curl -X GET -H “Content-Type: application/json” -H “Authorization: Bearer <your_token>” “https://api.digitalocean.com/v2/account/keys” 取得剛剛新增的 ssh key 的 key id  ,這個步驟主要參考 https://developers.digitalocean.com/documentation/v2/#list-all-keys
  5. 編輯 main.tf ,修改上個步驟取得的 ssh key id ,並把 connection 裡的 key file 改為步驟 1 所產生的 private key file 。
  6. export DIGITALOCEAN_TOKEN=”your_token”
  7. 執行 terraform plan / apply

參考資料:

Compile your go program inside the Docker container

golang 有官方製作的 container:https://hub.docker.com/_/golang/

用 docker pull golang 拉下來以後,切換到 go 專案目錄下 (假定是 $HOME/project),執行:

docker run --rm -v "$PWD":/usr/src/myapp -e GOBIN=/usr/src/myapp -w /usr/src/myapp golang:1.6 bash -c make

就可以在專案目錄下的 bin 裡找到 binary 了。

用 docker container 來 build 的好處,除了可以指定版本之外,也可以 cross compile ,另外就是可以省下處理佈署 golang 開發環境的心思。

docker-hackmd relative url

hackmd 是一個很棒的協作平台,你可以用 markdown 來撰寫文件,graphviz/flowchart 等語法來畫圖…很厲害。

安裝上也蠻簡單的,已經有人做好 Dockerfile :hackmdio/docker-hackmd: docker hackmd image

可是這個 docker image 有個問題,就是沒辦法以 relative url 存在,他預設是在根目錄下運作,有個日本人弄出來了:HackMDをnginxで / 以外のlocationで起動する。 – Qiita ,我參考他的設定,做了調整,加入 nginx 設定與 upstart 設定,放在 elleryq/docker-hackmd: docker hackmd image

大致調整以下東西:

  1. nginx 設定:加入 rewrite,將路徑改寫為 /hackmd,這可以參考 nginx.conf.example
  2. common.js:因為 hackmd 用到 websocket ,common.js 的 urlpath 也要跟著調整,否則會無法運作,裏面的 urlpath 需要修改為 /hackmd。這部份我寫在 hackmd/Dockerfile 裡,在用 git clone 取得 hackmd 原始碼以後,用 sed 去做字串的替換。
  3. upstart:upstart.hackmd.conf 裡是用 docker-compose 啟動 hackmd image ,這邊我預期 docker-compose.yml 是放在 /srv/docker-hackmd ,如果你預期不放在這兒,那麼這邊也要跟著調整。

應該大概就這些,如果有沒提到的,就看原始碼吧~

phpvirtualbox

無意在 /etc/init.d 下看到 vboxweb-service 這個服務,好奇的把名字丟到 google 去找,才知道是 virtualbox 要提供給 phpvirtualbox 使用的服務。

安裝方法不難,不過我還是搞了好一陣子 (大約4個小時吧),以下是我所參考的文件。

我遇到的問題:

  1. nginx + php5-fpm 只為特定 location 啟用 PHP :這部份卡了我好一陣子,後來是找到這篇:php – nginx projects in subfolders,參考裏面的作法去設定。大致是這樣:
    location /wiki {
        root /var/www/wiki/public;
    }
    
    location ~ /wiki/.+\.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME /var/www/wiki/public$fastcgi_script_name;
    }
    
  2. 無法啟動 vboxweb-service,出現 “vboxwebsrv: error: failed to initialize COM”:原本以為是沒加 dialout 群組的關係,後來根據某篇討論(網址不小心被我丟了)仔細推敲以後,發現是因為 VBOXWEB_USER 所指定的使用者沒有 HOME 資料夾,幫這個使用者建立 HOME 以後,就可以順利啟動 vboxweb-service 了。
  3. 無法登入 phpvirtualbox:這是我自己搞錯了,原本以為 config.php 裡指定的 username 跟 password 就是用來登入 phpvirtualbox 的帳號跟密碼,但後來才知道這組帳密是讓 phpvirtualbox 與 vboxweb-service 溝通用的,預設的 phpvirtualbox 帳密是 admin/admin。要修改的話,登入以後再變更就可以。
  4. RDP(Remote display) 不能用:這要先查到 virtualbox 的版本號碼,然後到Virtualbox download site下載對應的 .vbox-extpack 檔案,再用 vboxmanage extpack install 安裝。安裝完成以後,要重新啟動 vboxweb-service 與 vboxdrv 這兩個服務。最後用瀏覽器開啟 phpvirtualbox 頁面,去設定指定的 VM,就可以看到 Remote display 可以設定了。啟動 VM 以後,就可以用遠端桌面連線連上並看到這台 VM。連線所指定的 IP 是 host phpvirtualbox 這台機器的 IP,port 則是 3389。

另外,啟動所需要的光碟 ISO 檔案或是已經有打包好的 disk image 無法透過 phpvirtualbox 上傳,必須要事先透過 SSH、FTP 等傳輸協定放到 host 上。

其他參考資料 (與 nginx/php5-fpm 相關的):

WordPress 的維護模式

本來以為 wp-cli 提供的 wp 指令應該可以用來指定 wordpress 進入或離開 maintenance mode 才對,結果發現沒提供這功能。原來是因為很簡單的關係:wp cli – wp-cli Enabling Maintainance Mode

只要在 wordpress 安裝目錄下增加或是移除 .maintenance 檔案就可以進入或離開 maintenance mode 了。

讓 docker-skype 顯示中文

公司的 skype 不知道因為裝了什麼爛掉了 (似乎是 cutegram 的樣子),怎麼弄都不行,用 web skype 過一段時間會斷線,收不到訊息。後來想到,不知道有沒有人包成 docker image,一找之下,果然有:docker-skype

試用之下,的確可以順利執行,但是中文字的部份都是方塊,看起來得自己重新包了。所以就 fork 了一份,修改了 Dockerfile 與 scripts/skype-wrapper 。

Dockerfile 主要是參考下面的文章,加上安裝字型、語言的套件與設定環境變數:

skype-wrapper 則是修改腳本,因為我在 build 時,是 tag 為 elleryq/skype ,所以這邊在 docker run 的時候,也要跟著調整,否則會執行到原來的 sameersbn/skype 。

這樣就可以用一份無汙染、無添加而且有中文的 skype 了,不過這一包真的還蠻大包,吃掉 4xxMB …

golang debian package

Ubuntu 14.04 預載的 golang 是 1.2.1 版,想使用最新版的 golang ,除了可以用 gvm 以外,也可以用 debian package 來安裝。這篇要介紹的工具是 godeb ,這是一個會自動幫你將最新版的 golang binary 打包為 debian package 並安裝的工具。

首先下載 64-bit 的 godeb binary 檔案並解開:wget -qO – https://godeb.s3.amazonaws.com/godeb-amd64.tar.gz | tar xvz

執行 ./godeb list 就可以列出可安裝的 golang 版本,用 ./godeb install <version> 就可以安裝了。

要注意的是,這會跟預裝的 golang 套件衝突,所以使用前必須先移除原本裝好的 golang 套件。

Vagrant VM 搬家

有同事問,印象中有,就試了一下

  1. 用 vagrant package 會得到 package.box 檔案,複製到另外一台電腦上。
  2. 到另外一台電腦上用 vagrant box add package.box –name “my_new_vm” 加進去。
  3. 建個目錄,用 vagrant init “my_new_vm” 產生 Vagrantfile ,執行 vagrant up 即可。

jenkins 的 gitlab-merge-request-builder-plugin

gitlab-merge-request-builder 是可以讓 jenkins 對 gitlab 送 merge request 的 plugin,但是這個 plugin 不在 jenkins plugins repositories,所以找不到,得自己 build。

首先要裝 maven:sudo apt-get install maven

  1. 先到 java-gitlab-api ,取得原始碼,接著用 mvn install 來安裝,maven 會把生成的 gitlab api wrapper 安裝到 $HOME/.m2 下。
  2. 到 jenkins-gitlab-merge-request-builder-plugin 取得 plugin 的原始碼,取得以後,修改 pom.xml ,把 java-gitlab-api 的版本改為 1.2.5-SNAPSHOT ,然後執行 mvn hpi:hpi 。
  3. 大功告成,建置好的 plugin 會在 target/ 下。

plugin 的說明裡提到,如果 gitlab 在 8.1.x 以下,要使用 v1.2.4 ;gitlab 在 8.1.x 以上 (含),可以直接用最新版本。關於這點,我倒是還沒去試,總之先把建置的步驟紀錄下來。

P.S. 我發現有兩個來源耶,所以?!

  1. https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin
  2. https://github.com/jenkinsci/gitlab-merge-request-builder-plugin