lombax85 / docker-apache-mysql-php-mongo
Requires
- composer/installers: ~1.0
This package is not auto-updated.
Last update: 2024-09-28 20:25:18 UTC
README
项目描述
使用Docker和Composer的力量,在几分钟内启动您的PHP/MySQL项目!通过少量命令,您将拥有开发、测试和生产基础设施,并利用Docker容器。在此项目中,您将找到以下依赖项的容器
- apache
- php-fpm
- mysql
- mongodb
- couchdb
此外,数据库数据和会话由特定的容器管理,并提供最后一个容器作为工作空间(您可以使用该特殊容器运行CLI命令)。
感谢Composer,此项目可以轻松集成和封装到现有的Web应用中,允许您在开发机器、测试服务器和生产服务器上更快地部署。
要求
- docker-compose,最低版本1.8
- docker,最低版本1.10
如果您想通过composer安装
- composer
- php,最低版本5.6
通过Composer快速安装
注意:有关其他安装方法,请参阅专用部分
- 在您的项目composer.json文件的"extra"部分中添加
"extra": {
"installer-paths": {
"docker/": ["lombax85/docker-apache-mysql-php-mongo"]
}
}
- 在您的项目composer.json文件的"scripts"部分中,"post-install-cmd"和"post-update-cmd"子部分中添加
"scripts": {
"post-install-cmd": [
"if [ -f docker/composer_install.php ]; then php docker/composer_install.php; fi"
],
"post-update-cmd": [
"if [ -f docker/composer_install.php ]; then php docker/composer_install.php; fi"
],
"pre-update-cmd": [
"if [ -f docker/composer_pre_update.php ]; then php docker/composer_pre_update.php; fi"
]
}
- 使用以下命令添加依赖项
composer require lombax85/docker-apache-mysql-php-mongo
额外:在您的项目.gitignore文件中添加 /docker 和 /docker_data
重要信息和警告
- 整个项目将安装在"docker"子目录下,当您启动容器时,将出现一个"docker_data"目录。
- 在"docker"目录中,您将找到一个.env文件,您可以在其中设置您的附加环境变量(文件已预配置,无需额外配置即可启动)
Docker .env 文件
- 配置(绑定端口、容器中启用的模块)存储在"docker"目录下的名为.env的文件中。当您第一次安装此软件包时,
composer_install.php
脚本会自动创建此文件。然后,它将备份副本放入您的根目录中的.env.docker.backup
。将此文件添加到版本控制。每次您通过composer update
更新软件包时(假设您已正确添加预更新和后更新脚本),都会创建该文件的新备份副本(以前的.env.docker.backup将被覆盖,因此您需要将其放入版本控制),并在composer完成更新软件包后将文件放回。
数据目录
./docker_data
目录包含所有数据库和会话数据。如果您在生产环境中使用此配置,请勿忘记使用适当的工具备份所有数据(例如:使用mysqldump for mysql)。
使用目录绑定在容器之间共享./docker_data
目录,并在容器重建之间保留。
因此,当你重新构建——例如——你的mysql容器时,数据不会丢失。然而,请注意,如果你将mysql引擎更改为与数据目录内容不兼容的某种东西,内容本身可能会损坏。
默认情况下,数据目录配置为在 ./docker_data
内。
第一次启动容器时创建此目录。如果你想要更改此路径,请不要将目录放在 ./docker
文件夹内,因为每次你运行 "composer update" 时,文件夹都会被重新创建,你将会丢失数据。
开始
- 执行以下命令(如果你不需要特定的引擎,请在 "up" 命令中省略它)
docker-compose build apache2 mysql workspace mongo php-fpm couchdb
docker-compose up -d apache2 mysql mongo couchdb
- 执行这些命令后,你的容器将会启动并运行,使用
docker ps
查看它们 - 现在进行一些安装后的操作
- MongoDB:与MySQL不同,MongoDB不允许在安装之前设置默认用户名和密码。因此,你必须使用运行后脚本设置它们。要为mongodb设置默认用户名和密码,请输入
docker-compose exec mongo sh /mongo.sh user password
与项目交互
应使用 "workspace" 容器执行所有 CLI 命令(composer install/update,artisan)
docker-compose exec workspace bash
会在 www 目录内给你一个 shell。如果你愿意,可以直接发送命令而不使用 shell。例如,要发送 "php artisan migrate",只需这样做
docker-compose exec workspace php artisan migrate
主机名
Docker为同一项目的所有容器创建一个虚拟私有和隔离的网络(它使用根目录名作为前缀)。
要从另一个容器访问一个容器(例如,从php-fpm访问mysql容器),只需使用主机名即可。主机名是 docker-compose.yml 文件中容器名称。
不要使用私有IP,因为它可能随时更改。
因此,当你需要在Web应用的配置文件中配置mysql服务器的主机名时,只需输入 "mysql"
MYSQL_HOST=mysql
如果你bash进入一个容器,你会看到
root@7aa4b96361fb:/var/www# ping mysql
PING mysql (172.19.0.4) 56(84) bytes of data.
64 bytes from mongo_mysql_1.mongo_default (172.19.0.4): icmp_seq=1 ttl=64 time=0.148 ms
在这个项目中,这些容器/主机名存在
workspace mysql php-fpm apache2 mongo
替代安装方法
替代 - 现有项目 - 在根目录中安装
- 将此存储库作为zip文件下载
- 将 "docker-compose.yml" 文件和 "docker" 目录复制到你的项目根目录中
- 将 ".env.example" 文件复制到你的项目目录中,并将其重命名为 ".env" 注意:如果你的项目已经有一个名为 .env 的文件,你可以使用子目录,如 "现有项目 - 子目录" 中解释的那样
替代 - 现有项目 - 在子目录中安装
- 将此存储库作为zip文件下载
- 将你的项目文件复制到 "project" 子文件夹中
替代 - 新项目 - 在子目录中安装
- 将其作为zip文件下载(如果你克隆它,请删除 .git 目录)
- 将你的项目文件放在根目录或 "project" 子目录内(子目录的名称可以在以后设置)或者,作为替代,复制
额外设置和故障排除
- 在mac上:在 ./docker_data 和 ./docker 文件夹上启用文件共享
实际问题
- 如果在第一个容器启动期间停止(按ctrl+c)"docker-compose up",/docker/data 的内容可能会损坏或未正确初始化。在这种情况下,例如,你将无法连接到MySQL。要解决
docker-compose stop
rm -Rf ./docker/data/mysql/*
注意:如果你擦除了MongoDB数据,别忘了重新添加默认用户
已解决的问题
- 将作为作曲家依赖项包含,目前仅适用于测试和开发机器。已知问题:如果通过 "composer update" 更新软件包,则 ./docker/data 目录(包含数据库数据的目录)将被删除。这个问题将在未来的版本中得到解决。如果您计划在生产环境中使用此项目,请不要使用 composer,请使用 INSTALL 部分中解释的其他包含方法。已修复:现在数据目录已创建在您的主项目目录内
- 如果在同一台机器上的两个不同项目中安装,必须将容器目录("docker")重命名为唯一名称。已修复:安装脚本现在创建一个包含唯一项目名称的 .env 文件,docker_TIMESTAMP
TODO
- 创建 install.php 安装脚本以替换 post-install 和 post-update 钩子