目次

AWSのEC2における、CentOS7の初期設定

VPC、EC2の構成でのCentOS7の初期設定手順。
RDSは使わず、EC2内にMySQLをインストールする。

SELinux

enforcing ・・・ SELinux は有効で、アクセス制限も有効
permissive ・・・ SELinux は有効だが、アクセス制限は行わず警告を出力
disabled ・・・ SELinux 機能は無効

デフォルトでは disabled になっている場合、特に変更の必要はない。
警告を確認したい場合は、permissive に変更する。

# SELinux の状態を確認
$ getenforce

# 編集
$ sudoedit /etc/selinux/config

SELINUX=permissive

# 再起動
$ sudo reboot

# SELinux の状態を確認
$ getenforce

Swap の設定

Swap が割り当てられていなければ設定。

# Swap の確認
free -m
       total  used  free  shared  buff/cache  available
Mem:     983    77   308       0         596        758
Swap:      0     0     0

# ストレージの空き容量の確認
df -h --total
/dev/xvda1       30G  1.5G   29G   5% /

# Swap に 4GB 割り当て(1024 * 4 = 4096)
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=4096
sudo chmod 600 /swapfile1
sudo mkswap /swapfile1
sudo swapon /swapfile1

# Swap の確認
free -m
       total  used  free  shared  buff/cache  available
Mem:     983    62    85       0         835        773
Swap:   4095     0  4095

yum アップデート

$ sudo yum update -y

httpd

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

$ sudo yum install -y httpd

$ sudo systemctl start httpd

$ sudo systemctl enable httpd

$ sudo systemctl is-enabled httpd

$ sudo yum info httpd

パブリックIPなどでブラウザからアクセスできることを確認する。

Git

yum の Git は古い。最新版を入れたい場合は wget などを使い、自分でインストールする。
http://vdeep.net/centos7-git

$ yum list | grep '^git'

$ sudo yum -y install git
$ git --version
git version 1.8.3.1

vim

カラースキーム(molokai)と .vimrc の設定 を参照。

PHP

$ sudo yum install epel-release -y

$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

$ sudo yum -y install --enablerepo=remi,remi-php72 php php-devel php-mbstring php-pdo php-gd php-xml php-mysql

$ yum list installed | grep php

$ php -v

$ sudo mkdir /var/log/php

$ sudo chown apache:apache /var/log/php

$ cd /etc
$ ls -l | grep php
$ sudo cp php.ini php.ini.origin

$ sudoedit php.ini
# php.ini.txt の内容を反映させる

php.ini.txt

default_charset = "UTF-8"

mbstring.language = Japanese

;mbstring.internal_encoding =

;mbstring.http_input =

;mbstring.http_output =

mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

date.timezone = Asia/Tokyo

expose_php = Off

memory_limit = 128M
post_max_size = 128M
upload_max_filesize = 128M

register_argc_argv = On

error_log = /var/log/php/error.log
$ sudo service httpd restart

MySQL

$ sudo yum repolist all | grep mysql

$ sudo yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

$ sudo yum repolist all | grep mysql

$ sudo yum -y install mysql-community-server

$ mysql --version

# 起動
$ sudo systemctl start mysqld.service

# 自動起動
$ sudo systemctl enable mysqld.service

# 確認
$ systemctl status mysqld.service

# mysql の root パスワードを確認
$ cat /var/log/mysqld.log | grep password

# パスワードポリシーをゆるくする
$ sudoedit /etc/my.cnf

validate_password.length=8
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.special_char_count=0
validate_password.policy=LOW

$ sudo service mysqld restart

$ sudo mysql_secure_installation
# パスワード設定
# 全てy

$ mysql -u root -p

SHOW GLOBAL VARIABLES LIKE '%validate_password%';
exit

$ sudo mkdir /var/log/mysql

$ sudo chown mysql:mysql /var/log/mysql

# my.cnfの編集
$ sudoedit /etc/my.cnf

log-error=/var/log/mysql/mysqld.log

slow_query_log=1
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=0.1

$ sudo rm /var/log/mysqld.log

$ sudo service mysqld restart

$ mysql -u root -p

show variables like '%log%';
show global variables like 'character%';

追記:buffer pool のメモリサイズを増やす

デフォルトでは innodb_buffer_pool_size が 128M になっていたが、これだとメモリが足りず自動再起動時に失敗し、サーバが停止したままになってしまうことがありました。
なので、適当な値に増やしておきます。

# innodb_buffer_pool_size の変更
sudoedit /etc/my.cnf
[mysqld]
# innodb_buffer_pool_size = 128M
innodb_buffer_pool_size = 512M

# MySQL 再起動
sudo service mysqld restart

# MySQL に接続して、値が増えているのを確認
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 536870912 |
+-------------------------+-----------+
1 row in set (0.01 sec)

AWS Linux のタイムゾーンを日本時間に

$ ls /usr/share/zoneinfo/

$ sudoedit /etc/sysconfig/clock

ZONE="Japan"

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

$ sudo reboot

httpd.conf

# httpd.conf
$ sudoedit /etc/httpd/conf/httpd.conf

<Directory "/var/www/html">
    # ※ Perl を使う場合のみ、cgi の実行を許可する
    # Options に「ExecCGI」を追加する
    Options Indexes FollowSymLinks ExecCGI

    # .htaccess を許可する
    AllowOverride All
</Directory>

# ※ Perl を使う場合のみ、cgi を許可する
# コメントアウト解除&「.pl」の追加
AddHandler cgi-script .cgi .pl

$ sudo service httpd restart

www ユーザの追加(サイト制作用アカウント)

$ cat /etc/passwd

$ sudo useradd www
$ sudo passwd www

$ sudo su - www

$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
# パスフレーズ:なし

$ mv id_rsa.pub authorized_keys

# 秘密鍵をコピペしてローカルに保存
$ cat id_rsa
$ rm id_rsa

$ chmod 600 authorized_keys
$ cd ../
$ chmod 700 .ssh

# www ユーザを終了
$ exit

# apache に www グループを追加
$ sudo gpasswd -a apache www

$ sudo id apache

$ sudo chown -R www:www /var/www/

# httpd ログディレクトリへのシンボリックリンクを貼る
$ sudo ls -la /var/www
$ sudo ln -s /var/log/httpd /var/www/logs

# アクセス権限
$ sudo chmod 755 /var/log/httpd

MySQLユーザの追加

$ mysql -u root -p

create user USER_NAME@'localhost' identified by 'PASSWORD';

select user, host from mysql.user;

create database DB_NAME;

grant all on DB_NAME.* to USER_NAME@'localhost';
grant all on *.* to USER_NAME@'localhost';

show grants for USER_NAME@'localhost';

exit;

# 作成したユーザでログイン
$ mysql -u USER_NAME -p

show databases;

Composer

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php
$ rm composer-setup.php
$ sudo mv composer.phar /usr/local/bin/composer
$ ls -l /usr/local/bin

SELINUX

SELINUXの警告が出てないか確認
参考: https://qiita.com/yunano/items/857ab36faa0d695573dd