PHPとImageMagickは、画像操作の鉄板セットです。
一昔前はサーバーにImageMagickを直接インストールして、コマンドラインで使う程度でよかったんですが、
最近ではサーバー依存を無くして、便利運用できるようにするために、Dockerでインストールを固めておく必要があります。
とあるプロジェクトで使う事になり、そのインストール工程で、半日ぐらい費やしたので、出来上がった結果のみブログに掲載しておきます。
事前環境について
今回Dockerを起動するのは、MacBookAir(M1)でコンテナを作る事を目的にしています。
※その後、オンプレサーバーにDockerをインストールして、稼働する予定ですが、とりあえずローカルで動かすことで今回の目的を達成とします。
各種モジュールは以下が含まれています。
Nginx
PHP:8.2
ImageMagick
Sqlite3
MySQL8
ソースコード
docker-compose.yml
services:
php:
container_name : php
build : ./php
volumes:
- ./public_html:/var/www/html
working_dir: /var/www/html
nginx:
container_name: nginx
image: nginx:1.19.5-alpine
ports:
- 8888:80
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./public_html:/var/www/html
depends_on:
- php
sqlite3:
container_name: sqlite
image: nouchka/sqlite3:latest
stdin_open: true
tty: true
volumes:
- ./public_html/:/root/db/
PHP/Dockerfile
FROM php:8.2-fpm-alpine
RUN apk update && \
apk add --update --no-cache \
libjpeg-turbo-dev \
libwebp-dev \
libpng-dev
RUN docker-php-ext-configure gd --with-jpeg
RUN docker-php-ext-install -j$(nproc) gd
RUN apk update && \
apk add -u busybox && \
apk add --update --no-cache \
syslog-ng \
cyrus-sasl \
postfix \
vim \
wget \
autoconf
COPY main.cf /etc/postfix/
COPY sasl_passwd /etc/postfix/
RUN /usr/sbin/postmap /etc/postfix/sasl_passwd
RUN apk --update --no-cache add php-pear
RUN apk --update --no-cache add imagemagick
RUN apk --update --no-cache add file
RUN apk --update --no-cache add php82-pecl-imagick
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS imagemagick-dev \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& apk del .build-deps
RUN apk add --no-cache imagemagick imagemagick-pdf
COPY entrypoint.sh /
ENTRYPOINT ["sh", "/entrypoint.sh"]
php/entrypoint.sh
#!/bin/ash
postfix start
# dockerのイメージが、entrypointによって上書きされたので、再実行してやる
. /usr/local/bin/docker-php-entrypoint php-fpm
php/main.cf
compatibility_level = 3.7
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
unknown_local_recipient_reject_code = 550
smtpd_banner = $myhostname ESMTP $mail_name (alphine)
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
# mydestination = localhost
mydestination = $myhostname, localhost.$mydomain, localhost
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix
inet_protocols = ipv4
inet_interfaces = localhost
mail_spool_directory = /var/mail
debug_peer_level = 2
debug_peer_list = 127.0.0.1
maillog_file = /var/log/maillog.log
# SMTPリレーの設定
relayhost = [smtp.mailtrap.io]:2525
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd
php/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
php/php.ini
[PHP]
post_max_size = 1000M
upload_max_filesize = 1000M
max_file_uploads = 20
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[PECL]
extension=imagick.so
php/sasl_passwd
smtp.mailtrap.io 91b97386be8cb5:f9a8648a20b2cc
nginx/default.conf
server {
listen 80;
server_name localhost;
index index.php index.html;
client_max_body_size 500M;
root /var/www/html;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
あとがき
PHPでの公開Web環境が色々と詰め込んであります。
この構成が便利だと感じているペチパーな人も意外と多いんじゃないでしょうか?
ちなみに、軽量Alpineを使っているので、思いの外、Docker容量が軽くしてあるのは、エンジニア的こだわりです。
0 件のコメント:
コメントを投稿