0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS利用メモ 2018年4月

Last updated at Posted at 2018-05-10

Amazon Linux(RedHat6ベース)上に(自分が)必要な環境を構築するメモ。

現状RHL7ベースのAmazon Linux2もあります。逆に他の記事を参照するときは差を意識。

やりたいこと

  • いわゆるLAMP環境を作ってLaravelが動くようにすること(PHP7.x以上が必要など)
  • node.jsを利用したいので環境をつくる

前提

  • 無料枠のインスタンスを利用している
  • ログイン用の認証鍵は予め登録している

EC2でVMを立てた際の初期状態

話はVMが起動してログインできる状態から始めます。
だいたいのお膳立てができており、yumのレポジトリも拡張されており便利。

  • 初期ユーザーはec2-user
  • 鍵認証のみ(rootは禁止)
  • SSH用に22番ポートが開いている
  • getenforceはDisabled

ログイン

ログインします。今回は手元の鍵を利用しているので、その鍵の位置を-iで指定。

手持ちじゃなくても、新規につくった鍵の位置を指定すればいいだけです。

ssh -i .ssh/id_rsa ec2-user@ec2-xxx-xxx-xxx.compute.amazonaws.com

初期作業

何はなくてもyum update。

yum update

sudo yum update -y

ec2-userのパスワード設定

標準ユーザーであるec2-userにパスワードを設定します。

sudo passswd ec2-user

rootのパスワード設定

rootにもパスワードを設定します。

sudo passwd root

ユーザの追加

作業用のユーザーを追加します。またsudoできるようwheelグループに追加しておきます。

ec2-userで作業してもいいとは思います。

sudo useradd hoge
sudo passwd hoge
sudo gpasswd -a hoge wheel

visudo

wheelグループがsudoできるように、visudoで以下をコメントイン。

%wheel  ALL=(ALL)       ALL

既に作業ユーザーでログインしている場合は一度ログインしないとsudoできません。

hogeのSSH鍵を設定

新規に追加したユーザーが証明書でログインできるようにします。
以下では、ec2-userと同じ鍵を利用することを前提としているため、コピーして利用しています。

su hoge
cd
mkdir .ssh
chmod 700 .ssh
sudo cp /home/ec2-user/.ssh/authorized_keys /home/hoge/.ssh/authorized_keys
sudo chown -R hoge:hoge .ssh
cd .ssh
chmod 600 authorized_keys

ローカル(Mac)上ほ鍵を移動する

ローカルのMacとかで使っている鍵を利用する場合はscpとかでコピーしてやります。

#@mac
cd
scp -i .ssh/id_rsa ~/.ssh/id_rsa.pub ec2-user@ec2-xxx-xxx-xxx.compute.amazonaws.com:~/authorized_keys
cp /home/ec2-user/autorized_keys /home/hoge/.ssh/authorized_keys

ログイン確認とsudoできるかの確認

ec2-userとかを削除する前にかならず新規ユーザーでログインを試します。
sudoできるかもためしておきます。

ssh hoge@ec2-xxx-xxx-xxx.compute.amazonaws.com
sudo ls

ec2-userの削除

必要に応じてec2-userを削除します。

sudo userdel ec2-user

日本(語)環境対応

必要に応じてローカル環境に適合させます。

locale

sudo vi  /etc/sysconfig/i18n
LANG="ja_JP.utf8"

date

dateとすると、AWSではUTCとなっている。

sudo cp /usr/share/zoneinfo/Japan /etc/localtime

作業後、再びdateコマンドを実行してJSTになっていることを確認します。

システムクロック/Timezone

sudo vi /etc/sysconfig/clock
Zone=”Asia/Tokyo”

UTF=trueはとりあえずそのまま。

ここでreboot。

## とりあえずインストールしていたほうがいいツール

npm install時に無いと文句言われる。

git

sudo yum install git

development tools

sudo yum groupinstall "development tools"

LAMPの設定

LANPのセットアップはAWSオフィシャルにも掲載されています。

インストール

必要なものをとりあえず一気に入れておきます。AWSのチュートリアルにないものも入れています(主にLaravel用)。

sudo yum install -y httpd24 php71 mysql56-server php71-mysqlnd php71-mbstring php71-pdo php71-gd

その他、必要なものがあれば随時追加。

Apacheの設定

Indexの削除と.htaccessの許可

いろいろ書かれていますが、コメントを除けば以下の3行。Indexsを削除。AllowOverrideをAllに。

<Directory "/var/www/html">
    Options FollowSymLinks

    AllowOverride All

    Require all granted
</Directory>

Firewall(セキュリティーグループ)の開放

セキュリティーグループでインバウンドの80番を許可します。

起動と永続化

設定が終わればサービスを起動。問題なければ永続化を行います。

sudo service httpd configtest
sudo service httpd start
sudo chkconfig httpd on

MySQLの設定

mysql_secure_installationを実行するためにとりあえず起動します。
で、mysql_secure_installationを事項します。とりあえずは全部Yes。

sudo service mysqld start
sudo mysql_secure_installation

キャラクタとかがLiten1になっているので、/etc/my.cnfをに下記を追加。

character_set_server=utf8
innodb_file_per_table
skip-character-set-client-handshake

innodb_buffer_pool_size = 128M
innodb_log_buffer_size = 64M

innodb_buffer_pool_sizeは必要に応じて(搭載メモリの8割程度と言われています)。

設定が追われれば再起動と永続化。

sudo service mysqld restart
sudo chkconfig mysqld on

Composer

Laravelに必要なcomposerをインストール。

cd
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer -V

Laravel

composerを利用してLaravelをインストール。

composer create-project laravel/laravel laravel

メモリ不足でこける(環境依存)

普通は問題なくLaravelのインストールが完了するはずですが、エラーでストップしました。
どうやら無料枠で利用できるmicroインスタンスのメモリ、swap不足によるもののようです。

[ErrorException]
  proc_open(): fork failed - Cannot allocate memory

取り敢えず、下記のようにしてSwap領域を追加します。

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
chmod -R 777 storage
chmod -R 775 /bootstrap/cache

Sawp領域が定義されたか確認。

free -m

まあ、本番環境では起こらないエラーではありますが。。。

node.js

最後に簡単にnode関係。
意外と「これ!」というインストール方法が無いですね。
私は複数バージョン管理を必要としないので(少なくとも本番サーバでは)、以下の方法でインストールします。

cd
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs
node -v

expressとApacheの連携

expressでAPIを公開したりするユースケースなので、expressとApacheを連携させる方法をメモしておきます。
以下、Apache2.4での設定。httpd.confに以下のようにProxyPass /node http://localhost:3000を追加します。

もちろんexpressを3000番portで動作させる想定です。

ServerRoot "/etc/httpd" 
ProxyPass /node http://localhost:3000 //適当な位置に追加

http://localhost:3000/ とお尻にスラッシュを付けないこと。つけると、/はOKでも/api/hogeとかのアクセスでコケる。

必要なモジュールは標準で読み込まれているようです。
以下、/etc/httpd/conf.modules.d/00-proxy.confの設定。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

nodeプログラムの永続化

nodeプログラムは原則、コンソールを閉じてしまうと終了してしまいますので、永続化します。
いろいろツールがありますが、pm2を利用したいと思います。以下の記事を参考にさせていただきました。

その他

そん他のメモ。

SSL(LetsEncrypt)

テスト環境等でとりあえずSSLを実装したい場合は、Let'sEncryptが便利です。
但し期限が90日なので実運用に際してはcronで更新を走らせる必要があります。

準備

mod_sslが入ってないとconf.d/ssl.confファイルがありません。インストールしておきます。

sudo yum install mod24_ssl

設定

以下の記事通りにやれば動きます。バージョン依存などがあるようなので、まめに記事をチェックしたほうがいい感じです。

期限が迫ると、

sudo /usr/bin/certbot-auto --debug renew --post-hook "sudo service httpd restart"

を実行して更新する。

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?