Docker Compose部署LNMP:新手也能搞定:用D

前置准备


使用 Docker Compose部署LNMP 前,请确保你的服务器已安装以下软件:



  • Docker:容器运行环境。

  • Docker Compose:多容器编排工具(通常随Docker一起安装)。

  • Git(可选):用于拉取示例配置文件。


检查安装


docker --version
docker-compose --version

如果未安装,请参考官方文档安装(Ubuntu快速命令):


# 安装Docker
curl -fsSL https://get.docker.com | bash

安装Docker Compose

sudo apt install docker-compose -y


目录规划


创建专用于 LNMP 的目录结构:


mkdir -p ~/lnmp/nginx/conf.d ~/lnmp/mysql/data ~/lnmp/php
cd ~/lnmp

分步操作


1. 编写 docker-compose.yml


~/lnmp/ 目录下创建 docker-compose.yml,内容如下:


version: '3'

services:
nginx:
image: nginx:latest
container_name: lnmp-nginx
ports:

  • "80:80"

volumes:

  • ./nginx/conf.d:/etc/nginx/conf.d
  • ./html:/usr/share/nginx/html

depends_on:

  • php

networks:

  • lnmp

php:
image: php:7.4-fpm
container_name: lnmp-php
volumes:

  • ./html:/var/www/html

networks:

  • lnmp

mysql:
image: mysql:5.7
container_name: lnmp-mysql
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: testdb
ports:

  • "3306:3306"

volumes:

  • ./mysql/data:/var/lib/mysql

networks:

  • lnmp

networks:
lnmp:


说明:此配置会启动三个容器,分别是 Nginx、PHP-FPM 和 MySQL,并共享一个自定义网络。

2. 配置 Nginx 站点


创建 ~/lnmp/nginx/conf.d/default.conf


server {
listen 80;
server_name localhost;

root /var/www/html;
index index.php index.html;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}


3. 创建测试 PHP 文件


mkdir ~/lnmp/html
echo "" > ~/lnmp/html/index.php

4. 启动容器


回到 ~/lnmp/ 目录,执行:


docker-compose up -d

查看容器状态:


docker-compose ps

如果所有容器都显示 Up,则部署成功。


避坑指南


1. 端口冲突


错误提示:Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use


原因:宿主机80或3306端口已被其他服务占用。


解决:先停止占用端口的服务(如 Nginx、Apache),或修改 docker-compose.yml 中的宿主机端口映射。


2. MySQL 连接拒绝


PHP 连接数据库时出现 Connection refused


原因:容器内使用 localhost 而不是服务名。


解决:在 PHP 代码中将数据库主机改为容器服务名 mysql,即:


$host = 'mysql';  // 对应 docker-compose.yml 中的服务名

3. 文件权限问题


PHP 写入文件时提示 Permission denied


解决:将 ./html 目录权限设置为 777 或使用 chown 调整:


chmod -R 777 ~/lnmp/html

高频问题解答


Q1:如何修改 MySQL 的 root 密码?


A:

docker-compose.ymlmysql 服务下修改 MYSQL_ROOT_PASSWORD 值,

然后 docker-compose down && docker-compose up -d 重建容器。注意

这会导致原有 MySQL 数据丢失(除非提前挂载持久化卷)。


Q2:能否同时运行多个 PHP 版本?


A:可以。

复制 php 服务块,指定不同镜像标签(如 php:8.2-fpm),并修改容器名和端口映射。


Q3:如何添加 HTTPS 支持?


A:在 Nginx 配置中添加 SSL 证书,并映射 443 端口即可。

可以参考 Let's Encrypt 自动申请证书。


效果验证



  1. 浏览器访问 http://你的服务器IP,如果看到 PHP 信息页面,说明 LNMP 正常运行。

  2. 测试 MySQL 连接:进入 PHP 容器,用命令行或写一个 test.php 验证:



$conn = new mysqli('mysql', 'root', 'root123', 'testdb');
if ($conn->connect_error) {
die('连接失败: ' . $conn->connect_error);
}
echo 'MySQL连接成功';
?>

如果输出“MySQL连接成功”,则 LNMP 整体部署成功。


如果你正在处理 Docker Compose部署LNMP,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
宝塔面板文件管理技巧:零基础也能高效操作网站文件
下一篇
宝塔面板防CC攻击设置指南:零基础也能快速上手
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意