自定义 Laravel Sail 开发环境
本文想要做的事情是什么?
使用Laravel Sail进行开发环境搭建,
-
- 把时区改为JST(日本标准时间)
- 将MySQL的字符编码改为utf8系列
进行上述两项定制。
运动环境
-
- macOS 13.5.2
-
- PHP 8.2.11
-
- Laravel Framework 10.28.0
- Docker version 23.0.5, build bc4487a
详细说明
Laravel Sail是一个命令行接口,为Laravel提供了基于Docker容器的开发环境。然而,在开始开发之前,应该先调整时区和MySQL的字符编码设置。
Sail使用docker-compose来启动Docker容器并启动开发环境。
Docker容器的配置写在Dockerfile中,通过修改该Dockerfile可以自定义开发环境。
准备开始。
首先,在终端中运行以下命令,在应用程序根目录下创建一个名为docker的目录。
sail artisan sail:publish
通过这个方法,docker-compose.yml的描述部分已经进行了一些更改,现在可以使用docker目录及其中的Dockerfile。
当我们查看docker目录时,我们可以看到存在一些子目录(对于我来说,有4个子目录,分别是8.0、8.1、8.2、8.3)。
实际上,只有一个子目录会被使用,使用哪个子目录是在docker-compose.yml文件的services.laravel.test.build.context处进行了说明。
services:
laravel.test:
build:
context: ./docker/8.2 # ← ココを見る
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
# 以下略...
在我这里,确认使用了docker/8.2目录后,接下来将编辑docker/8.2/Dockerfile。
以上即为准备工作完成。
本题1: 时区自定义
终于进入正题了。
要将时区更改为JST(日本标准时间)。
只需要进行简单的操作,即可将 Dockerfile 内的 ENV TZ 部分更改为 ‘Asia/Tokyo’。
# ENV TZ=UTC コメントアウトまたは削除
# ↓ 追加
ENV TZ='Asia/Tokyo'
需要重新构建Docker镜像(可能需要一段时间)才能生效。
sail build --no-cache
完成重建后,使用”sail up -d”命令启动Docker容器,然后使用以下命令登录Docker容器并检查日期。
(sail up -d コマンドを実行してから行うこと)
sail shell
date
然后,如果成功的话,会显示一个类似于”2023年2月24日星期四 00:00:00 JST”的时间。只要显示为JST就表示成功。
更改MySQL的字符编码
进入第二个主题。
如果MySQL的字符编码未正确设置,文本将无法正确显示,所以也需要进行自定义设置。
在docker/8.2目录(←请根据个人情况自行替换8.2部分)中创建一个新的my.cnf文件,并写入以下内容。
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
[client]
default-character-set = utf8mb4
然后,在 docker-compose.yml 文件中添加以下内容,将此文件作为MySQL容器的配置文件放置在 /etc 目录中: 在 mysql 的 volumes 部分追加 ‘./docker/8.2/my.cnf:/etc/my.cnf’。
services:
laravel.test:
# (中略)
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
# (中略)
volumes:
- 'sail-mysql:/var/lib/mysql'
- './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
- './docker/8.2/my.cnf:/etc/my.cnf' # この1行を追加!!!!!!!
networks:
- sail
# 以下略...
完了したら、sail downコマンドで一度コンテナを停止させ、再度sail up -dで起動してから、下記のコマンドで文字コードを確認してみる。
sail mysql
mysql > show variables like '%char%';

以上です。
请提供更多的上下文。