第十二章、LNMP架构(下)

本文详细介绍了Nginx的负载均衡配置、SSL原理及配置、php-fpm的pool隔离、慢执行日志分析、open_basedir限制及php-fpm进程管理等高级主题。涵盖从Nginx到PHP-FPM的全面优化策略。

12.17 Nginx负载均衡

12.18 ssl原理

12.19 生成ssl密钥对

12.20 Nginx配置ssl

12.21 php-fpm的pool

12.22 php-fpm慢执行日志

12.23 open_basedir

12.24 php-fpm进程管理

12.25扩展

 

12.17 Nginx负载均衡

编辑配置虚拟主机文件

vim /usr/local/nginx/conf/vhost/load.conf 

# 写入如下内容:

upstream qq_com

#upstream名字自定义

{

    ip_hash;          

#ip_hash这一行的目的是让同一个用户始终保持在同一台机器上

    server 61.135.157.156:80;

    server 125.39.240.113:80;

}

#server如果不指定端口号,默认80端口

server

{

    listen 80;

    server_name www.qq.com;

    location /

    {

        proxy_pass     http://qq_com;

#这里写的是upstream的名字

        proxy_set_header Host   $host;

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

# upstream来指定多个web server

 

yum install -y bind-utils       #安装dig命令

#dig命令可以查看域名解析到什么ip地址

用法:dig   域名

dig  qq.com

 

#nginx不支持代理https(端口号443)

 

 

12.18 ssl原理

https与http的区别:

https通信是加密的,防止数据传输过程中被泄露

 

SSL工作流程:

1、浏览器发送一个https的请求给服务器;

 

2、服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;

 

3、 服务器会把公钥传输给客户端;

 

4、 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;

5、客户端把加密后的随机字符串传输给服务器;

 

6、 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);

7、服务器把加密后的数据传输给客户端;

 

8、 客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

 

 

 

12.19 生成ssl密钥对

rpm -qf `which openssl`     #查看openssl是什么包安装的

 

一、生成私钥,设置密码,保存/usr/local/nginx/conf目录下

cd /usr/local/nginx/conf

openssl genrsa -des3 -out tmp.key 2048  

#genrsa表示类型为rsa,tmp.key是私钥的名字,2048是密钥长度

#key文件为私钥

[root@xinlinux-03 vhost]# cd /usr/local/nginx/conf

[root@xinlinux-03 conf]# openssl genrsa -des3 -out tmp.key 2048

Generating RSA private key, 2048 bit long modulus

.+++

..................................................................+++

e is 65537 (0x10001)

Enter pass phrase for tmp.key:

Verifying - Enter pass phrase for tmp.key:

 

二、转换key,取消密码,删掉原来key

openssl rsa -in tmp.key -out   xin.key 

#-in 指定密钥转换文件,-out  指定输出的文件

rm -f tmp.key

[root@xinlinux-03 conf]# openssl rsa -in tmp.key -out   xin.key

Enter pass phrase for tmp.key:

writing RSA key

[root@xinlinux-03 conf]# rm -f tmp.key

 

三、生成证书请求文件

openssl req -new -key xin.key -out xin.csr

 

 

四、通过请求文件和私钥一起生产公钥文件

openssl x509 -req -days 365 -in xin.csr -signkey xin.key -out xin.crt

# 这里的xin.crt为公钥

[root@xinlinux-03 conf]# openssl x509 -req -days 365 -in xin.csr -signkey xin.key-out xin.crt

Signature ok

subject=/C=12/ST=Guangzhou/L=Tianhe/O=aiqiyi/emailAddress=1057259293@qq.com

Getting Private key

 

 

12.20 Nginx配置ssl

一、新建ssl.conf,配置ssl

vim /usr/local/nginx/conf/vhost/ssl.conf 

#加入如下内容:!v

server

{

    listen 443;

    server_name xin.com;

    index index.html index.php;

    root /data/wwwroot/xin.com;

    ssl on;

    ssl_certificate xin.crt;

    ssl_certificate_key xin.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}

 

二、检查语法并重载配置文件

/usr/local/nginx/sbin/nginx  -t

 /usr/local/nginx/sbin/nginx -s reload  

#若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module,然后make&&make install

[root@xinlinux-03 conf]# /usr/local/nginx/sbin/nginx -t

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7

nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

 

./configure --prefix=/usr/local/nginx/  --with-http_ssl_module

 

make&&make install

 

netstat  -lntp        #查看是否监听443端口

[root@xinlinux-03 nginx-1.8.0]# netstat  -lntp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11850/nginx: master

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      769/sshd

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      919/master

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      11850/nginx: master

 

 

三、创建网站目录

mkdir /data/wwwroot/xin.com

 

四、测试

echo "This is ssl test page." >/data/wwwroot/xin.com/index.html

 

• 编辑hosts,增加127.0.0.1 xin.com

vim  /etc/hosts

 

curl https://xin.com/

[root@xinlinux-03 ~]# vim  /etc/hosts

[root@xinlinux-03 ~]# curl https://xin.com/

curl: (60) Peer's certificate issuer has been marked as not trusted by the user.

#出现证书不可信任提示,因为这证书是不合法的,自己做的

 

编辑windows的hosts,增加192.168.233.150   xin.com

 

打开浏览器输入:https://xin.com

#如果访问不了,可能是防火墙问题

 

 

12.21 php-fpm的pool

目的:使用单独不同的pool将所有站点隔离开,防止其中一个站点出现问题从而导致其他站点也出现问题

 

#可以在php-fpm.conf主配置文件内建立多个pool,也可单独pool单独一个conf文件

 

vim /usr/local/php-fpm/etc/php-fpm.conf

#在[global]部分增加如下内容:

include = etc/php-fpm.d/*.conf

 

创建/php-fpm.d/目录

• mkdir /usr/local/php-fpm/etc/php-fpm.d/

• cd /usr/local/php-fpm/etc/php-fpm.d/

 

配置www.conf的pool

vim www.conf 

#内容如下:

[www]

listen = /tmp/www.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

 

•编辑xin.conf的pool

• vim xin.conf 

#内容如下

[xin]

listen = /tmp/xin.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

 

检查语法并重启php-fpm配置文件

/usr/local/php-fpm/sbin/php-fpm –t

• /etc/init.d/php-fpm restart

[root@xinlinux-03 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t

[27-Sep-2018 10:05:23] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

 

[root@xinlinux-03 php-fpm.d]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

 

ps aux |grep  php-fpm           #查看php-fpm的pool情况(在最右侧)

 

需要使用pool的话,只需要在网站server配置文件修改为pool对应的sock文件,即可将多个网站隔离开

 

 

12.22 php-fpm慢执行日志

目的:搭建php网站用LNMP时,可以分析php-fpm慢执行日志,可以找出网站访问变慢的原因

一、编辑www.conf配置文件

•vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

#加入如下内容

request_slowlog_timeout = 1

#超过一秒就会纪录日志(一般都会设置1~2秒之间)

slowlog = /usr/local/php-fpm/var/log/www-slow.log

 

二、 配置nginx的虚拟主机test.com.conf,(因为www.conf的sock文件是www.sock)

unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock

 

 

三、检查语法并重载nginx服务

/usr/local/nginx/sbin/nginx  -t

/usr/local/nginx/sbin/nginx  -s reload

 

四、测试

• vim /data/wwwroot/test.com/sleep.php

#写入如下内容

<?php 

echo "test slow log";

sleep(2);

echo "done";

?>

#休眠2秒钟

 

• curl -x127.0.0.1:80 test.com/sleep.php

• cat /usr/local/php-fpm/var/log/www-slow.log

[root@xinlinux-03 php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log

 

[27-Sep-2018 10:33:23]  [pool www] pid 12132

script_filename = /data/wwwroot/test.com/sleep.php

[0x00007f411ea4f270] sleep() /data/wwwroot/test.com/sleep.php:3

#显示是哪个文件慢,第几行慢;这里是sleep.php的第三行慢,超过一秒都会纪录

 

 

12.23 open_basedir

#通过pool限定网站目录

适用定义位置:Apache虚拟主机配置文件或者php-fpm配置文件 

 

#open_basedir后面接的是要限定的网站目录路径,路径不对就访问不了

 

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf

#加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/www.com:/tmp/

 

• 创建测试php脚本,进行测试

curl -x127.0.0.1:80 test.com/sleep.php -I

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I

HTTP/1.1 404 Not Found

Server: nginx/1.8.0

Date: Thu, 27 Sep 2018 02:54:10 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.32

 

#因为basedir不对,现在将basedir改为test目录下

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php

test slow logdone

[root@xinlinux-03 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I

HTTP/1.1 200 OK

Server: nginx/1.8.0

Date: Thu, 27 Sep 2018 02:56:28 GMT

Content-Type: text/html; charset=UTF-8

Connection: keep-alive

X-Powered-By: PHP/5.6.32

 

两种查错方法:

第一种:开启php-fpm.ini文件的display_error,通过curl后显示的错误信息查找

vim  /usr/local/php-fpm/etc/php.ini

display_errors = on

 

第二种:通过查看错误日志排错

 1、配置错误日志

vim  /usr/local/php-fpm/etc/php.ini

指定错误日志位置

error_log=/usr/local/php-fpm/var/log/php_errors.log

指定日志级别

error_reporting = E_ALL

 

2、然后检查语法并重载配置

/usr/local/php/sbin/php-fpm –t

 /etc/init.d/php-fpm reload

 

3、再次测试

 

4、 查看错误日志

 

 

12.24 php-fpm进程管理

#配置pool的内容

pm = dynamic               

#动态进程管理,也可以是static

pm.max_children = 50 

#最大子进程数,ps aux可以查看

pm.start_servers = 20  

#启动服务时会启动的进程数

pm.min_spare_servers = 5 

#定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

pm.max_spare_servers = 35 

#定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。

pm.max_requests = 500  

#定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

 

#如果是pm=static时,只有两句会生效,其他的都不会生效

pm = static               

pm.max_children = 50 

<think>我们有一个任务:在CentOS7上使用Docker和Dockerfile创建LAMP/LNMP容器并部署iWebShop开源商城平台。根据引用[1]和引用[2]中的信息,我们知道iWebShop是一个电商项目,它需要LNMP(Linux+Nginx+MySQL+PHP)或LAMP环境。同时,引用[1]中提到了一个DockerCompose配置的例子(虽然它是用于WeaveScope的,但我们可以借鉴其格式),引用[2]提到了在Win10上安装Linux的多种方式,其中包括Docker启动Linux容器安装,以及配置清单。我们的计划:1.准备CentOS7系统,并安装Docker。2.编写Dockerfile来构建一个包含Nginx(或Apache)、MySQL(或MariaDB)、PHP的镜像,或者分别构建这些服务的镜像,然后使用DockerCompose组合。3.由于iWebShop需要,我们可能还需要准备数据库初始化脚本和配置。4.获取iWebShop源代码,并将其放入容器中合适的位置。5.配置Web服务器(Nginx或Apache)以正确提供iWebShop服务。6.使用DockerCompose来定义和运行多个容器(例如:Web服务器容器、数据库容器)。考虑到简化,我们可以选择使用两个容器:一个运行Web服务器(Nginx)和PHP(使用FPM模式),另一个运行MySQL。步骤详细说明:第一步:安装Docker在CentOS7上安装Docker的步骤:1.1更新系统:`sudoyumupdate`1.2安装必要的软件包:`sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2`1.3添加Docker仓库:`sudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo`1.4安装Docker:`sudoyuminstalldocker-cedocker-ce-clicontainerd.io`1.5启动并设置开机启动:`sudosystemctlstartdocker&&sudosystemctlenabledocker`第二步:编写Dockerfile和DockerCompose文件我们可以分别创建两个Dockerfile:一个用于PHP-FPM(包含Nginx?或者分开),另一个用于MySQL。但是,更常见的做法是使用官方镜像,然后通过DockerCompose配置。由于iWebShop需要PHP和MySQL,我们可以这样设计:1.一个MySQL容器:使用官方MySQL镜像。2.一个PHP-FPM容器:使用官方PHP-FPM镜像,并在此基础上安装必要的PHP扩展和Nginx?或者将Nginx单独作为一个容器?实际上,常见的LNMP结构是:-Nginx容器:处理HTTP请求,将PHP请求转发给PHP-FPM容器。-PHP-FPM容器:运行PHP。-MySQL容器:运行数据库。因此,我们可能需要三个容器。但是,我们也可以将Nginx和PHP-FPM放在一个容器里(虽然这违背了一个容器一个进程的最佳实践,但有时为了简化也会这样做)。这里为了学习,我们采用三个容器的方式。不过,考虑到iWebShop的部署,我们也可以使用一个预制的LAMP/LNMP镜像。但为了灵活性,我们使用DockerCompose来组合。我们将使用官方的镜像:-mysql:5.7(因为iWebShop可能对MySQL版本有要求,这里选择5.7作为示例)-php:7.4-fpm(iWebShop要求PHP5.3以上,但建议使用较新版本,这里选择7.4)-nginx:latest第三步:准备配置文件1.为Nginx编写配置文件,配置虚拟主机以指向iWebShop的代码目录,并处理PHP请求。2.为PHP-FPM可能需要修改php.ini或添加扩展,我们可以通过Dockerfile来构建自定义的PHP-FPM镜像。3.准备MySQL的初始化脚本(创建数据库、用户等)。第四步:编写DockerCompose文件(docker-compose.yml)定义三个服务:web(nginx)、app(php-fpm)、db(mysql)第五步:获取iWebShop源代码可以从其官方网站或GitHub仓库获取,并将其放在项目目录中。具体步骤:1.创建项目目录,比如:`iwebshop-docker`2.在该目录下创建以下子目录和文件:-docker-compose.yml-nginx/└──conf.d/└──iwebshop.conf#nginx配置文件-mysql/└──init/#初始化数据库的sql文件└──init.sql-php/└──Dockerfile#用于构建自定义PHP-FPM镜像(如果需要额外扩展)-src/#存放iWebShop源代码└──(将iWebShop代码解压到这里)3.编写docker-compose.yml4.编写Nginx配置文件(iwebshop.conf)5.编写MySQL初始化脚本(init.sql),用于创建数据库和用户。6.如果需要,编写PHP的Dockerfile(例如,安装必要的扩展:gd,mysqli,pdo_mysql等)7.运行`docker-composeup-d`启动服务。详细配置:第一步:安装Docker(如前所述)第二步:安装DockerCompose(如果还没有)参考官方文档:https://docs.docker.com/compose/install/对于CentOS7,可以这样安装:```sudocurl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-composesudochmod+x/usr/local/bin/docker-compose```第三步:创建项目目录并进入```mkdiriwebshop-docker&&cdiwebshop-docker```第四步:创建目录结构```mkdir-pnginx/conf.dmysql/initphpsrc```第五步:下载iWebShop源代码到src目录从iWebShop的官方网站或GitHub获取,例如:```wget-Osrc/iwebshop.zip[iWebShop下载链接]```然后解压到src目录(注意:确保解压后文件在src下,而不是在子目录中,或者调整nginx配置的根目录)第六步:编写nginx配置文件(nginx/conf.d/iwebshop.conf)内容示例:```server{listen80;server_namelocalhost;#或者你的域名root/var/www/html;#在容器中,我们将通过卷映射到宿主机的src目录indexindex.phpindex.htmlindex.htm;location/{try_files$uri$uri//index.php?$query_string;}location~\.php${fastcgi_passapp:9000;#这里使用服务名“app”(在docker-compose中定义)和端口9000(PHP-FPM默认端口)fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;includefastcgi_params;}}```第七步:编写MySQL初始化脚本(mysql/init/init.sql)内容示例:```CREATEDATABASEiwebshop;CREATEUSER'iwebshop'@'%'IDENTIFIEDBY'password';GRANTALLPRIVILEGESONiwebshop.*TO'iwebshop'@'%';FLUSHPRIVILEGES;```第八步:编写PHP的Dockerfile(php/Dockerfile)如果不需要额外扩展,我们可以直接使用官方镜像。但通常iWebShop需要一些扩展,所以我们构建一个自定义镜像:```FROMphp:7.4-fpmRUNapt-getupdate&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libpng-dev\&&docker-php-ext-configuregd--with-freetype--with-jpeg\&&docker-php-ext-install-j$(nproc)gdmysqlipdo_mysql```第九步:编写docker-compose.yml```version:'3'services:#MySQL服务db:image:mysql:5.7container_name:iwebshop_dbenvironment:MYSQL_ROOT_PASSWORD:root_passwordMYSQL_DATABASE:iwebshopMYSQL_USER:iwebshopMYSQL_PASSWORD:passwordvolumes:-./mysql/init:/docker-entrypoint-initdb.d#将初始化脚本挂载到容器中的目录,容器启动时会自动执行-mysql_data:/var/lib/mysql#数据卷持久化restart:always#PHP-FPM服务app:build:./php#使用php目录下的Dockerfile构建container_name:iwebshop_appvolumes:-./src:/var/www/html#将源代码挂载到容器中depends_on:-dbrestart:always#Nginx服务web:image:nginx:latestcontainer_name:iwebshop_webports:-"80:80"#映射宿主机80端口到容器80端口volumes:-./src:/var/www/html-./nginx/conf.d:/etc/nginx/conf.d#挂载自定义配置文件depends_on:-apprestart:alwaysvolumes:mysql_data:#定义数据卷,用于持久化MySQL数据```第十步:启动服务```docker-composeup-d```然后,你可以通过浏览器访问CentOS7服务器的IP地址(或域名)来安装iWebShop。在安装过程中,数据库配置填写:数据库主机:db(因为在同一个Docker网络中,可以使用服务名作为主机名)数据库名:iwebshop用户名:iwebshop密码:password注意:如果安装过程中需要写入配置文件,请确保src目录有足够的写入权限(可能需要设置权限,或者在容器中调整用户权限)。另外,如果遇到权限问题,可以在宿主机上给src目录赋予适当的权限:```chmod-R777src#为了简单,但生产环境要注意安全```或者,在Dockerfile中指定合适的用户。以上步骤应该可以帮助你在CentOS7上使用Docker和DockerCompose部署iWebShop。注意:以上配置仅用于开发环境。生产环境需要更安全配置,如数据库密码、root密码、文件权限等。引用说明:我们在配置中参考了引用[1]中关于Docker容器的一些配置(如volumes映射),但根据我们的需求进行了调整。引用[2]中提到了LNMP环境,我们采用了LNMP结构。如果iWebShop有特定的环境要求(如特定版本的PHP、MySQL),请根据实际情况调整镜像版本。相关问题:1.如何为iWebShop配置Docker环境中的文件权限?2.如何优化Docker中的LNMP性能?3.如何为iWebShop配置HTTPS?</think>### 在CentOS 7中使用Docker部署iWebShop的完整指南 #### 一、环境准备 1. **安装Docker** ```bash sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl start docker && sudo systemctl enable docker ``` 2. **安装Docker Compose** ```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 二、创建LNMP容器(Docker Compose方案) 创建`docker-compose.yml`文件: ```yaml version: '3.8' services: nginx: image: nginx:1.20 ports: - "80:80" volumes: - ./iwebshop:/var/www/html - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - php php: image: php:7.4-fpm volumes: - ./iwebshop:/var/www/html environment: - DB_HOST=mysql - DB_NAME=iwebshop - DB_USER=admin - DB_PASSWORD=your_strong_password mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: iwebshop MYSQL_USER: admin MYSQL_PASSWORD: your_strong_password volumes: - mysql_data:/var/lib/mysql volumes: mysql_data: ``` 创建Nginx配置`nginx.conf`: ```nginx server { listen 80; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` #### 三、部署iWebShop 1. **下载iWebShop** ```bash mkdir iwebshop && cd iwebshop wget https://github.com/iwebshop/iwebshop/archive/refs/tags/latest.zip unzip latest.zip && rm latest.zip ``` 2. **设置文件权限** ```bash chmod -R 777 ./iwebshop/upload chmod -R 777 ./iwebshop/config ``` 3. **启动容器** ```bash docker-compose up -d ``` 4. **完成安装** 访问 `http://your-server-ip`,按向导安装: - 数据库主机:`mysql` - 数据库名:`iwebshop` - 用户名:`admin` - 密码:`your_strong_password` #### 四、Dockerfile定制方案(可选) 创建`Dockerfile`构建自定义PHP镜像: ```dockerfile FROM php:7.4-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip opcache ``` 在`docker-compose.yml`中替换PHP服务配置: ```yaml php: build: . volumes: [...] ``` #### 五、验证部署 1. 检查容器状态: ```bash docker ps -a ``` 2. 查看安装日志: ```bash docker logs <php-container-id> ``` #### 注意事项 1. 安全加固: - 修改默认数据库密码 - 限制MySQL外部访问 - 定期备份数据卷:`docker-compose exec mysql sh -c 'exec mysqldump -uadmin -p"$MYSQL_PASSWORD" iwebshop' > backup.sql` 2. 性能优化: - 增加PHP内存限制:在`php.ini`设置`memory_limit = 256M` - 启用OPcache加速 3. 持久化存储: - MySQL数据存储在命名卷`mysql_data` - 代码存储在宿主机`./iwebshop`目录 > 部署要点:通过容器网络互联(`php->mysql`服务名解析),文件卷挂载实现代码持久化,环境变量传递数据库配置[^1][^2]。 --- ### 相关问题 1. 如何为Docker中的iWebShop配置HTTPS证书? 2. Docker容器如何实现MySQL数据库的定期自动备份? 3. 如何扩展LNMP架构以应对高并发访问? 4. 在Docker环境下如何升级iWebShop版本? 5. 如何监控Docker容器的资源使用情况? [^1]: 引用自Docker网络配置文档,通过服务名实现容器间通信 [^^2]: 参考iWebShop官方部署指南及LNMP容器化最佳实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值