自定义 Laravel Sail 开发环境

本文想要做的事情是什么?

使用Laravel Sail进行开发环境搭建,

    1. 把时区改为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%';
スクリーンショット 2023-10-12 0.31.54.png

以上です。


请提供更多的上下文。

 

广告
将在 10 秒后关闭
bannerAds