Nginxをゲートウェイにして「Concrete5」「Wordpress」「Roundcube」を構築していきます。
1.docker-compose.ymlを作ってみる
version: '2' services: ###################### # gateway-proxy ###################### gateway-proxy: image: nginx container_name: gateway-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock - ${PWD}/gateway_proxy/conf.d:/etc/nginx/conf.d - ${PWD}/gateway_proxy/htdocss/index.html:/usr/share/nginx/html/index.html links: - concrete - wordpress - roundcube environment: - NGINX_HOST={ホストのドメイン} ##################### # concrete ##################### concrete: build: concrete56-ja container_name: concrete links: - mysql ##################### # wordpress ##################### wordpress: image: wordpress container_name: wordpress links: - mysql environment: - WORDPRESS_DB_HOST=mysql:3306 - WORDPRESS_DB_NAME=blog - WORDPRESS_DB_USER=blog - WORDPRESS_DB_PASSWORD=blog ##################### # roundcube ##################### roundcube: image: robbertkl/roundcube container_name: roundcube environment: - ROUNDCUBE_DEFAULT_HOST={IMAPサーバーIP or ドメイン} - ROUNDCUBE_DEFAULT_PORT=143 - ROUNDCUBE_SMTP_SERVER={SMTPサーバーIP or ドメイン} - ROUNDCUBE_SMTP_PORT=25 - ROUNDCUBE_SMTP_USER=%u - ROUNDCUBE_SMTP_PASS=%p ##################### # mysql ##################### mysql: image: mysql/mysql-server container_name: mysql volumes: - /var/run/docker.sock:/tmp/docker.sock - mysqldata:/var/lib/mysql - ${PWD}/mysql/initdb.d:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD={MySQLルートパスワード} - MYSQL_ALLOW_EMPTY_PASSWORD=true volumes: mysqldata: driver: local
/etc/nginx/conf.dをDockerホストからマウントするようにして
ホスト上のファイルを修正することで変更を容易にするようにしています。
ファイルの配置と設定は以下
作業Root/ ├ docker-compose.yml | ├ /gateway_proxy | ├ config.d/ | | └ example.com.conf | └ htdocss | └ index.html | ├ concrete56-ja/ | └ Dockerfile | └ mysql/ └ initdb.d/ └ create_database.sql
・example.com.conf
server { listen 80 default_server; server_name example.com; client_max_body_size 512M; # # Log # access_log /var/log/nginx/example.com_access.log; error_log /var/log/nginx/example.com_error.log; # # Header # #proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 600s; proxy_connect_timeout 10s; # # Setting # ############################# # Nginxドキュメントルート ############################# location / { root /usr/share/nginx/html; index index.html; } ############################# # Concrete5 ############################# location /concrete/ { proxy_set_header Host $host; proxy_pass http://concrete/; proxy_redirect http://concrete/ http://$host/; proxy_redirect default; } ############################# # WordPress ############################# location /blog/ { proxy_set_header Host $host; proxy_pass http://wordpress/; proxy_redirect http://wordpress/ http://$host/; proxy_redirect default; } ############################# # Roundcube ############################# location /webmail/ { proxy_cookie_path /webmail/ /; proxy_pass http://roundcube/; proxy_redirect / /webmail/; proxy_redirect default; } }
・index.html
~省略~
・create_database.sql
-- WordPress CREATE DATABASE IF NOT EXISTS blog CHARACTER SET utf8; GRANT all ON concrete.* TO 'blog'@'%' identified by 'blog'; -- Concrete5 CREATE DATABASE IF NOT EXISTS concrete CHARACTER SET utf8; GRANT all ON concrete.* TO 'concrete'@'%' identified by 'concrete';
buildすれば各コンテナが配置されます。
$docker-compose up -d
で、起動するわけなんですが
ブラウザでアクセスしてみるとこんな感じに・・・・
※ 左から「Concrete5」「Wordpress」「Roundcube」です。
Roundcube以外がうまく行ってませんね。。。。
2.問題へ対応する
調べてみたところ”/blog/”を”/”にリバースしているため「Concrete5」「Wordpress」は”/”にアクセスが来たと解釈しURL生成していました。
そのためリダイレクト先やCSS、JSのURLが正確なパスではないためブラウザからはアクセスできなくなってしまっているわけです。
で、結局どうしたかというと・・・・・・・
「Concrete5」「Wordpress」のApacheに強引にAliasを切って対応しましたwww
いやね、Proxyの設定見直せばいけるかなと思ったんですが
調べれば調べるほど全然ダメみたいで・・・
結局、最終構成は以下となりました。
version: '2' services: ###################### # gateway-proxy ###################### gateway-proxy: image: nginx container_name: gateway-proxy ports: - "80:80" volumes: - /var/run/docker.sock:/tmp/docker.sock - ${PWD}/gateway_proxy/conf.d:/etc/nginx/conf.d - ${PWD}/gateway_proxy/htdocss/index.html:/usr/share/nginx/html/index.html links: - concrete - wordpress - roundcube environment: - NGINX_HOST={ホストのドメイン} ##################### # concrete ##################### concrete: build: concrete56-ja container_name: concrete volumes: - ${PWD}/concrete/concrete-alias.conf:/etc/apache2/sites-enabled/concrete-alias.conf links: - mysql ##################### # wordpress ##################### wordpress: image: wordpress container_name: wordpress volumes: - ${PWD}/wordpress/wordpress-alias.conf:/etc/apache2/sites-enabled/wordpress-alias.conf links: - mysql environment: - WORDPRESS_DB_HOST=mysql:3306 - WORDPRESS_DB_NAME=blog - WORDPRESS_DB_USER=blog - WORDPRESS_DB_PASSWORD=blog ##################### # roundcube ##################### roundcube: image: robbertkl/roundcube container_name: roundcube environment: - ROUNDCUBE_DEFAULT_HOST={IMAPサーバーIP or ドメイン} - ROUNDCUBE_DEFAULT_PORT=143 - ROUNDCUBE_SMTP_SERVER={SMTPサーバーIP or ドメイン} - ROUNDCUBE_SMTP_PORT=25 - ROUNDCUBE_SMTP_USER=%u - ROUNDCUBE_SMTP_PASS=%p ##################### # mysql ##################### mysql: image: mysql/mysql-server container_name: mysql volumes: - /var/run/docker.sock:/tmp/docker.sock - mysqldata:/var/lib/mysql - ${PWD}/mysql/initdb.d:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD={MySQLルートパスワード} - MYSQL_ALLOW_EMPTY_PASSWORD=true volumes: mysqldata: driver: local
・ファイル配置
作業Root/ ├ docker-compose.yml | ├ /gateway_proxy | ├ config.d/ | | └ example.com.conf | └ htdocss | └ index.html | ├ wordpress/ | └ wordpress-alias.conf | ├ concrete56-ja/ | ├ Dockerfile | └ concrete-alias.conf | └ mysql/ └ initdb.d/ └ create_database.sql
・example.com.conf
server { listen 80 default_server; server_name example.com; client_max_body_size 512M; # # Log # access_log /var/log/nginx/example.com_access.log; error_log /var/log/nginx/example.com_error.log; # # Header # #proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 600s; proxy_connect_timeout 10s; # # Setting # ############################# # Nginxドキュメントルート ############################# location / { root /usr/share/nginx/html; index index.html; } ############################# # Concrete5 ############################# location /concrete/ { proxy_set_header Host $host; proxy_pass http://concrete/concrete/; proxy_redirect http://concrete/ http://$host/; proxy_redirect default; } ############################# # WordPress ############################# location /blog/ { proxy_set_header Host $host; proxy_pass http://wordpress/blog/; proxy_redirect http://wordpress/ http://$host/; proxy_redirect default; } ############################# # Roundcube ############################# location /webmail/ { proxy_cookie_path /webmail/ /; proxy_pass http://roundcube/; proxy_redirect / /webmail/; proxy_redirect default; } }
・concrete-alias.conf
alias /concrete /var/www/html
・wordpress-alias.conf
alias /wordpress/var/www/html
・index.html
~省略~
・create_database.sql
-- WordPress CREATE DATABASE IF NOT EXISTS blog CHARACTER SET utf8; GRANT all ON concrete.* TO 'blog'@'%' identified by 'blog'; -- Concrete5 CREATE DATABASE IF NOT EXISTS concrete CHARACTER SET utf8; GRANT all ON concrete.* TO 'concrete'@'%' identified by 'concrete';
volumeがファイル単体もマウントできるんでできた荒業ですw
完全にバッドノウハウですよね・・・・
まあ、今後の課題ですかな・・・