当前位置:首页 >  站长 >  建站经验 >  正文

环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始

 2026-08-30 16:26  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

 传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上docker compose up一条命令,几分钟恢复原样。

核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录)。站长最该关心的卷——数据库文件、网站根目录必须挂在宿主机上,容器随时可以删了重建,数据不动。

# 目录结构
/webapp
├── docker-compose.yml
├── nginx/conf.d/site.conf
├── html/ # 网站根目录(卷)
└── mysql/ # 数据目录(卷)

# docker-compose.yml
services:
nginx:
image: nginx:1.26-alpine
ports: ["80:80", "443:443"]
volumes:
- ./html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
php:
image: php:8.2-fpm
volumes:
- ./html:/usr/share/nginx/html
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 改成强密码
volumes:
- ./mysql:/var/lib/mysql

Nginx容器里PHP的转发地址写容器名而不是127.0.0.1,这是新手第一大坑。容器里的localhost是容器自己,不是宿主机。Docker自带DNS,直接写 fastcgi_pass php:9000; 就通。

# nginx/conf.d/site.conf
server {
listen 80;
root /usr/share/nginx/html;
location ~ \.php$ {
fastcgi_pass php:9000; # 写服务名,不是127.0.0.1
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

验证:docker compose up -d 之后,docker compose ps看三个容器都是running,浏览器访问出phpinfo页面。故意docker compose down再up,网站和数据库数据都在,就说明卷挂载没问题。

提醒两点:一是MySQL容器首次初始化后,root密码改环境变量不会生效,要进容器里改;二是别用latest标签,PHP 5.x老站选对应版本镜像,一个站一个compose目录,互不干扰。整套文件扔进git,服务器就算没了,环境也能原样复活。

数据来源:Docker官方文档 

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程
docker

相关文章

  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3

  • 被CC打挂之前先做这三步:SYN Flood内核参数调优实战

    SYNFlood的原理一句话:攻击者狂发TCP握手第一个包(SYN),但不回第三次握手的ACK,服务器傻等,半连接队列被占满,正常用户的握手请求进不来,表现为网站打不开但机器负载并不高。这种攻击成本极低,一个脚本就能打,站长几乎人人会遇到。先确认是不是这个病:ss-s看一眼,或者netstat-an

  • phpredis扩展装完就完事?连接超时、序列化和长连接三个坑先排掉

    PHP连Redis基本都用phpredis这个C扩展,pecl一键装完,newRedis一句就连上了。但默认配置是给本机测试用的,直接上生产迟早出问题。下面三个坑是我见过翻车率最高的。第一个坑:连接超时没设。默认连接超时是0,意思是永远等。Redis那边要是卡了,PHP进程全在等连接,FPM的wor

  • Redis重启数据全丢?RDB和AOF持久化怎么选,别拍脑袋

    Redis快是真快,代价是数据在内存里,进程一崩、机器一断电,没落盘的数据就没了。站长场景里最疼的两种:一是拿Redis存Session,重启一次全员掉线重登;二是拿它存计数器和队列,重启后数字归零、任务丢失。持久化配置平时没人看,出事才知道疼。Redis给两种持久化方案。RDB是定时快照,每隔一段

    标签:
    php教程
  • 网站加了两台服务器用户就掉线?PHP Session存Redis,十分钟搞定多机共享

    单机跑得好好的站,一上负载均衡就出怪事:用户登录着,刷新一下变成未登录;购物车里的东西随机消失。十有八九是Session的问题——Session默认存在本机文件里,用户第一次请求落在A机,Session写在A机,第二次请求被分到B机,B机根本没这个Session,可不就掉线了。解决思路就一句话:Se

    标签:
    php教程

热门排行

信息推荐