本記事は[Magento2 Advent Calendar 2018] (https://adventar.org/calendars/3176) 20日目の記事になります。。
php7.1のmagento2.2.7とphp7.2のmagento2.3をphpenvを使って同じサーバーでインストールしたかった話です。
手順
- phpenvのインストール
- phpenvのインストール
- phpenvの下準備
- php7.1のインストール
- php7.2のインストール
- apache2のインストール
- apache2の設定
- mysqlのインストール
- mysqlの設定
- composerを使ってmagentoのソースをダウンロード
- magento2.2.7のインストール
- magento2.3のインストール
phpenvのインストール
まずphpenvを/usr/srcにインストールします。
phpenvのインストールはCentOS7にphpenvをインストールし、PHPのバージョンを管理するを参考にさせていただきました。
$ cd /usr/src
$ git clone https://github.com/CHH/phpenv.git
$ cd phpenv/bin/
$ ./phpenv-install.sh
Installing phpenv in /root/.phpenv
Cloning into '/root/.phpenv'...
remote: Enumerating objects: 2744, done.
remote: Total 2744 (delta 0), reused 0 (delta 0), pack-reused 2744
Receiving objects: 100% (2744/2744), 515.63 KiB | 130.00 KiB/s, done.
Resolving deltas: 100% (1720/1720), done.
Success.
$ export PATH="/root/.phpenv/bin:$PATH"
$ eval "$(phpenv init -)"
phpenvが読めることを確認します。
$ phpenv --version
$ rbenv 1.1.1-39-g59785f6
php-buildのインストール
PHPをインストールするためのphp-buildを取得します。
$ git clone https://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build
phpenvの下準備
このままphpをインストールしてもエラーになるため追加で下記のものをインストールします。
※ 余計な物が入っているかもしれませんが私の環境の場合は全部いれないとエラーになってしまいました。
$ apt install autoconf \
automake \
libxml2-dev \
libcurl4-openssl-dev \
libssl-dev \
openssl \
gettext \
libicu-dev \
libmcrypt-dev \
libmcrypt4 \
libbz2-dev \
libreadline-dev \
build-essential \
libmhash-dev \
libmhash2 \
libxslt1-dev \
libtidy-dev \
re2c
$ apt-get install libxml++2.6-dev \
libpng-dev \
libcurl4-gnutls-dev \
libjpeg-turbo8-dev
phpのインストール
今回は php7.2.13 と php7.1.25 をインストールします。
$ phpenv install 7.2.13
$ phpenv install 7.1.25
とても時間がかかるので気をつけてください。
sshで接続の場合 サーバーから切断されてしまう可能性があるのでsshのconfファイルの設定をすることをお勧めします。
~/.ssh/configについて
インストールが終わったら使うphpを選択します。
# 今回は7.1.25を先に使います。
$ phpenv global 7.1.25
magento インストールに必要なphpのモジュールをインストールします。
$ sudo apt-get -y update
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get -y update
$ sudo apt-get install -y php7.1 libapache2-mod-php7.1 php7.1-common php7.1-gd php7.1-mysql php7.1-mcrypt php7.1-curl php7.1-intl php7.1-xsl php7.1-mbstring php7.1-zip php7.1-bcmath php7.1-iconv php7.1-soap
userの作成
root権限を持つuserを作成します
$ adduser magento
$ gpasswd -a magento sudo
パスワードはお好みで、パスワードを入力したらあとは全てEnterで大丈夫です。
apache2のインストール
$ apt install apache2 -y
apache2 の設定
apacheの設定などはmagento2:開発環境構築(初級者編)を参考にさせていただきました。
$ sudo vim /etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Servername localhost
こんな感じにします。
# 「rewrite」 を有効にします。
$ cd /etc/apache2/mods-enabled/
$ sudo a2enmod rewrite
実行ユーザーを統一
apacheの実行者のズレによってmagento側でエラーが発生するため、実行ユーザー・グループを先ほど作成したmagentoに統一します。
$ sudo vim /etc/apache2/envvars
export APACHE_RUN_USER=magento
export APACHE_RUN_GROUP=magento
mysqlのインストール
$ apt install mysql-server mysql-client
mysqlの設定
rootユーザーでmysqlにログインします。
$ sudo mysql -u root
databaseとuserを作成します。
create database magento;
create user magento IDENTIFIED BY 'magento';
GRANT ALL ON magento.* TO magento@localhost IDENTIFIED BY 'magento';
flush privileges;
phpcomposerをインストール
magento install に必要なphpComposerをインストールします。
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
magento install (2.2.7)
magentoをインストールするためにmagentoのアカウントを作成して、アクセスキーを取得し公開鍵と秘密鍵を入手しておいてください。
# magentoをinstall するためのディレクトリーを作成
$ mkdir -p /var/www/html/magento2.2.7
# magento2.2.7をダウンロード
$ php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.2.7 /var/www/html/magento2.2.7/
# パーミッションを設定
$ chmod 777 -R /var/www/html/magento2.2.7/*
Authentication required (repo.magento.com): には
Username: 公開鍵
Password: 秘密鍵
を入力します。
ダウンロードが終わったら
http://ipaddress/magento2.2.7
にアクセスしてインストールします。
magento install (2.3)
インストールが終わったらphpのバージョンを切り替えます
$ phpenv global 7.2.13
magento インストールに必要なphpのモジュールをインストールします。
$ sudo apt-get -y update
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get -y update
$ sudo apt-get install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-curl php7.2-intl php7.2-xsl php7.2-mbstring php7.2-zip php7.2-bcmath php7.2-soap
magento2.3をダウンロードします。
# magento2.3をインストールするためのディレクトリーを作成
$ mkdir /var/www/html/magento2.3
# magento2.3をinstall
$ php composer.phar create-project --repository=https://repo.magento.com/ magento/project-community-edition /var/www/html/magento2.3
# パーミッションを設定
$ chmod 777 -R /var/www/html/magento2.3/*
ダウンロードが終わったら
http://ipaddress/magento2.3
にアクセスしてインストールします。
なぜ失敗なのか
CLI側のphpのvarsionは切り替わっているのですが、webserver側のphpのvarsionが切り替わらずどちらもphp7.1でインストール・ダウンロードしている状態になっています。
一応phpenv-apache-versionなど試してみたのですがうまく動きませんでした。
おわりに
来年のMagento Advent Calendarでは成功談を話せる様に頑張ります。
アドバイスや助言がありましたらコメントにお願いします。
パーミッションはインストールを目標にしているためセキュリティなどは考えておりません注意してください。
参考資料
- phpenvのインストール
- CentOS7にphpenvをインストールし、PHPのバージョンを管理する http://qs.nndo.jp/2017/08/16/666/
- magentoのインストール
- magento2:開発環境構築(初級者編)https://qiita.com/hitomi_gi/items/4ffa8abe98d317d72a05
- Install Magento using Composer
https://devdocs.magento.com/guides/v2.2/install-gde/composer.html
参考にさせて頂きました、ありがとうございました。