LoginSignup
11
11

More than 3 years have passed since last update.

dockerでマルチドメインのWebサーバー構築(https-portal+php-apache+mysql+phpmyadmin)

Posted at

目的

最近Dockerを自学しました、忘れないようにもの作りをしたい。

やりたいこと

docker-composeで以下のWeb環境を作りたい。

  1. Webサーバー:
    • php+apache2
    • 複数のドメイン
    • https対応
  2. DBサーバー:
    • mysql
    • phpMyadmin

Dockerの勉強

お世話になったサイトを紹介します!
1. https://knowledge.sakura.ad.jp/13265/
いつもお世話になったさくらのナレッジにある記事です。結構簡単に分かりやすく書いている文書です。
入門として最初これを読んで見た方がいいでしょう

  1. http://docs.docker.jp/
    Docker 公式日本語サイトです。内容が多いですが、ざっくりと読みました。内容としてはちょっと古いところがあるんですが、入門には全然問題ない。

  2. https://youtu.be/RppfZGuLsmA
    次はYoutubeのビデオです。インド人作られた内容です。英語はなかなか慣れていないため、Youtubeの字幕を見ながら内容を見覗きました。

今回の内容で使うDockerイメージ

SteveLTN/https-portal

https-portalはhttps のリクエストを受け取り、他のコンテナの http へ転送するリバースプロキシとして動作する nginx です。

php:5.6-apache

Webサーバーを構築するイメージですが、php7もあるが、今回試験の目的で一旦php5.6を選択した。

phpmyadmin/phpmyadmin

Mysqlデータベースを管理するため、phpmyadminも入れておきたい。

docker-compose.ymlの設計

さっそくですが、docker-compose.ymlの中身を覗きます。



version: '3'
services:
 web:
   image: php:5.6-apache
   container_name: php56-apache-web
   volumes:
    - "./html:/var/www/html"
    - "./apache.conf:/etc/apache2/sites-enabled"
   #ports:
   # - "8080:80"
   networks:
    docker-net-001:
     aliases:
      - example-site1.jp
      - example-site2.jp
 https-portal:
  image: steveltn/https-portal
  ports:
   - 80:80
   - 443:443
  restart: always
  environment:
   STAGE: local
   DOMAINS: 'example-site1.jp -> http://example-site1.jp, example-site2.jp -> http://example-site2.jp'
  networks:
   - docker-net-001
 mysql:
   image: mysql:5.7
   container_name: php56-apache-mysql
   volumes:
    - "./.data/mysql:/var/lib/mysql"
   restart: always
   environment:
    MYSQL_ROOT_PASSWORD: rootpwd@12345
    # MYSQL_DATABASE: wordpress
    # MYSQL_USER: wordpress
    # MYSQL_PASSWORD: wdpwd@12345
   networks:
    - docker-net-001

 phpmyadmin:
   image: phpmyadmin/phpmyadmin
   container_name: php56-apache-phpmyadmin
   environment:
    - PMA_HOST=php56-apache-mysql
   ports:
    - "3333:80"
   networks:
    - docker-net-001


networks:
 docker-net-001:

確認ポイント

Webサーバーでは、マルチドメインを運用するので、Apacheでは、ドメイン名でバーチャルサイトを設定しています。
詳しくはapache.conf/example-site1.jp.confを参考してください。
なので、Webサーバにドメインごとにアクセスできるように設定する必要があるので、以下のようにNetworkでaliasでドメイン名ごとに定義します。

 web:
  ....
   networks:
    docker-net-001:
     aliases:
      - example-site1.jp
      - example-site2.jp

これで、https-portalでドメインごとにWEBのコンテナに設定します。

https-portal:
 ...
 environment:
   STAGE: local
   DOMAINS: 'example-site1.jp -> http://example-site1.jp, example-site2.jp -> http://example-site2.jp'

mysqlとphpmyadminは特に工夫せずに大体同じサンプルコードを使っていました。

最後

今回作ったサンプルは以下のURLから参考してください。
https://github.com/lzs0627/docker-sample01

11
11
0

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
11
11