lombax85/docker-apache-mysql-php-mongo

此软件包最新版本(1.0.8)没有提供许可证信息。

安装: 97

依赖项: 0

建议者: 0

安全: 0

星星: 14

关注者: 4

分支: 4

开放问题: 1

语言:Shell

类型:laravel-library

1.0.8 2016-11-05 18:42 UTC

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 钩子