秘伝:クラウドに開発環境をえいっ!と構築する方法
TRANSCRIPT
【秘伝】クラウドに開発環境をえいっ!と構築する方法
オープンソースカンファレンス 2014 Nagoya日本openSUSEユーザ会 はしもとまさひこ
2
自己紹介
● 神奈川県(の政令都市の最も人口の少ない市)在住。
– 去年まで愛知県大府市に住んでいました。● 日本openSUSEユーザ会の人。
– ユーザ会ではいろいろ協力してくださる方を常に募集中!● 東海道らぐ(Tokaido Linux User Group)初代名古屋案内人
– 東海道らぐでは本日16時からLT大会を行います。
– こちらの会員も大募集中!● 実際は・・・自分は単なる文系出身のさえないエンジニアです!
– そんな人間でもこうしてセミナーやってるんですから…^^;
3
本日のアジェンダ
● VPSにLinuxをインストールしよう!
– Linuxディストリビューションの選び方
– VPSへインストールする際のコツ
– 絶対やっておきたいセキュリティ対策
● 開発環境だったらこれを入れるよね?
– Git: SSH でアクセスしてみよう!
– Jenkins: HTTPS でアクセスしてみよう!
● プライベートクラウドっぽく?
– 暗号化通信の方法
いつも時間がなくなるのでさくさく行きましょ〜(笑)
4
1.VPSにLinuxをインストールしよう!
5
最近レンタルVPSって増えてきましたよね?
● VPSをレンタルしてくれるところ、増えてきた気がします。
– どこがいいか…わかりません!(笑) ←状況によりますし● 是非今日出展されてるブースを覗きに行ってください。
● VPSを社内の情報共有に活用しよう!という話も多くなってます。
– 中小企業でも気軽に使える点がいいですね!
● …のだけど、実際はどう運用すべきかわからない!?
– 「気軽に」借りれるのはいいけど、運用は「気軽」じゃなかった?
– そもそもLinuxディストリビューションってなに?(そこから?)
6
Linuxディストリビューション選び。
● とりあえず・・・CentOS入れておく?
本当にそれでいいの?
せっかくだからいろいろ学んじゃえ!
そうだそうだ
7
ディストリビューションいろいろ
ときに、某雑誌にてこんな紹介がありました!
– Ubuntu 13.10 ・・・入門– Debian 7.4 ・・・汎用– Fedora 20 ・・・先進– CentOS 6.5 ・・・安定– openSUSE 13.1 ・・・欧州
※出典 : 日◯Linux 2014年5月号
注目
8
ちょっと解説(いいわけともいう)
この分類はどうなんだろ…?– Ubuntu :入門
= 初心者でも扱い安いのは間違えないよね。
– Debian :汎用= パッケージ数が豊富なため多方面で利用可能。
– Fedora :先進= あくまで「RHEL」と比較した場合かな…?
– CentOS :安定= 情報量が多いだけでは?(何を持って「安定」と呼べるか)
– openSUSE :欧州= もはやノーコメント(笑)
9
そもそもオープンソースを使うわけだから…
● サポート受けることが前提ならOSを買うべし!(きっぱり)
– 商用Linuxもいくらでもありますしね!● OSSはコミュニティーによって開発されるもの。
● 何かあったら誰かに質問する or バグ報告が大切
– 質問&バグ報告も、ひとつのスキルです!!
– ソースコードを書くことだけが重要なのではありません!
● コミュニティーが活発なディストリビューションは?
→オープンソースカンファレンスに参加しているか?等
● 私は「オープンソース=無料」で使えるという発想が好きではありません!
10
のでディストリビューション選びとは…
● いろんなディストリビューションにまず触れてみましょう!
● 百聞は一見に如かず!
下手な情報よりもまずは自分の手で動かしてみよう。
タベテミナケリャワカラナイ…
11
というわけで…openSUSEのご紹介
● ドイツ発祥のLinuxディストリビューションです!– だから欧州で人気があります。– 海外で定評のあるSLES, SLEDのオープンソース版
● SLES : SUSE Linux Enterprise Server● SLED : SUSE Linux Enterprise Desktop
● openSUSEといえば! YaST(やすと)– コントロールパネルみたいななんでもできるすごいやつ。
● Geeko(ぎーこ)くんも忘れずに!!– 本日も特大ぎーこくんが名古屋入りしてます。
12
openSUSEのパッケージ管理コマンドも覚えてね!
● パッケージ管理コマンド「zypper」– zypper install apache ←Apacheのインストール– zypper update ←パッケージのアップデート
● ただし、パッケージ検索ならWebから検索した方が早い場合もある!– http://software.opensuse.org/search– ワンクリックインストールでリポジトリ登録から
パッケージインストールまで自動実行!けど、サーバーではあまりメリットを感じないかな?^^;
13
それではVPSへインストールしてみましょう!
● なんだか「標準OS」とか「カスタムOS」とかあるんですけど~
およその VPS は CentOS がデフォルトなんでしょ?orz
● カスタムOSならいろんなディストリビューション出てくるよ~
でも openSUSE があるのは・・・(以下略)
● というわけで、CD/DVDメディアからインストールしてみよう。
他のディストリビューションでも同じ方法でいけるはず!
14
CD/DVDメディアからインストールする方法
● 使うもの:ネットワークインストール版CD/DVD
● 理由:フルDVD版だと VPS への転送に時間がかかるため
http://software.opensuse.org/131/ja
細かいインストール方法は VPSサービスによって異なるため、省略します(^^)(今日、VPSサービスのブースへ行ってみる or セミナーへ行ってみる などなど…)
15
セキュリティ対策も忘れずに…
私がこのセミナー資料を書いてる最中、突然知人から電話かかってきた!(以下実話^^;)
「レンタルしていたサーバーから大量のトラフィックが発生してると指摘を受けた。(から今度相談させて)」
…おいっ!!!
事故が他人事とは本っ当に思ってはいけません!!
16
絶対にやっておきたいセキュリティ対策
● SSH鍵認証を設定すること!– パスワードのみによるログインは絶対にダメ!– root ユーザーでの直接ログインも絶対にダメ!!
● 鍵の作成方法については省略(^^)
● VPS(サーバー)側の SSH設定を変更しましょう。– ファイル名: /etc/ssh/sshd_config ※最低限変更しておきたい内容
● PasswordAuthentication no =パスワード認証無効化● PermitRootLogin no =rootユーザのログイン無効化● ChallengeResponseAuthentication no =チャレンジレスポンス認証無効化 ● UsePAM no =PAMを使用した認証の無効化意味を知ってから自分の環境にあった設定へ変更することが重要です!
● 変更後「service sshd restart」(SSHD再起動)と入力するのを忘れずに。
SSHといえば…SSHサービスの自動起動「chkconfig sshd on」も忘れずに!
17
su か sudo か、それが問題だ!
● スーパーユーザー(root)のコマンドを入力する場合「su」もしくは「sodo」を使います。
– su 「su -」と入力した後、rootユーザのパスワードを入力して、
rootユーザのように振る舞う。
– sudo
「sudo zypper up」のように、一般ユーザのまま
スーパーユーザーのコマンドを入力する。
● どっちを使うべき?– サーバー管理者が複数人いる場合は「sudo」の方がいいのでは?
/var/log/messages をみればいつ誰がどのコマンドを使ったかわかりますしね。
– ひとりでサーバーを管理する場合は「su」でもいいと思います。
18
これだけは覚えておきたい! sudo の設定
● sudo 設定方法
> su -
# usermod -G wheel hashimom
# visudo
● /etc/sudoers の設定– Defaults targetpw
↓ コメントアウト
#Defaults targetpw
– ALL ALL = (ALL) ALL
↓ コメントアウト
#ALL ALL = (ALL) ALL
– #%wheel ALL=(ALL) ALL
↓ コメントイン
%wheel ALL=(ALL) ALL
スーパーユーザへ変更 一般ユーザ「hashimom」をwheelグループへ追加
※もちろん一般ユーザ名は 置き換えて読んでください!
/etc/sudoers を編集します
「#」をつけて、コメントアウトします。# つける…sudo 入力時に root パスワードを聞く# つけない…sudo 入力時に自分のパスワードを聞く→ root パスワードを共有しないようにします。
「#」をとって、コメントインします。→ wheel グループに root 権限を付与します。
注: あくまで設定例です! 意味を確かめながら自分の環境にあった設定をしてください。
「#」をつけて、コメントアウトします。→ 下記の wheel グループ以外に root 権限を付与しません。
19
YaSTでファイアウォールを設定しよう
● openSUSEでは、デフォルトでファイアウォールが起動しています。
● 「sudo /sbin/yast」と YaST を起動して、設定してあげましょう。
– 「セキュリティとユーザ」→「ファイアウォール」と選択します。
Iptables のコマンドを覚える必要もないですね(^^)
20
VPS は「外部ゾーン」に設定
● 「インターフェイス」を「外部ゾーン」で設定します。
1. 「インターフェイス」を選択
2. 「変更」を押して
3. 「外部ゾーン」を選択
21
アクセスを許可するサービスの追加方法
● メニューから「許可するサービス」を選択します。
1. 「許可するサービス」を選択
2. アクセスを許可するサービスを選択
3. 「追加」を選択
これで SSH は接続できるはず。接続できましたか?
22
ところで「内部」とか「外部」ってなに?
● VPSでは「外部ゾーン」に設定しよう!
ルーターを思い浮かべてください。● 内部ゾーン: LAN側● 外部ゾーン: WAN側● 非武装ゾーン: DMZ
GWルーター
PC(端末) サーバー
内部ゾーン内部ゾーン
非武装ゾーン(DMZ):
外からも内からもアクセス可能なゾーン
非武装ゾーン(DMZ):
外からも内からもアクセス可能なゾーン
インターネット外部ゾーン外部ゾーン
レンタルVPS はクラウド(インターネット)上に置かれています。だからしっかりとしたセキュリティ対策が必要なんですね!
23
2. 開発環境だったらこれを入れよう!
24
今時の開発環境はアジャイル?
● あじゃいるってなんぞや
…という話はここではしませんのであしからず^^
● とりあえず入れておきたいソフトは?– ソースコード管理ソフト– Jenkins(継続的インテグレーション )
最低限、そこだけは抑えたいですよね!その他のツールは時間の都合上もあり省略しますm(_ _)m
25
ソースコード管理といえば Git かな
● Git のインストールコマンド
> sudo zypper install git
● Git リポジトリの作成
> sudo mkdir -p /srv/git/hoge.git
> cd /srv/git/hoge.git
> git --bare init
● 接続テスト
> git clone ssh://localhost/srv/git/hoge.git
ここまでは楽勝…かな??
例では「/srv/git/hoge.git」というリポジトリを作成しています。置き換えて読んでください。
26
Gitリポジトリを共有しよう!
● 複数人で Git を利用する場合は、やっぱしそれなりセキュリティ対策が必要!– 誰でもサーバーを弄れてしまったら問題ですよね!– wheel グループのユーザー以外は、sudo を使わせないよう
にしましょう!
● 方法は2つ…かな?– Git運用用ユーザをひとつ作って皆で使う– 利用者全員に別々のユーザを発行する
※ Git運用ルールを踏まえた上で決めましょう!
● 細かな設定方法については省略しますm(_ _)m
27
続いて、Jenkins!
● 実はインストールは楽勝!> sudo zypper addrepo http://pkg.jenkins-ci.org/opensuse/ jenkins
> sudo zypper install jenkins
> sudo /etc/init.d/jenkins start
● これでインストールから起動まで完了です!
● 問題は SSL ・・・?
専用リポジトリの追加、インストール、
起動…という順です。
28
ApacheのリバースプロキシでSSL通信しよう
● 通常の HTTPでは暗号化されておらず、通信は平文で流れてしまいます。
Wireshark などで解析すると駄々漏れです…
● SSL を使用して、通信を暗号化しましょう!
パスワード入力画面とか平文はまずいしね…
● Apache のリバースプロキシ機能を使って、 Jenkins とのやりとりを暗号化していきます。
29
YaST から LAMP をインストールしてみよう
● パッケージのインストールも YaST が便利です!
● 「ソフトウェア」→「ソフトウェア管理」を選択します。
30
パッケージパターンで LAMP をまるごとインストール!
● 「Filter」で「Patterns」を選択します。– 「Web および LAMP サーバ」を探しましょう。
3. 見つかったら「Accept」を押してパッケージのインストールが
始まります。
1. 「Filter」で「Patterns」を選択
2. 「Web および LAMPサーバー」を選択
31
YaST で Apache も設定しちゃえ!
● YaST から 「ネットワークサービス」-「HTTP サーバ」を選択すると、Apache の設定が行えます。– ここでは何も設定しないので、全てそのまま「次へ」を押してみましょう!
「次へ」を押して次画面へ進みます
32
バーチャルホストを使ってみよう
● Apache には、1台のサーバー上に複数のWebサイトを置くことができる、「バーチャルホスト」という機能があります。
● Jenkins のサイトをバーチャルホストとして登録していきます。
– 他に Webサイトを構築したくなったときに対応できますね!
● 設定方法:– sudo vi /etc/apache2/listen.conf で以下の行を編集します。
編集前) #NameVirtualHost *
↓
編集後) NameVirtualHost * ←「#」をとってコメントイン
33
バーチャルホストの設定ファイル
● /etc/apache2/vhosts.d がの設定ファイルを置き場です。● テンプレートがあるのでコピーして使いましょう!
– vhost.template: 通常のサイトのテンプレート– vhost-ssl.template: SSLサイトのテンプレート
※「cp -p vhost.template hoge.conf」で作成します。● 拡張子は必ず「.conf」という形にします!
● YaST でも通常のサイトのみバーチャルホストが作れます。– どちらの方法でもいいですが、YaST で Apache の設定を変更すると、この
ディレクトリ内の「.conf」ファイルが消されてしまう場合があります(^^;
– そのため「.conf」ファイルを手書きで修正したら、必ず拡張子を変更して、バックアップを作成しておきましょう!
● Jenkins (SSL)サイトの作成については後述します。
34
さて、SSL対応…の前におまじない
● YaST を起動して
「システム」-「/etc/sysconfig エディタ」を開きましょう。
1. 「WWW」-「Apache2」--「APACHE SERVER FLAGS」
を選択
2. 「SSL」と入力
3. 「完了」を押す
他にもいろんなことができます。
35
SSL にも鍵があるんです!
● こんな感じで作ります。
> openssl genrsa -des3 -out server.key
> openssl req -new -x509 -key server.key -out server.crt● 噂の「openssl」です! 入力前に必ずパッケージを最新にしましょう!● このコマンドは一例です。オプションの意味を確認してください。
● 作成し終わったら配置します。
> sudo cp server.key /etc/apache2/ssl.key/
> sudo cp server.crt /etc/apache2/ssl.crt/● 配置場所については、次頁以降のバーチャルホスト設定ファイルに記載す
る場所になります。
36
Jenkins サイトの設定(大詰め!)
● Jenkins のバーチャルホストを作成します。– 下記コマンドでファイルを作成してください。
> cd /etc/apache2/vhosts.d
> sudo cp -p vhost-ssl.template vhost-ssl.conf
> sudo vi vhost-ssl.conf
大詰め!あとすこしだよ~
37
設定ファイル(例)
編集し終わったら「service apache2 restart」で再起動します!
あ、設定ファイルのバックアップも忘れずに!(バックアップは拡張子も変えてね!)
<VirtualHost hogehoge.net:443>
# General setup for the virtual host ServerName hogehoge.net:443 ServerAdmin [email protected] ErrorLog /var/log/apache2/error_log TransferLog /var/log/apache2/access_log
ProxyRequests Off ProxyPreserveHost On <Proxy http://localhost:8080/*> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ ProxyPassReverse / http://hogehoge.net/
赤字が修正箇所です!
ここからがリバースプロキシの設定です。
元々 Jenkins は「http://localhost:8080/」という URL で動いています。
それを「https://hogehoge.net/」で閲覧できるようにするというのが
この設定になります。
この下に、先ほど作成した鍵のファイルパスなどが書かれています。
必要に応じて変更してください。
38
動きましたか~?
● かなりざっくり書いてしまっているので、ひとつやふたつ難関にぶち当たるかも…?– 私もこの資料作成するのに実験をいろいろしています
が、なかなか思うようにはいかないものです(^^;– 設定も勉強だと思って、めげずに頑張りましょ~!
39
3. プライベートクラウドっぽく使うには?
40
暗号化の方法は他にもあります!
● VPS (クラウド上)にサーバーを構築する以上、セキュリティの大切さは理解していただけましたでしょうか?
● 今回紹介した SSH や HTTPS の他にも、Virtual Private Network(VPN) を利用して暗号化する方法があります。
● VPN の種類:– PPTP : Windows 向け?(セキュリティ的に非推奨)– IPsec : 拠点間通信向け(点と点を結びます)– L2TP : スマホ向け(相手のIPアドレスが不特定の場合に)– OpenVPN : Linux 向け?(非対応ばかり…)
41
VPS で VPN を使うとしたら?
● IPsec が便利かと思います。
– openSUSE では StrongSwan というソフトが使えます。
– 詳細は下記の資料を参考にしてください(^^)
http://www.slideshare.net/hashimom/vpn-24901457
ちゃっかり宣伝です。(昨年OSC京都の資料ですね…)
42
まとめ。
43
たいせつなことは。
● オープンソースは使うだけのものではありません!– 自分たちでオープンソース成長させていくんだ!という気持ちで。
– 質問するスキルも身につけましょう!
● なんでこう設定するの?を確認しましょう!– コピペだけではなんの意味もありません。
– 意味を理解した上で、しっかりセキュリティ対策していきましょう!
44
日本openSUSEユーザ会への問い合わせ
● わからない場合は・・・
– メーリングリスト
– 日本語フォーラム(http://forum.geeko.jp)
– IRC (毎週土曜22時~ freenode #opensuse-ja にて定例)
– Twitter (@opensuseja)
– Facebook( https://www.facebook.com/opensuseja )
● いろいろあるので活用していきましょう!
45
ご清聴、ありがとうございましたm(_ _)m