さくらのVPSで、CentOS7(x86_64)+Apache2.4.6+PHP7+MySQL5.7.19+CakePHP3によるLAMP環境構築まとめ

・さくらのVPSを申し込む。
・サーバのインスタンスを起動する（電源ONする）。
・CentOS7(x86_64)をインストールする。
・ブラウザからコンソールを立ち上げる。
・/etc/ssh/sshd_config を編集する。（ポートを開放する。PasswordAuthentication yes を設定する。）
・TeraTermなどのクライアントソフトでSSH接続する。



PHPのバージョンを5.6に下げたい場合は下記。

```
yum install epel-release -y
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y remove php-*
yum -y --enablerepo=remi,remi-php56 install php php-mysql php-mbstring php-gd php-pear php-mcrypt mod_ssl php-cli php-devel php-common php-fpm php-opcache php-pdo php-xml php-intl php-zip php-bcmath
php -v
```



    yum update -y
    yum install epel-release.noarch -y
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    yum install httpd -y
    systemctl start httpd.service
    systemctl enable httpd.service
    yum --enablerepo=epel install libmcrypt -y
    yum --enablerepo=remi-php71 install -y php php-cli php-devel php-common php-mbstring php-mysql php-fpm php-gd php-mcrypt php-opcache php-pdo php-xml php-intl php-zip php-pear php-bcmath
    vi /var/www/html/index.php
    適当な文言をechoする。
    firewall-cmd --add-port=80/tcp --zone=public --permanent
    firewall-cmd --reload
    systemctl restart httpd.service
    ブラウザからサーバのIPアドレス宛にhttp接続して、その文言が表示されたらOK。


●vimのインストール

    yum -y install vim-enhanced


●SELinuxを永続的に無効化する
下記の修正をしてサーバを再起動する。

```
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
```

●MySQL5.7のインストール

    rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
    yum install -y mysql-community-server
    mysqld --version


補足：もしも

    yum install -y mysql-community-server

でエラーになる場合は下記を試す。

    yum remove mariadb-libs
    rm -rf /var/lib/mysql
    sudo yum install -y mysql-community-server
    mysqld --version



●MySQL5.7のデータファイルの保存場所の設定

MySQLのデータはファイルとしてOSのディスクに保存される。
その保存先の容量は多い方がいい。例えば下記コマンドでディスク容量を調査する。

```
[root@dell ~]# df
ファイルシス            1K-ブロック    使用     使用可 使用% マウント位置
/dev/mapper/centos-root    52403200 2304448   50098752    5% /
devtmpfs                    8101192       0    8101192    0% /dev
tmpfs                       8114780       0    8114780    0% /dev/shm
tmpfs                       8114780    9108    8105672    1% /run
tmpfs                       8114780       0    8114780    0% /sys/fs/cgroup
/dev/sda2                   1038336  181252     857084   18% /boot
/dev/mapper/centos-home  3843398072   33004 3843365068    1% /home
tmpfs                       1622956       0    1622956    0% /run/user/0
```

上記の例では
/home
の容量が多いので、この中に
mysql
というディレクトリを作って保存することにする。
その場合、MySQLを起動する前に、下記の設定が必要である。

```
find / -name my.cnf
vi /etc/my.cnf
```
下記のように編集する。

```
[mysqld]

#datadir=/var/lib/mysql
datadir=/home/mysql
```

これで、MySQLのデータファイルが
```
/home/mysql
```
に保存されるように設定された。

あとは下記コマンドで、ディレクトリを作成し、MySQLを起動すればOK。

```
cd /home
mkdir mysql
chmod 777 mysql/
```

●MySQL5.7の起動

    systemctl enable mysqld.service
    systemctl start mysqld.service


●MySQL5.7の設定

    vi /etc/my.cnf

skip-grant-tables を追加する。

    [mysqld]
    skip-grant-tables

mysqldを再起動する。

    systemctl restart mysqld.service


●MySQL5.7のrootのパスワードを設定する
パスワードは、最低1つの数値文字を含み、1つの小文字および大文字を含み、1つの特殊文字(英数字以外)を含む必要がある。

    mysql -u root
    use mysql
    UPDATE user SET authentication_string=password('任意のパスワード') WHERE user='root';
    flush privileges;
    exit


root以外に、任意のユーザを作成する場合は下記を実行する。

    CREATE USER 'yamato'@'localhost' IDENTIFIED BY '任意のパスワード';


なお、ユーザを新規追加した場合は、DBへのアクセス権限設定も忘れずに実施する。

    GRANT ALL PRIVILEGES ON `データベース名`.* TO 'yamato'@'localhost';
    FLUSH PRIVILEGES;


設定を戻す。

    vi /etc/my.cnf
    skip-grant-tables を削除する。
    systemctl restart mysqld.service


パスワード付きで入れることを確認する。

    mysql -u root -p
    ALTER USER 'root'@'localhost' IDENTIFIED BY '任意のパスワード';

●PHP7とMySQL5.7の接続を確認する

    <?php
    try {
      $pdo = new PDO('mysql:host=localhost;dbname=mysql;charset=utf8','root','MySQLのパスワード',
      array(PDO::ATTR_EMULATE_PREPARES => false));
      $result = $pdo->query('show tables');
      while($row = $result->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
      }
    } catch (PDOException $e) {
      exit('データベース接続失敗。'.$e->getMessage());
    }
    ?>

コンポーザのインストール

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

curlがタイムアウトする場合は、ipv6が影響している可能性があるため、
下記を実施して、一時的にipv6を無効化する。

```
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6
```

gitのインストール

    yum -y install git


cronのインストール

    yum install crontabs
    yum install vixie-cron


PHPのタイムゾーンを日本に設定する。

    vim /etc/php.ini
    date.timezone = "Asia/Tokyo"



解凍コマンドを入れる。

```
yum -y install zip
yum -y install unzip

```

CakePHP3のインストール

    composer self-update && composer create-project --prefer-dist cakephp/app hoge



CakePHP3でのマイグレーションでテーブルを作るとき、コメントが文字化けないようにする設定。

下記を実行してMySQLを再起動する。

```
vi /etc/my.cnf

[client]
default-character-set = utf8

```

CakePHP3では、
app.php
の
Datasources
を編集して、下記のようにする。

    'encoding' => 'utf8mb4',


作成されたディレクトリをドキュメントルートに対応付ける。

    mv hoge html
    mv html /var/www/.
    /var/www/html/webroot がドキュメントルートになる。
    vi /etc/httpd/conf/httpd.conf
    DocumentRoot "/var/www/html/webroot"
    AllowOverride All
    systemctl restart httpd.service
    systemctl stop firewalld

サーバの文字コードを変更する

    localectl set-locale LANG=ja_JP.UTF-8

サーバを再起動する。

MySQLでタイムゾーンを設定する

    /usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo > ~/timezone.sql
    mysql -u root -p -Dmysql < ~/timezone.sql
    vi /etc/my.cnf
    [mysqld]
    default-time-zone = 'Asia/Tokyo'
    sql_mode = ""

    systemctl restart mysqld.service
    rm timezone.sql



なお、下記エラー

    mysql: [ERROR] unknown variable 'datadir=/var/lib/mysql'

が出た場合は、

    vi /etc/my.cnf

にて、以下の５行をコメントアウトしてMySQLを再起動する。

    #datadir=/var/lib/mysql
    #socket=/var/lib/mysql/mysql.sock
    #symbolic-links=0
    #log-error=/var/log/mysqld.log
    #pid-file=/var/run/mysqld/mysqld.pid

    systemctl restart mysqld.service




ImageMagickをインストールする（画像処理系のアプリケーションを実装したい場合）

```
yum -y install ImageMagick
yum -y install ImageMagick-devel
```

memcachedをインストールしてPHPから使えるようにする。

手順1：下記を実行する。

```
sudo su
yum -y install memcached memcached-devel
yum install -y php71-php-pecl-memcached
yum -y install wget
yum install gcc-c++ -y
cd /usr/local/src/
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure

もしもmakeが入っていなければ
yum install make -y

make
make install
```

手順2：下記を実行する。

```
cd /usr/local/src
git clone -b php7 --depth 1 https://github.com/php-memcached-dev/php-memcached
cd php-memcached
phpize
yum -y install zlib-devel
./configure --disable-memcached-sasl
make
make install
```

手順3：下記を実行する。

```
systemctl start memcached 
systemctl enable memcached
firewall-cmd --add-port=11211/tcp --permanent 
firewall-cmd --reload
```
手順4：下記を実行する。

```
vim /etc/php.ini
ファイル最下部に下記を追加する。
extension=memcached.so
systemctl restart httpd.service
root以外のユーザになり、下記を実行する。
memcached -p 11211 -m 64m -d
```

動作確認用のサンプルコード

```
sudo su
cd /var/www/html/
vim index.php
```

下記のコードが正常に動作すればOK。

```
<?php
$memcache = new Memcached();
$memcache->addServer('localhost', 11211);
$data = 'PHPエンジニア大和賢一郎';
$memcache->set('yamato', $data, 1000);
echo $get_data = $memcache->get('yamato');
?>

```


### Node.jsをインストールする。


```
yum install -y gcc-c++ make
curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs
node -v
npm -v
```