[メモ] Dockerにて、PHP 5.6 + Apache + MySQL 5.6 を XDebugする環境作成



# 概要
- Dockerにて、PHP 5.6 + Apache + MySQL 5.6 を XDebugする環境作成
- Eclipseにて<br>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/6298fcdb-10a9-96fa-c91f-477affdd6b83.png)

<!--
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/568ec048-aba4-76dd-ec63-305e33244b2c.png)
-->

# 環境
- Windows 10 64bit ホスト機にて、VirtualBoxを動かして、Dockerを使用
    - 参考: [[メモ] Windowsで、Vagrant+Virtualboxを使ってるとき、dockerが使える環境を作成](https://qiita.com/mt08/items/5899ac04a88c60c12eb5)

- デバッガ
    - Eclipse　PHP
    - (予定..) VisualStudioCode
    - (予定..) PHPStorm (評価版)
- ブラウザ: Google Chrome

# コンテナの設定・起動

1. Docker実行環境作成
    - VirtualBoxなどの場合、ポートフォワードの設定をしておくと、よいかもしれません。<br>
    使用ポート: 80(http), 443(https), 3306(MySQL), 8080(phpMyAdmin)
    - 参考: [[メモ] Windowsで、Vagrant+Virtualboxを使ってるとき、dockerが使える環境を作成](https://qiita.com/mt08/items/5899ac04a88c60c12eb5)

3. 以下コピペ

	```bash:コピペすると、ごにょごにょしたあと、コンテナが立ち上がります。
	# ワークフォルダ 
	cd 
	mkdir php
	cd php



	mkdir www
	cat <<EOF >www/index.php
	<html>
	 <head>
	  <title>PHP Test</title>
	 </head>
	 <body>
	 <?php echo '<p>Hello World</p>';
	 phpinfo();
	 ?> 
	 </body>
	</html>
	EOF



	#
	# Docker関係.
	#
	cat <<EOF >.dockerignore
	mysql-cnf
	mysql-data
	EOF

	cat <<'EOF' >Dockerfile
	FROM php:5.6-apache
	RUN yes | pecl install xdebug-2.5.5 \
		&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
		&& echo \
	'xdebug.remote_enable=1\n'\
	'xdebug.remote_autostart=1\n'\
	'xdebug.remote_connect_back=1\n'\
	'xdebug.remote_port=9000\n'\
	>> /usr/local/etc/php/conf.d/xdebug.ini
	RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
	RUN docker-php-ext-install gettext && docker-php-ext-enable gettext
	RUN a2enmod rewrite
	RUN a2enmod ssl
	ADD ssl.conf /etc/apache2/sites-available/ssl.conf
	RUN a2ensite ssl
	EXPOSE 443
	EOF

	#
	# docker-compose.yml
	#
	cat <<'EOF' >docker-compose.yml
	php:
	  build: .
	  #image: php:5.6-apache
	  container_name: php
	  ports:
	   - "80:80"
	   - "443:443"
	  volumes:
		- ./www:/var/www/html
		- ./keys/server.key:/etc/apache2/server.key
		- ./keys/server.crt:/etc/apache2/server.crt
		- ./ssl.conf:/etc/apache2/sites-available/ssl.conf
	  links:
		- mysql
	mysql:
	  image: mysql:5.6
	  container_name: mysql
	  volumes:
		- ./mysql-data:/var/lib/mysql
		- ./mysql-cnf:/etc/mysql/conf.d
	  command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
	  environment:
		MYSQL_ROOT_PASSWORD: password
	  ports:
		- "3306:3306"
	pma:
	  image: phpmyadmin/phpmyadmin
	  container_name: phpmyadmin
	  ports:
	   - "8080:80"
	  volumes:
		- ./mysql-data:/var/lib/mysql
		- ./mysql-cnf:/etc/mysql/conf.d
	  environment:
		PMA_ARBITARY: 1
		PMA_HOST: mysql
		PMA_USER: root
		PMA_PASSWORD: password
	  links:
		- mysql
	EOF



	#
	# HTTPS関係
	#
	# キー作成
	mkdir ./keys
	cd ./keys
	#秘密鍵の作成
	openssl genrsa 2048 > server.key

	#証明書署名要求の作成
	openssl req -new -key server.key <<EOF > server.csr
	JP
	Tokyo
	Minato-ku
	Company
	Section
	vagrant.local
	hoge@example.com
	
	Optional Company Name
	EOF
	#サーバ証明書の作成 - 100日くらい？
	CERT_EXPIRE_DAYS=100
	openssl x509 -in server.csr -days ${CERT_EXPIRE_DAYS} -req -signkey server.key > server.crt
	cd ..

	# apacheのssl設定
	cat <<'EOF' > ssl.conf
	<VirtualHost _default_:443>
		ServerAdmin webmaster@localhost
		DocumentRoot /var/www/html
		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined
		SSLEngine on
		SSLCertificateFile /etc/apache2/server.crt
		SSLCertificateKeyFile /etc/apache2/server.key
		<FilesMatch "\.(cgi|shtml|phtml|php)$">
			SSLOptions +StdEnvVars
		</FilesMatch>
		<Directory /usr/lib/cgi-bin>
			SSLOptions +StdEnvVars
		</Directory>
		BrowserMatch "MSIE [2-6]" \
					  nokeepalive ssl-unclean-shutdown \
					  downgrade-1.0 force-response-1.0
		# MSIE 7 and newer should be able to use keepalive
		BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
	</VirtualHost>
	EOF



	# 起動
	docker-compose up -d

	# 終わったら
	# docker-compose stop # 使用したコンテナ残す
	# docker-compose down # 使用したコンテナ消す
	```

4. ブラウザを起動して、`index.php`が表示されるか、確認。
    - `http://<dockerの起動しているマシンのIP>` とか、
    - VMでポートフォワードしているなら、`http://localhost`
    - `https://`でもいけるハズ。おれおれ証明なので、ブラウザでワーニング(Not secure)が出る<br> `ADVANCED`というのをクリックして、`Proceed to localhost (unsafe)`をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/4da721da-a4bd-3562-07df-46c96b06cecb.png)


## 説明

後ほど..


# デバッガの設定(XDebug使用)

後ほど..

Eclipse (PHP)
VisualStudioCode
PHPStorm



# その他