What have you found for these years?

2009-10-15

roodo-rc

讓程式碼回歸程式碼,其餘的東西都從 source code repo 中抽出。
比方說 config, image, ssh key, etc.
最終目標是把圖片都抽出來,目前先只針對 config.

由於 rails initializers 裡面會放程式,
因此暫時沒辦法抽出來,取而代之的是依序使用 symbolic link
─以下簡稱 symlink─來把各個 config 定位。

這樣比起直接把 config 從外部 copy 進去,
有個好處是你不需要針對一個個 config 做 .gitignore,
因為 symlink 是可以直接放在 git repo 裡面。
把整個 roodo-rc 這個目錄 ignore 掉即可。

> ls -l config/database.yml
config/database.yml -> roodo-rc/config/photo/database.yaml

這邊用 .yaml 因為這是官方建議。
symlink 名字還是 .yml 則是怕 rails 不認得。
config/photo 還是 photo/config 這個我一直無法決定。
anyway you got the idea.

> ls -l config/memcache.yaml
config/memcache.yaml -> roodo-rc/config/memcache.yaml

這邊不需要 prefix (namespace), 因為 memcache config
可以共用。假設有需要額外的參數,自己弄 prefix 就好,例如:

hosts: [10.0.0.1, 10.0.0.2]
photo: {special: 123}

這樣統一所有 service 都共用同樣的 memcache config.
有什麼要改的時候,單改這裡面,然後再 update 回所有 node 即可。
mogilefs-client, active-mq 等等亦然。

另一個是 ssh key 的部份,由於 git 不支援 644 和 755 以外的[0]
file mode, 所以需要額外跑一個 install script 來改 mode...

> ls -l roodo-rc/install.rb

寫成 ruby 是因為實在不會用 shell script :( [1]
最大的問題是不知道怎麼抓相對路徑,簡單,且跨 shell 的方式。

配合 app-deploy, 跑以下 script 安裝:

rake app:install:remote:setup user=photo \
file=rc.tgz hosts=root@10.0.0.1,root@10.0.0.2 \
script=/home/photo/roodo-rc/install.rb

這會先 scp rc.tgz 上去,然後 ssh 上去 useradd,
tar -zxf 至 /home/photo 底下。最後跑 roodo-rc 的 install.rb

這個 rc.tgz 則是來自 roodo-rc 的 tarball, 可能這樣做:

> git --git-dir ../roodo-rc/.git --work-tree ../roodo-rc \
archive master --format tar | gzip > rc.tgz

接著因為 roodo-rc 中包含 ssh key (authorized_keys),
後面正式開始安裝時,就可以所有的 node 同時安裝。
不然要打密碼的話,好像沒辦法一起跑的樣子?

> rake app:install:remote hosts=photo@10.0.0.1,photo@10.0.0.2 \
git=git@github.com:godfat/photo.git \
cd=~ branch=origin/master script=./install.sh

[0] git 居然不支援 100600
[1] sh, bash, fish

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0