运行 Nginx、PHP-FPM、Composer、MySQL 和 PHPMyAdmin 的 Docker。
-
在安装项目之前,请确保满足以下先决条件。
-
我们将从其在 GitHub 上的存储库下载代码。
-
使用 SSL 证书配置 Nginx [
可选
]在运行服务器之前,我们将为 nginx 生成和配置 SSL 证书。
-
Configure Xdebug [
可选
]我们将为 IDE( PHPStorm 或 Netbeans )配置 XDebug。
-
至此,我们将准备好所有项目部分。
-
使用 Makefile [
可选
]开发时,您可以使用
Makefile
进行循环操作。 -
运行时,您可以使用 docker 命令进行循环操作。
要在不使用 sudo 的情况下运行 docker 命令,您必须将 docker 组添加到 your-user:
sudo usermod -aG docker your-user
目前,这个项目主要是为 Unix (Linux/MacOS)
创建的。 也许它可以在 Windows 上运行。
所有必需品都应该可用于您的分发。 最重要的是:
通过输入以下命令检查是否已安装 docker-compose
:
which docker-compose
检查 Docker Compose 兼容性:
以下是可选的,但会让生活更愉快:
which make
在 Ubuntu 和 Debian 上,这些在 meta-package build-essential 中可用。 在其他发行版上,您可能需要单独安装 GNU C++ 编译器。
sudo apt install build-essential
安装第三方 Web 服务器(如 MySQL 或 Nginx)时应小心。
该项目使用以下端口:
Server | Port |
---|---|
MySQL | 8989 |
PHPMyAdmin | 8080 |
Nginx | 8000 |
Nginx SSL | 3000 |
要安装 Git,请按照说明下载并安装:
git clone https://github.com/WangLaoShi/docker-nginx-php-mysql.git
转到项目目录:
cd docker-nginx-php-mysql
.
├── Makefile
├── README.md
├── data
│ └── db
│ ├── dumps
│ └── mysql
├── doc
├── docker-compose.yml
├── etc
│ ├── nginx
│ │ ├── default.conf
│ │ └── default.template.conf
│ ├── php
│ │ └── php.ini
│ └── ssl
└── web
├── app
│ ├── composer.json.dist
│ ├── phpunit.xml.dist
│ ├── src
│ │ └── Foo.php
│ └── test
│ ├── FooTest.php
│ └── bootstrap.php
└── public
└── index.php
您可以通过编辑 .env
文件来更改主机名。
如果您修改了主机名,请不要忘记将其添加到 /etc/hosts
文件中。
-
生成 SSL 证书
source .env && docker run --rm -v $(pwd)/etc/ssl:/certificates -e "SERVER=$NGINX_HOST" jacoelho/generate-certificate
-
配置 Nginx
-
不要修改
etc/nginx/default.conf
文件,它会被etc/nginx/default.template.conf
覆盖 -
编辑 nginx 文件
etc/nginx/default.template.conf
并取消注释 SSL 服务器部分:
# server { # server_name ${NGINX_HOST}; # # listen 443 ssl; # fastcgi_param HTTPS on; # ... # }
-
如果您使用 PHPStorm 或 Netbeans 以外的其他 IDE,请转到 [远程调试](https:// xdebug.org/docs/remote) Xdebug 文档部分。
为了更好地将 Docker 集成到 PHPStorm,请使用 文档。
-
获取您自己的本地 IP 地址:
sudo ifconfig
-
编辑 php 文件
etc/php/php.ini
并根据需要注释或取消注释配置。 -
使用您的 IP 设置
remote_host
参数:xdebug.remote_host=192.168.0.1 # your IP
-
复制 composer 配置文件:
cp web/app/composer.json.dist web/app/composer.json
-
启动应用程序:
docker-compose up -d
请稍等,这可能需要几分钟...
docker-compose logs -f # Follow log output
-
打开您喜欢的浏览器:
- http://localhost:8000
- https://localhost:3000 (HTTPS 默认情况下未配置)
- http://localhost:8080 PHPMyAdmin (username: dev, password: dev)
-
停止并清除服务
docker-compose down -v
开发时,您可以使用 Makefile 进行以下操作:
命令行 | Description |
---|---|
apidoc | 生成 API 文档 /Generate documentation of API |
clean | 清除目录以进行重置/Clean directories for reset |
code-sniff | 使用 PHP Code Sniffer (PSR2 ) 检查 API /Check the API with PHP Code Sniffer (PSR2 ) |
composer-up | 使用 composer 更新 PHP 依赖 / Update PHP dependencies with composer |
docker-start | 创建并启动容器 / Create and start containers |
docker-stop | 停止并清除所有服务 / Stop and clear all services |
gen-certs | 为 nginx 生成 SSL 证书 / Generate SSL certificates for nginx |
logs | Follow 日志输出 / Follow log output |
mysql-dump | 创建所有数据库的备份 / Create backup of all databases |
mysql-restore | 恢复所有数据库的备份 / Restore backup of all databases |
phpmd | 使用 PHP Mess Detector 分析 API / Analyse the API with PHP Mess Detector |
test | 使用 phpunit 测试应用程序 / Test application with phpunit |
启动应用程序 :
make docker-start
显示帮助 :
make help
docker run --rm -v $(pwd)/web/app:/app composer require symfony/yaml
docker run --rm -v $(pwd)/web/app:/app composer update
docker run --rm -v $(pwd):/data phpdoc/phpdoc -i=vendor/ -d /data/web/app/src -t /data/web/app/doc
docker-compose exec -T php ./app/vendor/bin/phpunit --colors=always --configuration ./app
使用 PSR2 修复标准代码
docker-compose exec -T php ./app/vendor/bin/phpcbf -v --standard=PSR2 ./app/src
使用 PSR2 检查标准代码
docker-compose exec -T php ./app/vendor/bin/phpcs -v --standard=PSR2 ./app/src
使用 PHP Mess Detector 分析源代码
docker-compose exec -T php ./app/vendor/bin/phpmd ./app/src text cleancode,codesize,controversial,design,naming,unusedcode
docker-compose exec php php -m
docker exec -it mysql bash
和
mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD"
mkdir -p data/db/dumps
source .env && docker exec $(docker-compose ps -q mysqldb) mysqldump --all-databases -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" > "data/db/dumps/db.sql"
source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/db.sql"
注意:
用您的自定义名称替换“YOUR_DB_NAME”。
source .env && docker exec $(docker-compose ps -q mysqldb) mysqldump -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" --databases YOUR_DB_NAME > "data/db/dumps/YOUR_DB_NAME_dump.sql"
source .env && docker exec -i $(docker-compose ps -q mysqldb) mysql -u"$MYSQL_ROOT_USER" -p"$MYSQL_ROOT_PASSWORD" < "data/db/dumps/YOUR_DB_NAME_dump.sql"
从 PDO 连接 MySQL
<?php
try {
$dsn = 'mysql:host=mysql;dbname=test;charset=utf8;port=3306';
$pdo = new PDO($dsn, 'dev', 'dev');
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
任何想法、反馈或(希望没有!)