徒然なるままに プログラミングメモや日々の生活などつれづれとつづっていくblog

2016年10月9日

Nginxをゲートウェイとした構成を構築する。

Filed under: apache,Concrete5,Docker,OSS,Roundcube,Wordpress — ranpei @ 12:43 AM

Nginxをゲートウェイにして「Concrete5」「Wordpress」「Roundcube」を構築していきます。

1.docker-compose.ymlを作ってみる

[shell]
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
[/shell]

/etc/nginx/conf.dをDockerホストからマウントするようにして
ホスト上のファイルを修正することで変更を容易にするようにしています。

ファイルの配置と設定は以下

[shell]
作業Root/
├ docker-compose.yml
|
├ /gateway_proxy
| ├ config.d/
| | └ example.com.conf
| └ htdocss
| └ index.html
|
├ concrete56-ja/
| └ Dockerfile
|
└ mysql/
└ initdb.d/
└ create_database.sql
[/shell]

・example.com.conf

[shell]
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;
}
}
[/shell]

・index.html
~省略~

・create_database.sql

[shell]
— 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’;
[/shell]

buildすれば各コンテナが配置されます。

[shell]

$docker-compose up -d

[/shell]

で、起動するわけなんですが
ブラウザでアクセスしてみるとこんな感じに・・・・

alias%e8%a8%ad%e5%ae%9a%e5%89%8d_concrete5 alias%e8%a8%ad%e5%ae%9a%e5%89%8d_wordpressalias%e8%a8%ad%e5%ae%9a%e5%89%8d_roundcube

 

※ 左から「Concrete5」「Wordpress」「Roundcube」です。

Roundcube以外がうまく行ってませんね。。。。

 

 

 

2.問題へ対応する

調べてみたところ”/blog/”を”/”にリバースしているため「Concrete5」「Wordpress」は”/”にアクセスが来たと解釈しURL生成していました。

そのためリダイレクト先やCSS、JSのURLが正確なパスではないためブラウザからはアクセスできなくなってしまっているわけです。

で、結局どうしたかというと・・・・・・・

「Concrete5」「Wordpress」のApacheに強引にAliasを切って対応しましたwww

いやね、Proxyの設定見直せばいけるかなと思ったんですが

調べれば調べるほど全然ダメみたいで・・・

結局、最終構成は以下となりました。

[shell]
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
[/shell]

 

・ファイル配置

[shell]
作業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
[/shell]

・example.com.conf

[shell]
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;
}
}
[/shell]

・concrete-alias.conf

[shell]
alias /concrete /var/www/html
[/shell]

・wordpress-alias.conf

[shell]
alias /wordpress/var/www/html
[/shell]

・index.html
~省略~

・create_database.sql

[shell]
— 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’;
[/shell]

volumeがファイル単体もマウントできるんでできた荒業ですw

完全にバッドノウハウですよね・・・・

まあ、今後の課題ですかな・・・

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress