本教程适用于以下操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 18.04(Bionic Beaver)
本页内容
- 先决条件
- 步骤 1 - 配置防火墙
- 步骤 2 - 安装 SSL
- 步骤 3 - 安装 Docker 和 Docker Compose
- 步骤 4 - 下载 Laravel 并安装依赖
- 步骤 5 - 创建 Docker Compose 文件
- 步骤 6 - 创建 Dockerfile
- 步骤 7 - 配置 PHP
- 步骤 8 - 配置 Nginx
- 步骤 9 - 配置 MySQL
- 步骤 10 - 配置环境文件
- 步骤 11 - 启动容器并完成 Laravel 安装
- 步骤 12 - 配置 SSL 续期
- 步骤 13 - 数据迁移与 Tinker 控制台
- 结论
Laravel 是一个免费的开源 PHP 框架,提供了一系列工具和资源来构建现代化的 PHP 应用程序。凭借种类繁多的兼容包和扩展,Laravel 已广受欢迎,许多开发者将其作为首选框架。Laravel 提供了强大的数据库工具,包括名为 Eloquent 的 ORM(对象关系映射器)以及用于创建数据库迁移的内置机制。它自带一个名为 Artisan 的命令行工具,开发者可以通过它引导创建新的模型、控制器及其他应用程序组件,从而加速整体应用程序开发。
将应用程序容器化,是指调整和适配应用程序及其组件,使其能够运行在被称为容器的轻量级环境中。本指南将使用 Docker Compose 将 Laravel 应用程序容器化,用于开发。
我们将为 Laravel 应用程序创建三个 Docker 容器。
- 运行 PHP 8.2-FPM 的 app 服务
- 运行 MySQL 8.0 的 db 服务
- 一个 nginx 服务,它使用 app 服务在将 Laravel 应用程序提供给用户之前解析 PHP 代码
我们还将使用 Let's Encrypt 为 Laravel 网站创建 SSL 证书。
先决条件
- 一台运行 Ubuntu 22.04 的服务器。
- 一个具有 sudo 权限的非 root 用户。
- 一个指向你服务器的完全限定域名(FQDN)。在本教程中,我们将使用 example.com 作为域名。
- 确保一切均已更新。 $ sudo apt update
- 安装基础工具包。其中部分可能已安装。 $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
一台运行 Ubuntu 22.04 的服务器。
一个具有 sudo 权限的非 root 用户。
一个指向你服务器的完全限定域名(FQDN)。在本教程中,我们将使用 example.com 作为域名。
确保一切均已更新。
$ sudo apt update
安装基础工具包。其中部分可能已安装。
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
步骤 1 - 配置防火墙
第一步是配置防火墙。Ubuntu 默认自带 ufw(Uncomplicated Firewall,简单防火墙)。
检查防火墙是否正在运行。
$ sudo ufw status
你应该会看到如下输出。
Status: inactive
放行 SSH 端口,以免启用防火墙后中断当前连接。
$ sudo ufw allow OpenSSH
同时放行 HTTP 和 HTTPS 端口。
$ sudo ufw allow http
$ sudo ufw allow https
启用防火墙
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
再次检查防火墙状态。
$ sudo ufw status
你应该会看到类似的输出。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
步骤 2 - 安装 SSL
在继续之前,我们先为域名创建 SSL 证书。我们将其创建在 Docker 之外,因为这样更易于维护。随后我们会将证书同步到容器,容器会定期续期和刷新证书。
我们需要安装 Certbot 来生成 SSL 证书。你可以通过 Ubuntu 的软件仓库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Ubuntu 22.04 默认已安装 Snapd。运行以下命令,确保你的 Snapd 版本是最新的。确保你的 Snapd 版本是最新的。
$ sudo snap install core
$ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令,通过创建指向 /usr/bin 目录的符号链接,确保 Certbot 命令可以运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
运行以下命令生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d example.com
上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/example.com 目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
对流程进行一次干跑(dry run),检查 SSL 续期是否正常工作。
$ sudo certbot renew --dry-run
如果没有看到错误,说明一切就绪。你的证书将自动续期。
在设置好 Docker 并安装 Laravel 之后,需要修改续期流程。我们将在后续章节中介绍。
步骤 3 - 安装 Docker 和 Docker Compose
Ubuntu 22.04 自带较旧版本的 Docker。要安装最新版本,首先需要导入 Docker 的 GPG 密钥。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
创建 Docker 仓库文件。
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新系统仓库列表。
$ sudo apt update
安装最新版本的 Docker。
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
验证其是否正在运行。
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 2054 (dockerd)
Tasks: 52
Memory: 22.5M
CPU: 248ms
CGroup: /system.slice/docker.service
?? 2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
默认情况下,Docker 需要 root 权限。如果你想避免每次运行 docker 命令都使用 sudo,可以将你的用户名加入 docker 组。
$ sudo usermod -aG docker $(whoami)
你需要注销服务器并以同一用户重新登录才能使此更改生效,或者使用以下命令。
$ su - ${USER}
确认你的用户已加入 Docker 组。
$ groups
navjot wheel docker
步骤 4 - 下载 Laravel 并安装依赖
第一步是下载最新版本的 Laravel 并安装依赖,包括 PHP 包管理器 Composer。
创建 Laravel 应用程序目录。
$ mkdir ~/laravel
切换到该目录。
$ cd ~/laravel
将最新的 Laravel 版本克隆到该目录。不要忘记命令末尾的 . ,它表示 Git 会将文件克隆到当前目录。
$ git clone https://github.com/laravel/laravel.git .
使用 Docker 的 Compose 镜像挂载 Laravel 项目所需的目录。这样可以避免全局安装 Composer。
$ docker run --rm -v $(pwd):/app composer install
上述命令会创建一个临时容器,它先绑定挂载到当前目录,随后被移除。它会将 Laravel 目录的内容复制到容器中,并确保 Composer 在容器内创建的 vendor 文件夹被复制回当前目录。
设置 Laravel 目录的权限,使其归当前登录的用户所有。
$ sudo chown -R $USER:$USER ~/laravel
步骤 5 - 创建 Docker Compose 文件
创建并打开 Docker Compose 文件以供编辑。
$ nano docker-compose.yml
在其中粘贴以下代码。这里我们定义了三个服务:app、webserver 和 db。请将 db 服务下的 MYSQL_ROOT_PASSWORD 替换为你自行设定的强密码。
services:
app:
build:
context: .
dockerfile: Dockerfile
image: howtoforge/app
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
webserver:
container_name: webserver
image: nginx:alpine
restart: unless-stopped
tty: true
ports:
- 80:80
- 443:443
volumes:
- ./:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/logs:/var/log/nginx
- /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
- /etc/letsencrypt:/etc/letsencrypt
logging:
options:
max-size: "10m"
max-file: "3"
networks:
- app-network
db:
image: mysql:latest
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD
MYSQL_USER: laraveluser
MYSQL_PASSWORD: password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
volumes:
dbdata:
driver: local
networks:
app-network:
driver: bridge
按 Ctrl + X 保存文件,并在提示时输入 Y。
下面我们详细看一下各个服务。
- app - 该服务定义了 Laravel 应用程序,并运行一个名为 howtoforge/app 的自定义 Docker 镜像。我们将在下一步创建此镜像。Laravel 在容器内的工作目录设置为 /var/www,它映射到宿主机上的当前目录。我们还挂载了一个 PHP 配置文件,该文件会被复制到 PHP 容器中。我们将在后续步骤中进行配置。
- webserver - 该服务使用 Nginx Docker 镜像创建一个容器,并将 80 和 443 端口暴露给宿主机。我们还为 Nginx 日志、自定义配置、Laravel 应用程序目录和 SSL 证书绑定挂载了卷。
- db - 该服务使用 MySQL Docker 镜像创建一个容器,并定义环境变量来设置数据库名称和 MySQL root 密码。你可以随意命名数据库,并将 MYSQL_ROOT_PASSWORD 替换为你自行设定的强密码。同时,设置 MySQL 用户名(MYSQL_USER_NAME)和密码(MYSQL_USER_PASSWORD),该用户将拥有你选择的数据库访问权限。该服务还将容器内的 3306 端口映射到宿主机的 3306 端口。我们也为自定义 MySQL 配置绑定挂载了卷,并为 MySQL 数据挂载了本地卷。这样你可以在不丢失数据的情况下重启 db 服务。
为了让各服务相互通信,我们创建了一个名为 app-network 的 Docker 网络。它被设置为桥接网络(bridge network)。它允许连接到该网络的容器彼此通信。桥接网络驱动会在宿主机上安装规则,使得不同桥接网络上的容器无法直接相互通信。
步骤 6 - 创建 Dockerfile
Dockerfile 用于创建自定义镜像。Laravel 没有标准镜像,因此我们需要定义一个 Dockerfile 来为 Laravel 创建自定义镜像。它包含根据你的应用需要安装软件包和配置 Linux 环境的命令。你也可以将自定义镜像发布到 Docker Hub 或任何私有 Docker 仓库。你可以从我们的 Dockerfile 教程中了解更多。
创建并打开 Dockerfile 以供编辑。
$ nano Dockerfile
在其中粘贴以下代码。
FROM php:8.2-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
libzip-dev \
unzip \
git \
curl \
libonig-dev
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy existing application directory contents to the working directory
COPY . /var/www
# Assign permissions of the working directory to the www-data user
RUN chown -R www-data:www-data \
/var/www/storage \
/var/www/bootstrap/cache
# Assign writing permissions to logs and framework directories
RUN chmod 775 storage/logs \
/var/www/storage/framework/sessions \
/var/www/storage/framework/views
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
按 Ctrl + X 保存文件,并在提示时输入 Y。
我们来看一下这里发生了什么。首先,我们在 php:8.2-fpm Docker 镜像的基础上创建自定义镜像。这是一个基于 Debian 的镜像,已安装 PHP 8.2-FPM。Dockerfile 使用各种指令来执行操作:RUN 指令指定用于在容器内更新、安装和配置设置的命令,COPY 指令用于将文件复制到容器内,EXPOSE 指令用于暴露容器中的端口,CMD 指令用于运行命令。
首先,我们将 Composer 文件从宿主机上 Laravel 目录复制到容器内的 /var/www 目录。我们还将容器的工作目录设为 /var/www。接着,我们安装 Laravel 运行所需的各种前置条件和软件包,包括 PHP 扩展:mbstring、gd、exif、zip、pdo_mysql 和 pcntl。然后,我们安装 Composer 包管理器。
接下来,我们将 Laravel 目录中的所有文件复制到容器,并为 www-data 用户设置工作目录的权限。这是 PHP 在 Debian 平台上默认使用的用户。接着,我们对 Laravel 的 logs、sessions 和 views 目录设置正确的写入权限。
最后,我们为 PHP-FPM 服务暴露 9000 端口(供 Nginx 服务器使用),并运行 PHP 命令来启动容器。
步骤 7 - 配置 PHP
创建 PHP 目录。
$ mkdir ~/laravel/php
创建并打开 local.ini 文件以供编辑。
$ nano local.ini
在其中粘贴以下代码。
upload_max_filesize=40M
post_max_size=40M
按 Ctrl + X 保存文件,并在提示时输入 Y。这些指令设置了上传文件的最大尺寸。请根据你的需求修改该值。你可以放入任何 PHP 相关的配置来覆盖默认指令。
步骤 8 - 配置 Nginx
为站点配置创建 Nginx 目录。
$ mkdir ~/laravel/nginx/conf.d -p
我们需要创建一个 Nginx 配置文件,以使用 PHP-FPM 作为 FastCGI 服务器来提供 Laravel 服务。
创建并打开 app.conf 文件以供编辑。
$ nano ~/laravel/nginx/conf.d/app.conf
在其中粘贴以下代码。
server {
# Redirect any http requests to https
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
client_max_body_size 40m;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app: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 / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
按 Ctrl + X 保存文件,并在提示时输入 Y。
上述文件将 Nginx 配置为同时提供 Laravel 站点的 HTTP 和 HTTPS 版本,并自动将任何 HTTP 请求重定向到 HTTPS。请确保变量 client_max_body_size 的值与上一步中设置的上传大小一致。
在 PHP location 块中,fastcgi_pass 指令指定 app 服务正在 9000 端口的 TCP 套接字上监听。PHP-FPM 服务器也可以监听 Unix 套接字,这在性能上优于 TCP 套接字。但在本场景中服务运行在不同主机上时它无法工作,因为这里 app 容器与 webserver 容器运行在不同的主机上。
步骤 9 - 配置 MySQL
我们将配置 MySQL 以启用通用查询日志(general query log)并指定相应的日志文件。
创建 MySQL 目录。
$ mkdir ~/laravel/mysql
创建并打开 my.cnf 文件以供编辑。
$ nano ~/laravel/my.cnf
在其中粘贴以下代码。
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
按 Ctrl + X 保存文件,并在提示时输入 Y。
步骤 10 - 配置环境文件
既然我们已经创建并配置了所有服务,现在可以启动容器了。但在启动之前,我们需要配置 Laravel 的环境变量。Laravel 自带一个默认的环境文件 .env.example。
创建示例环境文件的副本。
$ cp .env.example .env
打开 .env 文件进行编辑。
$ nano .env
找到以 DB_CONNECTION 开头的代码块,并根据你的需求更新各变量的值。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password
DB_HOST 的值应为 db 服务。DB_NAME、DB_USERNAME 和 DB_PASSWORD 将分别是你在步骤 4 的 Docker Compose 文件中选择的数据库名、用户名和密码。
按 Ctrl + X 保存文件,并在提示时输入 Y。
步骤 11 - 启动容器并完成 Laravel 安装
终于到了启动容器的时候。
$ docker compose up -d
该命令在首次运行时会拉取 Nginx、MySQL 镜像,并使用我们创建的 Dockerfile 创建 app 镜像。过程完成后,你可以使用以下命令检查容器的状态。
$ docker ps
你会看到类似的输出。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a57be976c0fa mysql:latest "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp db
85e515c4a404 howtoforge/app "docker-php-entrypoi…" 6 hours ago Up 6 hours 9000/tcp app
8418bbc83bd3 nginx:alpine "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp webserver
容器运行起来之后,就可以使用 docker compose exec 命令在容器内运行命令,来完成 Laravel 的安装。
生成应用程序密钥并将其复制到你的 .env 文件中,以保护用户会话并加密用户数据。
$ docker compose exec app php artisan key:generate
创建 Laravel 应用程序缓存。
$ docker compose exec app php artisan config:cache
该命令会将配置设置加载到 /var/www/bootstrap/cache/config.php 文件中。
在浏览器中访问 https://example.com,你将看到如下页面,表示 Laravel 安装成功。

步骤 12 - 配置 SSL 续期
既然 Laravel 站点已经运行,是时候重新审视 SSL 设置来配置续期了。为此,我们需要创建脚本,在续期开始前停止 webserver 服务,并在证书续期完成后重新启动该服务。Certbot 为此提供了两个钩子:pre_hook 和 post_hook。
创建 SSL 目录以存放脚本。
$ mkdir ~/laravel/ssl
创建 server-stop.sh 脚本。
$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'
创建 server-start.sh 脚本。
$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'
使脚本可执行。
$ chmod +x ~/laravel/ssl/server-*.sh
现在我们需要告诉 Certbot 使用这些脚本。打开 /etc/letsencrypt/renewal/example.com.conf 文件进行编辑。
$ sudo nano /etc/letsencrypt/renewal/example.com.conf
在文件末尾粘贴以下行。
pre_hook = /home/<username>/laravel/ssl/server-stop.sh
post_hook = /home/<username>/laravel/ssl/server-start.sh
按 Ctrl + X 保存文件,并在提示时输入 Y。
通过干跑测试证书续期流程。
$ sudo certbot renew --dry-run
你会看到类似的输出,确认续期成功。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output:
webserver
Simulating renewal of an existing certificate for example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
webserver
你的 SSL 证书现在将自动续期,并由 Docker 容器用于为 Laravel 应用程序提供服务。
步骤 13 - 数据迁移与 Tinker 控制台
既然应用程序已经运行,你可以迁移数据并使用 tinker 命令进行试验。Tinker 是 Laravel 的 REPL(Read-Eval-Print Loop,读取-求值-输出循环)。tinker 命令会启动一个预加载了 Laravel 的 PsySH 控制台。PsySH 是一个 PHP 的运行时开发者控制台和交互式调试器。tinker 命令允许你在交互式 shell 中通过命令行与 Laravel 应用程序交互。
在容器上使用 artisan migrate 命令测试 MySQL 连接。它会在数据库中创建一个 migrations 表。
$ docker compose exec app php artisan migrate
你会看到以下输出。
INFO Preparing database.
Creating migration table .............................................................................................. 32ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table .................................................................................. 184ms DONE
2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE
2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE
2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE
接下来,使用 tinker 命令启动 PsySH 控制台。
$ docker compose exec app php artisan tinker
你会看到以下提示符。
Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>
通过在控制台提示符下运行以下命令,获取你刚刚迁移的数据,以测试 MySQL 连接。
> \DB::table('migrations')->get();
你会看到以下输出。
= Illuminate\Support\Collection {#3670
all: [
{#3679
+"id": 1,
+"migration": "2014_10_12_000000_create_users_table",
+"batch": 1,
},
{#3681
+"id": 2,
+"migration": "2014_10_12_100000_create_password_resets_table",
+"batch": 1,
},
{#3682
+"id": 3,
+"migration": "2019_08_19_000000_create_failed_jobs_table",
+"batch": 1,
},
{#3683
+"id": 4,
+"migration": "2019_12_14_000001_create_personal_access_tokens_table",
+"batch": 1,
},
],
}
输入 exit 退出控制台。
> exit
INFO Goodbye.
你可以使用 tinker 与数据库交互,并试验服务和模型。现在你可以开始使用 Laravel 进行进一步的开发。
结论
本教程到此结束,你已使用 Docker、MySQL 和 PHP 将 Laravel 应用程序容器化并完成了安装。你还在安全的域名上提供了该应用程序。如果你有任何问题,请在下方评论中留言。