php开发环境laradock配置

git clone https://github.com/laradock/laradock
graph TB
clone_pro(获取laradock项目)
==>edit_env(配置当前项目的.env文件)
==>compose_up(启动项目并生成对应的项目images)
==>edit_env
compose_up
==>push(可推送到公共开发环境,其他成员直接使用该镜像)
  • 配置当前项目的.env文件,主要涉及的东西

# 项目路径
APP_CODE_PATH_HOST=/vagrant_data
# 隐射到容器路径
APP_CODE_PATH_CONTAINER=/vagrant_data
# 国内加速
CHANGE_SOURCE=true
# php版本
PHP_VERSION=7.1
# 安装docker的ip,如果是linux就是本机的ip, 不该也没关系,基本上就是容器的Gateway
DOCKER_HOST_IP=192.168.1.214
# 项目名称,变更名称之后才会重新构建,构建完成之后会生成对应名称的images镜像
COMPOSE_PROJECT_NAME=workphp71
# 开启WORKSPACE的SSH,密钥项目 workspace 目录下的密钥文件 insecure_id_rsa,文件的权限重新设置为600
WORKSPACE_INSTALL_WORKSPACE_SSH=true
# 把 node 和 npm/yarn 都关闭了,下载国内很慢
WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_PNPM=false
WORKSPACE_INSTALL_YARN=false
# 搜索 =true 的值,不需要不理解的都改为 false 关闭

# 使用caddy
# 配置caddy配置文件: laradock/caddy/caddy/Caddyfile

:80 {
    root * /vagrant_data/php_db/dbninja
    php_fastcgi php-fpm:9000
    file_server
}
# 启动caddy
docker-compose up -d caddy
# 直接访问实体机的80端口即可

# 查看生成的镜像
docker images|grep workphp71

# 在容器运行的时候,删除没有运行容器的卷
docker volume prune

# 删除批量多余镜像, 删除包含<none>的image
docker rmi $(docker images | grep '<none>' | awk '{print $3}')
# 删除包含laradock的image
docker rmi $(docker images | grep 'laradock' | awk '{print $3}')
# 找到fpm修改扩展
### PHP_FPM ###############################################

# 修改增加扩展之后, 重新构建, 使用 build 构建对应的服务
docker-compose build php-fpm
# 构建完成之后,提示类似:
Successfully built 684adacb8bd0
Successfully tagged workphp71_php-fpm:latest
# 重新启动
docker-compose down
docker-compose up -d caddy
  • pull很慢,可修改对应的Dockerfile

# 如 php-fpm/Dockerfile
- FROM laradock/php-fpm:${BASE_IMAGE_TAG_PREFIX}-${LARADOCK_PHP_VERSION}
+ FROM hub-mirror.c.163.com/laradock/php-fpm:${BASE_IMAGE_TAG_PREFIX}-${LARADOCK_PHP_VERSION}
# 无需映射xdebug端口

# 方案一:
# 修改 docker-compose.yml, 注释掉
- ports:
-   - "${PHP_FPM_XDEBUG_PORT}:9003"
+ # ports:
+ #   - "${PHP_FPM_XDEBUG_PORT}:9003"
# 搜索host.docker.internal全局进行替换ip(fpm的Gateway),vscode配置的hostname也使用这个ip
-xdebug.remote_host="host.docker.internal"
+xdebug.remote_host="172.24.0.1"
# 重构并重新启动
docker-compose down
docker-compose build php-fpm
# docker-compose build workspace 多试几次,网不行
docker-compose up -d caddy

# 方案二: 如果也是死活调试不上,可以尝试以下容器内文件配置修改: /usr/local/etc/php/conf.d/xdebug.ini
xdebug.mode=debug
; If enabled, Xdebug will first try to connect to the client that made the HTTP request. It checks the $_SERVER['HTTP_X_FORWARDED_FOR'] and $_SERVER['REMOTE_ADDR'] variables to find out which hostname or IP address to use.
xdebug.discover_client_host=1
;优先使用REMOTE_ADDR
xdebug.client_discovery_header=REMOTE_ADDR
xdebug.mode=develop,debug,profile,trace
xdebug.client_port = 9003
xdebug.show_local_vars = Off
xdebug.show_error_trace = Off
xdebug.force_display_errors = Off
xdebug.start_with_request = yes
xdebug.remote_handler=dbgp

# vscode配置(fpm的Gateway):
"hostname": "172.24.0.1",

# 重启容器你懂得
  • 容器类通信和连接

# php-fpm的连接在caddy里面
php_fastcgi php-fpm:9000
# 通过 inspect 命令 查看容器的 Aliases 别名参数列表,进行容器内连接:
docker inspect laradock80_redis_1
# 查看Networks里面的laradock80_backend里面的Aliases
        "Aliases": [
            "6a8848828e49",
            "redis"
        ],
  • 修改实例

diff --git a/.gitignore b/.gitignore
index d2c5d26..fe701b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,5 @@
 docker-compose.custom.yml

 .DS_Store
+/.vscode/
+/.vscode/*
diff --git a/caddy/caddy/Caddyfile b/caddy/caddy/Caddyfile
index 2fab010..68bb412 100644
--- a/caddy/caddy/Caddyfile
+++ b/caddy/caddy/Caddyfile
@@ -1,9 +1,30 @@
-# Docs: https://caddyserver.com/docs/caddyfile
-laradock.test {
-    root * /var/www/public
+:80 {
+    root * /home/jcleng/桌面/work/www/tp6/public
     php_fastcgi php-fpm:9000
-    file_server
+    route {
+        # 静态文件整个目录是直接(按文件)输出
+        file_server /assets/*
+        file_server /uploads/*
+
+        # 静态解析网站图标
+        file_server /favicon.ico
+
+        # 静态解析 搜索引擎文件
+        file_server /robots.txt
+
+        # 先重写前台,再重写后台
+        # 前台重写
+        @front {
+            not file
+            path_regexp front (/.+)
+        }
+        rewrite @front /index.php{uri}
+        # @admin {
+        #     not file
+        #     path_regexp admin (NaUMFbCdWg\.php)(/.+)
+        # }
+        # 后台重写
+        # rewrite @admin /NaUMFbCdWg.php{re.admin.2}
+    }

-    encode gzip
-    tls internal
 }
diff --git a/docker-compose.yml b/docker-compose.yml
index 70cef48..eb99d64 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -290,8 +290,8 @@ services:
         - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
         - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
         - docker-in-docker:/certs/client
-      ports:
-        - "${PHP_FPM_XDEBUG_PORT}:9003"
+      # ports:
+      #   - "${PHP_FPM_XDEBUG_PORT}:9003"
       expose:
         - "9000"
       extra_hosts:
@@ -627,7 +627,7 @@ services:
       build:
         context: ./postgres-postgis
         args:
-          - POSTGIS_VERSION=${POSTGIS_VERSION}
+          - POSTGIS_VERSION=${POSTGIS_VERSION}
           - INSTALL_PGSQL_HTTP_FOR_POSTGIS13=${POSTGIS_INSTALL_PGSQL_HTTP_FOR_POSTGIS13}
       volumes:
         - ${DATA_PATH_HOST}/postgres:/var/lib/postgresql/data
diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile
index 57578eb..06fc694 100644
--- a/php-fpm/Dockerfile
+++ b/php-fpm/Dockerfile
@@ -14,7 +14,7 @@

 ARG LARADOCK_PHP_VERSION
 ARG BASE_IMAGE_TAG_PREFIX=latest
-FROM laradock/php-fpm:${BASE_IMAGE_TAG_PREFIX}-${LARADOCK_PHP_VERSION}
+FROM hub-mirror.c.163.com/laradock/php-fpm:${BASE_IMAGE_TAG_PREFIX}-${LARADOCK_PHP_VERSION}

 LABEL maintainer="Mahmoud Zalt <[email protected]>"

@@ -1027,7 +1027,7 @@ RUN if [ ${INSTALL_AUDIOWAVEFORM} = true ]; then \
    && make \
    && make install \
 ;fi
-
+

 #####################################
 # wkhtmltopdf:
diff --git a/php-fpm/xdebug.ini b/php-fpm/xdebug.ini
index ba50bb8..d3d6d50 100644
--- a/php-fpm/xdebug.ini
+++ b/php-fpm/xdebug.ini
@@ -1,6 +1,6 @@
 ; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

-xdebug.remote_host="host.docker.internal"
+xdebug.remote_host="172.18.0.1"
 xdebug.remote_connect_back=0
 xdebug.remote_port=9000
 xdebug.idekey=PHPSTORM
diff --git a/workspace/xdebug.ini b/workspace/xdebug.ini
index ba50bb8..d3d6d50 100644
--- a/workspace/xdebug.ini
+++ b/workspace/xdebug.ini
@@ -1,6 +1,6 @@
 ; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

-xdebug.remote_host="host.docker.internal"
+xdebug.remote_host="172.18.0.1"
 xdebug.remote_connect_back=0
 xdebug.remote_port=9000
 xdebug.idekey=PHPSTORM
  • 开启php错误显示

# php-fpm\laravel.ini
- display_errors=Off
+ display_errors=On
# 需要重新 build
docker-compose build php-fpm
  • 配置vscode连接remote ssh(测试只有workspace的容器支持vscode安装codeserver)

# /home/jcleng/.ssh/config
# chmod 600 /home/jcleng/桌面/work/docker/Laradock/workspace/insecure_id_rsa
Host 127.0.0.1
  HostName 127.0.0.1
  User root
  Port 2222
  IdentityFile "/home/jcleng/桌面/work/docker/Laradock/workspace/insecure_id_rsa"
  • vscode使用docker的php

vi /usr/lib/systemd/system/docker.service
dockerd或者dockerd-current增加参数 -H tcp://0.0.0.0:2375
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker

# 通用配置
export DOCKER_HOST=tcp://0.0.0.0:2375
alias php="docker exec -it dev_php php"

# vscode里面配置,容器名称是dev_php
"php.validate.executablePath": "DOCKER_HOST=tcp://0.0.0.0:2375 && docker exec -it dev_php php"
# 命令行参数使用
docker -H tcp://0.0.0.0:2375 ps