/ Docker Compose和laravel环境快速配置参考模板

Created Fri, 30 Aug 2024 00:35:10 +0800

laravel 是 php 常用的开发环境,可以使用 docker-compose 配置好后一键启动。

我们在标准 laravel 项目根目录创建一个 docker-compose 目录,用于存放 docker-compose 配置文件和运行数据。

docker-compose.yml

services:
    mysql:
        image: mysql:8.0
        restart: unless-stopped
        volumes:
            - "./mysql_data:/var/lib/mysql"
        environment:
            MYSQL_DATABASE: 'larvael'
            MYSQL_ROOT_PASSWORD: '12345678'

    php_install:
        image: php:8.3-cli
        volumes:
            - ../:/usr/src/myapp
        working_dir: /usr/src/myapp
        command: /bin/sh -c "composer install --no-dev && php artisan migrate --force"
        depends_on:
            - mysql

    php:
        image: php:8.3
        restart: unless-stopped
        deploy:
          replicas: 2
        volumes:
          - ../:/app
        depends_on:
          - mysql
          - ssdb


    redis:
      image: redis:alpine
      restart: unless-stopped

    memcached:
        image: memcached:alpine
        restart: unless-stopped

    caddy:
        image: caddy
        restart: unless-stopped
        ports:
          - "8080:80"
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
          - ../:/app
          - ./caddy_data:/data
          - ./caddy_config:/config
        depends_on:
          - php

这个配置文件包括php、mysql、redis、memcached、caddy,可以根据情况进行注释。

mysql 版本使用的 8.0 ,php 使用的 8.3,请根据情况自行修改版本号。

mysql的数据保存在 mysql_data 目录,需要迁移的时候直接打包带走就可以。

如果你的 php 需要一些特色的扩展,可能需要自己重新打包 php 镜像。

注意需要添加一个 .gitignore 文件,避免 git 跟踪 MySQL的数据文件变动。

.gitignore

caddy_config
caddy_data
mysql_data

php_install 容器用于安装 php 依赖,执行迁移,更新代码后,只需要重启这个容器即可。

注意这里我们使用的 Caddy 而不是 nginx,Caddy 比较简单,如果没有比较复杂的要求,用 Caddy 即可。

Caddyfile

:80 {
    root * /app/public

	@static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.webp
    }
    header @static Cache-Control max-age=31536000


	encode gzip

	php_fastcgi php:9000

	file_server

}

cd 到 docker-compose ,然后 docker-compose up -d ,访问端口 8080 即可。