今日からはじめる䌑日個人開発 ïœž ã‚¯ãƒ©ã‚Šãƒ‰ã‚µãƒŒãƒ“スの遞定から、WebサヌバでPHPを動かすたで

プラむベヌトで䜕か開発しおいたすか å€‹äººã§äŒ‘日に気軜に䜕かを䜜っおみよう ãšã„う䌁画をスタヌトしたす。

今日からはじめる䌑日個人開発 ïœž ã‚¯ãƒ©ã‚Šãƒ‰ã‚µãƒŒãƒ“スの遞定から、WebサヌバでPHPを動かすたで

皆さん、プラむベヌトで䜕か開発しおいたすか「䜕か䜜りたい」ずいう気持ちはあるものの、いたひず぀䜕から始めたらいいのか分からず、動けないたたの人も倚いず思いたす。

そんな皆さんのために、仕事以倖にも䌑日に個人で気軜に䜕かを䜜っおみよう ずいう䌁画をスタヌトしたす。今回は、OSをむンストヌルしたおのクラりドサヌバを、プログラムが実行できるWebサヌバずしお動かすたでの手順を解説したす。

個人で開発するずきの実行環境を遞ぶ

珟圚では、個人で開発したプログラムの実行環境も、甚途にあった圢で遞ぶこずができたす。物理的にサヌバを借りるものから、クラりドで環境を借りるものたでさたざたです。以䞋のような環境が考えられるでしょう。

ロヌカル サヌバを甚意せず、手元にあるマシンを利甚しお開発を行う。自分だけが䜿甚するツヌルの開発であればこのパタヌンでたかなえる。ただし、サヌビスを倖郚に提䟛したい堎合には、開発はロヌカルで実斜したずしおも、公開は䞋蚘のいずれかの環境で行うのが䞀般的。
オンプレミス 物理サヌバを自前で甚意しおサヌビスを提䟛する。空調管理に気を付けたり、グロヌバルIPを準備したり、手間やコストはかかるが、ネットワヌクからサヌバたでの環境を物理的にも閉じるこずができるので、きちんずした環境を準備できればセキュリティ面や安定運甚の面のメリットがある。
レンタルサヌバ 共有型のレンタルサヌバでは、CPUやメモリなどを耇数のナヌザず共有しお利甚する。そのため、他のナヌザの圱響を受けやすい。OSの管理者暩限がないので、サヌバの知識がなくおも利甚できるが、ナヌザ暩限のみで操䜜可胜なこずしかできない。たた、それもWebに関わる郚分が䞭心であり、甚途がWebサヌビスに限られるこずも倚い。
VPS サヌバは共有だが、仮想化技術によっおサヌバ内に専甚マシンが甚意される。OSの管理者暩限もある。CPU・メモリ・ストレヌゞはあらかじめ指定した分が分割され、運甚䞭のリ゜ヌスの調敎ができない。
クラりド VPSず同様に、仮想化技術による専甚マシンが共有サヌバ内に甚意され、OSの管理者暩限もある。CPU・メモリ・ストレヌゞなどのリ゜ヌスをその時々で調敎しお、必芁なパフォヌマンスを埗るこずが可胜。

個人開発ならばクラりドがおすすめ

䌑日に個人で開発するのであれば、クラりドがおすすめです。各瀟からお手頃な䟡栌垯のプランが提䟛されおおり、簡単に導入ができたす。

珟圚䞻流になっおいるクラりドは、サヌビスを提䟛する方法によっお、IaaS・PaaS・SaaSなどに分類できたす。利甚目的により、最適なサヌビスを遞ぶこずが倧切です。

䞋の図では、それぞれの皮類のクラりドサヌビスがカバヌする範囲を青色で衚瀺しおいたす。甚途に合わせたサヌビスを䜿うこずで、利甚者の負担を軜枛できたす。

1

それぞれのサヌビスには、次のような特城がありたす。

IaaSInfrastructure as a Service

アプリケヌションの皌動に必芁な仮想サヌバやネットワヌクなどのむンフラを、むンタヌネット䞊のサヌビスずしお提䟛するサヌビスのこずです。サヌバ、ストレヌゞ、ネットワヌク環境など、必芁な芏暡に応じおサヌビス料を支払っお利甚したす。

必芁なハヌドりェアのスペックやOSを開発者自身が遞定できるため、自由床が高いです。

䟋Google Compute Engine、Amazon EC2Elastic Compute Cloud

PaaSPlatform as a Service

アプリケヌション゜フトりェアを皌動するための土台ずなるハヌドりェアやOSなどのプラットフォヌム䞀匏を、むンタヌネット䞊のサヌビスずしお提䟛するサヌビスのこずです。PaaSは、むンフラ・DBMSなどのシステムを運甚するための環境も備えおおり、開発者はプラットフォヌム䞊にサヌビスを開発しおいきたす。

IaaS環境に比べ、スケヌラビリティや生産性の面で開発者の負担を枛らすこずができたす。

䟋Google App Engine、Heroku

SaaSSoftware as a Service

むンタヌネット経由で゜フトりェア・サヌビスを利甚できるサヌビスのこずです。利甚者はプログラミングをしたり゜フトりェアをむンストヌルしたりする必芁がなく、必芁な機胜を遞んで利甚できたす。

䜿いたいタむミングに必芁な分だけ利甚すればよいため、サヌバの導入や構築・管理にかかるコストを抑えられたす。

䟋Google Apps、Salesforce、GitHub

クラりドサヌビスの遞び方

SaaSであれば、必芁なものを遞定しお、組み合わせおサヌビスを利甚できたす。PaaSであれば、ちょっずしたスクリプトを動かしたい堎合に、環境構築のコストを削枛しお実装ができたす。IaaSは自由床が非垞に高いですが、自分自身で環境構築を行う必芁がありたす。

これらの特城を考え、サヌビスを開発する際に必芁な環境を遞びたしょう。

クラりドが登堎する以前は、今でいうIaaSのように「開発時には環境構築をするのは圓たり前」ずいう環境でした。最近では、ハヌドりェアやOSの管理たでをプラットフォヌムずしお提䟛するPaaSの登堎により、開発者はアプリケヌション開発のみに専念できるこずも倚くなりたした。

環境の初期構築や、サヌビスを運甚しながら日々脆匱性察応でOSや゜フトりェアの曎新をするのは手間がかかりたす。あらかじめプラットフォヌムが甚意され、メンテナンスもやっおくれたら、開発者はアプリケヌションの開発に専念できるよね、ずいう考えです。

IaaSのサヌビスを遞んで、サヌバを構築しよう

今回はあえおIaaSを遞択し、OSがむンストヌルされただけの状態からWebサヌバを構築しおみようず思いたす。

Webアプリケヌションを開発するフロント゚ンド゚ンゞニアであっおも、サヌバやむンフラの知識は、あればあるだけ圹に立ちたす。䜕かトラブルが発生した堎合に、サヌバがどのように動いおいるのか、ネットワヌクはどのように蚭定されおいお䜕を確認すればよいのか、などの知識が必芁になるこずがありたす。

自分が動かすアプリケヌションがどのような堎所で動いおいるのかを理解するためにも、サヌバを構築する経隓はよい勉匷になりたす。私も孊生時代に各皮サヌバやネットワヌクの構築・運甚をしたこずで、いろいろな幅広い知識を孊べたした。そしお、その経隓は就職埌にも圹立っおいたす。

サヌビスを遞ぶ際にチェックしたいポむント

サヌビスを探しおいるずきに、月々100円皋床の非垞に安いプランを芋かけるこずもあるでしょう。しかし、それらはSSHログむンできないレンタルサヌバずいう可胜性もあるので泚意しおください。

少し奮発しおでもSSHログむンに察応しおいるIaaSプランを遞ぶこずをおすすめしたす。実際にログむンしお、サヌバでいろいろず構築や蚭定をするこずが、勉匷になるからです。

料金䜓系には、月額課金のものず埓量課金のものがありたす。埓量課金の堎合、利甚状況により請求額が倉わっおしたい、堎合によっおは高額になるこずもありたす。たずは分かりやすい月額課金の定額サヌビスを䜿っおみるのがよいでしょう。月々500円皋床で利甚できるプランもありたす。

IaaSを提䟛しおいる䞻なサヌビスを、以䞋に挙げたした。掲茉したリンクから、特城や料金をいろいろず芋比べおみおください。キャンペヌンバナヌに目を向ければ、新芏登録者のために無料のお詊しキャンペヌンやクヌポンなどが甚意されおいるこずもありたす。

IaaSを提䟛しおいるサヌビスの䟋

これらのサヌビスではクヌポンなどが甚意されおいお、クラりドを無料で詊しおみるこずができたす。ただし、無料であっおもクレゞットカヌドの登録が必芁になるこずがありたす。無料期間終了埌の継続課金などに぀いおは、各サヌビスのドキュメントを参照しおください※情報は蚘事執筆時点のものです。

IDCFクラりドIDCフロンティア
  • www.idcf.jp/cloud/
  • 6ヶ月分3,000円分の無料お詊しクヌポンが公匏ペヌゞにある
Amazon EC2Elastic Compute Cloud
Google Compute Engine

アカりントの登録ずOSのむンストヌル

利甚するサヌビスを決めたら、アカりントを登録したす。

具䜓的なサむンアップの手順に぀いおは、サヌビスによっお異なるので本皿では割愛したす。メヌルアドレスずクレゞットカヌドがあれば、各サヌビスに甚意されたドキュメントをもずにサむンアップできるでしょう。

登録埌には、サヌバのむンスタンスの䜜成を行いたす。他にも、ネットワヌクやIPアドレス、ファむアりォヌルの蚭定などが必芁になるこずがありたす。こちらも、各サヌビスで甚意されたドキュメントを確認しおください。

どのサヌビスでもコントロヌルパネルダッシュボヌドやコン゜ヌルず呌ばれるこずもありたすから、簡単にサヌバのむンスタンスが䜜成できるかず思いたす。これもIaaSの恩恵です。クラりド以倖でOSをむンストヌルしようずすれば、ISOむメヌゞをダりンロヌドするずころから始めないずいけたせん。IaaSであれば、䜿いたいOSの皮類やバヌゞョンを遞択しおいくだけで、OSがむンストヌルされたサヌバを簡単に手に入れるこずができたす。

なお、この蚘事では、OSずしおCentOS 7.2 64-bitを利甚しおいるこずを前提に説明しおいきたすCentOSは、Linuxのディストリビュヌションの䞀぀です。

ここからは、OSがむンストヌルされ、SSH接続可胜なサヌバのむンスタンスが立ち䞊がっおいる状態から、構築の手順を䞀぀ず぀説明しおいきたす。

1. サヌバを最新の状態にしお、䜜業甚アカりントを甚意する

SSHログむンできるプランを遞択しおいれば、SSH接続に䜿甚するアカりントや鍵、接続するホストなどは、サヌビスが提䟛しおいるコントロヌルパネルやドキュメントで説明されおいるはずなので、確認しおください䜜業甚のアカりントが甚意されおいるこずもあれば、管理者暩限のrootが甚意されおいるこずもありたす。

SSHの鍵を自分で䜜成する必芁があれば、以前に゚ンゞニアHubで執筆した「今日からはじめるGitHub」の「ssh-keygenコマンドで鍵を生成する」の説明を参照しおください。

以䞋では、rootでログむンしおいるこずを前提ずしお手順を進めおいきたすSSH接続のアカりントがroot以倖の䜜業甚アカりントであれば、「rootでログむン」ず説明しおいる箇所は、コマンドの前にsudoを远加し、管理者暩限でコマンドを実行しおください。

パッケヌゞを最新の状態に曎新

脆匱性察策のためにも、サヌバにむンストヌルされおいるパッケヌゞを垞に最新化する習慣を぀けたしょう。叀いバヌゞョンの゜フトりェアに脆匱性が存圚しおいれば、もちろん攻撃者もその情報を知っおいたす。攻撃の仕方が知られおいるたた攟眮しおおくこずが高リスクなのは明らかでしょう。

yumコマンドで、むンストヌル枈みのパッケヌゞを最新にしたしょうyumは、Red Hat系のLinuxディストリビュヌションで利甚されるパッケヌゞを管理する仕組みで、パッケヌゞの远加・削陀・曎新などに利甚したす。

# yum -y update

アップデヌトした内容を反映するため、OSを再起動したす。アップデヌトの察象によっおOSの再起動が䞍芁なこずもありたすが、区別できなければ再起動しおおけば安心でしょう。

# reboot
プロンプトず管理者暩限

プロンプトずは、コマンド入力䜍眮を衚瀺するもので、システムが呜什入力を受け付けられる状態にあるこずを瀺すために衚瀺される蚘号のこずです。

Linuxでは通垞、䞀般ナヌザでは「$」、rootでは「#」が衚瀺されたす。rootは管理者暩限を持っおいるので、「#」が芋えおいるずきには现心の泚意を払い、気を匕き締めおコマンドを打ちたしょう。

$ 【コマンド】
# 【コマンド】

䜜業甚のアカりントを远加

rootは管理者暩限を持っおおり、Unix/Linux系のOSをむンストヌルするずデフォルトで共通しお存圚するアカりントです。サヌバを攻撃する偎からするず、最初にログむンを詊す䟡倀があるアカりントずいえたす。もし、rootでのログむンに成功されおしたったら、管理者暩限を持っおいるため、サヌバで奜き攟題されおしたいたす。

それを防止するため、rootでSSH接続できない状態にしおおきたしょうSSHログむンできる䜜業アカりントがrootずは別に甚意され、すでにrootでSSHできないようになっおいれば次の手順たで進んでください。

今埌のSSHログむンに䜿う䜜業甚のアカりントを、次のように䜜成したす。ここでは「user1」ずいうアカりントを远加しおいたす。

# useradd user1

䜜成したアカりントのパスワヌドを蚭定したす。

# passwd user1
ナヌザヌ user1 のパスワヌドを倉曎。
新しいパスワヌド:
新しいパスワヌドを再入力しおください:
passwd: すべおの認蚌トヌクンが正しく曎新できたした。

远加したアカりントの公開鍵配眮

䜜成した䜜業甚アカりントでSSHログむンするために、公開鍵を配眮したす。 鍵の生成は、前述のように以前の蚘事で解説しおいるので参照しおください。

.sshディレクトリをパヌミッション700で䜜成したす。

# mkdir -m 700 /home/user1/.ssh

公開鍵を配眮したす。䞊蚘の蚘事などを参考に、䜜成した公開鍵を甚意したす。

# vim /home/user1/.ssh/authorized_keys

公開鍵のパヌミッションを600に倉曎したす。

# chmod 600 /home/user1/.ssh/authorized_keys 

.ssh配䞋の所有者を倉曎したす。

# chown -R user1:user1 /home/user1/.ssh/

ここたでの蚭定でサヌバ䞊のuser1のアカりントがSSH接続できる状態になりたした。user1でSSHログむンし、接続できるこずを確認したしょう。

なお、ログむンしおいるアカりントは以䞋のコマンドで確認できたす。

$ whoami
user1

sudoナヌザを远加

root以倖のアカりントでsudoを䜿えない状態であれば、䜿えるように蚭定を倉曎したす。

wheelグルヌプにsudo暩限を぀けたす。

# visudo

以䞋の行にコメントアりトが぀いおいる堎合、コメントアりトを倖しお有効化したす。

# %wheel  ALL=(ALL)       ALL

になっおいたら

%wheel  ALL=(ALL)       ALL

にしたしょう。

user1をwheelグルヌプに远加したす。sudoを蚱可するアカりントのみwheelに所属させたす。

# usermod -G wheel user1

ここたでの蚭定でuser1でsudoを実行できるようになりたした。詊しにuser1でログむンし、sudoが䜿えるか確認したす。

ログむンしおいるアカりントを確認したす。

$ whoami 
user1

sudoが䜿えるか確認したしょう。これで゚ラヌにならなければ、無事にsudo暩限が付䞎されおいたす。

$ sudo pwd
[sudo] password for user1: 
/home/user1

以降の手順は、rootではなく、䜜業甚アカりントで䜜業できたす。

rootでのSSHログむンを制限

セキュリティ察策の面から、rootではSSH接続できないように制限したす。

SSHの蚭定を倉曎したしょう。

$ sudo vim /etc/ssh/sshd_config 

PermitRootLoginをnoに倉曎したす。

#PermitRootLogin yes
PermitRootLogin no

sshdを再起動しお蚭定を反映したしょう。

$ sudo service sshd restart
Redirecting to /bin/systemctl restart  sshd.service

この段階でrootでSSH接続しようずするず Permission denied (publickey,gssapi-keyex,gssapi-with-mic). で接続拒吊されたす。

2. Apacheをむンストヌルし、開発のためにBasic認蚌を远加する

次に、ApacheをむンストヌルしおWebサヌバを皌働させたす。ただし、ただ構築䞭で公開はしたくないので、Basic認蚌を蚭定したす。

Apacheむンストヌル

たずはパッケヌゞをむンストヌルしたす。

$ sudo yum -y install httpd

Apacheのバヌゞョンを確認したしょうapachectlたたはhttpdコマンドの -version オプションで確認できたす。

$ apachectl -version
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 14 2016 18:04:44

Apacheを起動したす。

$ service httpd start

 or

$ apachectl start

http://サヌバのIPアドレスたたはドメむン/ にアクセスしクラりドのIPアドレスやドメむンはサヌビスのコントロヌルパネルなどで確認しおください、Apache HTTP Server Test Pageが衚瀺されるこずを確認したす。

2

WebペヌゞにBasic認蚌を远加

次に、開発䞭の画面を非公開にするためにBasic認蚌を远加したす。

認蚌甚のアカりント・パスワヌドを生成したす。【password】の郚分には適圓なパスワヌドを指定しおください。

$ sudo htpasswd -c -b /etc/httpd/conf/.htpasswd user1 【password】
[sudo] password for user1: 
Adding password for user user1

Basic認蚌の蚭定を远加したす。

$ sudo vim /etc/httpd/conf/httpd.conf

以䞋の蚭定を远加したしょう。

<Directory "/var/www/html/">
    AuthUserFile /etc/httpd/conf/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Basic Auth"
    AuthType Basic
    Require valid-user
</Directory>

Apacheを再起動しお蚭定を反映させたす。

$ service httpd restart

 or

$ apachectl restart

これで先ほどのペヌゞにアクセスするず、蚭定したナヌザ名ずパスワヌドがないず閲芧できない状態になっおいたす。

3

Apacheの自動起動蚭定

自動起動をONに蚭定しおおくず、OS再起動時などにApacheを自動で起動できたす。

$ chkconfig httpd on

確認は以䞋のコマンドで可胜です。

$ systemctl is-enabled httpd
enabled

3. ApacheでPHPを䜿えるようにする

ApacheでPHPを䜿えるようにしたす。基本的には、以䞋のようにパッケヌゞをむンストヌルするだけで、蚭定たで完了した状態になりたす。

$ sudo yum -y install php
$ service httpd restart

この段階で、詊しにPHPファむルをドキュメントルヌト/var/www/html/に配眮しおみたしょう。

$ sudo vim /var/www/html/test.php
<?php
echo "Hello World";

この状態で http://サヌバのIPアドレスたたはドメむン/test.php にアクセスするず、「Hello World」ず衚瀺されたす。

4

これで、Apache䞊でPHPを動䜜させるこずができるようになりたした。この環境を䜿っおPHPのプログラムを曞いおいけば、Webサヌビスを開発・公開できたす。

PHP以倖の蚀語を利甚したいずきには、それぞれの蚀語に必芁なパッケヌゞをむンストヌルしお、蚭定したしょう。他の蚀語を䜿いたいずきにも、簡単に環境を甚意できたす。

おわりに

いかがでしたでしょうか。Webサヌバであれば、このように簡単に構築できたした。欲しい機胜は今回䜜成したサヌバをいじっお、どんどん拡匵しおいきたしょう。これで開発環境が準備できたので、匕き続きテストコヌドの曞き方や自動デプロむの方法などを玹介しおいきたいず思いたす。

最初はなかなかコマンドの意味が分からなかったり、䜕が原因で思い通りの動きをしないのか調べたりするのに苊劎するかもしれたせん。しかし、トラむ゚ラヌで慣れるのが倧切です。そのためにも、簡単なものから詊しおみお「サヌバをいじるのっお面癜いかも」ず感じおいただければ幞いです。

執筆者

池田健人いけだ・けんず @ikenyal

5
サヌバサむド゚ンゞニア。孊生時代に研究宀や孊郚の各皮サヌバ・ネットワヌク構築などを経隓し、プログラミング以倖の技術も孊ぶ。2011幎に某Webç³»IT䌁業に入瀟。゚ンゞニア職であり぀぀も、校正スキルには自信あり。珟圚はリヌダヌずしおマネゞメントスキルを習埗䞭。

線集薄井千春ZINE

若手ハむキャリアのスカりト転職