+
必要条件
- 環境は、 Windows 、 MacOS 、 Linuxにデプロイする必要があります
- インストールはできる限り簡単にする必要があります。
- 高速ファイルシステム操作
- IDE PHPStormとの統合
- PHPインタープリターのいくつかのバージョン( 5.6、7.0 )
準備する
特定のオペレーティングシステムに必要なツールのインストールには焦点を当てません。インストール手順は公式サイトにあり、リンクが添付されています。
- VirtualBoxをインストールする
- Docker Toolboxをインストールする
- Vagrantをインストールする
アセンブリには何が含まれていますか?
- Nginx
- MySQL 5(Percona)
- MongoDB 3
- Redis 3
- PHP 5.6、7.0 CLI + FPM
PHP拡張
5.6
- cli
- fpm
- bcmath
- gd
- gmp
- 国際
- mbstring
- mcrypt
- PDO
- mysqlnd
- 暗号
- ジオイプ
- imagick
- jsonc
- memcache
- memcached
- モンゴッド
- ssh2
- xdebug
- せっけん
- xml
- opcache
- redis
7.0
- cli
- fpm
- bcmath
- gd
- gmp
- 国際
- mbstring
- mcrypt
- PDO
- mysqlnd
- 暗号
- ジオイプ
- imagick
- memcache
- memcached
- モンゴッド
- ssh2
- xdebug
- せっけん
- xml
- opcache
- redis
セットアップと構成
注意! 説明されているすべての設定とファイルはGitHubに投稿されています 。 VagrantまたはDockerの使用について質問がある場合は、公式ドキュメントを参照してください。
環境の展開は、オペレーティングシステムによって若干異なります。
- MacOSのすべては、追加のアクションなしで期待どおりに進みます。
- Windowsは、 vagrant upを実行する前に、 hosts-set.cmdヘルパースクリプトを実行して、 hostsファイルの現在のユーザー書き込み許可を設定する必要があります。また、現在のユーザー名に非ACSII文字が含まれている場合は、 vagrant作業ディレクトリへのパスを変更する必要がありますd環境変数VAGRANT_HOMEを使用します。 OSにNFSがない場合は、追加でインストールします。vagrantプラグインvagrant-winnfsdを 使用できます 。
- Linuxはあなたの裁量で、 VagrantをNFSサーバーにインストールするか、 docker-compose命令を使用することができます。
hosts-set.cmd
@if (1==1) @if(1==0) @ELSE @echo off&SETLOCAL ENABLEEXTENSIONS >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||( cscript //E:JScript //nologo "%~f0" @goto :EOF ) CACLS %SystemRoot%\system32\drivers\etc\hosts /E /G %USERNAME%:W @goto :EOF @end @ELSE ShA=new ActiveXObject("Shell.Application") ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5); WScript.Sleep(500) @end
ゲストOSはUbuntu 14.04(Trusty)で実行され、静的IPアドレスは10.0.0.2であり、共有フォルダーとしてNFSマウントを使用します。
便宜上、 docrantという名前のフォルダー(Docker + Vagrant = Dockrant)を作成してから、記事でこのフォルダーにビルドします。
フォルダ構造を決めましょう:
./dockrant-ルートフォルダー
./dockrant/ssh-ゲストOSのSSHキー(このチュートリアルでは、標準の浮浪者キーを使用します)
./dockrant/share-ホストとゲストOS間の共有フォルダー
./dockrant/share/tools-ツールとbashスクリプトのあるフォルダー
./dockrant/vagrant/build-ゲストOSを上げるときの実行可能なbashスクリプト
ここで、必要なすべてのスクリプトと指示を上記のフォルダー構造に配置する必要があります。リストを見てみましょう。
./dockrant/ssh-id_rsa (秘密鍵)とid_rsa.pub (公開鍵)の2つのファイルを配置します
id_rsa
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2 hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1 Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf 4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX 3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj 3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+ dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz 6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH +vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s= -----END RSA PRIVATE KEY-----
id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
./dockrant/share/-phpinfo ()関数を使用してphpinfo.phpファイルを作成し、操作性を確認します
phpinfo.php
<?php phpinfo();
./dockrant/share/tools/-Docker execおよびPHPUnitからPHPインタープリターを実行するための補助スクリプトを配置しましょう( phpunit.pharからダウンロード)
php56
#!/bin/bash CMD="export IDE_PHPUNIT_PHPUNIT_PHAR='$IDE_PHPUNIT_PHPUNIT_PHAR'" CMD+=" && export IDE_PHPUNIT_VERSION='$IDE_PHPUNIT_VERSION'" CMD+=" && export SSH_CLIENT='$SSH_CLIENT'" CMD+=" && export JETBRAINS_REMOTE_RUN='$JETBRAINS_REMOTE_RUN'" CMD+=" && export DEBUG_CONFIG='$XDEBUG_CONFIG'" CMD+=" && export XDEBUG_CONFIG='$XDEBUG_CONFIG'" CMD+=" && php56 $@" docker exec share_php_1 bash -c "$CMD"
php56tty
#!/bin/bash CMD+="php56 $@" docker exec -t -i share_php_1 bash -c "$CMD"
php70
#!/bin/bash CMD="export IDE_PHPUNIT_PHPUNIT_PHAR='$IDE_PHPUNIT_PHPUNIT_PHAR'" CMD+=" && export IDE_PHPUNIT_VERSION='$IDE_PHPUNIT_VERSION'" CMD+=" && export SSH_CLIENT='$SSH_CLIENT'" CMD+=" && export JETBRAINS_REMOTE_RUN='$JETBRAINS_REMOTE_RUN'" CMD+=" && export DEBUG_CONFIG='$XDEBUG_CONFIG'" CMD+=" && export XDEBUG_CONFIG='$XDEBUG_CONFIG'" CMD+=" && php70 $@" docker exec share_php_1 bash -c "$CMD"
php70tty
#!/bin/bash CMD+="php70 $@" docker exec -t -i share_php_1 bash -c "$CMD"
TTYを使用しないphp *スクリプトの場合、これらのスクリプトは、リモートインタープリターを使用してIDEとの統合を正しく構成するために必要です。php* ttyスクリプトは、 php -aインタラクティブモードを含む、PHPスクリプトの起動を手動で使用するために必要です。
./dockrant/vagrant/build/php/-init.sh bashスクリプトを配置して、PHPインタープリターを起動するための実行可能ファイルをコピーします。
init.sh
#!/bin/bash cp /share/tools/php56 /usr/bin/php56 && chmod +x /usr/bin/php56 cp /share/tools/php70 /usr/bin/php70 && chmod +x /usr/bin/php70 cp /share/tools/php56tty /usr/bin/php56tty && chmod +x /usr/bin/php56tty cp /share/tools/php70tty /usr/bin/php70tty && chmod +x /usr/bin/php70tty
./dockrant/vagrant/build/docker/-init.shおよびdocker-compose.sh bashスクリプトを配置して、ゲストOSを上げるときにdocker -composeとコンテナーを構築するコマンドをインストールします。
init.sh
#!/bin/bash /usr/local/bin/docker-compose -f /share/docker-compose.yml build /usr/local/bin/docker-compose -f /share/docker-compose.yml up -d
docker-compose.sh
#!/bin/bash curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
Docker-compose
ファイル./dockrant/share/docker-compose.ymlを作成します
次に、Dockerコンテナの作成手順について説明します。各イメージのビルド手順については説明しません。既製のコンテナを使用します。
次の画像から収集します。
- redis:3
- パーコナ:5
- グルカミ/ php:5.6
- gurukami / php:7.0(FPMのデフォルト)
- グルカミ/ nginx
- モンゴ:3
docker-compose.yml
version: '2' services: redis: image: redis:3.0 mysql: image: percona:5 environment: - MYSQL_ROOT_PASSWORD=gurukami volumes: - /share:/share php56: image: gurukami/php:5.6 links: - mysql - mongo - redis volumes: - /share:/share - /home:/home - /tmp/:/tmp/ php: image: gurukami/php:7.0 links: - mysql - mongo - redis volumes: - /share:/share - /home:/home - /tmp/:/tmp/ mongo: image: mongo:3 ports: - "27017:27017" nginx: image: gurukami/nginx:latest depends_on: - php links: - php ports: - "80:80" - "443:443" volumes: - /share:/share
Vagrantfile
dockrantフォルダーにVagrantfileを作成し、 そこに次の指示を記述します
Vagrantfile
Vagrant.require_version ">= 1.8.6" required_plugins = %w(vagrant-hostsupdater) plugins_to_install = required_plugins.select { |plugin| not Vagrant.has_plugin? plugin } if not plugins_to_install.empty? puts "Installing plugins: #{plugins_to_install.join(' ')}" if system "vagrant plugin install #{plugins_to_install.join(' ')}" exec "vagrant #{ARGV.join(' ')}" else abort "Installation of one or more plugins has failed. Aborting." end end Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" config.vm.hostname = "gurukami.local" config.ssh.insert_key = false config.hostsupdater.aliases = [ "sandbox.local" ] config.nfs.map_uid = Process.uid config.nfs.map_gid = Process.gid config.vm.network :private_network, ip: "10.0.0.2" config.vm.network :forwarded_port, guest: 22, host: 2202, id: "ssh" config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] vb.name = "Gurukami (Dockrant)" vb.memory = 1024 vb.cpus = 2 end config.vm.provision "fix-no-tty", type: "shell" do |s| s.privileged = false s.inline = "sudo sed -i '/tty/!s/mesg n/tty -s \\&\\& mesg n/' /root/.profile" end config.vm.provision "shell", inline: 'mkdir /vagrant', run: "once" config.vm.provision "shell", inline: 'echo "nameserver 8.8.8.8" >> /etc/resolv.conf', run: "always" config.vm.provision "shell", path: './vagrant/build/php/init.sh', run: "once" config.vm.provision "shell", path: './vagrant/build/docker/docker-compose.sh', run: "once" config.vm.provision :docker config.vm.provision "shell", path: './vagrant/build/docker/init.sh', run: "always" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.synced_folder "./share", "/share", nfs: true, nfs_udp: false end
チューニング:
- 共有が必要な場合は、オプションconfig.vm.network:public_networkを追加して、パブリックインターフェイスで上げるか、 vagrant 共有を使用できます。
- vb.memory専用メモリ使用量を増やします 。デフォルトは1024 MBです
- 使用されるvb.cpusプロセッサの数を増やします。デフォルトは2です
打ち上げ
dockrantフォルダーで 、コマンドを実行します
vagrant up --provider virtualbox
アセンブリの後、ブラウザで開きます-sandbox.local / phpinfo.php
Docker-machine
仮想マシンをdocker-machineとして機能させるには、 汎用ドライバーを使用して追加し、 dockrantフォルダーから実行する必要があります
docker-machine create --driver generic --generic-ip-address=10.0.0.2 --generic-ssh-key ./ssh/id_rsa --generic-ssh-user vagrant sandbox
docker-machineを作成したら、次のようにゲストマシンを再起動する必要があります。 インストール後、すべてのdocker containerが停止します
vagrant reload
PHP CLI
PHPスクリプトはゲストマシン( 10.0.0.2 )で起動されます。ホストマシンとゲストの間に/ shareフォルダーがあることに注意 してください。
php56 /path/to/file php70 /path/to/file
PHPインタープリターを対話的に実行する
php56tty -a php70tty -a
PHPStormとの統合
XDebugを使用してデバッガーを構成し、 PHPUnitを固定し、 Docker統合プラグインを使用してコンテナーの制御を追加します。これにより、サービスのログの表示、コンテナーのリロード、スクリプトの実行ができます。
PHPインタープリターを設定に追加し、 言語とフレームワーク→PHP設定を開きます
最初に5.6バージョンを追加し、次にバージョン7.0で繰り返し、ボタンをクリックして...
次に、[ + リモート ]をクリックして...
ポップアップウィンドウで、 Vagrantタイプを選択し、ゲストOS上のPHPインタープリターへのパスを指定します/ usr / bin / php56
ブラウザーからの要求に応じてデバッガーを操作するために、リモートサーバーをリストに追加します
言語とフレームワーク→PHP→サーバー IDEがホストマシンとゲストの間のパスリクエストを認識できるように、 パスマッピングを/ shareフォルダーに書き込みます。
PHPUnitを設定して、 言語とフレームワーク→PHP→PHPUnitの設定に移動し、PHPインタープリターの各バージョンについて、/ share / tools / phpunit.pharへのパスを記述します。
アプリケーションをデバッグする準備はほぼ整いましたが、起動構成を構成する必要があります
PHPリモートデバッグの構成
たとえば、2行目のphpinfo.phpファイルにブレークポイントを設定し、デバッガーを実行し、ブラウザーのsandbox.local / phpinfo.phpページに移動して、IDEでデバッガーが機能することを確認します。
それでは、 PHPUnitに進みましょう。
./dockrant/shareフォルダーにTest.phpという簡単な単体テストファイルを作成します。
Test.php
<?php class Test extends PHPUnit_Framework_TestCase { public function testSomething() { $this->assertTrue(true); } }
起動構成を設定する
ユニットテストの実行
デバッガーで単体テストを実行することもできます。
Docker統合プラグインを構成します。プラグインをインストールした後、 ビルド、実行、展開→Docker設定でマシンを追加する必要があります。原則として、 docker-machinesフォルダーは現在のユーザーのホームディレクトリにあり、上記の手順を使用して作成したサンドボックス docker-machineが必要運転手
IDEを再起動すると、下部のDockerタブが表示されます
まとめ
ほとんどのオペレーティングシステムに必要なサービスとユーティリティがすべて展開された環境があります。
環境の展開は以下でテストされています。
- Windows 10
- MacOS Sierra 10.12
- Ubuntu 14.04デスクトップ
読んでくれてありがとう、この記事が快適な環境を整理するのに役立つことを願っています。