PHPプロジェクトのddev化
X-tech推進本部 川端既存の素のPHPプロジェクトをddevに移行し、ローカルで動作させるようにしてみました。
今回は、その手順を紹介します。
DDEVのインストール
まず、DDEVがインストールされていることを確認してください。
プロジェクトの初期化
cd /path/to/your/project
ddev config
対話形式で以下を設定します:
- Project name: プロジェクト名
- Docroot: 公開ディレクトリ(例: public, web, htdocs)
- Project type: PHP, Laravel, WordPress, Drupal など
今回は素のPHPプロジェクトでしたのでPHPを選択しました。
設定ファイルのカスタマイズ
.ddev/config.yamlが生成されるので、必要に応じて編集します。
変更前は以下です。
name: project-app
type: php
docroot: app/webroot
php_version: "8.3"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
php_version、webserver_typeを調整します。
name: project-app
type: php
docroot: app/webroot
php_version: "8.2"
webserver_type: apache-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
ddev poweroffからddev startで設定変更の反映を確認します。
既存のDocker設定の移行
データベース
既存のdocker-compose.ymlからデータベース設定を確認し、DDEVの設定に反映します。
database:
type: mysql # または mariadb, postgres
version: "8.0"
環境変数
.ddev/config.yamlに環境変数を追加します。
web_environment:
- DB_HOST=db
- DB_NAME=db
- DB_USER=db
- DB_PASSWORD=db
カスタムサービス
今回のプロジェクトはS3(MinIO)、Elasticsearchが必要なので、それぞれdocker-composeを追加しました。
MinIOはGitHubに記載された方法で導入します。
ddev add-on get ddev/ddev-minio
ddev restart
ddev describe
├───┼──┼─────────────────┼──┤
│ minio │ OK │ https://project-app.ddev.site:9090 │ │
│ │ │ InDocker: │ │
│ │ │ - minio:9000 │ │
│ │ │ - minio:9090 │ │
│ │ │ - minio:10101 │ │
├───┼──┼─────────────────┼──┤
ddev describeの結果で、アプリ側のS3用のエンドポイント・認証情報を調整します。初期の認証はddevminio/ddevminioに設定されていました。
ddev-minioをインストールすると、ddev mcCLIコマンドが利用できるようになります。これはaws-cliのs3コマンドと同様の機能を提供してくれます。
.ddev/config.yamlのpost-startフックを利用してmcコマンドでバケットにエイリアスを設定し、CLIから初期データの投入がしやすいように調整しておきます。
hooks:
post-start:
- exec: |
if command -v mc &/dev/null; then
mc alias set myminio http://minio:10101 ddevminio ddevminio
echo "MinIO alias 'myminio' configured"
fi
ElasticsearchもGitHubを参考に導入します。
ddev add-on get ddev/ddev-elasticsearch
ddev restart
エンドポイント(https://project-app.ddev.site:9201/)にアクセスすると、バージョン7系が立ち上がっていたため、バージョンの調整を行います。
まずは、ボリュームを削除します。
# remove old elasticsearch volume (if this is downgrade)
ddev stop
docker volume rm ddev-$(ddev status -j | docker run -i --rm ddev/ddev-utilities jq -r '.raw.name')_elasticsearch
今回は5系を利用したいのでイメージを調整します。
ddev dotenv set .ddev/.env.elasticsearch --elasticsearch-docker-image=elasticsearch:5.3
ddev restart
追加でelasticsearch-pluginをインストールしようとしたのですが、オプションで対応していないようでした。ddev-opensearchを参考にdocker-compose.elasticsearch.yamlを調整してみます。
.ddev/docker-compose.elasticsearch.yamlをコピーして.ddev/docker-compose.elasticsearch_extras.yamlを作成、プラグイン情報をインストールできるように調整してみます。
image: ${ELASTICSEARCH_DOCKER_IMAGE:-elasticsearch:7.17.14}
build:
dockerfile_inline: |
ARG ELASTICSEARCH_DOCKER_IMAGE="elasticsearch:7.17.14"
FROM $${ELASTICSEARCH_DOCKER_IMAGE}
ARG ELASTICSEARCH_PLUGINS="analysis-icu analysis-phonetic"
RUN for plugin in $${ELASTICSEARCH_PLUGINS}; do elasticsearch-plugin remove $$plugin; done
RUN for plugin in $${ELASTICSEARCH_PLUGINS}; do elasticsearch-plugin install $$plugin; done
args:
ELASTICSEARCH_DOCKER_IMAGE: ${ELASTICSEARCH_DOCKER_IMAGE:-elasticsearch:7.17.14}
ELASTICSEARCH_PLUGINS: ${ELASTICSEARCH_PLUGINS-analysis-icu analysis-phonetic}
expose:
調整が完了したら導入するプラグインを指定し、rebuildしてエラーが出ないことを確認します。
ddev dotenv set .ddev/.env.elasticsearch --elasticsearch-plugins="analysis-icu analysis-phonetic analysis-kuromoji"
ddev debug rebuild -s elasticsearch
初期データの投入
初期データを登録して、ローカル環境への移行を完了させます。
データベース
ddev import-db --src=/path/to/dump.sql
バケットの作成(MinIO)
ddev mc mb myminio/data
まとめ
今までDrupalプロジェクトなどでddevを利用することはありましたが、素のPHPプロジェクトでも全体的にはスムーズにローカル移行できました。 Elasticsearchのバージョンやプラグインの調整は少し手間取りましたので、既存PHPプロジェクトのddev移行の参考になれば幸いです。