用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。