apache(docker)+dnmp (Docker + Nginx+ MySQL5,8 + PHP5,7,8 + Redis + ElasticSearc) 部署测试详细过程

编程入门 行业动态 更新时间:2024-10-10 13:20:43

apache(docker)+dnmp (Docker + Nginx+ MySQL5,8 + PHP5,7,8 + Redis + ElasticSearc) 部署测试详细<a href=https://www.elefans.com/category/jswz/34/1769466.html style=过程"/>

apache(docker)+dnmp (Docker + Nginx+ MySQL5,8 + PHP5,7,8 + Redis + ElasticSearc) 部署测试详细过程

前期准备

一、本地安装

  • git
  • Docker
  • docker-compose 1.7.0+
  • dnmp链接 链接文档gitee 与 链接文档github

二、apache安装

注:如果服务器新服务器可以直接用宝塔安装,避免走很多坑
由于服务通过宝塔已经安装nginx,不能于安装apache,所以使用docker安装apache

1. docker 安装apache命令

1)拉取镜像

docker pull httpd

2)创建临时容器

docker run -id --name http-test -p 80:80 httpd

3)创建目录(目录位置根据自己情况去创建)

mkdir -p /home-data-disk/www/wwwroot /home-data-disk/docker/apache/logs /home-data-disk/docker/apache/conf/myconf

wwwroot 目录将映射为apache容器配置的应用程序目录
logs 目录将映射为apache容器的日志目录
conf 目录里的配置文件将映射为apache容器的配置文件
myconf 方便存放自己的配置,后期改apache的配置要用

4)拷贝容器内Apache 默认配置文件到本地当前目录下的 conf 目录,并删除临时容器,主要用它的配置文件

docker ps -a  //查看容器id
docker cp [容器ID]:/usr/local/apache2/conf/httpd.conf /home-data-disk/docker/apache/conf
docker rm -f [容器ID]

5)创建自己真正要用的容器

sudo lsof -i :8080 #查看端口是否被占用
docker run -p 8080:80 --name apache-my --network dnmp_dnmp --ip 192.168.0.21 -v /home-data-disk/www/wwwroot/:/www/ -v /home-data-disk/docker/apache/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /home-data-disk/docker/apache/conf/myconf/:/usr/local/apache2/conf/myconf/ -v /home-data-disk/docker/apache/logs:/usr/local/apache2/logs/ -d httpd

8080:80 宿主机端口:容器端口
apache-my 容器名字
dnmp_dnmp 自定义的网络段192.168.0.0/24(安装dnmp环境是创建的)
192.168.0.21 自定义网络的ip(方便各容器互通)
-v 宿主机目录:容器目录 (目录映射)
-d httpd 镜像名

  1. 修改配置文件(大致要修改的地方)
ServerName 0.0.0.0:80LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule rewrite_module modules/mod_rewrite.so
<Directory />AllowOverride AllRequire all denied
</Directory><Directory "/usr/local/apache2/cgi-bin">AllowOverride AllOptions NoneRequire all granted
</Directory>TraceEnable off
IncludeOptional /usr/local/apache2/conf/myconf/*.conf

IncludeOptional /usr/local/apache2/conf/myconf/*.conf 这个是之前提到要用的目录(每个网站的不同的配置)

<VirtualHost *:80>ServerAdmin webmaster@exampleDocumentRoot "/www/enlightv"ServerName 428a707d.177.177.177.177ServerAlias 177.177.177.177#errorDocument 404 /404.html#DENY FILES<Files ~ (\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)$>Order allow,denyDeny from all</Files>#PHP<FilesMatch \.php$>SetHandler "proxy:fcgi://192.168.0.10:9000"</FilesMatch>#PATH<Directory "/www/enlightv">SetOutputFilter DEFLATEOptions FollowSymLinksAllowOverride AllRequire all grantedDirectoryIndex index.php index.html index.htm default.php default.html default.htm</Directory>
</VirtualHost>

配置好后将上面文件放到myconf目录下,文件名 177.177.177.177.conf

  1. 每次改完配置重启apache
docker restart apache-my

三、dnmp安装

1.配置文件需要修改部分

  • .env文件(一些扩展,账号密码根据自己情况设置)
SOURCE_DIR=/home-data-disk/www #apache应用程序目录要与php应用程序目录一致
  • docker-compose.yml文件
php:build:context: ./services/phpargs:PHP_VERSION: php:${PHP_VERSION}-fpm-alpineCONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}PHP_EXTENSIONS: ${PHP_EXTENSIONS}TZ: "$TZ"container_name: phpexpose:- 9501extra_hosts:- "www.site1:172.17.0.1"volumes:- ${SOURCE_DIR}:/www/:rw #注意要改的地方,根据自己情况有可能需要修改- ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro- ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw- ${PHP_LOG_DIR}:/var/log/php- ${DATA_DIR}/composer:/tmp/composerrestart: alwayscap_add:- SYS_PTRACEnetworks:#   - default# 可以把-default 改成下列配置,以固定容器IPdnmp:ipv4_address: 192.168.0.10mysql:image: mysql/mysql-server:${MYSQL_VERSION}container_name: mysqlports:- "${MYSQL_HOST_PORT}:3306"volumes:- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysqlf:ro- ${MYSQL_CONF_FILE_MY}:/etc/myf:ro- ${DATA_DIR}/mysql:/var/lib/mysql/:rw- ${MYSQL_LOG_DIR}:/var/log/mysql/:rwrestart: alwaysnetworks:#   - default#   - default# 可以把-default 改成下列配置,以固定容器IPdnmp:ipv4_address: 192.168.0.11environment:MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"MYSQL_ROOT_HOST: "${MYSQL_ROOT_HOST}"TZ: "$TZ"networks:dnmp:driver: bridgeipam:#   driver: default# 解除下面的注释可以设置网段,用于nginx等容器固定容器IPconfig:- subnet: 192.168.0.0/24

2.dnmp安装使用

具体安装使用参考官方文档即可(上述有链接)

3.插件安装

1)rabbitmq安装rabbitmq_delayed_message_exchange延时队列插件
  1. 根据自己mq版本下载自己对应插件版本,网址

我rabbitmq版本是v3.12.4,下载的插件版本是v3.12.0

  1. 将下载好的插件传到服务器(/dnmp/services/rabbitmq)目录,并复制到rabbitmq容器
cd /dnmp/services/rabbitmq
#复制命令
docker cp rabbitmq_delayed_message_exchange-3.12.0.ez rabbitmq:/opt/rabbitmq/plugins
  1. 进入容器,可以查看到此插件
docker exec -it rabbitmq bash
cd /opt/rabbitmq/plugins
ls
  1. 安装消息管理插件(dnmp集成环境默认装了,可以忽略此步骤,可以从/dnmp/services/rabbitmq/dockerfile文件看到)
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
  1. 查看插件
rabbitmq-plugins list
  1. 启动插件并重启容器
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
exit
docker-compose restart rabbitmq
  1. 可以看到如下,安装成功了

三、报错处理

  1. STORAGE_WRITE_ERROR:./Application/Runtime/Cache/Home/2a94b8bda04ff446dcedd42276fc99ee.php
chmod -R 777 Runtime/   #为缓存文件加权限

2.1055:Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column

  1. 修改mysql配置

由于mysql8使用的真正配置文件是:mysql容器文件位置 /etc/myf,而写官方只把mysqlf映射出来了,无论你怎么修改mysqlf配置文件都没反应,
先将myf文件复制出来docker cp [容器ID]:/etc/myf /home-data-disk/dnmp/services/mysql

  • 修改.dnmp下.env配置文件
#
# MySQL8
#
MYSQL_VERSION=8.0.28
MYSQL_HOST_PORT=13306
MYSQL_ROOT_PASSWORD=f6GbSLJWhR8GPi76
MYSQL_ROOT_HOST=%
MYSQL_CONF_FILE=./services/mysql/mysqlf
MYSQL_CONF_FILE_MY=./services/mysql/myf  #改动部分
MYSQL_LOG_DIR=./logs/mysql
  • 修改dnmp下 docker-compose.yml
  mysql:image: mysql/mysql-server:${MYSQL_VERSION}container_name: mysqlports:- "${MYSQL_HOST_PORT}:3306"volumes:- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysqlf:ro- ${MYSQL_CONF_FILE_MY}:/etc/myf:ro #改动部分- ${DATA_DIR}/mysql:/var/lib/mysql/:rw- ${MYSQL_LOG_DIR}:/var/log/mysql/:rwrestart: alwaysnetworks:#   - default#   - default# 可以把-default 改成下列配置,以固定容器IPdnmp:ipv4_address: 192.168.0.11environment:MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"MYSQL_ROOT_HOST: "${MYSQL_ROOT_HOST}"TZ: "$TZ"
  • 重新构建mysql
docker-compose up -d mysql
  • 修改dnmp/services/mysql下myf文件
!includedir /etc/mysql/conf.d  #末尾加上这条语句
  • 接下来再修改mysqlf配置文件,然后重启容器,mysql就能读到了

注意:一定要给/home-data-disk/dnmp/logs/mysql 目录下文件读写权限
命令: chmod -R 666 /dnmp/logs/mysql
其中,/dnmp/logs/mysql 是目标目录的路径。使用-R选项表示递归地修改目录及其子内容的权限。

[client]
port                    = 3306
default-character-set   = utf8mb4[mysqld]
user                    = mysql
port                    = 3306
sql_mode                = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION #主要加入这条default-storage-engine  = InnoDB
default-authentication-plugin   = mysql_native_password
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
init_connect            = 'SET NAMES utf8mb4'disable-log-bin
skip-character-set-client-handshake
explicit_defaults_for_timestampslow_query_log
long_query_time         = 3
slow-query-log-file     = /var/log/mysql/mysql.slow.log #上面注意提到的读写权限,相当于给容器内这个文件加的
log-error               = /var/log/mysql/mysql.error.log #上面注意提到的读写权限,相当于给容器内这个文件加的default-time-zone       = '+8:00'[mysql]
default-character-set   = utf8mb4

3.宿主机运行 php容器->php脚本

docker exec php php /www/wwwroot/项目目录/index.php admin/My/getNode 一直没成功执行,
于是在宿主机执行(非项目入口目录)php /www/wwwroot/project/index.php admin/My/getNode
报错:PHP Warning: require(./ThinkPHP/ThinkPHP.php): failed to open stream: No such file or directory in /www/wwwroot/project/index.php on line 52

<?php// 应用入口文件
chdir(__DIR__); #入口文件加入此行代码// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';

更多推荐

apache(docker)+dnmp (Docker + Nginx+ MySQL5,8 + PHP5,7,8 + Redis + ElasticSearc)

本文发布于:2024-03-10 07:04:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727305.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:过程   测试   详细   dnmp   Docker

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!