T&T United Inc.

Knowledge over the Air

【連載】iOS/Androidアプリ開発入門「サーバ連動アプリを開発しよう!」 (7) リモートサーバ(本番環境)の構築

      2015/03/12

みなさん、こんにちは!

iOSとAndroidで本格的なアプリを開発してみたい方向けの連載の第7回です。

これまで同様、本格的なアプリを開発するためには「何を知っておかなければならないか」「何を勉強すればいいか」を中心に書いていきたいと思います。

前回までで、ローカル環境での開発・テストが完了しましたので、今回は、リモートサーバ(本番環境)の構築を行っていきたいと思います。

早速はじめていきましょう。

スポンサーリンク

リモートサーバを選択する

リモートサーバとして何を選べばよいでしょうか。

今回はクラウドサーバを選択

リモートサーバの選択肢としては、オンプレミス、レンタルサーバ、VPS、クラウドサーバの4つが考えられます。

まず、自社でハードウェアを購入して自社ビルやデータセンター等に設置する「オンプレミス」については、費用がかさむため除外します。

次に、レンタルサーバはPHPが動くものもありますが、使える機能に制限が多いため選択肢から外します。

最後に、VPSはrootでログインできて多くの機能を使えますが、拡張性や管理機能がないケースが多いため選択肢から外します。

ということで、今回は、費用が安く、使える機能に制限がなく、拡張性や管理機能に優れているクラウドサーバを選択します。

クラウドベンダーの選択

クラウドのサービスを提供するベンダーの選択肢としては、Amazon、Google、Microsoftなどが考えられます。

今回は、多くのアプリが本番環境として採用しているAmazonのAWS(Amazon Web Services)を採用します。

AWSは歴史が長く、利用者も多いため、ネットで情報収集しやすい点も魅力の一つです。

リモートサーバを構築する

AWS上にリモートサーバを構築する流れは以下のとおりです。

  1. AWSのアカウントを作成し、管理画面にログインする
  2. 使いたいサーバの種類を選ぶ(1年間無料のEC2インスタンス、t2.microを選択)
  3. 使いたいOSの種類を選ぶ(Amazon Linuxを選択)
  4. 使いたいストレージの種類と容量を選ぶ(SSD、8GBを選択)
  5. ネットワークのセキュリティを設定する(ポート22、80を開放)
  6. EC2インスタンスを起動する
  7. 固定IPアドレスを割り当てる
  8. サーバにsshでログインする
  9. サーバにApache, MySQL, PHPをインストールする
  10. サーバにサーバ側プログラムをインストールする
  11. サーバ上のMySQLにユーザ、データベース、テーブルを作成する
  12. 動作確認する

1つずつ順に見ていきます。

(1) AWSのアカウントを作成し、管理画面にログインする

AWSを使うには、アカウントを作成する必要があります。

アカウントの作成にはクレジットカード番号の登録が必要となりますので、準備します。

AWSのトップページで「サインアップ」をクリックし、必要事項を入力していくだけでアカウントが作れます。

作成したアカウントでログインすることもできますが、慣れてきたらIAMというAWSのユーザ管理機能を使って、作業用のユーザを作成すると良いでしょう。

(2) 使いたいサーバの種類を選ぶ

AWSには大きく分けて汎用サーバ、ストレージサーバ、DBサーバの3つのサーバが用意されています。

今回は汎用サーバの「EC2」を選択し、プランは「t2.micro」という1年間無料プランを選びます。

AWSでは、世界のどの地域・都市にサーバを起動するかを選ぶことができます。

今回は日本で使われることを想定したアプリですので、アジア・東京を選択します。

(3) 使いたいOSの種類を選ぶ

EC2はOSを自由に選ぶことができます。

OSの種類としては、Amazon Linux、Windows Server、CentOS、Debianなどが選べます。

今回は最もポピュラーなAmazon Linuxを選択します。

(4) 使いたいストレージの種類と容量を選ぶ

EC2はストレージの種類と容量を選ぶことができます。

特に理由がなければ、標準でありかつ十分な速度を提供するSSDを選びます。

容量は必要な量を確保しますが、よくわからなければ最初は最低限の8GBでスタートすればよいでしょう。

(5) ネットワークのセキュリティを設定する

EC2はネットワーク・セキュリティの仕組みを提供します。

今回は外部から接続を許可するポートとして22(ssh用)と80(HTTP用)のみを追加し、それ以外のポートは閉じておきます。

(6) EC2インスタンスを起動する

EC2では、初回起動時にssh用の鍵を作成し、ダウンロードできます。

sshは、リモートサーバにログインするためのコマンドです。

WindowsならTera Term、MacならOS標準のコンソールでsshが使えます。

鍵をなくすとサーバにsshでログインできなくなりますので、大切に保管しておきましょう。

これらの設定が完了すれば、EC2を起動することができます。

早速起動してみましょう。

起動したEC2を「EC2インスタンス」と呼びます。

(7) 固定IPアドレスを割り当てる

EC2を起動したら、固定IPアドレスを割り当てます。

これを忘れると、サーバを再起動するたびにサーバのIPアドレスが変わってしまいます。

固定IPアドレスの割り当ては、AWSの管理画面で簡単に行えます。

AWSでは固定IPアドレスのことを「Elastic IP」と呼びます。

(8) サーバにsshでログインする

EC2を起動し、固定IPを割り当てたら、先ほどダウンロードしたssh用の鍵を使って、サーバにログインします。

(9) サーバにApache, MySQL, PHPをインストールする

サーバにsshでログインできたら、早速Apache、MySQL、PHPをインストールします。

Amazon Linuxでは、yumというコマンドを使って一括でインストールできます。

yumというのはパッケージ管理ツールで、外部からソフトウェアを取得してインストールしてくれるだけでなく、アップデートがあれば画面上で通知してくれたりします。

以下のような感じで一気にインストールしてしまいましょう。

$ sudo yum install httpd24 mysql-server php54 php54-devel php54-gd php54-mbstring php54-mcrypt php54-mysql php54-pecl-apc php54-pecl-memcache php54-pecl-memcached php54-pecl-xdebug

ApacheとMySQLは、インストール後に初期設定がいくつか必要となります。

CakePHPを使う場合、Apacheの設定を以下のように変更して.htaccessを有効化します。

なお、viというのはテキストファイルを編集するためのコマンドです。

この機会に使えるようになりましょう。

$ sudo vi /etc/httpd/conf/httpd.conf
(httpd.conf内)
 :
<Directory "/var/www/html">
 AllowOverride NoneをAllowOverride Allに変更
</Diectory>
 :

インストールしただけではApache、MySQL、PHPは起動していません。

以下のコマンドで起動することができます。

$ sudo service httpd start
$ sudo service mysqld start

ついでに、サーバを再起動した時に自動起動するように設定しておきましょう。

$ sudo chkconfig httpd on
$ sudo chkconfig mysqld on

Apacheが正常に動いているか否かは、ローカル端末のブラウザでURL欄にサーバの固定IPアドレスを直接打ち込むことで確認できます。


http://xxx.xxx.xxx.xxx

うまくできていれば、Apacheのウェルカムページが表示されます。

(10) サーバにサーバ側プログラムをインストールする

サーバ側アプリをインストールすることを「デプロイ」と呼ぶことがあります。

PHPの場合、LAMP環境が構築できていれば、ファイルをコピーしてパーミッションを設定するだけで完了です。

ローカル端末からリモート端末にファイルをコピーする方法はいくつかありますが、簡単なのはscpやrsyncといったコマンドを使うことです。

GitHubを使っていれば、そこから最新のファイルを取得する方法もあります。

(11) サーバ上のMySQLにユーザ、データベース、テーブルを作成する

最後に、サーバのMySQL上にアプリ用のユーザ、データベース、テーブルを作成します。

まず、MySQLの管理ユーザを作成します。

$ mysqladmin -u root password 'xxx'

次に、MySQLのコンソールにログインして、アプリ用のユーザとデータベースを作成します。

$ mysql -u root -p

(MySQL)
> CREATE DATABASE xxx;
> USE xxx;
> CREATE USER 'xxx'@'localhost';
> SET PASSWORD FOR 'xxx'@'localhost' = PASSWORD('xxx');
> GRANT ALL ON xxx.* to 'xxx'@'localhost';

あとは、ローカル開発環境でデータベースのスキーマをエクスポートし、scpなどでリモート端末にコピーしたうえで、インポートすれば完了です。

(MySQL)
> SOURCE xxx.sql

(12) 動作確認する

さあ、リモートサーバの完成です。

前回紹介した「Postman – REST Client (Packaged App)」を使って、APIが動作するか確認しましょう。

うまくいかず心が折れないための予防策

トラブルが成長のエンジン

最初はうまくいかないことも多いでしょう。

しかし、うまくいかない原因を調査する中で、Linuxの仕組み、Apacheの仕組み、MySQLの仕組み、MVCフレームワークの仕組みが徐々にわかってきます。

焦らず、あきらめずに取り組みましょう。

作業内容を記録する

その際、大切なことは、すべての作業内容を記録することです。

今回の例では、EC2を起動するまでに自分が何を入力したか、EC2を起動した後にどういうコマンドを打ったか、すべて記録していきます。

ブラウザでの作業内容は画面キャプチャを取りながらテキストファイルに記録します。

sshで接続しての作業内容は、ロガーと呼ばれるツールを使って自動的に記録します。

調査内容を記録する

さらに、自分がネットで調査した内容も記録していきます。

有益な記事を発見したときは、pocketなどのツールを使って記録するようにします。

ある程度記録がたまり、実際にサーバでうまくいく方法が見つかったら、自分なりに記録を整理して、「俺マニュアル」にまとめていくと良いでしょう。

「俺マニュアル」は、あなたのエンジニアとしての財産になります。

また、ある程度知見がたまったら、ブログを開設し、技術情報を公開しましょう。

世界中のエンジニアがそうやって相互に助け合い、切磋琢磨しあっています。

第7回のまとめ

ローカル開発環境での開発・テストが完了したら、リモートサーバを構築しましょう。

  • リモートサーバはクラウドサーバを選択する
  • リモートサーバを起動し、初期設定を行う
  • リモートサーバにサーバ側アプリをインストールし、動作確認する
  • 作業記録、調査記録を残す

本日は以上です。

連載目次

iOS/Androidアプリ開発入門「サーバ連動アプリを開発しよう!」

(10) 開発の旅をうまく乗り切る(最終回)
(9) バックグラウンドでメール送信
(8) サーバの監視とデータのバックアップ
(7) リモートサーバ(本番環境)の構築
(6) ローカルでの単体・結合テスト
(5) コントローラーとビューの実装
(4) モデル実装
(3) API実装
(2) 画面設計・データベース設計・API設計
(1) 開発環境の構築

スポンサーリンク

 - コラム, 連載 ,