AWSでWebサーバー構築するやり方 (EC2xUbuntu)
目次/もくじ
今回はAWSのサーバーの構築を扱ってみようと思います。前回VPSを使った一般的なWEBサーバーの構築をしましたが、今回はAWSでやります。AWSは専門用語(造語)が多いので、慣れるまではかなり苦労します。
一応、MT4/MT5からサーバーにトレードデータを送受信する際に、ルート権限で細かいカスタマイズをすることを狙っていますが、大規模スケールアップする予定がなければ普通のVPSでも良いと思います。もちろん、普通のWEBサイト運営もできると思います。(よっぽど大規模アクセスがあるのでなければオーバースペックだと思います。)
サーバーのOSはUbuntu14にしました。CentOSは前述のとおり、日本国内だけでガラパゴス化しているので、グローバルスタンダードなUbuntuです。バージョンに関しては前回はUbuntu16でしたが、PHPをインストールする際に半ば強制的にPHP7にされてしまうことと、PHP5で書いた従来のシステムがPHP7では動かない可能性があるからです。(かく言う私のシステムもPHP5.3で書いているので、PHP7だと一部機能しない関数がありました。)
もちろん、Ubuntu16でPHP5にダウングレードすることもできるはずですが、EC2で実際にやってみたところ、OSはPHP7と認識するにもかかわらず、Apacheは5.3を認識したりして大変なことになったので、最初からOSごと古いのを使った方が良いという結論に至りました。
また、
AWSにはEC2以外にも簡単にWEBサイト(wordpressサイト)が作れるサービスがありますが、汎用性が全然ないのでおとなしくEC2を使いましょう。
AWSのアカウントがない場合は、まずこちらから
https://aws.amazon.com/jp/
コンソール画面はこちら
https://console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin
インスタンス(サーバー)の起動
AWSではサーバーひとつひとつをインスタンスというくくりで管理します。インスタンスという名前から察するに従来のようなサーバーとは違い、全部バーチャルなんでしょうね。
サービスメニューから「EC2」を選択し、インスタンスを新しく作成します。
ちなみに、AWSでもUbuntuの初期ユーザーはRootではなく、Ubuntuです。
下の方にいくとメモリ768Gとかあるんですよね。(どんなバケモンスペックだよ…)
キーペアの作成
キーペアはSSHでサーバーにログインするときに必要なものです。なくすと再発行はできないので保管は厳重にしてください。
「Create Key pair」を押してキーペア名を入力すると自動的に生成されます。
セキュリティグループ(ポートの開放)の設定
AWSではセキュリティグループというiptablesのようなものがあります。もちろん、サーバーにもiptablesはありますが、機能が重複するので、AWSの場合はセキュリティグループで管理します。さくらVPSのようなブラウザ上のコマンドコンソールはないので、かならずSSHが開いているを確認します。(デフォルトで開いています。)
セキュリティグループでは、HTTP:80, HTTPS:443, SSH:22, CustomTCP:20, CustomTCP:21, CustomTCP:60001~60010 を開けてればいいと思います。(後ろの方はFTPパッシブ用)メールサーバーも一緒にする場合はSMTP,POP3用のポートも開けてください。
ElasticIP(固定グローバルIP)の設定
AWSではデフォルトでもインスタンスにグローバルIPが割り振られていますが、これは定期的に変動してしまいます。ElasticIPでは新規にグローバルIPを取得することができ、これをインスタンスと紐づけします。
ElasticIPの設定画面で右クリックをすると「Associate Address」とメニューが出てくるので、選択します。
すると、IPとインスタンスを紐づけするメニューが出てくるので、インスタンスのIDを選択します。今はインスタンスが一つしかないので選択肢は一つだけです。
(オプション)Elastic Beanstalk(インスタンスの自動復活機能)を削除する
AWSにはインスタンスをゾンビみたいに復活させる機能がデフォルトであります。「とりあえず、インスタンスをお試しで起動させてみて、いろいろ遊んだらインスタンスを削除すれば課金されないだろ」と思っても、この機能を停止しないと、インスタンスが知らぬ間に復活して自動課金されるという仕様です。
いきなり本番でそのインスタンスを使う予定の場合はそのままでいいですが、とりあえずお試しでAWSを使う場合は停止させておきましょう。
Route53(ドメイン、DNS)の設定
Route53では独自ドメインの紐づけができます。独自ドメインを必要としない場合はIPアドレス、もしくはアマゾン支給のサブドメインでも管理可能です。(EC2のインスタンスに情報があります。)
「Create Hosted Zone」を押すとメニューがでるので、設定したい独自ドメインを入力して「Public hosted zone」を選択します。
するとDNS情報がでてきます。
このDNSはドメインを取得したサービス(お名前ドットコムとか)で入力する情報になります。
「Create Record Set」を押してAレコードを追加します。
ValueにはElasticIPで取得したグローバルIPを入れます。
SSLで接続できるようにする
昨今ではいろいろな理由からSSLが求められています。問い合わせフォームや個人情報を含む送信をする場合は当たり前ですが、Google検索でもSSLでないサイトは検索順位が下がるようになったらしいです。
Certificate ManagerでSSL証明書を発行
「Request Certificate」を選択
「sample.com」と「Add another name to this certificate」で「*.sample.com」を入力。
Select validation method で「DNS validation」を選択
すると「お前、ほんとにこのドメインの所有者か? 証明してしてみぃ」って画面がでるので、Route53でこれらのレコードを追加します。
上のデータをRoute53の下の画面で入力する。
ELB(Elastic Load Balancing)で証明書の設置とインスタンスへ接続
EC2のメニューからLoad Balancersを選択
「Create Load Balancer」を選択
「HTTP HTTPS」を選択
Name:適当な名前、 Scheme:Internet-facing、 IP-address-type:ipv4 を選択
Listenerでは「HTTP」の80番ポートと「Add listener」で「HTTPS」の443番ポートを選択
アベイラビリティーゾーンは、ロードバランサーと自分のサーバーを接続できるよう同じVPCに。
(上の画像はアベイラビリティゾーンが一部切れています。)
STEP2で、「Choose a certificate from ACM (recommended)」を選択し、Security Policyはデフォルトのまま。
「ルーティングの設定」へ。
ステップ4では、「New target group」を作成します。
名前を適当に入力し、プロトコルは「HTTP」を選択。(HTTPSは後で設定できます。)
ターゲットに「instance」を選択。ヘルスチェックはHTTP。
「Register Target」
ロードバランサーに接続するサーバー(インスタンス)を選択
SSHでサーバーに入る
いよいよサーバーに入ります。ここからの流れはよくあるVPSと同じなのでさくらVPSの回と重複が比較的あります。
SSHクライアントであるPuttyかTeraTermをインストールします。前回はputtyだったので今回はTeraTermにします。
ログインの際には、「ubuntu@’グローバルIP’」か「ubuntu@’Public DNS (IPv4)’」を入力します。Public DNS (IPv4)は、インスタンスのIPアドレスを入れます。
したっけ、Use RSAを選択して、先ほど作成したキーペアファイル(.pem)を選択します。
この状態だと権限が弱い一般ユーザなのでrootユーザーに切り替えます。
1 |
$ sudo su - |
と打ちます。
コマンドの作業は前回のVPSでWEBサーバーを立てた時とほとんど同じです。
OSのバージョンアップ
OSに最新情報がないかチェックします。
1 |
# apt update |
Apacheを入れる
1 |
# apt install apache2 |
vimを入れる
1 |
# apt install vim |
PHPを入れる
次にPHPを入れます。
1 |
# apt install php |
インストール中にも表示されていますが、バージョンを調べるには
1 |
# php --version |
と入れます。EC2のUbuntu14ではphp5.6がデフォルトでした。
libapache2のインストール(apacheにphpを認識させる)
1 |
# apt install libapache2-mod-php |
MySQLを入れる
1 |
# apt install mysql-server |
データベース管理にMySQLを入れます。
ユーザーパスワードを求められますので、適当に入力します。
データベースを作成
1 |
# mysql -u root -p |
ここからはSQLなので最後に;を入れます。
1 |
> mysql> create database thedatabse; |
・ユーザーの作成
1 |
> GRANT ALL ON thedatabase.* TO 'ユーザー名'@'localhost' IDENTIFIED BY 'このユーザーのパスワード'; |
・SQLの終了
1 |
> mysql> exit; |
・MySQLの再起動
1 |
# service mysql restart |
ApacheとMySQLの自動起動設定
自動で起動されるようにします。
1 2 3 |
# apt install sysv-rc-conf sysv-rc-conf apache2 on sysv-rc-conf mysqld on |
phpMyAdminのインストール
ブラウザからSQLを操作できるようにphpMyAdminを入れます。
1 |
# apt install phpmyadmin |
・シンボリックリンクを作成
1 |
# ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf |
・phpMyAdminのログインパスを変える
・設定を読み込ませる
1 2 |
# a2enconf phpmyadmin service apache2 reload |
FTPサーバーを入れる
FTPを使えるようにするにはFTPサーバーを立てる必要があるんですね、これが。
AWSでは他のサーバーと違ってちょっと特殊な作業が必要です。(pasv_addressにEIPのアドレスを設定し、データ通信でのクライアントからの接続先IPアドレスをグローバルIPにする必要があります。)
といっても出来合いのUbuntuアプリがあるので、それをインストールします。
1 |
# apt install vsftpd |
設定ファイルを編集する
1 |
# vim /etc/vsftpd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#25行目 anonymous_enable=NO -<デフォルトでNOだが、一応チェック #31行目 write_enable=YES #99行目 ascii_upload_enable=YES #100行目 ascii_download_enable=YES chroot_local_user=YES #121行目 chroot_list_enable=YES #125行目 chroot_list_file=/etc/vsftpd.chroot_list #131行目 ls_recurse_enable=YES #最終行に追加 local_root = /var/www/html #pasv_addressにEIPのアドレスを設定し、データ通信でのクライアントからの接続先IPアドレスをグローバルIPに pasv_address=XXX.XXX.XXX.XXX(インスタンスに紐づけたグローバルIPを入力) #pasv_min_port、pasv_max_portを設定し、データ通信で使用するポート番号の範囲を限定する pasv_min_port=60001 pasv_max_port=60010 |
※サーバー管理者≠FTPユーザーの場合は上位フォルダにアクセスできないようにする必要があります。
FTPユーザーを作成
1 2 |
# useradd ftp-user passwd ftp-user |
ユーザーリストにユーザーを追加する
1 |
# vim /etc/vsftpd.chroot_list |
ここにFTPユーザー名を追加する
フォルダの権限変更
上記だけでは閲覧はできてもアップロードなどができないので、権限を与えます。
1 2 3 |
# cd /var/www # chown ユーザー名(ubuntu):ユーザーグループ(ubuntu) html # chmod 755 html |
再起動
1 |
# service vsftpd restart |
メールサーバーの設置
サーバーを構築したらやっぱりメールも使いたいですよね。メールサーバーは脆弱だと攻撃の中継として利用される危険性があるので注意が必要です。
AWSにメール用のポート開放の申請
まずはメールを使いたい旨を申請します。
https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request
にアクセスして、「メール送信させてくださ~い」って申請します。
わざわざこんな申請をしないといけないということは悪さをする人がいるんですね。
Email Address*にAWSにログインするときのメールアドレス、
Use Case Descriptionに「Removal of Email sending limit.」と記入します。(それ以外は空欄)
セキュリティグループで、SMTPとPOP3が開いていることを確認します。
Postfixのインストール
PostfixっているのはUbuntuでかんたんにメールサーバーを始めるためのアプリです。
とりあえずインストールします。
1 |
# apt install postfix |
コマンドを打つと用途を聞かれるので、「設定なし」を選択。
設定ファイル 「main.cf」を/etc/postfix/ディレクトリにコピーします
1 2 3 |
# cp /usr/lib/postfix/main.cf /etc/postfix/main.cf |
postfixの設定を編集
設定を編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
59行目:コメント解除 mail_owner = postfix # 76行目:コメント解除しホスト名指定★ myhostname = mail.hogefuga.com # 83行目:コメント解除しドメイン名指定 mydomain = hogefuga.com # 104行目:コメント解除 myorigin = $mydomain # 118行目:コメント解除 inet_interfaces = all # 166行目:コメント解除 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 209行目:コメント解除 local_recipient_maps = unix:passwd.byname $alias_maps # 268行目:自ネットワーク追記(ifconfigコマンドでeth0のinetアドレスが10.0.2.15だったので10.0.0.0/24を追記) mynetworks = 127.0.0.0/8, 10.0.0.0/24 # 388行目:コメント解除 alias_maps = hash:/etc/aliases # 399行目:コメント解除 alias_database = hash:/etc/aliases # 421行目:コメント解除 ( Maildir形式へ移行 ) home_mailbox = Maildir/ # 557行目:コメントにしてその下に追記 #smtpd_banner = $myhostname ESMTP $mail_name (@@DISTRO@@) smtpd_banner = $myhostname ESMTP # 632行目:追記 sendmail_path = /usr/sbin/postfix # 637行目:追記 newaliases_path = /usr/bin/newaliases # 642行目:追記 mailq_path = /usr/bin/mailq # 648行目:追記 setgid_group = postdrop # 652行目:コメント化 #html_directory = # 656行目:コメント化 #manpage_directory = # 661行目:コメント化 #sample_directory = # 665行目:コメント化 #readme_directory = # 最終行へ追記:送受信メールサイズを10Mに制限 message_size_limit = 10485760 # メールボックスサイズを1Gに制限 mailbox_size_limit = 1073741824 # 以下SMTP-Auth用 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject |
メールエイリアスのデータベースを再構築します。
1 |
# newaliases |
postfixを再起動します。
1 2 3 |
# service postfix restart |
送信テスト(mailコマンド)
mailコマンドのインストール
1 |
# apt install mailutils |
1 2 3 4 5 |
# mail ”送信先アドレス” Cc: Subject: Test mail Send to Testmail . |
「Ctrl+D」で送信。
これでトレードシステムを稼働させるサーバーとしての準備ができました。他にも用途に応じてオプションがありますが、ここまでできればそちらは適宜できると思います。
関連記事
-
AWSで無料でWindows VPSを使う方法
自動売買とVPSは切っても切り離せません。しかし、その自動売買が本当に儲かるかどうかわからないのに、
-
さくらのVPSで1からWebサーバーを構築する方法 (Ubuntu16.04)
今回はサーバーの構築について扱ってみようと思います。VPSを使った一般的なWEBサーバーの構築がゴー