使用 Docker Compose 构建的基本 LAMP 堆栈环境。它由以下部分组成:
到目前为止,我们有几个不同的 PHP 版本。根据需要使用适当的 php 版本:
docker compose up -d
。 git clone https://github.com/sprintcube/docker-compose-lamp.git
cd docker-compose-lamp/
cp sample.env .env
// modify sample.env as needed
docker compose up -d
// visit localhost
您的 LAMP 堆栈现已准备就绪!您可以通过http://localhost
访问它。
此 Docker Stack 是为本地开发而不是为生产使用而构建的。
该软件包附带默认配置选项。您可以通过在根目录中创建.env
文件来修改它们。为了简单起见,只需复制sample.env
文件中的内容并根据您的需要更新环境变量值即可。
有以下可用的配置变量,您可以通过在自己的.env
文件中覆盖来自定义它们。
PHPVERSION用于指定您要使用的 PHP 版本。默认始终为最新的 PHP 版本。
PHP_INI定义您的自定义php.ini
修改以满足您的要求。
文档根目录
它是 Apache 服务器的文档根目录。默认值为./www
。您的所有网站都将转到此处并自动同步。
APACHE_DOCUMENT_ROOT
Apache 配置文件值。默认值为 /var/www/html。
虚拟主机目录
这是针对虚拟主机的。默认值为./config/vhosts
。您可以将虚拟主机的conf 文件放置在这里。
确保为每个虚拟主机在系统的
hosts
文件中添加一个条目。
APACHE_LOG_DIR
这将用于存储 Apache 日志。默认值为./logs/apache2
。
对于 Apple Silicon 用户:请选择 Mariadb 作为数据库。 Oracle 没有为 Arm 架构构建 SQL 容器
数据库
定义您想要使用的 MySQL 或 MariaDB 版本。
MYSQL_INITDB_DIR
当容器第一次启动时,该目录中扩展名为.sh
、 .sql
、 .sql.gz
和.sql.xz
的文件将按字母顺序执行。没有文件执行权限的.sh
文件将被获取而不是被执行。默认值为./config/initdb
。
MYSQL_DATA_DIR
这是MySQL 数据目录。默认值为./data/mysql
。您所有的 MySQL 数据文件都将存储在这里。
MYSQL_LOG_DIR
这将用于存储 Apache 日志。默认值为./logs/mysql
。
Apache 配置为在端口 80 上运行。因此,您可以通过http://localhost
访问它。
默认情况下启用以下模块。
如果你想启用更多模块,只需更新
./bin/phpX/Dockerfile
即可。您还可以生成 PR,如果适合一般用途,我们将合并。您必须通过运行docker compose build
来重建 docker 映像并重新启动 docker 容器。
您可以使用docker compose exec
命令连接到 Web 服务器以对其执行各种操作。使用以下命令通过 ssh 登录容器。
docker compose exec webserver bash
安装的 php 版本取决于您的.env
文件。
默认情况下安装以下扩展。对于 PHP 版本 <7.xx 可能有所不同
如果你想安装更多扩展,只需更新
./bin/webserver/Dockerfile
。您还可以生成 PR,如果它适合通用目的,我们将合并。您必须通过运行docker compose build
来重建 docker 映像并重新启动 docker 容器。
phpMyAdmin 配置为在端口 8080 上运行。使用以下默认凭据。
http://本地主机:8080/
用户名:根
密码:老虎
Xdebug 默认安装,其版本取决于".env"
文件中选择的 PHP 版本。
X调试版本:
PHP <= 7.3:Xdebug 2.XX
PHP >= 7.4:Xdebug 3.XX
要使用 Xdebug,您需要根据所选的 PHP 版本启用./config/php/php.ini
文件中的设置。
例子:
# Xdebug 2
#xdebug.remote_enable=1
#xdebug.remote_autostart=1
#xdebug.remote_connect_back=1
#xdebug.remote_host = host.docker.internal
#xdebug.remote_port=9000
# Xdebug 3
#xdebug.mode=debug
#xdebug.start_with_request=yes
#xdebug.client_host=host.docker.internal
#xdebug.client_port=9003
#xdebug.idekey=VSCODE
Xdebug VS Code:您必须安装 Xdebug 扩展“PHP Debug”。安装完成后,进入调试并创建启动文件,以便您的IDE可以监听并正常工作。
例子:
非常重要: pathMappings
取决于您在 VS Code 中打开文件夹的方式。每个文件夹都有自己的启动配置,您可以在.vscode/launch.json
中查看
{
"version" : " 0.2.0 " ,
"configurations" : [
{
"name" : " Listen for Xdebug " ,
"type" : " php " ,
"request" : " launch " ,
// "port": 9000, // Xdebug 2
"port" : 9003 , // Xdebug 3
"pathMappings" : {
// "/var/www/html": "${workspaceFolder } /www" // if you have opened VSCODE in root folder
"/var/www/html" : " ${workspaceFolder} " // if you have opened VSCODE in ./www folder
}
}
]
}
现在,设置断点并运行调试。
提示!这些配置完成后,您可能需要重新启动容器。
它与 Redis 一起提供。它在默认端口6379
上运行。
对https
域的支持是内置的,但默认情况下处于禁用状态。您可以通过 3 种方式启用和配置 SSL; localhost
上的https
是最简单的。如果您尝试重新创建尽可能接近生产环境的测试环境,则可以通过更多配置来支持任何域名。
注意:对于您希望使用https
的每个非 localhost 域名,您需要修改计算机的主机文件并将域名指向127.0.0.1
。如果您不这样做,SSL 将不起作用,并且每次您尝试在本地访问该域名时都会被路由到互联网。
要在localhost
(https://localhost) 上启用https
您需要:
localhost
创建 SSL 证书:mkcert
,在终端中运行mkcert localhost 127.0.0.1 ::1
。cert.pem
和cert-key.pem
。config/ssl
目录中,将其移至您的 docker 设置中。config/vhosts/default.conf
中的443
vhost。完毕。现在,每当您打开 LAMP 容器时, https
都将在localhost
上运行。
如果您想使用普通域名进行本地测试,并且需要https
支持,最简单的解决方案是覆盖所有域名的SSL证书:
mkcert
,在终端中运行mkcert example.com "*.example.org" myapp.dev localhost 127.0.0.1 ::1
,其中将所有域名和 IP 地址替换为您希望支持的域名和 IP 地址。cert.pem
和cert-key.pem
。config/ssl
目录中,将其移至您的 docker 设置中。config/vhosts/default.conf
中的443
vhost。完毕。由于您将所有域名合并到一个证书中,因此虚拟主机文件将支持您的设置,无需进一步修改。但是,如果您愿意,您可以添加特定于域的规则。现在,只要您打开 LAMP 容器, https
就会在您指定的所有域上运行。
如果您希望本地测试环境与您的生产环境完全匹配,并且需要https
支持,您可以为您希望支持的每个域创建一个 SSL 证书:
mkcert
,在终端中运行mkcert [your-domain-name(s)-here]
将括号部分替换为您的域名。[name]-cert.pem
和[name]-cert-key.pem
用唯一的名称替换括号部分。config/ssl
目录中,将其移至您的 docker 设置中。config/vhosts/default.conf
) 中的443
示例,制定与您的域名和证书文件名匹配的新规则。完毕。 LAMP 容器启动时将自动提取config/ssl
中的任何 SSL 证书。只要您正确配置 vhosts 文件并将 SSL 证书放置在config/ssl
中,任何时候您打开 LAMP 容器时, https
都将在您指定的域上运行。
如果您想创建拉取请求或帮助人们解决问题,我们会很高兴。如果您想创建 PR,请记住该堆栈不是为生产用途而构建的,并且更改应该适合通用目的,而不是过度专业化。
请注意,我们将项目结构从每个 php 版本的多个分支简化为一个集中的主分支。请针对 master 分支创建 PR。
谢谢你!
我们希望使开发人员能够快速创建创意应用程序。因此,我们为多个不同的框架和 PHP 版本提供了一个易于设置的本地开发环境。在生产中,您至少应该修改以下主题: