# lnmp-compose **Repository Path**: wuweixiang/lnmp-compose ## Basic Information - **Project Name**: lnmp-compose - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 背景 为了标准化流程与简易化部署,本项目构建一套简易的 LNMP (Nginx + MySQL + PHP7/5 + Redis)的开发/运行环境,最终达到 build,ship,run! ## 依赖 - [Git](https://git-scm.com/downloads) `yum -y install git` `除了Git其它依赖脚本会自动安装` - [Docker](https://www.docker.com/products/docker/) `版本要求docker 17.05.0-ce (2017-05-04)以上` - [Docker-Compose](https://docs.docker.com/compose/install/#install-compose) ## 快速部署步骤 1. mkdir /server/ && cd /server/ 2. `$ git clone http://47.106.125.91/longanhou/lnmp-compose.git` 3. `$ cd lnmp-compose` 3. `$ sh init.sh` 4. 访问 [http://127.0.0.1](http://127.0.0.1/) ## 运维命令 ``` $ docker-compose help # docker-compose 命令帮助 $ docker-compose up -d # 创建并启动 docker 编排服务在后台运行 $ docker-compose down # 停止并移除 docker 编排服务 (更改配置文件时建议使用) $ docker-compose exec -it lnmp-compose_对应容器_1 bash # 登入容器交互 ``` ## 切换PHP版本 默认情况下,只创建 PHP7.2 版本的容器,如果需要其它版本PHP可以在docker-compose.yml文件中打开对应的注释。 切换PHP仅需修改相应站点 Nginx 配置的`fastcgi_pass`选项, 例如,示例的 http://localhost 用的是PHP7.2,Nginx 配置: ``` fastcgi_pass php72:9000; ``` 要改用PHP5.6,修改为: ``` fastcgi_pass php56:9000; ``` 再重启 Nginx 生效。 ``` $ docker exec -it lnmp-compose_nginx_1 nginx -s reload ``` ## 数据库信息 - `hostname: mysql` 此处的数据库连接地址 `hostname` 值为 `mysql` ,容器中会在自己的 `/etc/hosts` 中添加一条 `1xx.xx.xx.xx mysql` 的 host,这会将 `http://mysql` 这个地址指向 `mysql` 容器的实际内网地址,等效于常见的 `http://localhost` 。 - `container_name: mysql` 表示此容器名称为`mysql` ## 数据持久化 容器内的数据会随着容器的销毁而丢失,所以需要配置 `docker-compose.yml` 文件将以下目录同步到你的物理机目录进行持久化: - `/var/lib/mysql` MySQL 的文件存放目录,必须挂载,否则销毁容器后数据丢失。 - `/var/www/html/` Nginx 的html/php代码存放目录。 - `/var/log/nginx/` Nginx 的日志目录,挂载后查看日志无须进入容器内部。 - `/data` Redis数据存储目录。 ## 项目部署 数据库信息,暴露端口等信息都在 `docker-compose.yml` 中配置,一切调试完成后可在启动命令后添加 `-d` 参数,让其后台启动,此时如果想实时查看启动日志可以使用 `docker-compose logs -f` 进行查看。 ``` # 后台启动运行 $ docker-compose up -d # 跟踪查看启动日志 $ docker-compose logs -f ``` ## 项目Log使用 Log文件生成的位置依赖于conf下各log配置的值。 ### 1. Nginx日志 Nginx日志是我们用得最多的日志,所以我们单独放在根目录log下。 log会目录映射Nginx容器的`/var/log/nginx`目录,所以在Nginx配置文件中,需要输出log的位置,我们需要配置到/var/log/nginx目录,如: ``` error_log /var/log/nginx/nginx.localhost.error.log warn; ``` ### 2. PHP-FPM日志 大部分情况下,PHP-FPM的日志都会输出到Nginx的日志中,所以不需要额外配置。 另外,建议直接在PHP中打开错误日志: ``` error_reporting(E_ALL); ini_set('error_reporting', 'on'); ini_set('display_errors', 'on'); ``` 如果确实需要,可按一下步骤开启(在容器中)。 1. 进入容器,创建日志文件并修改权限: ``` $ docker exec -it dnmp_php_1 /bin/bash $ mkdir /var/log/php $ cd /var/log/php $ touch php-fpm.error.log $ chmod a+w php-fpm.error.log ``` 2. 主机上打开并修改PHP-FPM的配置文件conf/php-fpm.conf,找到如下一行,删除注释,并改值为: ``` php_admin_value[error_log] = /var/log/php/php-fpm.error.log ``` 重启PHP-FPM容器。 ### 3. MySQL日志 因为MySQL容器中的MySQL使用的是mysql用户启动,它无法自行在/var/log下的增加日志文件。所以,我们把MySQL的日志放在与data一样的目录,即项目的mysql目录下,对应容器中的`/var/lib/mysql/`目录。 ``` slow-query-log-file = /var/lib/mysql/mysql.slow.log log-error = /var/lib/mysql/mysql.error.log ``` 以上是mysql.conf中的日志文件的配置。 ## 版本信息 - **NGINX** :`1.15.7` - **MySQL** :`5.7` - **PHP** :`7.2.13` `5.6.39` `5.4.45` - **Redis** :`5.0.3` 版本信息可在 `env.sample` 中进行修改,修改 `env.sample` 后需要重新 `docker-compose` 所做的修改才会生效: ``` $ docker-compose down $ docker-compose up -d ``` ## 数据库管理 本项目默认在docker-compose.yml中开启了用于MySQL在线管理的phpMyAdmin,以及用于redis在线管理的phpRedisAdmin,可以根据需要修改或删除。 ### 1. phpMyAdmin phpMyAdmin容器映射到主机的端口地址是:8080,所以主机上访问phpMyAdmin的地址是:http://localhost:8080 MySQL连接信息: - host:(本项目的MySQL容器网络) - port:3306 - username:(手动在phpmyadmin界面输入) - password:(手动在phpmyadmin界面输入) ### 2. phpRedisAdmin phpRedisAdmin容器映射到主机的端口地址是:8081,所以主机上访问phpMyAdmin的地址是:http://localhost:8081 Redis连接信息如下: - host: (本项目的Redis容器网络) - port: 6379 ## 在正式环境中安全使用 要在正式环境中使用,请: - 在php.ini中关闭XDebug调试 - 增强MySQL数据库访问的安全策略 - 增强redis访问的安全策略 ## 目录结构 ``` lnmp-compose/ ├── conf 配置文件目录 │   ├── conf.d Nginx用户站点配置目录 │   │   ├── certs │   ├── mysql.cnf MySQL用户配置文件 │   ├── nginx.conf Nginx默认配置文件 │   ├── php-fpm.conf PHP-FPM配置文件(部分会覆盖php.ini配置) │   ├── php.ini PHP默认配置文件 │   └── redis.conf Redis默认配置文件 ├── php-fpm │   └── Dockerfile PHP镜像构建文件 ├── extensions PHP扩展源码包 ├── docker-compose.yml ├── env.sample ├── init.sh ├── README.md ├── sources.list Debian的mirrors源文件 ├── mysql MySQL数据目录 ├── log Nginx日志目录 └── www Nginx页面目录及php目录 ``` ## docker图形化界面管理工具 ``` docker run --name portainer \ --restart always \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /data/portainer:/data \ -e TZ:Asia/Shanghai \ -d portainer/portainer ```