搭建**lighttpd + PHP(php-fpm)基于 docker-compose 的最简生产环境:
- lighttpd 配置
- php-fpm 配置
- docker-compose 编排
env
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
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.)