LoginSignup
5
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-08-02

・さくらの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

にて、以下の5行をコメントアウトして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
5
5
0

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
5
5