10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Alpine Linux の Vagrant Box に PHP をインストールする

Last updated at Posted at 2016-04-10

概要

Alpine Linux での PHP 開発環境構築に取り組みました。パッケージ管理ツールの apk の練習も兼ねています。

Alpine Linux は 5MB の軽量のディストリビューションです。Alpine Linux の開発チームのメンバーは Docker 社に雇用されており、公式イメージの対応が少しずつ進められています。

2016年3月に Docker for Mac and Windows が公開され、VirtualBox を使わずに xhyve Virtual Machine (Mac OS X) もしくは Hyper-V VM で Docker が利用できるようにするツールが開発されています。しかしながら、招待を申請してトークンをメールで受理した人しか使えません。

Vagrant プラグインを導入する

vagrant plugin サブコマンドでセットアップを支援してくれるプラグインを導入します。

vagrant plugin install vagrant-alpine

Vagrant Box をセットアップする

次のコマンドを実行します。利用できるバージョンは README をご参照ください。

vagrant init maier/alpine-3.3.1-x86_64

Vagrant Box にアクセスします。

vagrant up
vagrant ssh

ホストマシンのブラウザーから HTTP サーバーにアクセスできるようにポートフォワードの設定を Vagrantfile に追加します。

Vagrantfile
config.vm.network "forwarded_port", guest: 80, host: 3000

Guest Additions のインストールが毎回失敗するので、無効にします。

Vagrantfile
config.vbguest.auto_update = false
config.vbguest.no_remote = true

上記の設定を利用するために vagrant-vbguest をインストールしておきます。

vagrant plugin install vagrant-vbguest

合わせて共有フォルダーを無効にしました。

Vagrantfile
config.vm.synced_folder '.', '/vagrant', disabled: true

再起動します。

vagrant reload

リポジトリを追加する

PHP 7.0 を利用するために edge/testing リポジトリを追加します。/etc/apk/repositories を開き、コメント行を解除して次の URL を追加します。

#/media/cdrom/apks
http://repos.dfw.lax-noc.com/alpine/v3.3/main
http://repos.dfw.lax-noc.com/alpine/edge/main
http://repos.dfw.lax-noc.com/alpine/edge/testing

リポジトリのインデックスを更新します。

sudo apk update

PHP のコマンドツールをインストールする

PHP 7.0 をインストールしてみましょう。ツールの名前は php7 になっています。

sudo apk add php7

オプションの --update を指定することで、リポジトリのインデックス更新と同時にパッケージを導入することができます。

sudo apk add --update php7

バージョンを確認します。

php7 --version

PHP のプログラムを用意する。

echo "<?php phpinfo();" > index.php

PHP のビルトインサーバーを起動させてみよう。

sudo php7 -S 0.0.0.0:80

Apache と mod_php をインストールする

今度は Apache と mod_php をインストールします。

sudo apk add apache2 php7-apache2

/var/www/localhost/htdocs に PHP スクリプトを設置します。

サービスを起動させてみましょう。

sudo service apache2 start

サービスを停止させるには次のコマンドを実行します。

sudo service apache2 stop

OS 起動時にサービスを自動起動させるには次のコマンドを実行します。

sudo rc-update add apache2

nginx と php-fpm をインストールする

PHP 7.0 の FPM (FastCGI Process Manager) をインストールして起動させます。

sudo apk add php-fpm7
sudo service php-fpm7 start

次に nginx をインストールして起動させます。

sudo apk add nginx
sudo service nginx start

FPM 対応のために /etc/nginx/nginx.conf を編集します。

nginx.conf
location ~ \.php$ {
    root           /path/to/www;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

nginx を再起動します。

sudo service nginx restart

h2o (HTTP サーバー) をインストールする

HTTP サーバーの h2o をインストールして起動させてみよう。

sudo apk add h2o
sudo service h2o start

php-fpm を利用するために /etc/h2o.conf を修正しよう。

h2o.conf
user: h2o
pid-file: /var/run/h2o.pid
error-log: /var/log/h2o/error.log
access-log: /var/log/h2o/access.log

file.custom-handler:
  extension: .php
  fastcgi.connect:
    host: 127.0.0.1
    port: 9000
    type: tcp

file.index: [ 'index.php', 'index.html' ]

hosts:
  "Default":
    listen:
      port: 80
    paths:
      /:
        file.dir: /var/www

h2o を再起動する。

sudo service h2o restart

MariaDB をインストールする

MariaDB とクライアントをインストールします。MySQL は MariaDB のエイリアスになっています。

sudo apk add mariadb mariadb-client

データベースの初期化を実行します。

sudo /etc/init.d/mariadb setup

サービスを起動させます。

sudo service mariadb start

mysql クライアントでサービスにアクセスします。

mysql -u root
> exit

PHP 7.0 の mysqli と pdo_mysql 拡張モジュールを導入しよう。PHP 7.0 で mysql 拡張モジュールは廃止されましたので、インストールしません。

sudo apk add php7-mysqli php7-pdo_mysql
10
8
2

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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?