第十二章 LNMP架构(下)

本文详细介绍了LNMP架构的配置,包括Nginx的负载均衡设置、SSL原理及证书生成、Nginx配置SSL、php-fpm的pool管理和慢执行日志,以及open_basedir的安全设定,为LNMP环境的搭建提供了全面指导。

一、Nginx负载均衡
二、ssl原理
三、生成ssl密钥对
四、Nginx配置ssl
五、php-fpm的pool
六、php-fpm慢执行日志
七、open_basedir
八、php-fpm进程管理
九、扩展

 

一、Nginx负载均衡

Nginx负载均衡需要用到upstream模块。upstream模块用于定义多个web server。通过算法将访问请求分发到不同的web server。

代理一台服务器就做代理,多台就是负载均衡(需要upstream模块)。

配置方式:

1. 以qq.com为例,先使用dig命令获取qq.com的服务器ip

dig命令:可以解析返回服务器的多个IP;dig命令的安装:yum -y install bind-utils

ping:只会返回一个

然后在/usr/local/nginx/conf/vhost/目录下创建一个文件qq_com.conf,写入如下的内容:

[root@Linux01 ~]# vim /usr/local/nginx/conf/vhost/qq_com.conf

upstream qq_com                                         ##指定后端服务器列表,可以随意定义,用于proxy_pass调用

{

    ip_hash;                                                  ##ip_hash算法,将同一个源ip的访问请求分发给同一个server,避免数据混乱

    server 111.161.64.40:80;                       #定义后端的server ip:port

    server 111.161.64.48:80;

}

server

{

    listen 80;                                              #监听端口

    server_name www.qq.com qq.com;                #虚拟主机域名

    location /

    {

        proxy_pass      http://qq_com;                      #proxy_pass  调用upstream qq_com

        proxy_set_header Host   $host;                   #下面的配置跟Nginx的代理一样

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

无法实现ssl连接的负载均衡,即不支持https,443端口的负载均衡。

2. 测试

①未重启配置的情况情测试访问www.qq.com,访问的是默认主页default.com

②重载 ,再次测试访问www.qq.com,返回的是真实的www.qq.com的首页代码。说明代理设置成功。

 

二、ssl原理

ssl的原理如下图所示

过程如下:

1.客户端向服务器发起https请求

2.服务器本身需要有一套数字证书(可向互联网上受信任的证书颁发机构申请,收费。也可以自己生成证书,但是不会被浏览器信任,所以需要客户端验证通过,才可以继续访问。)

3.服务器收到https请求后会将公钥传给客户端。

4.客户端浏览器收到公钥后会进行合法性验证。如果证书无效会显示警告信息。如果是有效的证书,则会产生一串随机字符串,并用收到的公钥加密。

5.客户端将加密码的随机字符串传回服务器。服务器端用私钥解密,获得这串随机字符串,服务器端再用这串随机字符串加密传输的数据。(这时候的加密方式称为对称加密,服务器加密数据和客户户解密数据用的同一把钥匙,即这串随机字符串。)

6.服务器端将加密后的数据发送给客户端,客户端收到数据后用同一把钥匙(即随机字符串解密)将数据解密。

参考:数字证书原理

 

三、生成ssl密钥对

因为向互联网上受信任的证书颁发机构申请证书是收费的,我们是仅仅是测试环境,可以手动生成自己的证书。

配置ssl证书:

1. 证书的生成需要安装openssl包,如果没有,可以用yum安装

[root@Linux01 vhost]# yum -y install openssl
2. 首先进入nginx的配置文件存放目录 /usr/local/nginx/conf。生成密码对

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

genrsa表示生成rsa类型的私钥文件,-des3表示使用des3加密算法

-out 指定生成的私钥文件名,2048表示加密算法的长度为2048位。

参数:https://blog.youkuaiyun.com/scuyxi/article/details/54884976

生成私钥文件必须输入两次密码。

3. 但是有密码的私钥比较麻烦,下面就来取消私钥文件的密码

[root@Linux01 conf]# openssl rsa -in tmp.key -out dwy.key 
Enter pass phrase for tmp.key:
writing RSA key
[root@Linux01 conf]# rm -f tmp.key

4. 生成证书请求文件,需要拿证书请求文件和没有密码的私钥一起生产公钥文件

[root@Linux01 conf]# openssl req -new -key dwy.key -out dwy.csr

5. 生成公钥文件

[root@Linux01 conf]# openssl x509 -req -days 365 -in dwy.csr -signkey dwy.key -out dwy.crt

# x509 代表生成的x509的证书

# -req 证书请求,用于生成证书文件

# -days 证书的有效期,365表示一年

# -in 指定证书请求文件

# -signkey 指定私钥文件

# -out 指定生成的公钥文件名

查看刚才生成的文件:

[root@Linux01 conf]# ls dwy.*
dwy.crt  dwy.csr  dwy.key
 

四、Nginx配置ssl

这里以aaa.com为例使用自己颁发的证书来配置ssl安全访问.

1. 在/usr/local/nginx/conf/vhost/目录下创建一个文件ssl_test.conf,写入下面的配置内容

[root@Linux01 conf]# vim /usr/local/nginx/conf/vhost/ssl_test.conf

server
{
   listen 443;
   server_name  www.aaa.com aaa.com;
   index index.html index.php;
   root /data/wwwroot/www.aaa.com;
   ssl on;                                                  #启用ssl功能
   ssl_certificate dwy.crt;                         #指定公钥文件
   ssl_certificate_key dwy.key;               #指定私钥文件
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

2. 重载。

如果出现错误:nginx: [emerg] unknown directive “ssl”

需要重新编译安装nginx 加上–with-http_ssl_module

3. 查看443端口是否监听。

如果没有,放行443端口:

[root@Linux01 conf]# firewall-cmd --zone=public --add-port=443/tcp
success
[root@Linux01 conf]# firewall-cmd --zone=public --add-port=443/tcp --permanent 
success

4. 测试访问

①curl 访问本地的https需要添加hosts

[root@Linux01 conf]# echo '127.0.0.1 www.aaa.com aaa.com' >> /etc/hosts

②测试

[root@Linux01 conf]# curl https://aaa.com 

//验证,访问成功,提示未受信任的证书,因为是自己颁发的证书,是不被浏览器代理信任的。

 

[root@Linux01 conf]# curl -k https://aaa.com 

使用 -k 选项忽略证书检查就可以访问了

③浏览器测试

点击高级,继续访问

 

 

五、php-fpm的pool(八、php-fpm进程管理)

php-fpm也可以配置类似nginx虚拟主机的pool,可以将每个pool做成一个单独的配置文件,通过配置php-fpm的池来隔离不同的虚拟主机。

配置方式:

1. 在/usr/local/php-fpm/etc/php-fpm.conf 配置文件的 [global] 部分添加一行配置

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

[root@Linux01 etc]# vim /usr/local/php-fpm/etc/php-fpm.conf

2. 创建pool配置文件存放目录

[root@Linux01 etc]# mkdir /usr/local/php-fpm/etc/php-fpm.d/


3. 在pool配置文件存放目录创建pool配置文件 dwy.conf 并写入以下内容

[dwy]                                                                 #pool名称可以随意定义

listen = /tmp/dwy.sock                                     #指定这个pool监听的socket文件或者ip:port

listen.mode=666                                             #监听sock文件时,sock文件的权限

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进程管理参数:

pm = dynamic
    #使用动态进程管理 ,也可以改为static使用静态进程管理
    #当 pm = static时,使用静态线程管理,只有pm.max_children会生效,其他 pm参数都无效

pm.max_children = 50                                    #这个pool的最大线程数

pm.start_servers = 3                                     #初始的线程数

pm.min_spare_servers = 3                           #最小空闲线程数,如果线程低于这个数值,会自动新建线程 

pm.max_spare_servers = 35                       #最大空闲线程数,如果空闲的线程大于这个数值,会自动清理

pm.max_requests = 500                             #每个线程最大出来的请求数

rlimit_files = 1024                                       #使用文件描述符数量,系统每打开一个文件就会消耗一个文件描述符,当文件描述符消耗完了就会报错
文件描述符参考:最大文件描述符详解

4. 再新建一个test.conf配置文件

5. 检查php-fpm配置语法错误。重载配置文件

[root@Linux01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[14-Dec-2018 22:56:31] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@Linux01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done

6. 检查php-fpm进程

##最后一列可以看到pool的名称

 

六、php-fpm慢执行日志 

当有时候访问php网页慢的时候,我们想查找慢的原因,这可以通过配置php-fpm的慢执行日志功能实现。

开启慢执行日志来查看是否是PHP代码执行时间过长,还可以看到具体是哪个PHP文件的哪一行导致的慢执行。

配置方式:

1. vim /usr/local/php-fpm/etc/php-fpm.d/test.conf 加入如下内容

request_slowlog_timeout = 3       #当执行时间超过指定的时间(单位:秒),记录慢执行日志
slowlog = /usr/local/php-fpm/var/log/test-slow.log  #指定慢执行日志文件路径

2. 重新加载配置。

在虚拟主机aaa.com 的根目录/data/wwwroot/www.aaa.com/下创建一个测试文件sleep.php,

[root@Linux01 vhost]# /usr/local/php-fpm/sbin/php-fpm -t
[15-Dec-2018 00:44:42] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@Linux01 vhost]# vim /data/wwwroot/www.aaa.com/sleep.php

<?php
echo 'test slow log';
sleep(4);                                      ##php的sleep()函数可以让程序睡眠指定的秒数,用于模拟PHP执行慢的情况。
echo 'done';
?>

3. 修改虚拟主机配置文件aaa.com.conf下 fastcgi_pass ,把unix:/tmp/php-fcgi.sock改成unix:/tmp/test.sock;(不修改,查看慢日志时就不会显示。即虚拟主机配置文件中的unix和php-fpm中定义的配置文件listen要一致

4. 重载nginx,测试访问

5. 查看慢日志

[root@Linux01 vhost]# cat /usr/local/php-fpm/var/log/test-slow.log

#错误日志可以看到,发生慢执行的时间 pool名,pid

#php文件路径 

#具体哪一行代码产生的慢执行

 

七、open_basedir

设定open_basedir可以使PHP只能访问指定目录下的文件,隔离不同的虚拟主机以增强安全性。

可以在虚拟主机配置中配置open_basedir;

也可以在php的pool池中配置open_basedir。

配置方式:

1. 修改/usr/local/php-fpm/etc/php-fpm.d/test.conf 配置文件

添加open_basedir的配置

#php_admin_value[open_basedir] 这个参数就是定义open_basedir

##/data/wwwroot/www.aaa1com:/tmp/" 这个地址现在是错误的

2. 修改/usr/local/php-fpm/etc/php.ini

将error_reporting的参数修改为E_ALL,修改error_log日志文件路径

[root@Linux01 php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini

3. 手动生成日志文件,并修改权限

[root@Linux01 php-fpm.d]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@Linux01 php-fpm.d]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
4. 重启php-fpm服务

[root@Linux01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[root@Linux01 php-fpm.d]#  /etc/init.d/php-fpm reload
5. 访问测试

查看php错误日志:访问的路径不在定义的open_basedir内

6. 再修改/usr/local/php-fpm/etc/php-fpm.d/test.conf 配置文件

将open_basedir修改为正确的路径

7. 重启php服务,访问测试

<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、付费专栏及课程。

余额充值