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
設定
以下の記事通りにやれば動きます。バージョン依存などがあるようなので、まめに記事をチェックしたほうがいい感じです。
- https://qiita.com/takahiko/items/a08895550727b95b6c36
- https://kohkimakimoto.hatenablog.com/entry/2016/09/15/180119 (VirtualServerでの設定)
期限が迫ると、
sudo /usr/bin/certbot-auto --debug renew --post-hook "sudo service httpd restart"
を実行して更新する。