Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
35
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@shiromegane

[LAMP]VagrantでCentOS7+Apache2.4+PHP7.1+MySQL5.7&Phalcon3.1.2環境を構築する

はじめに

この記事はmacOS Sierra (10.12.1)環境にて実施した内容をメモとして残しているものです。
上記環境以外の方は適宜置き換えて解釈していただけると幸いです。
また、導入しているパッケージ等は投稿者の好みによるものです。
最終更新:2017.06.06

0.Vagrant環境構築

Vagrantで構築しない場合はこの手順は不要

各種ツールDL&インストール

VirtualBox
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

Vagrant
https://www.vagrantup.com/downloads.html

Vagrant準備

BOX追加

コマンド
vagrant box add CentOS7 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box

初期化

コマンド
mkdir /vagrant/CentOS7 && cd $_
vagrant init CentOS7

設定

お好みでVagrantfileを編集する

Vagrantfile
# ホスト名
config.vm.hostname = "centos7.vm"
# ネットワーク
config.vm.network "private_network", ip: "192.168.33.10"
# ドキュメントルートを同期フォルダにする ※この設定はhttpdのインストールが終わってからやる
config.vm.synced_folder "/var/www", "/var/www", owner: "apache", group: "apache", mount_options: ["dmode=777", "fmode=777"]

起動

※上記で作成したディレクトリ内で実行

コマンド
vagrant up

1.CentOS7初期設定

rootユーザーになっておく

コマンド
sudo su -

アップデート

コマンド
yum -y update

一応バージョン確認しておく

※ 2017.06.06時点では、ここでバージョンが7.3.1611になります

コマンド
cat /etc/redhat-release
結果
CentOS Linux release 7.3.1611 (Core)

Vimを入れる

インストール

コマンド
yum -y install vim-enhanced

エイリアス設定

コマンド
echo alias vi='vim' >> /etc/profile
source /etc/profile

時刻同期設定

chronyインストール

コマンド
yum install -y chrony

chronyサービス登録

コマンド
systemctl enable chronyd

サービス登録されたか確認

コマンド
systemctl list-unit-files -t service | grep chronyd
結果
chronyd.service                             enabled

同期サーバーを日本のサーバーにする

コマンド
vim /etc/chrony.conf
/etc/chrony.conf
server ntp.nict.jp iburst
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

タイムゾーンをAsia/Tokyoに設定

コマンド
timedatectl set-timezone Asia/Tokyo

chronyを再起動

コマンド
systemctl start chronyd

Firewall設定

Firewallを止める

コマンド
systemctl stop firewalld

サービスを無効にする

コマンド
systemctl disable firewalld

無効になったか確認

コマンド
systemctl list-unit-files -t service | grep firewalld
結果
firewalld.service                           disabled

※何かと邪魔になりそうなのでローカルと割り切って止めますが、公開サーバーの場合はオススメしません。

日本語対応にする

NKFのインストール

コマンド
cd /tmp
wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fnkf%2F59912%2Fnkf-2.1.3.tar.gz" -O nkf-2.1.3.tar.gz
tar zxvf nkf-2.1.3.tar.gz
cd nkf-2.1.3
make && make install
rm -rf nkf-2.1.3*
ln -s /usr/local/bin/nkf /usr/bin/nkf

日本語関連パッケージのインストール

コマンド
yum -y install ibus-kkc vlgothic-*

システム文字セット変更

コマンド
localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf 

各種リポジトリ登録

リポジトリ優先度プラグイン

コマンド
yum -y install yum-plugin-priorities

これは使用する場合のみでOK

EPEL

コマンド
yum -y install epel-release

デフォルトでは無効にする

コマンド
sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

Remi

コマンド
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

失敗する場合は以下で…

コマンド
cd /tmp && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y install /tmp/remi-release-7.rpm
rm -f remi-release-7.rpm

MySQL5.7

コマンド
yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Nginx

コマンド
yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

再起動

コマンド
reboot

2.LAMP+いろいろ環境構築

httpd

インストール

コマンド
yum -y install httpd

初期設定

コマンド
vim /etc/httpd/conf/httpd.conf

ネットワークマウントやNFSマウントされたドキュメントルートでは、
静的ファイルへの変更が反映されなかったりするので以下の設定をしておく

/etc/httpd/httpd.conf
EnableMMAP off
EnableSendfile off

起動

コマンド
systemctl start httpd

サービス登録

コマンド
systemctl enable httpd

サービス登録されたか確認

コマンド
systemctl list-unit-files -t service | grep httpd
結果
httpd.service                               enabled

MySQL 5.7

インストール

コマンド
yum -y install mysql-community-server

サービス登録

コマンド
systemctl enable mysqld

サービス登録されたか確認

コマンド
systemctl list-unit-files -t service | grep mysqld
結果
mysqld.service                              enabled

お好みに応じて設定を変更

my.cnfバックアップ

コマンド
mv /etc/my.cnf /etc/my.cnf.bk

my.cnfの内容を書き換える

コマンド
cat <<EOF > /etc/my.cnf
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
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
EOF

rootパスワードを無効化しちゃう
(おすすめはしません!)

/etc/my.cnf
[mysqld]
skip-grant-tables

起動

コマンド
systemctl start mysqld

パスワードの確認

MySQL5.7から初期パスワードが自動生成される為、確認する必要があるらしい。

一度ログインを試みる

コマンド
mysql -uroot -p

ログファイルにて確認

コマンド
cat /var/log/mysqld.log | grep "temporary password"
/var/log/mysqld.log
2016-11-08T06:13:33.695967Z 1 [Note] A temporary password is generated for root@localhost: {ここにパスワード}

初期セットアップ

コマンド
mysql_secure_installation
mysql_secure_installation
# パスワード要求
> Enter current password for root (enter for none):
  {上記にて調べた初期パスワードを入力}

# パスワードの変更を求められる
> The existing password for the user account root has expired. Please set a new password.
> New password:
  {新しいパスワードを入力}
> Re-enter new password:
  {パスワードを再入力}

※この時、ポリシーに反しているとやり直しさせられる。
ポリシーの初期値はMEDIUMで、長さは8字以上で英字大小/数字/特殊文字(英数以外の記号)を1つ以上ずつ含む必要があるらしい。
例:P@ssword#123

# root ユーザーのパスワードを変更するか?
> Change the password for root ? ((Press y|Y for Yes, any other key for No) :
  {先程変更してるので空Enter}

# 匿名ユーザーを削除するか?
> Remove anonymous users? (Press y|Y for Yes, any other key for No) :
  {'y'を入力してEnter}

# リモートから root ユーザーのログインを禁止するか?
> Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
  {'y'を入力してEnter}

# test データベースを削除するか?
> Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
  {'y'を入力してEnter}

# 権限テーブルをリロードするか?
> Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
  {'y'を入力してEnter}

KVS

memcached

インストール

コマンド
yum -y install --enablerepo=remi memcached

起動

コマンド
systemctl start memcached

サービス登録

コマンド
systemctl enable memcached
サービス登録されたか確認
コマンド
systemctl list-unit-files -t service | grep memcached
結果
memcached.service                           enabled

Redis

インストール

コマンド
yum -y install --enablerepo=remi,epel redis

起動

コマンド
systemctl start redis

サービス登録

コマンド
systemctl enable redis
サービス登録されたか確認
コマンド
systemctl list-unit-files -t service | grep redis
結果
redis.service                               enabled

画像処理関連

ImageMagick

インストール

コマンド
yum -y install ImageMagick

PHP 7.1

本体インストール

コマンド
yum -y install --enablerepo=remi-php71 php

関連モジュールインストール

必要に応じてお好みで

コマンド
# 基本的なやつ
yum -y install --enablerepo=remi-php71 php-devel php-pear
yum -y install --enablerepo=remi-php71 php-mysqlnd php-mbstring

# Nginxで使う場合はphp-fpm
yum -y install --enablerepo=remi-php71 php-fpm

# mcrypt
yum -y install --enablerepo=epel libmcrypt
yum -y install --enablerepo=remi-php71 php-mcrypt

# 画像関連
yum -y install ftp://mirror.switch.ch/pool/4/mirror/centos/7.3.1611/cloud/x86_64/openstack-ocata/common/openjpeg2-2.1.2-1.el7.x86_64.rpm
yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/l/libraqm-0.1.1-1.el7.x86_64.rpm
yum -y install --enablerepo=remi-php71 php-gd php-pecl-imagick

# KVS関連
yum -y install --enablerepo=remi-php71 php-pecl-memcache php-pecl-redis

デフォルトでremi-php71を有効化しておくと楽かも

コマンド
yum-config-manager --enable remi-php71
コマンド
#まとめて入れちゃう
yum -y install --enablerepo=epel libmcrypt
yum -y install ftp://mirror.switch.ch/pool/4/mirror/centos/7.3.1611/cloud/x86_64/openstack-ocata/common/openjpeg2-2.1.2-1.el7.x86_64.rpm
yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/l/libraqm-0.1.1-1.el7.x86_64.rpm
yum -y install php php-devel php-pear php-mysqlnd php-mbstring php-fpm php-mcrypt php-gd php-pecl-imagick php-pecl-memcache php-pecl-redis php-pecl-apcu php-pecl-zendopcache

初期設定

コマンド
# タイムゾーン設定
sed -i "s/;date.timezone =/date.timezone = 'Asia\/Tokyo'/" /etc/php.ini

# mbstring系の設定
sed -i "s/;mbstring.language = Japanese/mbstring.language = Japanese/" /etc/php.ini
sed -i "s/;mbstring.internal_encoding =/mbstring.internal_encoding = UTF-8/" /etc/php.ini
sed -i "s/;mbstring.http_input =/mbstring.http_input = UTF-8/" /etc/php.ini

Composer

インストール

コマンド
cd /tmp && curl -s http://getcomposer.org/installer | php

コマンド化

コマンド
mv /tmp/composer.phar /usr/local/bin/composer

phpMyAdmin

2017.06.06現在はバージョン4.7.1
最新版はこちらで確認

インストール

コマンド
# ダウンロード
cd /usr/local/src/ && wget https://files.phpmyadmin.net/phpMyAdmin/4.7.1/phpMyAdmin-4.7.1-all-languages.tar.gz

# 解凍
tar zxvf phpMyAdmin-4.7.1-all-languages.tar.gz

# ディレクトリをリネーム
mv phpMyAdmin-4.7.1-all-languages phpMyAdmin

# 元ファイルを削除
rm -f phpMyAdmin-4.7.1-all-languages.tar.gz

VirtualHost設定

コマンド
vim /etc/httpd/conf.d/phpMyAdmin.conf
/etc/httpd/conf.d/phpMyAdmin.conf設定内容
<VirtualHost *:80>
    ServerName mysql.vm
    DocumentRoot /usr/local/src/phpMyAdmin
    # phpMyAdmin専用のログを出力するようにする
    ErrorLog /var/log/httpd/phpMyAdmin/error_log
    CustomLog /var/log/httpd/phpMyAdmin/access_log combined env=!no_log
    <Directory "/usr/local/src/phpMyAdmin">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
ログディレクトリ作成

作っておかないとApacheの再起動でコケる

コマンド
mkdir /var/log/httpd/phpMyAdmin
Apache再起動
コマンド
apachectl restart

ホストOSのブラウザから使えるようにする

※この項目はゲストOSではなくホストOS側での操作

hosts設定
コマンド
sudo vim /etc/hosts

以下の設定を追記

/etc/hosts
192.168.33.10 mysql.vm

ブラウザから http://mysql.vm にアクセスするとphpMyAdminのログイン画面が表示されるはず。

3.Phalcon3環境構築

Zephir

インストール

コマンド
yum -y install --enablerepo=remi-php71 zephir

インストール確認

コマンド
zephir
結果

 _____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
         /_/

Zephir version 0.9.3a-dev

...

Phalcon

インストール

コマンド
yum -y install --enablerepo=remi-php71 php-phalcon3

インストール確認

コマンド
php -i | grep phalcon
結果
phalcon => enabled

Phalcon Devtools

インストール

コマンド
git clone https://github.com/phalcon/phalcon-devtools.git /usr/local/src/phalcon-devtools

コマンド化

コマンド
ln -s /usr/local/src/phalcon-devtools/phalcon.php /usr/bin/phalcon
chmod ugo+x /usr/bin/phalcon

インストール確認

コマンド
phalcon
結果

Phalcon DevTools (3.0.1)

Available commands:
  commands         (alias of: list, enumerate)
  controller       (alias of: create-controller)
  module           (alias of: create-module)
  model            (alias of: create-model)
  all-models       (alias of: create-all-models)
  project          (alias of: create-project)
  scaffold         (alias of: create-scaffold)
  migration        (alias of: create-migration)
  webtools         (alias of: create-webtools)

4.Phalconを動かしてみる

Phalcon用にApacheの設定ファイルを作成

コマンド
vim /etc/httpd/conf.d/phalcon.conf
/etc/httpd/conf.d/phalcon.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/phalcon/public"
    DirectoryIndex index.php
    ServerName phalcon.vm
    <Directory "/var/www/phalcon/public">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Phalcon Devtoolsを使ってプロジェクトを生成

コマンド
# ドキュメントルートに移動して作成
cd /var/www/ && phalcon create-project phalcon

ホストOSのブラウザから見れるようにする

※この項目はゲストOSではなくホストOS側での操作

hosts設定

コマンド
sudo vim /etc/hosts

以下の設定を追記

/etc/hosts
192.168.33.10 phalcon.vm

ブラウザから http://phalcon.vm にアクセスして、以下のような画面が表示されればOK。
スクリーンショット 2016-11-09 18.42.06.png

おまけ

Vagrant BOXのパッケージ化

せっかく環境構築したので、BOXをパッケージ化する

軽量化する

コマンド
yum clean all
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY

BOXをパッケージ化する

コマンド
vagrant package --output CentOS7.box
# この例では[/vagrant/CentOS7/]内に[CentOS7.box]のファイル名で出力される
# vagrant haltをしなくても勝手に止めてくれる

BOXを復元する

コマンド
vagrant box add {BOX名} {ファイルパス}
# BOX名は初期構築時と変えて新しいBOXとして追加出来る

Phalcon用のBOXとして復元する

コマンド
vagrant box add Phalcon /vagrant/CentOS7/CentOS7.box
mkdir Phalcon && cd $_
vagrant init Phalcon
35
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
35
Help us understand the problem. What is going on with this article?