rabbit-slide-niku-nikulog-with-docker 2015.07.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57319379cf37468ad8a097f5226b3134d59ad692
4
+ data.tar.gz: cf35956a152c68a31c7963354009dff3dddad027
5
+ SHA512:
6
+ metadata.gz: 58e947e66f7c21b02e362c1bed0d18df11a8553e73928e3f4a57f505c19bfe1f166a9f75247cc1981083258f0c8ab7c808555b4b6bd31e21bc4f671dc7dfbfc1
7
+ data.tar.gz: 0514dc468c7603b56c6d0015b9e237cb5196cc0db6cfc5016fcfd0bdd7733bc9ce772b389e38d0ea658a5c648b3b63a02dc7aa7d254b495727bb1d7430820f81
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ nikulog-with-docker.md
@@ -0,0 +1,23 @@
1
+ # ヽ(´・肉・`)ノログとDocker
2
+
3
+ [Infrastructure as Code Casual 札幌 #0](http://infracode-sapporo.connpass.com/event/16476/)で発表した資料
4
+
5
+ ## 作者向け
6
+
7
+ ### 表示
8
+
9
+ rake
10
+
11
+ ### 公開
12
+
13
+ rake publish
14
+
15
+ ## 閲覧者向け
16
+
17
+ ### インストール
18
+
19
+ gem install rabbit-slide-niku-nikulog-with-docker
20
+
21
+ ### 表示
22
+
23
+ rabbit rabbit-slide-niku-nikulog-with-docker.gem
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: nikulog-with-docker
3
+ base_name: nikulog-with-docker
4
+ tags:
5
+ - docker
6
+ presentation_date: 2015/07/10
7
+ version: 2015.07.10
8
+ licenses: [MIT]
9
+ slideshare_id:
10
+ speaker_deck_id:
11
+ ustream_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ author:
15
+ markup_language: :markdown
16
+ name: niku
17
+ email: niku@niku.name
18
+ rubygems_user: niku
19
+ slideshare_user:
20
+ speaker_deck_user: niku
Binary file
Binary file
@@ -0,0 +1,364 @@
1
+ # ヽ(´・肉・`)ノログとDocker
2
+
3
+ author
4
+ niku
5
+ date
6
+ 2015/07/10
7
+ allotted-time
8
+ 15m
9
+
10
+ # タイトルずれました
11
+
12
+ ∧_∧         ミ ギャハッハッ ズレてる!ズレてる!
13
+      o/⌒(. ;´∀`)つ
14
+      と_)__つノ  ☆ バンバン
15
+
16
+ ∧_∧
17
+      o/⌒(゜Д゜ )つ
18
+      と_)__つノ
19
+
20
+ ∧_∧
21
+      o/⌒( ゚д゚ )つ
22
+      と_)__つノ
23
+
24
+ # 自己紹介
25
+
26
+ - にく
27
+ - I like
28
+ - コンサドーレ札幌
29
+ - Emacs
30
+ - Ruby
31
+ - Elixir/Phoenix
32
+
33
+ # 自己紹介
34
+
35
+ - github_id :: niku
36
+ - twitter_id :: niku_name
37
+ - web :: http://niku.name/
38
+
39
+ # 今日話すこと
40
+
41
+ - http://niku.name/
42
+ - どうやって表示しているか
43
+ - どうやってコンテンツ更新しているか
44
+
45
+ # どうやって表示しているか
46
+
47
+ 構成 : Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog
48
+
49
+ - Apache Webサーバー
50
+ - Rack サーバーとアプリケーションを繋ぐミドルウェア
51
+ - nwiki git のファイルの内容を web に表示する
52
+ - nikulog コンテンツ(git管理)
53
+
54
+ # つらみ
55
+
56
+ - アプリケーション開発者にとっての趣味サーバー管理
57
+ - サーバー管理者にとっての趣味アプリケーション開発(?)
58
+ - 「これ,どうやるんだったっけ……」
59
+
60
+ # つらみ
61
+
62
+ - 知識としてはある
63
+ - たまにしかやらないので毎回調べるはめになる
64
+ - [apache 設定 やり方] [検索]
65
+
66
+ # つらみ対策
67
+
68
+ プロビジョニングツール
69
+
70
+ - chef / itamae レシピ書けます
71
+ - いいものだ
72
+ - (僕は)サーバー管理の手数を減らしたい
73
+ - 選定や知識のアップグレードの時間を投資し続けることができるだろうか?
74
+
75
+ # つらみ対策
76
+
77
+ わかれていると管理しやすいのでは
78
+
79
+ - ミニマム構成のサーバー部分
80
+ - 穴が少ない
81
+ - 気軽にアップデートでき,動作検証しやすいアプリケーション
82
+
83
+ # つらみ対策
84
+
85
+ - ミニマム構成のサーバー => Docker だけインストールした Debian
86
+ - 気軽にアップデートでき,動作検証しやすいアプリケーション => Dockerイメージ
87
+
88
+ # Dockerイメージを載せるサーバー
89
+
90
+ さくらVPSにDebian8をインストールして,コマンドを手で打ちました
91
+
92
+ $ sudo update-locale LANG=C.UTF-8
93
+ $ sudo sh -c "echo 'deb http://ftp.jp.debian.org/debian jessie-backports main' \
94
+ > /etc/apt/sources.list.d/jessie-backports.list"
95
+ $ sudo apt-get update
96
+ $ sudo apt-get install -y docker.io
97
+
98
+ # Docker
99
+
100
+ 構成 : Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog
101
+
102
+ # Docker
103
+
104
+ 構成 : Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog
105
+ : | |
106
+ Docker : niku/debian | niku/nwiki | niku/nikulog
107
+
108
+ # niku/debian
109
+
110
+ - PackerでOSイメージを自分で作る方法を知っていた
111
+ - Packerを使ってVagrantのBoxを作る方法を一つずつ説明する - ヽ(´・肉・`)ノログ
112
+ - (URL長くて入らなかった)
113
+
114
+ # niku/debian
115
+
116
+ OS イメージ作成,サーバー起動,サーバーログイン
117
+
118
+ % git clone https://github.com/niku/uti.git
119
+ % cd uti/share/lib/server/host/
120
+ uti/share/lib/server/host% packer build jessie64.json
121
+ uti/share/lib/server/host% vagrant up
122
+ uti/share/lib/server/host% vagrant ssh
123
+
124
+ # niku/debian
125
+
126
+ Debianサーバー内でDockerイメージ生成,DockerHubへpush
127
+
128
+ $ uname -a
129
+ Linux packer-virtualbox-iso-1430355314 3.16.0-4-amd64 #1 SMP \
130
+ Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 GNU/Linux
131
+ $ cat /etc/debian_version
132
+ 8.0
133
+ $ sudo sh -c 'echo "deb http://ftp.jp.debian.org/debian sid main" > /etc/apt/sources.list.d/sid.list'
134
+ $ sudo apt-get update
135
+ $ sudo apt-get install -y docker.io git debootstrap
136
+ $ git clone https://github.com/docker/docker.git
137
+ $ sudo docker/contrib/mkimage.sh \
138
+ --dir debian-image \
139
+ --tag niku/debian \
140
+ debootstrap --variant=minbase \
141
+ jessie http://ftp.jp.debian.org/debian
142
+ $ cd debian-image
143
+ $ sudo docker login --username="niku" --email="my_email_address@example.com" --password="my_password"
144
+ $ sudo docker push niku/debian
145
+
146
+ # niku/nwiki
147
+
148
+ AutomatedBuild
149
+
150
+ - Github リポジトリを更新
151
+ - Github から Dockerhub へ Webhook でおしらせ
152
+ - Dockerhub が Dockerfile を元に Docker イメージをビルド
153
+
154
+ # niku/nwiki
155
+
156
+ やりかた
157
+
158
+ - Dockerfile のある github リポジトリを Dockerhub に AutomatedBuild で登録
159
+
160
+ ![](./dockerhub-automatedbuild.png){:relative_height="100"}
161
+
162
+ # niku/nwiki
163
+
164
+ やりかた
165
+
166
+ - github の webhook に Dockerhub を指定
167
+
168
+ ![](./github-webhook.png){:relative_height="100"}
169
+
170
+ # niku/nwiki
171
+
172
+ nwiki/Dockerfile
173
+
174
+ FROM niku/debian
175
+ MAINTAINER niku
176
+
177
+ RUN apt-get update && \
178
+ apt-get -y install build-essential \
179
+ ruby2.1-dev \
180
+ cmake \
181
+ pkg-config \
182
+ git \
183
+ apache2 \
184
+ libapache2-mod-passenger && \
185
+ echo "(設定ファイルの内容)" > /etc/apache2/sites-available/nwiki.conf && \
186
+ a2dissite 000-default && \
187
+ a2ensite nwiki && \
188
+ git clone https://github.com/niku/nwiki.git /var/www/nwiki && \
189
+ cd /var/www/nwiki && gem install bundler && bundle install
190
+
191
+ EXPOSE 80 443
192
+ CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
193
+
194
+ # niku/nikulog
195
+
196
+ 同様にAutomatedBuildを利用
197
+
198
+ # niku/nikulog
199
+
200
+ nikulog/Dockerfile
201
+
202
+ FROM niku/nwiki
203
+ MAINTAINER niku
204
+
205
+ RUN git clone https://github.com/niku/nikulog /var/www/nikulog && \
206
+ cd /var/www/nikulog && \
207
+ git checkout config && \
208
+ git checkout master && \
209
+ git fetch && \
210
+ git reset --hard origin/master && \
211
+ echo "(設定ファイルの内容)" > /var/www/nwiki/config.ru && \
212
+ mkdir -p /var/www/nikulog/tmp && \
213
+ touch /var/www/nikulog/tmp/restart.txt
214
+
215
+ # サーバーとイメージ準備完了
216
+
217
+ $ sudo docker pull niku/nikulog:latest
218
+ $ sudo docker run --publish 80:80 --name nikulog -d niku/nikulog
219
+
220
+ で表示できるようになった (^o^)/
221
+
222
+ # niku.name 更新のしくみ
223
+
224
+ 更新は? ∑(゚□゚;)
225
+
226
+ # niku.name 更新のしくみ
227
+
228
+ Docker導入以前
229
+
230
+ git
231
+ |
232
+ | Push
233
+ |
234
+ niku.nameのgit
235
+ |
236
+ | gitのhookスクリプト
237
+ |
238
+ github (niku/nikulog)
239
+
240
+
241
+ # niku.name 更新のしくみ
242
+
243
+ 参考にした
244
+
245
+ - DockerHubのAutomated Buildsをフックして最新のDockerコンテナをデプロイする | SOTA
246
+ - http://deeeet.com/writing/2015/01/08/dockerhub-hook/
247
+
248
+ # niku.name 更新のしくみ
249
+
250
+ Docker導入後
251
+
252
+ git
253
+ |
254
+ | Push
255
+ |
256
+ github (niku/nikulog)
257
+ |
258
+ | githubのWebhook
259
+ |
260
+ Dockerhub (niku/nikulog)
261
+ |
262
+ | DockerimageのAutomatedBuild
263
+ | DockerhubのWebhook
264
+ |
265
+ niku.nameのとあるポート
266
+ |
267
+ | (docker pull して再起動)
268
+ |
269
+ niku/nikulog 最新のdocker
270
+
271
+ # niku.name 更新待受
272
+
273
+ ![](./dockerhub-webhook.png){:relative_height="100"}
274
+
275
+ # niku.name 更新待受
276
+
277
+ Webhook待受サーバー
278
+
279
+ - bketelsen/captainhook
280
+ - https://github.com/bketelsen/captainhook
281
+ - HTTPリクエストがくると設定したjsonのとおりにコマンドを実行する
282
+
283
+ # niku.name 更新待受
284
+
285
+ サーバーに追加でアプリケーションを入れたくない
286
+
287
+ - niku/yobirinex
288
+ - https://github.com/niku/yobirinex
289
+ - 実行環境(ErlangVM)も同梱できるのでtarファイル展開した以下で完結する
290
+
291
+ # niku.name 更新待受
292
+
293
+ ErlangVM同梱HTTPサーバーの作りかた
294
+
295
+ - ElixirでHTTPのやりとりをする
296
+ - http://niku.name/articles/2015/07/03/Elixir%E3%81%A7HTTP%E3%81%AE%E3%82%84%E3%82%8A%E3%81%A8%E3%82%8A%E3%82%92%E3%81%99%E3%82%8B
297
+
298
+ # niku.name 更新待受
299
+
300
+ 更新用設定ファイル
301
+
302
+ % cat configdir/refresh-nikulog.json
303
+ {
304
+ "scripts": [
305
+ {
306
+ "command": "sudo",
307
+ "args": ["docker", "pull", "niku/nikulog:latest"]
308
+ },
309
+ {
310
+ "command": "sudo",
311
+ "args": ["docker", "kill", "nikulog"]
312
+ },
313
+ {
314
+ "command": "sudo",
315
+ "args": ["docker", "rm", "nikulog"]
316
+ },
317
+ {
318
+ "command": "sudo",
319
+ "args": ["docker", "run", "--publish", "80:80", "--name", "nikulog", "-d", "niku/nikulog"]
320
+ }
321
+ ]
322
+ }
323
+
324
+ # niku.name 更新待受
325
+
326
+ git
327
+ |
328
+ | Push
329
+ |
330
+ github (niku/nikulog)
331
+ |
332
+ | githubのWebhook
333
+ |
334
+ Dockerhub
335
+ |
336
+ | DockerimageのAutomatedBuild
337
+ | DockerhubのWebhook
338
+ |
339
+ niku.nameのとあるポート
340
+ |
341
+ | (docker pull して再起動)
342
+ |
343
+ niku/nikulog 最新のdocker
344
+
345
+ # その他/話せなかったこと1
346
+
347
+ - Dockerhub のビルド遅くて数分から十数分待つことがある.急いでないので別に問題にしていない
348
+ - Webhook飛んでこないことある.Dockerhubならwebから手動でビルド,niku.nameならローカルからcurlでリクエストしてる
349
+
350
+ # その他/話せなかったこと2
351
+
352
+ - docker-compose使ってない.Vagrant の docker プロビジョンでまだ対応していない
353
+ - Vagrant から Docker を使ったときの docker exec デバッグのやりかたを書きたかったけど時間なかった
354
+ - PackerでイメージつくるときのDEBCONF_DEBUG=5の有用さ
355
+
356
+ # まとめ
357
+
358
+ - niku.nameの表示
359
+ - Dockerイメージ
360
+ - niku.nameの更新
361
+ - GithubのWebhook
362
+ - DockerHubのAutomatedBuild
363
+ - DockerHubのWebhook
364
+ - 独自Webhook待受サーバー
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-niku-nikulog-with-docker
3
+ version: !ruby/object:Gem::Version
4
+ version: 2015.07.10
5
+ platform: ruby
6
+ authors:
7
+ - niku
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: "[Infrastructure as Code Casual 札幌 #0](http://infracode-sapporo.connpass.com/event/16476/)で発表した資料"
28
+ email:
29
+ - niku@niku.name
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - config.yaml
38
+ - dockerhub-automatedbuild.png
39
+ - dockerhub-webhook.png
40
+ - github-webhook.png
41
+ - nikulog-with-docker.md
42
+ - pdf/nikulog-with-docker-nikulog-with-docker.pdf
43
+ - "ヽ(´・肉・`)ノログとDocker.pdf"
44
+ homepage: http://slide.rabbit-shocker.org/authors/niku/nikulog-with-docker/
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.4.5
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: "ヽ(´・肉・`)ノログとDocker"
68
+ test_files: []