用Docker、nginx和mysql来构建Laravel(初学者备忘录)

首先

我在使用Docker构建Laravel时遇到了各种问题,我简单地整理了一下作为备忘录。

目录

    • nginxの構築

 

    • MYSQLの構築

 

    • PHPの構築

 

    • Laravelプロジェクトの作成

 

    • コンテナの作成

 

    おわりに

使用的物品

    • Docker Desktop

 

    • ubuntu 22.04.2 LTS

 

    • nginx

 

    • MYSQL 8.0.32

 

    • PHP 8.2.3-fpm

 

    laravel

整个目录的概览

首先,我先展示一下Docker目录的整体情况。

$ tree
├── docker-compose.yml
├── mysql
│   └── my.ini
├── nginx
│   ├── Dockerfile
│   └── nginx.conf
└── php
    └── Dockerfile

构建nginx

由于使用了Docker Compose,我对docker-compose.yml文件进行了编辑。

version: '3.9'
services:
    nginx:
        image: nginx:latest
        #Dockerfileのディレクトリ
        build: ./nginx
        container_name: nginx
        volumes:
            #コンフィグファイルの同期
            ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
            ./src:/var/www/html
        ports:
            - 80:80

然后我编辑了Dockerfile。

FROM nginx:latest
RUN service nginx start

下一步,将要写入nginx的配置文件。

server{
    root /var/www/html/laravelのプロジェクト名/public;
    listen *:80;
    listen [::]:80;
    index index.html index.php;

    location /{
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

只需一個選項,以中文原生模式改述以下內容:
不在location以下進行處理的話,就會出現瀏覽器下載php文件而不是顯示網頁的問題,因此這是必要的。
至此,關於nginx相關內容結束。

搭建MYSQL数据库

我們將在docker-compose.yml中nginx部分進行修改。

version: '3.9'
services:
    nginx:
        image: nginx:latest
        build: ./nginx
        container_name: nginx
        volumes:
            ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
            ./src:/var/www/html
        ports:
            - 80:80
    mysql:
        image: mysql:8.0.32
        container_name: mysql
        volumes:
            #コンフィグファイルの同期
            ./mysql/my.ini:/etc/my.ini
        environment:
            MYSQL_ROOT_PASSWORD: 管理者のパスワード
            MYSQL_USER: ユーザー名
            MYSQL_PASSWORD: ユーザーのパスワード
            MYSQL_DATABASE: データベース名
        ports:
            3306:3306

在MySQL中没有使用Dockerfile。下一步是在my.ini中描述关于字符编码的处理。

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4

MySQL已经结束。

使用PHP进行搭建

和MYSQL一样,我们将在docker-compose.yml文件中进行追加。

version: '3.9'
services:
  nginx:
    image: nginx:latest
    build: ./nginx
    container_name: app-web
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/html
    ports:
      - 80:80
  mysql:
    image: mysql:8.0.32
    container_name: mysql
    volumes:
      - ./mysql/my.ini:/etc/my.ini
    environment:
        MYSQL_ROOT_PASSWORD: 管理者のパスワード
        MYSQL_USER: ユーザー名
        MYSQL_PASSWORD: ユーザーのパスワード
        MYSQL_DATABASE: データベース名
    ports:
      - 3306:3306
  php:
    image: php:8.2.3-fpm
    #Dockerfileのディレクトリ
    build: ./php
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - 9000:9000
    #PHPとmysqlを簡単に接続できるようにする
    depends_on:
      - mysql

接下来是Dockerfile的处理过程。

FROM php:8.2.3-fpm

RUN apt-get update && apt-get install -y libonig-dev && \
    docker-php-ext-install pdo_mysql mysqli mbstring

需要安装必要的库等。

创建Laravel项目

我会将composer和Laravel项目创建命令添加到Dockerfile中。

FROM php:8.2.3-fpm

RUN apt-get update && apt-get install -y libonig-dev && \
    docker-php-ext-install pdo_mysql mysqli mbstring
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN ./composer.phar create-project laravel/laravel laravelのプロジェクト名

以上是所有文件已准备好了。

创建容器

我要求您在Ubuntu命令上执行以下操作。

$ docker-compose up -d --build

通过以下命令,将会创建nginx、mysql和php的容器。为了确保,我会用以下命令进行确认。

$ docker-compose ps -a
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
nginx               php:8.2.3-fpm       "docker-php-entrypoi…"   php                 24 hours ago        Up 12 hours         0.0.0.0:9000->9000/tcp
mysql               mysql:8.0.32        "docker-entrypoint.s…"   mysql               2 days ago          Up 12 hours         0.0.0.0:3306->3306/tcp, 33060/tcp
php                 nginx:latest        "/docker-entrypoint.…"   nginx               12 hours ago        Up 12 hours         0.0.0.0:80->80/tcp

当您在所有状态提升的情况下显示本地主机,并且能够显示Laravel的初始界面时,就表示成功了!

结束

由于需要练习使用Qiita和记录Docker的笔记,我创建了这篇文章。请原谅其中可能有很多简化和不太准确的地方。另外,我只是想先尝试引入Laravel,所以我的自己编写的代码可能无法正常运行。我希望能在这个环境下继续学习Laravel。

bannerAds