ãã®ã¬ã€ãã®æåŸãŸã§ã«ããã©ã³ãµãŒïŒlbïŒãš2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒapp1ãšapp2ïŒã®3ã€ã®ãµãŒããŒã®ã·ã¹ãã ãåãåããŸãã ãã©ã³ãµãŒã¯ãµãŒããŒã®å¯çšæ§ãç£èŠãããµãŒããŒéã§ãã©ãã£ãã¯ãåæ£ããŸãã ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯systemdãšnode.jsã¯ã©ã¹ã¿ãªã³ã°ã®çµã¿åããã䜿çšããŠããµãŒããŒäžã®è€æ°ã®ããŒãããã»ã¹éã§ãã©ãã£ãã¯ã®ãã©ã³ã¹ãåããŸãã ãã·ã³ãã1ã€ã®ã³ãã³ãã§ã³ãŒããå±éã§ãããµãŒãã¹ã®äžæãæªåŠçã®ãªã¯ãšã¹ãã¯çºçããŸããã
ããã¯ãã¹ãŠããã€ã¢ã°ã©ã ã®åœ¢åŒã§è¡šãããšãã§ããŸãã

åçã¯ã¬ãžããïŒ Digital Ocean
翻蚳è ããïŒWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å圢ã¢ãããŒãã®æ®åã«ããããŸããŸãå€ãã®éçºè ãå®çšŒåç°å¢ã§Node.jsã䜿çšããå¿ èŠã«çŽé¢ããŠããŸãã ãžã§ãã»ãã£ãããŒã®ãã®èšäºã¯ãå®è·µçãªã¢ãããŒããšããã®å¹ åºããããã¯ã®æŠèŠã楜ãã¿ãŸããã
UPDïŒ2018ïŒïŒèè ã®githubãžã®ãªã³ã¯ãä¿®æ£ããŸããã
ãã®èšäºã«ã€ããŠ
ãã®èšäºã¯ãæŠéæäœçšã«ãµãŒããŒãæ§æããåé¡ã«å¯ŸåŠãå§ããã°ããã®äººã察象ãšããŠããŸãã ãã ããããã»ã¹ã®äžè¬çãªç解ãupstartãsystemdããŸãã¯initãäœã§ããããããã³UNIXã®ããã»ã¹ä¿¡å·ã¯äœã§ããããç¥ã£ãŠããå¿ èŠããããŸãã ãµãŒããŒã§ãã®ã¬ã€ããè©ŠããŠã¿ãããšããå§ãããŸãïŒãã ããåŒãç¶ããã¢ã³ãŒãã䜿çšããŸãïŒã ããã«ãç¬èªã®ç°å¢ãã»ããã¢ããããéã®åºçºç¹ãšããŠåœ¹ç«ã€ããã€ãã®äŸ¿å©ãªæ§æèšå®ãšã¹ã¯ãªãããæäŸããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®æçµããŒãžã§ã³ã¯https://github.com/jdxcode/node-sampleã«ãããŸã ã
ãã®ã¬ã€ãã§ã¯ã Digital OceanãšFedoraã䜿çšããŸãã ãã ãããã®èšäºã¯ãã¯ãããžãŒã¹ã¿ãã¯ãšã¯ç¬ç«ããŠæžãããŠããŸãã
ç§ã¯ãããã©Fedora 20ã§Digital OceanãµãŒããŒã䜿çšããŸããã¬ã€ããæ°åãã¹ãããŸããã®ã§ããããã®æé ãåçŸããã®ã«åé¡ã¯ãªãã¯ãã§ãã
ãªãFedoraãªã®ãïŒ
ãã¹ãŠã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒGentooãé€ãïŒã¯ãããŸããŸãªåæåã·ã¹ãã ããsystemdã«ç§»è¡ããŠããŸãã UbuntuïŒããããäžçã§æã人æ°ã®ãããã£ã¹ããªãã¥ãŒã·ã§ã³ïŒã¯ãŸã ããã«åãæ¿ããŠããªãã®ã§ïŒãããæ¢ã«çºè¡šããŠããã®ã§ïŒãUpstartã®äœ¿ãæ¹ãæããã®ã¯ééã£ãŠãããšæããŸãã
systemdã¯ãé«åºŠãªéäžãã®ã³ã°ãç°¡çŽ åãããæ§æãããã©ãŒãã³ã¹ãããã³ãã®ä»ã®å€ãã®æ©èœãªã©ãUpstartã«æ¯ã¹ãŠããã€ãã®éèŠãªå©ç¹ãæäŸããŸãã
Node.jsãã€ã³ã¹ããŒã«ãã
æåã«ãæ°ãããµãŒããŒã«node.jsãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ããžã¿ã«ãªãŒã·ã£ã³ã§ã¯ã4ããŒã ããããŸããã§ããã
bootstrap.sh
yum update -y yum install -y git nodejs npm npm install -gn n stable
ããã§ã¯ãyumïŒå€ãããŒãžã§ã³ãæäŸããå¯èœæ§ããããŸãïŒãä»ããŠããŒããã€ã³ã¹ããŒã«ãã次ã«ããŒãã®ããŸããŸãªããŒãžã§ã³ãã€ã³ã¹ããŒã«ããã³åãæ¿ããããšãã§ããçŽ æŽãããããã±ãŒãžnãã€ã³ã¹ããŒã«ããŸãã ããã䜿çšããŠãnode.jsãæŽæ°ããŸãã
# node --version
ãèµ·åãããšãããŒãã®ææ°ããŒãžã§ã³ã«é¢ããæ å ±ã衚瀺ãããŸãã
Ansibleã䜿çšããŠãã®æé ãèªååããæ¹æ³ã«ã€ããŠã¯ãåŸã§èª¬æããŸãã
WebãŠãŒã¶ãŒãäœæãã
ã«ãŒãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã®ã¯å®å šã§ã¯ãªããããå¥ã®WebãŠãŒã¶ãŒãäœæããŸãã
ãããè¡ãã«ã¯ã次ãå®è¡ããŸãã
# useradd -mrU web
ã¢ããªã±ãŒã·ã§ã³ãè¿œå
ããŒããµãŒããŒããããã¢ããªã±ãŒã·ã§ã³ã®è¿œå ã«é²ãããšãã§ããŸãã
ãã£ã¬ã¯ããªãäœæããŸãã
# mkdir /var/www
圌ã«Webã®ææè ãèšå®ããŸãã
# chown web /var/www
ãŸããWebã°ã«ãŒãïŒ
# chgrp web /var/www
å ¥åããŠãã ããïŒ
# cd /var/www/
ãŠãŒã¶ãŒã«åãæ¿ããŸãïŒ
$ su web
Hello worldã¢ããªã§ãªããžããªãã¯ããŒã³ïŒ
$ git clone https://github.com/jdxcode/node-hello-world
ããã¯ããŒãã®æãåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ãã
app.js
var http = require('http'); var PORT = process.env.PORT || 3000; http.createServer(function (req, res) { console.log('%d request received', process.pid); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello world!\n'); }).listen(PORT); console.log('%d listening on %d', process.pid, PORT);
ãããå®è¡ããŸãïŒ
$ node app.js
ãã©ãŠã¶ã䜿çšããŠIPçµç±ã§ãµãŒããŒã«ã¢ã¯ã»ã¹ãããšãã¢ããªã±ãŒã·ã§ã³ãåäœããŠããããšãããããŸãã

泚ïŒ
# iptables -F
ãå®è¡ããå¿ èŠãããå ŽåããããŸã
# iptables -F
iptablesããŒãã«ãã¯ãªã¢ãããããã¡ã€ã¢ãŠã©ãŒã«ã®ããŒããéã
firewall-cmd --permanent --zone=public --add-port=3000/tcp.
firewall-cmd --permanent --zone=public --add-port=3000/tcp.
å¥ã®æ³šæïŒããã©ã«ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ããŒã3000ã§å®è¡ãããŸããããŒã80ã§å®è¡ããã«ã¯ãããã·ãµãŒããŒïŒnginxãªã©ïŒãå¿ èŠã§ãããèšå®ã§ã¯ããŒã3000ã§ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãå®è¡ããå¿ èŠãããããã©ã³ãµãŒïŒå¥ã®ãµãŒããŒïŒã¯ããŒãã§åäœããŸã80ã
systemd
ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®èµ·åæ¹æ³ãåŠãã åŸããããsystemdã«è¿œå ããŠãäºæ ãçºçããå Žåã«åèµ·åããããã«ããå¿ èŠããããŸãã
次ã®systemdã¹ã¯ãªããã䜿çšããŸãã
node-sample.service
[Service] WorkingDirectory=/var/www/node-hello-world ExecStart=/usr/bin/node app.js Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=node-hello-world User=web Group=web Environment='NODE_ENV=production' [Install] WantedBy=multi-user.target
ãã®ãã¡ã€ã«ãïŒã«ãŒããšããŠïŒ
/etc/systemd/system/node-sample.service
ã³ããŒããŸã
/etc/systemd/system/node-sample.service
# systemctl enable node-sample
åïŒ
# systemctl enable node-sample
# systemctl enable node-sample
å®è¡ïŒ
# systemctl start node-sample
# systemctl start node-sample
ã¹ããŒã¿ã¹ã®ç¢ºèªïŒ
# systemctl status node-sample
# systemctl status node-sample
ãã°ã確èªã
# journalctl -u node-sample
ã
# journalctl -u node-sample
# journalctl -u node-sample
pidããŒãããã»ã¹ã匷å¶çµäºããŠãåã³éå§ããæ¹æ³ã確èªããŠãã ããã
ããã»ã¹ã¯ã©ã¹ã¿ãªã³ã°
ã¢ããªã±ãŒã·ã§ã³ã§1ã€ã®ããã»ã¹ãéå§ã§ããããã«ãªã£ãã®ã§ã ããŒããã¯ã©ã¹ã¿ãªã³ã°ããããã®çµã¿èŸŒã¿ã¡ãœããã䜿çšããå¿ èŠããããŸããããã«ãããè€æ°ã®ããã»ã¹ã«ãã©ãã£ãã¯ãèªåçã«åæ£ãããŸãã
Node.jsã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«äœ¿çšã§ããã¹ã¯ãªããã次ã«ç€ºããŸãã
ãã®ãã¡ã€ã«ã
app.js
é£ã«
app.js
ãŠå®è¡ããã ãã§ãïŒ
$ node boot.js
ãã®ã¹ã¯ãªããã¯ãã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãèµ·åããå¿ èŠã«å¿ããŠããããåèµ·åããŸãã ãŸããSIGHUPä¿¡å·ãåä¿¡ãããšãã·ãŒã ã¬ã¹ãªåèµ·åãå®è¡ããŸãã
ãã£ãŠã¿ãŸãããã ãããè¡ãã«ã¯ã
app.js
ãè¿ããã®ã«å€æŽã
app.js
ãŸã
app.js
ã
$ kill -hup [pid]
å®è¡ããŸã
$ kill -hup [pid]
ãããŠãã©ãŠã¶ã§æ°ããããŒã¿ãèŠãããšãã§ããŸãã ã¹ã¯ãªããã¯ãäžåºŠã«1ã€ã®ããã»ã¹ãåèµ·åããã·ãŒã ã¬ã¹ãªåèµ·åãæäŸããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã¿ãŒåããŒãžã§ã³ãæ©èœãããã«ã¯ãsystemdæ§æãæŽæ°ããå¿ èŠããããŸãã
ExecReload=/bin/kill -HUP $MAINPID
ã®èšå®ãè¿œå ããããšãã§ããŸã
ExecReload=/bin/kill -HUP $MAINPID
systemdã
# systemctl reload node-sample.
ã³ãã³ããåãåã£ããšãã«ç¬èªã«ã·ãŒã ã¬ã¹ãªåèµ·åãå®è¡ã§ããããã«ããŸã
# systemctl reload node-sample.
# systemctl reload node-sample.
ã¯ã©ã¹ã¿ãŒããŒãžã§ã³ã®ãµã³ãã«ãã¡ã€ã«ã次ã«ç€ºããŸãã
node-sample.service
[Service] WorkingDirectory=/var/www/node-hello-world ExecStart=/usr/bin/node boot.js ExecReload=/bin/kill -HUP $MAINPID Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=node-sample User=web Group=web Environment='NODE_ENV=production' [Install] WantedBy=multi-user.target
ãã©ã³ã¹èª¿æŽ
æŠéæäœã§ã¯ã1å°ãã¯ã©ãã·ã¥ããå Žåã«åããŠå°ãªããšã2å°ã®ãµãŒããŒãå¿ èŠã§ãã 1ã€ã ãã§å®éã®ã·ã¹ãã ãäžããããšã¯ããŸããã çæããŠãã ããïŒãµãŒããŒã¯ãæ éãããšãã ãã§ãªããã¡ã³ããã³ã¹ã®ããã«ãµãŒããŒããªãã«ããå¿ èŠãããå Žåã«ããªãã«ãªããŸãã ãã©ã³ãµãŒã¯ãµãŒããŒã®å¯çšæ§ããã§ãã¯ããåé¡ã«æ°ä»ããå Žåããã®ãµãŒããŒãããŒããŒã·ã§ã³ããé€å€ããŸãã
æåã«2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãã€ã³ã¹ããŒã«ããåã®æé ãç¹°ãè¿ããŸãã 次ã«ãDigital OceanïŒãŸãã¯ä»ã®å ŽæïŒã§æ°ãããµãŒããŒãäœæããsshçµç±ã§æ¥ç¶ããŸãã
HAProxyã®ã€ã³ã¹ããŒã«ïŒ
# yum install haproxy
ãã¡ã€ã«
/etc/haproxy/haproxy.cfg
ã次ã®ãã®ã«çœ®ãæããŸãïŒãµãŒããŒã®IPã眮ãæããŸãïŒã
haproxy.cfg
defaults log global mode http option httplog option dontlognull option http-server-close option forwardfor option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s frontend main *:80 stats enable stats uri /haproxy?stats stats auth myusername:mypass default_backend app backend app balance roundrobin server app1 107.170.145.120:3000 check server app2 192.241.205.146:3000 check
HAProxyãåèµ·åããŸãïŒ
systemctl restart haproxy
ãã©ã³ãµãŒã®ããŒã80ã§å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããã¯ãã§ãã
/haproxy?stats
è¡ãããšãã§ããŸã
/haproxy?stats
/haproxy?stats
HAProxyã¹ããŒã¿ã¹ããŒãžã衚瀺ããŸãã
myusername/mypass
ãŸãã
HAProxyã®èšå®ã«é¢ããè¿œå æ å ±ã«ã€ããŠã¯ã ç§ã䜿çšããããã¥ã¢ã«ããŸãã¯å ¬åŒããã¥ã¡ã³ããããç解ããããšããå§ãããŸãã
Ansibleã䜿çšããŠã³ãŒãããããã€ãã
ã»ãšãã©ã®ãµãŒããŒæ§æã¬ã€ãã¯ããã§çµãããŸãããå°å ¥çµç¹ããªããã°æ瀺ã¯å®äºããªããšæããŸãïŒ èªååããªããã°ãããã»ã¹ã¯ããã»ã©æãèŠããŸããã
- app1ã§SSHçµç±ã§æ¥ç¶ãã
-
cd /var/www/node-hello-world
- ææ°ã®
git pull
ã³ãŒããå ¥æãã - ãããŠã
systemctl reload node-sample
ã¢ããªã±ãŒã·ã§ã³ãsystemctl reload node-sample
ããããäž»ãªãã€ãã¹ç¹ã¯ãåãµãŒããŒã§ãããè¡ãå¿ èŠãããããšã§ãããããã«ã¯æéãããããŸãã Ansibleã䜿çšãããšããã·ã³ããçŽæ¥ã³ãŒããå±éããŠãã¢ããªã±ãŒã·ã§ã³ãé©åã«ãªããŒãã§ããŸãã
人ã ã¯Ansibleãæãã§ãã å€ãã®äººã¯ãChefãPuppetã®ãããªæŽç·ŽãããããŒã«ã®ããã«èŠããããå®éã«ã¯FabricãCapistranoã«è¿ããšèããŠããŸãã æãåçŽãªã±ãŒã¹ã§ã¯ãsshãä»ããŠãµãŒããŒã«æ¥ç¶ããã³ãã³ããå®è¡ããã ãã§ãã ã¯ã©ã€ã¢ã³ãããã¹ã¿ãŒãµãŒããŒãè€éãªã¯ãã¯ããã¯ããªããŠããããŒã ã§ãã ãµãŒããŒã®å±éïŒããããžã§ãã³ã°ïŒã«ã¯åªããæ©èœããããŸããã䜿çšããããšã¯ã§ããŸããã
ã³ãŒããå±éããã ãã®Ansibleãã¡ã€ã«ã¯æ¬¡ã®ãšããã§ãã
deploy.yml
--- - hosts: app tasks: - name: update repo git: repo=https://github.com/jdxcode/node-hello-world version=master dest=/var/www/node-hello-world sudo: yes sudo_user: web notify: - reload node-sample handlers: - name: reload node-sample service: name=node-sample state=reloaded
çç£
[app] 192.241.205.146 107.170.233.117
éçºãã·ã³ã§å®è¡ããŸãïŒ å¿ ãAnsibleãã€ã³ã¹ããŒã«ããŠãã ãã ïŒïŒ
ansible-playbook -i production deploy.yml
Ansibleã®ãããã¯ã·ã§ã³ãã¡ã€ã«ã¯ã ã€ã³ãã³ããªãã¡ã€ã«ãšåŒã°ããŸã ã ãã¹ãŠã®ãµãŒããŒã®ã¢ãã¬ã¹ãšãã®åœ¹å²ããªã¹ãããã ãã§ãã
ymlæ¡åŒµåãæã€ãã¡ã€ã«ã¯ãã¹ã¯ãªããïŒ ãã¬ã€ãã㯠ïŒãšåŒã°ããŸãã å®è¡ããã¿ã¹ã¯ãå®çŸ©ããŸãã ç§ãã¡ãšäžç·ã«ã圌ã¯githubããææ°ã®ã³ãŒããå ¥æããŸãã å€æŽãããå Žåããéç¥ãã¿ã¹ã¯ãèµ·åãããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãåèµ·åãããŸãã å€æŽããªãã£ãå Žåããã³ãã©ãŒã¯èµ·åããŸããã ããšãã°ãnpmããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåã¯ãããã§å®è¡ã§ããŸãã ãšããã§ãäŸåé¢ä¿ãã¡ã€ã«ããªããžããªã«
npm shrinkwrap
ããªãå Žåã¯ã
npm shrinkwrap
ã䜿çšããŠãã ããã
泚ïŒããŒãœãã«gitãªããžããªã䜿çšããå Žåã¯ãSSHã«æ¿èªãšãŒãžã§ã³ããªãã€ã¬ã¯ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ããããžã§ãã³ã°å¯èœ
çæ³çã«ã¯ãæ¯åãã¹ãŠã®æé ãæåã§ç¹°ãè¿ãå¿ èŠããªãããã«ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ã¢ã»ã³ããªãèªååããå¿ èŠããããŸãã ãããè¡ãã«ã¯ã次ã®Ansibleã¹ã¯ãªããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããããã€ããŸãã
app.yml
--- - hosts: app tasks: - name: Install yum packages yum: name={{item}} state=latest with_items: - git - vim - nodejs - npm - name: install n (node version installer/switcher) npm: name=n state=present global=yes - name: install the latest stable version of node shell: n stable - name: Create web user user: name=web - name: Create project folder file: path=/var/www group=web owner=web mode=755 state=directory - name: Add systemd conf template: src=systemd.service.j2 dest=/etc/systemd/system/node-sample.service notify: - enable node-sample handlers: - name: enable node-sample shell: systemctl enable node-sample
systemd.service.j2
[Service] WorkingDirectory={{project_root}} ExecStart=/usr/bin/node boot.js ExecReload=/bin/kill -HUP $MAINPID Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier={{project_name}} User=web Group=web Environment='NODE_ENV=production' [Install] WantedBy=multi-user.target
次ã®ããã«
ansible-playbook -i [inventory file] app.yml
ïŒ
ansible-playbook -i [inventory file] app.yml
ansible-playbook -i [inventory file] app.yml
ã
ãããŠãããã¯ãã©ã³ãµãŒã«ã€ããŠãåãã§ã ã
æçµç³è«
ããããã¹ãŠã®æé ã®æçµçµæã次ã«ç€ºããŸã ã 圌ããèšãããã«ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ãã€ã³ãã³ããªãã¡ã€ã«ãæŽæ°ãããµãŒããŒãå±éããã¢ããªã±ãŒã·ã§ã³ã®å±éãå®è¡ããå¿ èŠããããŸãã
ãã¹ãç°å¢ïŒ
æ°ããç°å¢ã®äœæã¯ç°¡åã§ãã ãã¹ãçšã«å¥ã®ã€ã³ãã³ããªãã¡ã€ã«ïŒansible / productionïŒãè¿œå ãããšã
ansible-playbook
ãåŒã³åºããšãã«åç §ã§ããŸãã
ansible-playbook
ã
ãã¹ãäž
ã·ã¹ãã ããã¹ãããŸã ã ä»ã®çç±ã¯ããŠãããããã¯æ¬åœã«æ¥œããã§ã-ã¯ã©ã¹ã¿ãŒãããŠã³ãããæ¹æ³ãèŠã€ããããšããŠããŸãã Siegeã䜿çšããŠããŒããäœæããŸãã kill -9ãããŸããŸãªããã»ã¹ã«éä¿¡ããŠã¿ãŠãã ããã ãµãŒããŒã®é»æºãå®å šã«ãªãã«ããŸãã ããã»ã¹ã«ä»»æã®ä¿¡å·ãéä¿¡ããŸãã ãã©ã€ããé転ããŸãã ã¯ã©ã¹ã¿ãŒãå°ç¡ãã«ããŠã皌åçã®äœäžãé²ãããšãã§ããŸãã
æ¹åã§ãããã®
å®ç§ãªã¯ã©ã¹ã¿ãŒã¯ãªãããããäŸå€ã§ã¯ãããŸããã ç§ã¯éãã«ãããçç£ã«å ¥ããŸããããå°æ¥çã«ã¯äœãã匷åããããšãã§ããŸãïŒ
Haproxyãã§ãŒã«ãªãŒããŒ
HAProxyã¯ãä¿¡é Œã§ãããã®ã§ã¯ãããŸãããçŸåšã¯åäžé害ç¹ã§ãã DNSãã§ãŒã«ãªãŒããŒã䜿çšããŠã¯ãªãŒãã³ã°ã§ããŸãã DNSã¬ã³ãŒããé åžãããŠããéãç¬æã§ã¯ãªããæ°ç§ã®ããŠã³ã¿ã€ã ãçºçããŸãã HAProxyãåç¬ã§èœã¡ãããšã¯å¿é ããŠããŸããããæ§æãå€æŽãããšäººçãšã©ãŒãçºçããå¯èœæ§ãé«ããªããŸãã
ã·ãªã¢ã«å±é
次ã®å±éã§ã¯ã©ã¹ã¿ãŒãç Žæããå ŽåãAnsibleã§ã·ãªã¢ã«å±éãèšå®ããŠãå€æŽãåŸã ã«å±éãããµãŒããŒã®å¯çšæ§ã確èªããŸãã
åçã€ã³ãã³ããªãã¡ã€ã«
ããã¯ç§ãããäžéšã®äººã«ãšã£ãŠããéèŠã«ãªããšæããŸãã ãã®ã¬ã€ãã§ã¯ããµãŒããŒã¢ãã¬ã¹ããœãŒã¹ã³ãŒãã«ä¿åããå¿ èŠããããŸããã ããžã¿ã«ãªãŒã·ã£ã³ïŒãŸãã¯å¥ã®ãããã€ããŒïŒã®ãã¹ãã®ãªã¹ããåçã«èŠæ±ããããã«Ansibleãæ§æã§ããŸãã æ°ãããµãŒããŒãäœæããããšãã§ããŸãã ãã ããDigital Oceanã§ãµãŒããŒãäœæããããšã¯æãé£ããã¿ã¹ã¯ã§ã¯ãããŸããã
éäžãã°
JSONãã¬ãžã³ã¯ãç°¡åã«éçŽããŠæ€çŽ¢ãããå Žåã«æé©ã§ãã ç§ã¯ããã®ããã«ããã€ã³ãèŠãŸãã
ãã¹ãŠã®ãµãŒããŒã®ãã°ã1ãæã«æµããŠããã°çŽ æŽãããããšã§ãã Logglyã®ãããªãã®ã䜿çšããããä»ã®æ¹æ³ãè©Šãããšãã§ããŸãã
ãšã©ãŒã®å ±åãšç£èŠ
ãšã©ãŒã®åéãšãã®ã³ã°ã«ã¯å€ãã®è§£æ±ºçããããŸãã ç§ãè©Šãããã®ã®ã©ãããç§ã¯å¥œãã§ã¯ãªãã£ãã®ã§ãç§ã¯ããªãã«äœããã¢ããã€ã¹ããããšãæ³å®ããŠããŸããã ãã®ããã®è¯ãããŒã«ãç¥ã£ãŠãããªããã³ã¡ã³ãã§ããã«ã€ããŠæžããŠãã ããã
Joyentããå®çšŒåç°å¢ã§Node.jsãèµ·åããããã®åªããã¬ã€ãããå§ãããŸã-è¿œå ã®ãã³ãããããããããŸãã
以äžã§ãïŒ Node.jsã®ã·ã³ãã«ã§å®å®ããã¯ã©ã¹ã¿ãŒãæ§ç¯ããŸããã ãããæ¹åããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ãããã°æããŠãã ããïŒ
翻蚳è ããïŒããã«æ¥ãŠãããŠããããšãã 翻蚳è ãšããŠèªåãè©Šãã®ã¯åããŠã§ãã ç§ã¯ãã¹ãŠãæ£ãã翻蚳ããªãã£ããšç¢ºä¿¡ããŠããã®ã§ããšã©ãŒã¡ãã»ãŒãžãã¿ã€ããã¹ãããã³èšèšäžã®åé¡ãå éšã¡ãŒã«ã§éä¿¡ãããããé¡ãããŸãã