【超簡単】Laravel9 dockerで開発環境構築でLaravelの構築はできたのですが、デバッグツールのxdebugの導入に苦労したので忘備録もかねて記事にします。
docker-compose.ymlファイルを取得する
ターミナルから作業するディレクトリに移動したら、vscodeを立ち上げる
vscodeのターミナルを立ち上げ、以下のコードを実行する
curl -LO https://raw.githubusercontent.com/bitnami/containers/main/bitnami/laravel/docker-compose.yml
docker-compose.ymlというファイルがダウンロードされます。
docker-compose.ymlを編集する
docker-compose.ymlというファイル名は古い書き方なので名前を変更してcompose.yamlとします。
中身を編集します
version: '2' #削除 services: #途中のコード省略 image: docker.io/bitnami/laravel:9 #削除 build: ./docker #追記 ports: - '8000:8000' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' #追記 #途中のコード省略 volumes: - './my-project:/app' - './docker/php.ini:/opt/bitnami/php/etc/php.ini' #追記
Dockerfileを作成
compose.yamlファイルと同じディレクトリにdockerフォルダを作成して、dockerフォルダ内にDockerfileを作成します。中身を以下のようにします。
FROM docker.io/bitnami/laravel:9 RUN apt update \ && apt install -y autoconf gcc g++ make \ && pecl install xdebug
【超簡単】Laravel9 dockerで開発環境構築の環境にxdebugをインストールしたときに様々なエラーがでました。autoconf, gcc, g++, makeが足りなかったようです。
php.iniファイルの作成
dockerフォルダ内にphp.iniファイルを作成します。中身を以下のようにします。下の方の[xdebug]の項目が重要
[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = -1 disable_functions = disable_classes = zend.enable_gc = On zend.exception_ignore_args = On zend.exception_string_param_max_len = 0 expose_php = 0 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 40M auto_prepend_file = auto_append_file = default_mimetype = "text/html" default_charset = "UTF-8" doc_root = user_dir = extension_dir = /opt/bitnami/php/lib/php/extensions extension_dir = /opt/bitnami/php/lib/php/extensions enable_dl = Off file_uploads = On upload_tmp_dir = /opt/bitnami/php/tmp upload_max_filesize = 40M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 zend_extension = opcache [CLI Server] cli_server.color = On [Date] date.timezone = UTC [filter] [iconv] [imap] [intl] [sqlite3] [Pcre] [Pdo] [Pdo_mysql] pdo_mysql.default_socket= [Phar] [mail function] SMTP = localhost smtp_port = 25 mail.add_x_header = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [OCI8] [PostgreSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [bcmath] bcmath.scale = 0 [browscap] [Session] session.save_handler = files session.save_path = /opt/bitnami/php/var/run/session session.save_path = /opt/bitnami/php/var/run/session session.save_path = /opt/bitnami/php/var/run/session session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.cookie_samesite = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.sid_length = 26 session.trans_sid_tags = "a=href,area=href,frame=src,form=" session.sid_bits_per_character = 5 [Assertion] zend.assertions = -1 [COM] [mbstring] [gd] [exif] [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.wsdl_cache_limit = 5 [sysvshm] [ldap] ldap.max_links = -1 [dba] [opcache] opcache.enable = 0 opcache.enable_cli = 0 opcache.memory_consumption = 192 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 4000 opcache.revalidate_freq = 60 opcache.file_cache = /opt/bitnami/php/var/run/opcache_file [curl] [openssl] [ffi] opcache.fast_shutdown = 1 [xdebug] xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9003 xdebug.log=/tmp/xdebug.log xdebug.log_level=0 zend_extension=/opt/bitnami/php/lib/php/extensions/xdebug.so
デフォルトのphp.iniファイルからコメントアウトしている部分を削除しました。オリジナルのphp.iniファイルを確認したい場合は、compose.yamlの- ‘./php.ini:/opt/bitnami/php/etc/php.ini’を削除してコンテナ内の/opt/bitnami/php/etc/php.iniを確認してみてください。
コンテナを立ち上げる
docker compose up
上記コマンドを実行する
localhost:8000にアクセスしてLaravelが立ち上がったか確認する
コンテナでインストール完了確認
下記コマンドを実行してコンテナに入る
docker compose exec myapp bash
続けて下記コマンドを実行してxdebugが入っているか確認する
php -v
xdebugが入っていれば以下のようにxdebugの表示があります。
PHP 8.1.12 (cli) (built: Oct 25 2022 21:36:28) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.12, Copyright (c) Zend Technologies with Zend OPcache v8.1.12, Copyright (c), by Zend Technologies with Xdebug v3.1.5, Copyright (c) 2002-2022, by Derick Rethans
xdebug用のlaunch.jsonファイルを作成する
vscodeの左側の「実行とデバッグ」をクリックして「launch.jsonファイルを作成します。」をクリックして、以下のように追記する。
"configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, //,を追記 "pathMappings": { //追記 "/app": "${workspaceRoot}/my-project" //追記 }, //追記 "hostname": "0.0.0.0", //追記 },
以上でxdebugが使える環境になりました。
後の設定は【超簡単】Laravel9 dockerで開発環境構築の3.Laravelの設定以降と同じになります。
コメント