Help us understand the problem. What is going on with this article?

1つのサーバーに異なるphpのversionでmagentoをインストールしたかった。(失敗談)

More than 1 year has passed since last update.

本記事はMagento2 Advent Calendar 2018 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のアカウントを作成して、アクセスキーを取得し公開鍵と秘密鍵を入手しておいてください。

https://magento.com/

# 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では成功談を話せる様に頑張ります。
アドバイスや助言がありましたらコメントにお願いします。
パーミッションはインストールを目標にしているためセキュリティなどは考えておりません注意してください。

参考資料

参考にさせて頂きました、ありがとうございました。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした