BLOG

docker-composeをつかってWEBサーバーをたてる

| SERVERフロントエンド

誰かと環境を共有するわけでもないんですが
docker-composeをつかってるひげです。

まぁ、簡単に環境を整えれるのがいいところですよね。
ってなわけで、今回は本当にメモです。
僕がつかってる「docker-compose.yml」をちょいとメモメモ

WordPress + mysql + phpmyadmin

ワードプレスで構築することがおおいので
ざっくりとこんな感じです。
特殊なことしない限り大体これで動きます。

docker-compose.yml

version: "3"
services:
  db:
    platform: linux/x86_64 # M1チップ対応のため追記
    image: mysql:5.7
    volumes:
      - ./db/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_****
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: user
      MYSQL_PASSWORD: user_pass_****

  wordpress:
    image: wordpress:latest
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - ./public_html:/var/www/html
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./ssmtp.conf:/etc/ssmtp/ssmtp.conf
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    restart: always
    depends_on:
      - db
    ports:
      - 9999:80
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: user_pass_****
      ENVIRONMENT: local

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    volumes:
      - ./phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
    depends_on:
      - db
    ports:
      - 8888:80

Dockerfile

FROM wordpress:latest

# sendmailをインストール
RUN apt-get update \
 && apt-get install -y --no-install-recommends sendmail \
 && rm -rf /var/lib/apt/lists/*

# sendmailをphpで使うための設定
RUN echo "sendmail_path=sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini

# エントリポイントとして使用するスクリプトを作成
RUN echo '#!/bin/bash' >> /usr/local/bin/docker-entrypoint-wrapper.sh \
 && echo 'set -euo pipefail' >> /usr/local/bin/docker-entrypoint-wrapper.sh

# 1. /etc/hostsにコンテナホスト名のlocalhostエントリを作成
RUN echo 'echo "127.0.0.1 $(hostname) localhost localhost.localdomain" >> /etc/hosts' >> /usr/local/bin/docker-entrypoint-wrapper.sh

# 2. sendmailの再起動
RUN echo 'service sendmail restart' >> /usr/local/bin/docker-entrypoint-wrapper.sh

# 3. docker-entrypoint.shを呼ぶ
RUN echo 'exec docker-entrypoint.sh "$@"' >> /usr/local/bin/docker-entrypoint-wrapper.sh \
 && chmod +x /usr/local/bin/docker-entrypoint-wrapper.sh

ENTRYPOINT ["docker-entrypoint-wrapper.sh"]
CMD ["apache2-foreground"]

php.ini

[Date]
date.timezone = "Asia/Tokyo"

[Mail]
sendmail_path = "/usr/sbin/ssmtp -t"

ssmtp.conf

#
# Config file for sSMTP sendmail
#
mailhub=smtp:1025
FromLineOverride=YES

uploads.ini

memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600

phpmyadmin-misc.ini

allow_url_fopen = Off
max_execution_time = 300
max_input_vars=10000
memory_limit = 500M
post_max_size = 500M
upload_max_filesize = 500M

nginx + php7.4-fpm

wordpress使わないときにちょっとつくったけど
動作までは確認したけど、まだ完成形ではないかなとは思ってます。
まだ、なにが足りないかもわかってないっす。
更新版もまたのせてきます

docker-compose.yml

version: "3"
services:
  web:
    platform: linux/x86_64
    image: nginx
    ports:
      - 9998:80
    restart: always
    depends_on:
      - app
    volumes:
      - ./web/default.conf:/etc/nginx/conf.d/default.conf
      - ./public_html:/var/www/html
      - ./log/nginx/:/var/log/nginx
  app:
    image: php:7.4-fpm
    volumes:
      - ./public_html:/var/www/html
    restart: always

default.conf

server {
  listen 80;
  server_name _;
  ssi on;
  ssi_last_modified on;
  root  /var/www/html;
  index index.html index.php;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  location / {
    try_files $uri $uri/ $uri/index.html /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(\.+)$;
    fastcgi_pass app:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

今回はdocker-compose.yml関連のメモですが
たぶん、これで普通のコーダーさんは行けるんじゃないですかね?
もっといいのあったら教えて下さい。

RECENT POSTS

VS CodeでLive Serverを使ってプレビューのリロードをしてみよう

メディアクエリでhoverが使えるデバイスかどうか

markdown-wasmというすごく高速なMarkdownパーサー

SNSシェアボタンをオリジナルで設置する

CSSでマスクする

クリッカブルマップのレスポンシブ対応ができる「image-map-resizer」が優秀らしい

我が家の植物たち

カスタムフィールドを含む複数の条件でソートをする【WordPress】

脱jQuery!$.ajax使わない書き方

検索用のフォームを設置する【wordpress】

CATEGORY

POPULAR POSTS

PAGE TOP