lighttpd+PHP(php-fpm)基于docker-compose

搭建**lighttpd + PHP(php-fpm)基于 docker-compose 的最简生产环境:

  • lighttpd 配置
  • php-fpm 配置
  • docker-compose 编排

env

  • lighttpd
  • php-fpm
  • docker

1. 目录结构

project/
├── docker-compose.yml
├── lighttpd/
│   ├── Dockerfile
│   └── lighttpd.conf
└── php/
    ├── Dockerfile
    └── php.ini

1.1 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
services:
lighttpd:
build: ./lighttpd
container_name: lighttpd
ports:
- "8080:80"
depends_on:
- php
volumes:
- ./www:/var/www/html
networks:
- app-net

php:
build: ./php
container_name: php-fpm
expose:
- "9000"
volumes:
- ./www:/var/www/html
networks:
- app-net

networks:
app-net:
driver: bridge

1.2 lighttpd Dockerfile

1
2
3
4
5
6
7
8
9
FROM alpine:3.19

RUN apk add --no-cache lighttpd lighttpd-mod_fastcgi php81

COPY lighttpd.conf /etc/lighttpd/lighttpd.conf

EXPOSE 80

CMD ["lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]

1.3 lighttpd.conf(FastCGI对接 PHP-FPM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server.document-root = "/var/www/html"
server.port = 80

server.username = "lighttpd"
server.groupname = "lighttpd"

# 允许 index.php
index-file.names = ( "index.php", "index.html" )

server.modules += (
"mod_access",
"mod_accesslog",
"mod_fastcgi",
"mod_rewrite"
)

# FastCGI 连接 PHP-FPM
fastcgi.server = (
".php" => (
"localhost" => (
"host" => "php",
"port" => 9000,
"broken-scriptfilename" => "enable"
)
)
)

# 日志
accesslog.filename = "/var/log/lighttpd/access.log"

注意:host = "php" 对应 docker-compose 里的 service 名称。


2. PHP 容器

使用 php-fpm(推荐 Alpine 轻量版)


2.1 php/Dockerfile

1
2
3
4
5
6
7
FROM php:8.1-fpm-alpine

RUN docker-php-ext-install mysqli pdo pdo_mysql

COPY php.ini /usr/local/etc/php/

WORKDIR /var/www/html

2.2 php.ini

1
2
3
display_errors=On
upload_max_filesize=20M
post_max_size=20M

3. index.php

放到 ./www/index.php

1
2
<?php
phpinfo();

4. 启动服务

1
docker-compose up -d --build

访问:

http://localhost:8080

你将看到 phpinfo 页面,证明 lighttpd → FastCGI → php-fpm 工作正常。


5. 架构流转图(mermaid)

flowchart LR
    A(Client Browser) --> B(lighttpd)
    B --> |Static Files| B
    B --> |FastCGI| C(PHP-FPM)
    C --> D(MySQL/Redis etc.)