前回はDockerでPHP8.0・LiteSpeed環境を作ったので、今回はWordpressをインストールできる環境を作りたいと思います。
開発環境は前回同様です。
ディレクトリ構成
.
├── .env
├── docker-compose.yml
├── mysql8
│ ├── data
│ └── Dockerfile
├── php8_litespeed
│ └── litespeed
│ ├── conf
│ │ ├── httpd_config.conf
│ │ └── vhconf.conf
│ └── Dockerfile
└── www
└── html
LiteSpeed の config ファイルは Dockerfile で Copy、PHPの ini は sed
で書き換えるので、以上のような構成になっています。
html ディレクトリに WordPress をインストールする想定です。
ファイル
.env
LSPHP_VERSION=lsphp80
PHP_VERSION=8.0
MYSQL_ROOT_PASSWORD=P@ssw0rd
MYSQL_USER=user
MYSQL_PASSWORD=P@ssw0rd
LitteSpeed・PHP のバージョンと MySQL のユーザーとパスワードです。
docker-compose.yml
version: '3.8'
services:
php8-litespeed:
container_name: php8-litespeed
build:
context: ./php8_litespeed
args:
- LSPHP_VERSION=${LSPHP_VERSION}
- PHP_VERSION=${PHP_VERSION}
ports:
- "7080:7080"
- "8088:8088"
volumes:
- ./www:/var/www
depends_on:
- "mysql8"
mysql8:
container_name: mysql8
build:
context: ./mysql8
command:
--default-authentication-plugin=mysql_native_password
ports:
- "13306:3306"
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: "Asia/Tokyo"
volumes:
mysql_data:
MySQL 用の Volume を作っています。
Dockerfile(php8-litespeed)
FROM ubuntu:20.04
ARG LSPHP_VERSION
ARG PHP_VERSION
RUN apt-get update && apt-get install -y --no-install-recommends \
tzdata \
curl \
ca-certificates \
wget \
&& wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debian_repo.sh | bash
ENV TZ Asia/Tokyo
RUN apt-get update && apt-get install -y --no-install-recommends \
vim \
git \
zip \
unzip \
openlitespeed \
${LSPHP_VERSION} \
${LSPHP_VERSION}-common \
${LSPHP_VERSION}-mysql \
${LSPHP_VERSION}-curl \
${LSPHP_VERSION}-intl \
&& rm -rf /var/lib/apt/lists/*
EXPOSE 7080 8088
COPY ./litespeed/conf/httpd_config.conf /usr/local/lsws/conf/httpd_config.conf
COPY ./litespeed/conf/vhconf.conf /usr/local/lsws/conf/vhosts/www/vhconf.conf
RUN sed -i -r 's/upload_max_filesize = [0-9]+M/upload_max_filesize = 50M/g' /usr/local/lsws/${LSPHP_VERSION}/etc/php/${PHP_VERSION}/litespeed/php.ini
RUN sed -i -r 's/post_max_size = [0-9]+M/post_max_size = 50M/g' /usr/local/lsws/${LSPHP_VERSION}/etc/php/${PHP_VERSION}/litespeed/php.ini
ENV PATH $PATH:/usr/local/lsws/lsphp80/bin/
RUN wget https://getcomposer.org/installer -O composer-installer.php \
&& php composer-installer.php --filename=composer --install-dir=/usr/local/bin \
&& rm -f composer-installer.php
CMD ["sh", "-c", "/usr/local/lsws/bin/lswsctrl start; tail -F /usr/local/lsws/logs/error.log /usr/local/lsws/logs/access.log"]
WORKDIR /var/www/html
Ubuntu 20.04 をベースに LiteSpeed をインストールしています。
LiteSpeed のconfigファイルは Copy
、PHP の ini
は sed
コマンドで書き換えています。
Dockerfile(mysql8)
FROM mysql:8.0
RUN apt-get update && apt-get install -y \
locales \
&& rm -rf /var/lib/apt/lists/* \
&& echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen \
&& locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN { \
echo '[mysqld]'; \
echo 'character-set-server=utf8mb4'; \
echo 'collation-server=utf8mb4_bin'; \
echo '[client]'; \
echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf
文字コードの設定だけです。
httpd_config.conf
#
# PLAIN TEXT CONFIGURATION FILE
#
#It not set, will use host name as serverName
serverName
user nobody
group nogroup
priority 0
inMemBufSize 60M
swappingDir /tmp/lshttpd/swap
autoFix503 1
gracefulRestartTimeout 300
mime conf/mime.properties
showVersionNumber 0
adminEmails root@localhost
errorlog logs/error.log {
logLevel DEBUG
debugLevel 0
rollingSize 10M
enableStderrLog 1
}
accesslog logs/access.log {
rollingSize 10M
keepDays 30
compressArchive 0
}
indexFiles index.html, index.php
expires {
enableExpires 1
expiresByType image/*=A604800,text/css=A604800,application/x-javascript=A604800,application/javascript=A604800,font/*=A604800,application/x-font-ttf=A604800
}
autoLoadHtaccess 1
tuning {
maxConnections 10000
maxSSLConnections 10000
connTimeout 300
maxKeepAliveReq 10000
keepAliveTimeout 5
sndBufSize 0
rcvBufSize 0
maxReqURLLen 32768
maxReqHeaderSize 65536
maxReqBodySize 2047M
maxDynRespHeaderSize 32768
maxDynRespSize 2047M
maxCachedFileSize 4096
totalInMemCacheSize 20M
maxMMapFileSize 256K
totalMMapCacheSize 40M
useSendfile 1
fileETag 28
enableGzipCompress 1
compressibleTypes default
enableDynGzipCompress 1
gzipCompressLevel 6
gzipAutoUpdateStatic 1
gzipStaticCompressLevel 6
brStaticCompressLevel 6
gzipMaxFileSize 10M
gzipMinFileSize 300
quicEnable 1
quicShmDir /dev/shm
}
fileAccessControl {
followSymbolLink 1
checkSymbolLink 0
requiredPermissionMask 000
restrictedPermissionMask 000
}
perClientConnLimit {
staticReqPerSec 0
dynReqPerSec 0
outBandwidth 0
inBandwidth 0
softLimit 10000
hardLimit 10000
gracePeriod 15
banPeriod 300
}
CGIRLimit {
maxCGIInstances 20
minUID 11
minGID 10
priority 0
CPUSoftLimit 10
CPUHardLimit 50
memSoftLimit 1460M
memHardLimit 1470M
procSoftLimit 400
procHardLimit 450
}
accessDenyDir {
dir /
dir /etc/*
dir /dev/*
dir conf/*
dir admin/conf/*
}
accessControl {
allow ALL
}
extprocessor lsphp {
type lsapi
address uds://tmp/lshttpd/lsphp.sock
maxConns 10
env PHP_LSAPI_CHILDREN=10
env LSAPI_AVOID_FORK=200M
initTimeout 60
retryTimeout 0
persistConn 1
respBuffer 0
autoStart 1
path lsphp80/bin/lsphp
backlog 100
instances 1
priority 0
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 1400
procHardLimit 1500
}
scripthandler {
add lsapi:lsphp php
}
railsDefaults {
maxConns 1
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 500
procHardLimit 600
}
wsgiDefaults {
maxConns 5
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 500
procHardLimit 600
}
nodeDefaults {
maxConns 5
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 500
procHardLimit 600
}
module cache {
ls_enabled 1
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 1
respCookieCache 1
ignoreReqCacheCtrl 1
ignoreRespCacheCtrl 0
enableCache 0
expireInSeconds 3600
enablePrivateCache 0
privateExpireInSeconds 3600
}
virtualhost www {
vhRoot /var/www
configFile conf/vhosts/www/vhconf.conf
allowSymbolLink 1
enableScript 1
restrained 1
setUIDMode 0
}
listener Default {
address *:8088
secure 0
map www *
}
vhTemplate centralConfigLog {
templateFile conf/templates/ccl.conf
listeners Default
}
vhTemplate EasyRailsWithSuEXEC {
templateFile conf/templates/rails.conf
listeners Default
}
バーチャルホストに www
を指定しています。
vhconf.conf
docRoot $VH_ROOT/html/
enableGzip 1
context / {
allowBrowse 1
location $DOC_ROOT/
rewrite {
RewriteFile .htaccess
}
}
context /docs/{
allowBrowse 1
location $SERVER_ROOT/docs/
}
context /protected/{
required user test
authName Protected
allowBrowse 1
location protected/
realm SampleProtectedArea
accessControl {
deny
allow *
}
}
context /blocked/{
allowBrowse 0
}
context /cgi-bin/{
allowBrowse 1
location $VH_ROOT/cgi-bin/
type cgi
}
expires {
enableExpires 1
}
index {
autoIndexURI /_autoindex/default.php
indexFiles index.php index.html
autoIndex 0
useServer 0
}
errorPage 404{
url /error404.html
}
errorlog $VH_ROOT/logs/error.log{
logLevel DEBUG
rollingSize 10M
useServer 1
}
accessLog $VH_ROOT/logs/access.log{
compressArchive 0
logReferer 1
keepDays 30
rollingSize 10M
logUserAgent 1
useServer 0
}
awstats {
updateInterval 86400
workingDir $VH_ROOT/awstats
updateOffset 0
siteDomain localhost
siteAliases 127.0.0.1 localhost
updateMode 0
awstatsURI /awstats/
}
rewrite {
enable 1
autoLoadHtaccess 1
logLevel 0
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
}
hotlinkCtrl {
suffixes gif, jpeg, jpg
allowedHosts
allowDirectAccess 1
enableHotlinkCtrl 0
onlySelf 1
}
accessControl {
deny
allow *
}
realm SampleProtectedArea {
userDB {
cacheTimeout 60
maxCacheSize 200
location conf/vhosts/$VH_NAME/htpasswd
}
groupDB {
cacheTimeout 60
maxCacheSize 200
location conf/vhosts/$VH_NAME/htgroup
}
}
general {
enableContextAC 0
}
mod_rewrite
効かせるため httpd_config.conf
とこのファイルに設定しますが、 RewriteRule
は rewrite
に記載します。
WordPress インストール
ホスト
$ docker exec -it php8-litespeed bash
php8-litespeed コンテナ内
/var/www/html# wget -O - https://ja.wordpress.org/latest-ja.tar.gz | tar zxf -
--2021-01-31 00:14:30-- https://ja.wordpress.org/latest-ja.tar.gz
Resolving ja.wordpress.org (ja.wordpress.org)... 198.143.164.252
Connecting to ja.wordpress.org (ja.wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16121648 (15M) [application/octet-stream]
Saving to: 'STDOUT'
- 100%[===========================================================>] 15.37M 903KB/s in 26s
2021-01-31 00:14:56 (608 KB/s) - written to stdout [16121648/16121648]
/var/www/html# cp wordpress/index.php ./
/var/www/html# chown -R nobody:nogroup /var/www/html
/var/www/html# vi index.php
index.php
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wordpress/wp-blog-header.php';
/wordpress
を追加する。
DB 作成
ホスト
mysql8
コンテナ内に入ります。
$ docker exec -it mysql8 bash
mysql8 コンテナ内
# mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database wordpress;
Query OK, 1 row affected (0.01 sec)
wordpress
という名前の DB を作成しました。
WordPress 設定
http://localhost:8088/wordpress/
データベースのホスト名には mysql8
(MySQL8.0のコンテナ名)を入れます。
管理画面が表示できました。
ドメイン直下 http://localhost:8088/
に表示させたい場合は以下の設定を行います。
サイトアドレス(URL)の項目から /wordpress
を削除し http:localhost:8088
にします。
http://localhost:8088/
表示できました。
まとめ
以上の設定で通常通り WordPress を利用することができます。
LiteSpeed の場合、Rewrite の設定方法など少し特殊なところもあります。
コンテナ内で /usr/local/lsws/admin/misc/admpass.sh
から管理者パスワードを設定し、http:localhost:7080
にアクセスして LiteSpeed の管理画面で設定を行うこともできますが、この設定はコンテナを再度ビルドすると消えてしまうので、Configファイルを編集して設定を変更するほうが望ましいです。
コメント