Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
最近のtDiary
Search
MATSUOKA Kohei
April 24, 2016
Technology
1
1.7k
最近のtDiary
tDiary 15th Anniversary Party
MATSUOKA Kohei
April 24, 2016
Tweet
Share
More Decks by MATSUOKA Kohei
See All by MATSUOKA Kohei
ゼロからわかるRuby超入門の歩き方
machu
2
4.4k
ruby15
machu
0
510
ruby13
machu
0
440
ruby12
machu
1
320
ruby11
machu
0
330
ruby10
machu
0
340
ruby09
machu
0
300
ruby08
machu
0
250
ruby07
machu
0
420
Other Decks in Technology
See All in Technology
AI時代のワークフロー設計〜Durable Functions / Step Functions / Strands Agents を添えて〜
yakumo
3
1.3k
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
2
210
.NET 10の概要
tomokusaba
0
120
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
15
15k
Microsoft Agent 365 についてゆっくりじっくり理解する!
skmkzyk
0
400
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
370
Jakarta Agentic AI Specification - Status and Future
reza_rahman
0
110
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
230
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
560
MariaDB Connector/C のcaching_sha2_passwordプラグインの仕様について
boro1234
0
930
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
170
寫了幾年 Code,然後呢?軟體工程師必須重新認識的 DevOps
cheng_wei_chen
1
1.5k
Featured
See All Featured
Side Projects
sachag
455
43k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
39
How GitHub (no longer) Works
holman
316
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
21
Why Our Code Smells
bkeepers
PRO
340
57k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Six Lessons from altMBA
skipperchong
29
4.1k
Docker and Python
trallard
47
3.7k
Making Projects Easy
brettharned
120
6.5k
Transcript
࠷ۙͷtDiary tDiary 15th Anniversary Party, 2016-04-24 MATSUOKA Kohei (@machu)
࠷ۙ: ͜͜5
U%JBSZ ࡀ͓ΊͰͱ͏͍͟͝·͢
ͲΕ͘Β͍ هΛॻ͍͍ͯΔ͔ ͑ͯΈΑ͏
ௐͯΈͨ $ find . -name '*.td2' | xargs grep -e
'^Date: \d\d\d\d' | cut -d' ' -f2 | sort -n > write-dates.csv هϑΝΠϧ (*.td2) ͔Β ͷߦ͚ͩΛൈ͖ग़ͯ͠CSV
0 50 100 150 200 250 300 2003 2004 2005
2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 هΛॻ͍ͨճ tDiaryͷίϛοτ 10 64 7 139 30 7 12 6 18 10 39 57 48 47 52 108 170 134 133 252 18 12 7 30 139 7 64 10
هΑΓ tDiaryΛ ॻ͍ͯΔਓͰ͢
tDiary4 2013.7~ gem, PaaS tDiary5 2016.4~ HTML5, HTTP2 docker tDiary3
2010.8~ rack
rackରԠ • ඪ४ΠϯλϑΣʔε • ϨϯαόҎ֎ͷରԠ • ؆୯ʹಈ͔ͤΔ • ApacheCGIͷߏஙෆཁ tDiary3
2010.8~ rack https://www.flickr.com/photos/122969584@N07/13780994204/
WebαʔόͷػೳΛRackͰ Rack Webαʔό tDiary CGI tDiary3 2010.8~ rack Rackαʔό ϛυϧΣΞ
tDiary .htaccess 63-ม ੩తϑΝΠϧ ೝূ
rackϛυϧΣΞΛॻ͍ͨ • URLม (tdiary/rack/html_anchor) #161 • “20160425.html”Λ”?date=20160425”ʹม • ੩తϑΝΠϧରԠ (tdiary/rack/static)
#160, #177 • /publicͷCSSը૾ϑΝΠϧΛฦ͢ • ֎෦ೝূ (tdiary/rack/auth) #163 • TwitterGitHubͷΞΧϯτͰೝূͰ͖Δ tDiary3 2010.8~ rack
֎෦ೝূΛ͑ΔΑ͏ʹͨ͠ https://github.com/tdiary/tdiary-core/blob/master/doc/HOWTO-authenticate-in-rack.md tDiary3 2010.8~ rack
ϥΠϒϥϦͰ؆୯ʹ࣮ݱ • OmniAuthͷΤϯυϙΠϯτΛݺͼग़͚ͩ͢ tDiary3 2010.8~ rack def call(env) if not
authenticate?(env) # phase 1: request phase login(env) elsif env['REQUEST_PATH'].match(%r|auth/#{@provider}/callback|) # phase 2: callback phase callback(env) else # phase 3: authorization phase auth = env['rack.session']['auth'] env['REMOTE_USER'] = "#{auth.uid}@#{auth.provider}" return forbidden unless @authz.call(auth) @app.call(env) end end tdiary/rack/auth/omniauth/authorization.rb
ۤ࿑͍ͯ͠Δͱ͜Ζ • CGIͱRackͷϋΠϒϦουڥ • ͲͬͪͰಈ͘ͷtDiary͘Β͍ʁ • μϯϩʔυ൛ʹϥΠϒϥϦΛಉࠝ • ͍·Ͱtar.gzΛల։͢Δ͚ͩͰಈ͘ •
RackʹରԠ͢Δ͜ͱͰಈ࡞ڥ͕͕ͬͨ tDiary3 2010.8~ rack
tDiary3 2010.8~ rack
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹಥવͷtDiary Adminɹʻ ʉ:?:?:?:?:?:?:?:?:?:ʉ tDiary3 2010.8~ rack
tDiary4 2013.7~ gem, PaaS tDiary5 2016.4~ HTML5, HTTP2 docker tDiary3
2010.8~ rack
tDiaryΛRubyGemԽ • ͬͱָʹهΛઃஔ͍ͨ͠ tDiary4 2013.7~ gem, PaaS $ gem install
tdiary $ tdiary new diary $ cd diary $ bundle exec rackup https://rubygems.org/gems/tdiary/
contribΛ؆୯ʹՃͰ͖Δ • Ҏલ… • contribύοέʔδΛμϯϩʔυ͠ɺϓ ϥάΠϯͷύεΛtdiary.confʹॻ͘ • JavaScriptϑΝΠϧΛίϐʔ • ͍·Gemfile.localʹॻ͚ͩ͘ͰOK
tDiary4 2013.7~ gem, PaaS gem 'tdiary-contrib', github: 'tdiary/tdiary-contrib'
@tdtds++ PaaSରԠ (Heroku!!!) tDiary4 2013.7~ gem, PaaS
heroku-buildpack-tdiary • Heroku༻ʹηοτΞοϓ ͢ΔγΣϧεΫϦϓτ • masterϒϥϯνͰheroku ͕ಈ͘Α͏ʹ • ϓϧϦΫΛHerokuͰಈ࡞ ֬ೝͰ͖Δʂ
tDiary4 2013.7~ gem, PaaS
ۤ࿑͍ͯ͠Δͱ͜Ζ • ϥΠϒϥϦͷґଘؔ • tdiary-core࠷খϥΠϒϥϦʹґଘ • herokuͳͲͷPaaSͰՃϥΠϒϥϦཁ • heroku-buildpack-tdiaryͷΑ͏ͳϋοΫඞཁ •
͍Ζ͍ΖͳڥͰಈ͘Α͏ʹͳͬͯخ͍͠ tDiary4 2013.7~ gem, PaaS
tDiary4 2013.7~ gem, PaaS tDiary5 2016.4~ HTML5, HTTP2 docker tDiary3
2010.8~ rack
WebͷτϨϯυରԠ tDiary5 2016.4~ HTML5, HTTP2 docker • HTML5 (#534) •
ཁૉͷهड़Λͪΐͬͱม͑ͨఔ • ޓੑॏࢹ • HTTP2 • tDiaryతʹHTTPSεΩʔϜʹରԠɺ͋ͱWebαʔό • docker (#522)
ͱ͜ΖͰ
هαΠτ͋Δ͋Δ • ͍Ζ͍ΖखΛೖΕͯຬ • ͕࣌ؒܦͬͯԿΛ͔ͬͯͨΕΔ • ාͯ͘৮Εͳ͘ͳΓ์ஔ
αʔόࣜભٶ • 2ʙ3͝ͱʹαʔόΛ࡞Γ͠ • ڥΩϨΠʹͳΔ͕ͦΕͳΓʹ໘ • ࡞Γͨ͋͠ͱͬͺΓಉ͜͡ͱʹ
dockerͰ͡ΊΔ ࠷ࣜભٶܭը
https://www.docker.com/what-docker
https://www.docker.com The Docker Solution
dockerͰࣗαΠτΛཧ docker engine ͘͞ΒͷVPS (2G) ϓϩΩγ (nginx-proxy) tdiary pukiwiki rpaproxy
CoreOS (JU)VCʹ͓͍ͨ ઃఆϑΝΠϧྨΛͬͯ ຖճEPDLFSίϯςφΛ࡞Δ Dockerfile docker- compose.yml ઃఆϑΝΠϧྨ machu/machu-jp
dockerͰࣗαΠτΛཧ • αʔόͱಉ͡ڥΛϩʔΧϧͰ࡞Γ͍ͨ • ͏αʔό্Ͱσόοάͨ͘͠ͳ͍ • αʔόͷڥΛgithubͰཧ͍ͨ͠ • ͍ͭͰڥΛ࡞Γͳ͓ͤΔ҆৺ײ
Step1. ϩʔΧϧͰಈ͔͢ $ git clone https://github.com/tdiary/ tdiary-core.git $ atom .
(Կ͔ιʔεΛ͍͡Δ) $ docker build -t machu/tdiary . Step 1 : FROM ruby:2.3 2.3: Pulling from library/ruby (தུ) Successfully built b44f1cf5b5ee $ docker run -d -p 80:9292 machu/tdiary $ open http://192.168.99.101 tdiary/tdiary tdiary-core docker engine tdiary git clone docker build docker run
Dockerfile (Πϝʔδͷઃܭਤ) FROM ruby:2.3 MAINTAINER MATSUOKA Kohei @machu RUN mkdir
-p /usr/src/app WORKDIR /usr/src/app COPY [ "Gemfile", "Gemfile.lock", "/usr/src/app/" ] RUN bundle --path=vendor/bundle --without=development:test -- jobs=4 --retry=3 COPY . /usr/src/app/ RUN if [ ! -e tdiary.conf ]; then cp tdiary.conf.beginner tdiary.conf; fi && \ bundle && \ bundle exec rake assets:copy VOLUME [ "/usr/src/app/data", "/usr/src/app/public" ] EXPOSE 9292 CMD [ "bundle", "exec", "rackup", "-o", "0.0.0.0", "-p", "9292" ] EPDLFSެࣜͷ ΠϝʔδΛ͏ SVCZͷඞཁͳϥ ΠϒϥϦΛೖΕΔ UEJBSZΛίϐʔ ίϯςφΛىಈ͢ ΔͨΊͷઃఆ
Step2. ެࣜΠϝʔδΛ͏ $ docker pull tdiary/tdiary $ docker run -d
-p 80:9292 --name tdiary machu/tdiary tdiary/tdiary docker hub tdiary-core docker engine tdiary git push automated build docker pull docker run
Step3. ެࣜΠϝʔδΛ֦ு͢Δ FROM tdiary/tdiary:latest COPY . /usr/src/app/ RUN bundle &&
bundle exec rake assets:copy Dockerfile tdiary/tdiary machu/tdiary Gemfile.local .htaccess tdiary.conf $ docker build -t machu/tdiary . ΠϝʔδͷϏϧυ ಠࣗͷઃఆΛ ެࣜΠϝʔδʹՃ ※ ͏ͪΐͬͱެࣜΠϝʔδ͚ͩͰ͑ΔΑ͏ʹ͍ͨ͠
Step4. WebαʔόͱҰॹʹ͏ app: image: tdiary/tdiary environment: - RACK_ENV=production ports: -
"8080:9292" volumes_from: - db web: image: tdiary/nginx ports: - "80:80" links: - app volumes_from: - app docker-compose.yml nginx docker engine tdiary docker-compose up
dockerͰ͡ΊΔ࠷ࣜભٶ • ߋ৽ͷͨͼʹ৽͘͠ڥ͕Ͱ͖Δ • ઃఆϑΝΠϧΛgithubͰཧͰ͖Δ • dockerͷֶशίετͪΐͬͱߴ͍ • docker-cloudͰ͓ۚͰղܾ͋Γ
͓ΘΓʹ
ڥมΘΔ
هΛ ॻ͘ ruby1.8 CGI EUC-JP TrackBack HTTP/1.1 HTML4.1 Wikiه๏ Ϩϯαό
هΛ ॻ͘ ruby2.3 CGI UTF-8 TrackBack HTTP/2 HTML5 Wikiه๏ Ϩϯαό
Markdown Rack PaaS bundler docker
ه มΘΒͳ͍
͜Ε͔Β มΘΒͳ͍ͨΊʹ มΘΓ͚ͭͮΑ͏
U%JBSZ ࡀ͓ΊͰͱ͏͍͟͝·͢
0 50 100 150 200 250 300 2003 2004 2005
2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 هΛॻ͍ͨճ tDiaryͷίϛοτ 10 64 7 139 30 7 12 6 18 10 39 57 48 47 52 108 170 134 133 252 18 12 7 30 139 7 64 10 هΑΓ tDiaryΛ ॻ͍ͯΔਓͰͨ͠