2016/09/26

docker nginx reload



根據[官方blog](https://blog.docker.com/2015/04/tips-for-deploying-nginx-official-image-with-docker/)

當 nginx 設定檔更動時, 你不能直接執行 nginx reload, 但幸好 nginx 支援特定 signal 去做 reload

/etc/init.d/nginx reload
```sh
sudo docker kill -s HUP
```


/etc/init.d/nginx restart
```sh
sudo docker restart
```

2016/08/22

將虛擬機器映像檔 匯入AWS EC2



由於必須必須把映像檔上傳至 S3 上才能建立 EC2 的 AMI

所以我們先在S3上建立一個 bucket

```sh
aws s3api create-bucket --bucket vm-image
```

將映像檔上傳至 S3
```sh
aws s3 cp ~/ubuntu.ova s3://vm-image/
```

建立一個名為 vmimport 的 role

```sh
aws iam create-role --role-name vmimport
```

condition 要改為

"sts:Externalid":"vmimport"


開始匯入囉
```sh
aws ec2 import-image --cli-input-json "{ \"Description\": \"Ubuntu\", \"Format\": \"ova\", \"UserBucket\": { \"S3Bucket\": \"vm-image\", \"S3Key\": \"Ubuntu.ova\" } }"
```

之後就是等等等, 當然可以查進度
```sh
aws ec2 describe-import-image-tasks --import-task-ids import-ami-xxxxxxxxxx
```

完成後就會在你的EC2的AMIs看到image囉


Reference:
* http://docs.aws.amazon.com/vm-import/latest/userguide/import-vm-image.html#import-vm
* http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html

2016/07/18

docker 解決 container mount檔案



目前在操作 docker 上會遇到一個問題:
mount 某個檔案或某的目錄到 container 上後修改 host 上的擋案後 container 對應的擋案不會跟著變動

docker container 預設加入 host 至 /etc/hosts




從 docker v1.3.1 起
docker支援了 --add-host 的參數可以再啟動時加入私有主機別名設定 (/etc/hosts)
可參考 https://docs.docker.com/v1.8/reference/run/#network-settings

我們只要再docker啟動時加入 --add-host $NAME:$IP
例如:

docker run -itd --restart=always --name lol_backend -p 80:80 -p $22:22 --add-host db:10.10.10.1 lol_backend


有多筆就加多個囉

docker run -itd --restart=always --name lol_backend -p 80:80 -p $22:22 --add-host db:10.10.10.1 --add-host db2:10.10.10.2 lol_backend

2016/06/21

vim 游標背景



老了...看東西常常看不清楚...

常常 vim 後找不到游標在哪一行

這時候就該開啟 set cursorline 的功能


你可以在命令列模式直接打上

:set cursorline


或是編輯 .vimrc 加上一行

set cursorline

2016/06/18

如何讓你 macOS 的 terminal 連 SSH 不會自動斷線



這個問題困擾我一陣子了

常常 ssh 看東西一陣子不動它後就會斷線

以前在 windows 用的軟體有內建送出防 idle 的字元出去

不過 macOS 的 terminal 似乎沒這麼聰明啊~

今天找了3個解決方法

這三個方法意思相同, 都是透過 ssh 軟體做設定, 只不過是在不同地方而已

2016/06/15

解決 macOS 的 screen 無法垂直分割問題



這個原因是因為我的 screen 版本是 4.00.04 貌似不支援 split -v


$ /usr/bin/screen -v
Screen version 4.00.03 (FAU) 23-Oct-06


在 mac 下什麼事情用 homebrew 解決就對了

安裝 screen

$ brew install homebrew/dupes/screen


如果你的 homebrew 是用非管理員權限安裝的

那麼記得把 homebrew 的 bin path 加在原本 $PATH 的前面

這樣在下 screen 的時候才不會找到系統下的喔


$ screen -v
Screen version 4.03.01 (GNU) 28-Jun-15

2016/05/05

在 macOS 中中文輸入時暫時切換英文



最近才開始使用 mac 系統,有很多地方都不熟悉

今天心血來潮查了我心中的疑問 --為什麼我輸入中文穿插英文時都會是全形字型

上網查了查 有!有方法

原來輸入中想要穿插英數字時可以按 caps lock 就可以暫時輸入半形英數字囉

再按一次 caps lock 就可以繼續輸入中文!!

2016/05/02

sublime 安裝 Package Control



其實這篇蠻廢的

不過常常換個新環境就會忘記 Sublime 的 Package Control 是要另外安裝的XD

1. 到官網依據你的 Sublime Text 選擇適合的腳本
https://packagecontrol.io/installation

2. 按下 ctrl+` 並把剛剛複製的東西貼上執行

3. 重新啟動 Sublime 後, 按下command+shift+p 就可以找到 Package Control 了

非管理員權限在 sublime text 2 安裝 ctags



首先請先參考 非管理員權限在 macOS 安裝 homebrewsublime 安裝 Package Control

將你的 homebrew 安裝起來

接下來就可以利用 brew 安裝 ctags

非管理員權限在 macOS 安裝 homebrew



因為沒有那該死的管理員密碼

所以就要想辦法把所有東西都安裝在家目錄下

1. 首先先[下載](https://gist.github.com/skyl/36563a5be809e54dc139) 別人處理好的安裝腳本存成 install.rb

2. 修改第1步驟中的 `YOUR_HOME` 變數改成你自己的家目錄

3. 預先建立目錄
```shell
mkdir -p ~/usr/local
```

4. 執行腳本
```ruby
ruby install.rb
```

5. 新增環境變數 ~/.bash_profile
```shell
export HOMEBREW_PREFIX=${HOME}/usr/local
export PATH=${PATH}:${HOMEBREW_PREFIX}/bin
```

6. source ~/.bash_profile

這樣你就可以透過 brew 安裝套件了


參考來源:http://superuser.com/questions/619498/can-i-install-homebrew-without-sudo-privileges

2016/04/29

git 如何移除本地端中 remote 已不存在的 branch



常常我們合併了一個 branch 出去之後必須把該 branch 關掉

通常 git server 都可以在網頁上操作關閉該 branch

可是你的 local 並不會自動移除該 remote branch,所以你下 git remote -a 時就會有一堆你曾經 checkout 過的 branch

可以下
```
git remote prune "你要同步的 remote"
```
他就會把 remote 上不存在的分支從你的本地端移除囉

2016/04/27

git 好用的 alias


紀錄一下 git 好用的 alias 以避免公司鎖 evernote 讓我又找不到了

```
[alias]
co = checkout
ci = commit
di = diff --ignore-space-change --ignore-space-at-eol
st = status -sb
br = branch -v
rt = reset --hard
unstage = reset HEAD
uncommit = reset --soft HEAD^
l = log --pretty=oneline --abbrev-commit --graph --decorate
lg = "log --color --graph --oneline --decorate --pretty=format:'%C(auto)%h%Creset%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
amend = commit --amend
who = shortlog -n -s --no-merges
g = grep -n --color -E
cp = cherry-pick -x
nb = checkout -b

# 'git add -u' handles deleted files, but not new files
# 'git add .' handles any current and new files, but not deleted
# 'git addall' now handles all changes
addall = !sh -c 'git add . && git add -u'

# Handy shortcuts for rebasing
rc = rebase --continue
rs = rebase --skip
ra = rebase --abort
ri = rebase --interactive

logf = log --follow
purge = clean -d -f -x
head = !sh -c 'git clean -d -f -x && git reset --hard HEAD'
```

nvm 一套 nodejs 版本管理程式


沒有管理員權限,照樣安裝nodejs

幸好有了 nvm 這玩意,可以把 nodejs 裝在自己目錄下

在安裝 global 套件時也沒問題

** ~~nvm 被系統鎖權限時好用的 nodejs 安裝程式~~ **

**nvm 一套 nodejs 版本管理程式**

非常好

首先我們只要執行 readme 提供的指令就可以了

我的 mac 沒有 wget 所以選擇 curl 安裝

```
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
```

安裝前記得先產生 ~/.bashrc 或是 ~/.bash_profile

不然你的 terminal 不會每次開啟都可以直接設定好喔

結束...

將你 mac 的 terminal 改成 monokai 配色




新工作新 mba 一切都要重新設定,在這邊紀錄一下

我所使用的配色檔是 monokai.terminal

1. 首先 git clone https://github.com/stephenway/monokai.terminal.git

2. 開啟 terminal 並且 import 該描述檔進去就可以了

這樣你的 terminal 就變成美美的

2016/04/26

將你的 vim 改成 monokai 配色




新工作新環境一切都要重新設定,在這邊紀錄一下

我所使用的配色檔是 vim-monokai

1. 首先下載 monokai.vim 並放在 ~/.vim/colors/ 底下

2. 開啟 vim 的 syntax 並設為 monokai

vim 命令模式

# :syntax on 也可以
:syntax enable
:colorscheme monokai


或是編輯 ~/.vimrc

# syntax on 也可以
syntax enable
colorscheme monokai


這樣你的 vim 就變成美美的

2016/04/25

將 canvas 轉為圖檔並下載



紀錄一下新工作第一個討論到的問題

”把手寫簽名轉存成圖檔下載“



// 在此建立一個空的 canvas 
var canvas = $('<canvas>');

// 把 canvas 轉成 base64(DataURL) 型態
var imageData = canvas[0].toDataURL("image/png");

// 建立一個 a 讓使用者可以點擊下載
var a = $('<a>').attr('href', imageData).attr('download', 'name.png');


// 把 a 放到網頁上點擊試試看,會下載一個名為 name.png 的空白檔案
$('body').append(a);


下載下來的圖檔是沒有內容的,你可以照你的方式編輯 canvas 之後在下載下來就有內容了

2016/03/15

vim 的分割視窗功能


以前在使用 vim 去比對並編輯兩個檔案的時候我都是用以下兩個笨方法

1. 不停的來回開關 vim 切換作切換
2. 開兩個 terminal 出來


今天終於心血來潮想去找找 vim 有沒有這種功能

以下

:e filename        # 編輯另一個檔案
:split filename    # 水平分割
:vsplit filename   # 垂直分割
ctrl w w           # 視窗來回切換
ctrl w 方向鍵      # 切換到該方向的視窗
ctrl w _           # 視窗最大化
ctrl w =           # 將所有視窗大小設一樣
ctrl w -           # 將視窗大小減少一行
ctrl w +           # 將視窗大小增加一行
:hide              # 隱藏現在這個視窗
:only              # 只顯示現在這個視窗



如果要分割的視窗同步捲動的話就在要同步的視窗中下(兩個分割視窗就切換各下一次)

:set scrollbind

2016/01/20

mongodb 2.6 command 小記



設定 replica set 相關

初始化 replica set

var config = { _id : "repl", members : [ {_id : 0, host : 'repl1:27017'}] };
rs.initiate(config);

修改 replica set 設定

var config = rs.conf();
config.members[1].priority = 0;
rs.reconfig(config);

加入仲裁者

rs.addArb('replarb:27017');

權限相關

新增 user

db.createUser(
  {
    user: "username",
    pwd: "password",
    roles: [
      'userAdminAnyDatabase',
      'dbAdminAnyDatabase',
      'readWriteAnyDatabase'
    ]
  }
);

移除 user

db.removeUser('username');

現有 user 加入新權限角色

db.grantRolesToUser(
  "backupuser",
  [
    { role: "backup", db: "admin" },
    { role: "restore", db: "admin" }
  ]
);

Capped Collections
建立一個有大小/筆數限制的collection
官方文件: capped-collections

// set on create
db.createCollection( "<collection name>", { capped: true, size: <size in byte>[, max : <num of max documents>] } );

// set on exists
db.runCommand({"convertToCapped": "<collection name>", size: <size in byte>[, max : <num of max documents>]});

2016/01/07

sudo: unable to resolve host




這個問題煩惱我一陣子了

除了每次出現訊息之外

在打 sudo 的時候 還會 lag 好一陣子

嘗試過在 /etc/hosts 加上一筆正解,但還是不行

在這邊提供另一種解決方法

修改 /etc/resolve.conf

加上一筆 domain 就可以了

如果你出現的訊息是


sudo: unable to resolve host moa.sw

那麼就在 /etc/resolve.conf 加上一行

domain moa.sw

我們可以繼續快樂的使用 sudo 了