使用 Docker Compose 部署 LNMP

1. 准备工作

确保已安装 Docker 和 Docker Compose。如果未安装,可参考以下命令(以 Ubuntu 为例):

2. 创建项目目录

创建并进入项目目录,用于存放配置文件和代码:

mkdir lnmp && cd lnmp
mkdir -p nginx/conf.d www

3. 创建 Docker Compose 配置文件

lnmp 目录下创建 docker-compose.yml,并添加以下内容:

version: '3.8'

services:
  nginx:
    image: hub.yumesakura.com/library/nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./www:/var/www/html
    depends_on:
      - php
    networks:
      - lnmp-network

  php:
    image: hub.yumesakura.com/library/php:8.1-fpm
    container_name: php
    volumes:
      - ./www:/var/www/html
    networks:
      - lnmp-network

  mysql:
    image: hub.yumesakura.com/library/mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: myapp
      MYSQL_USER: app_user
      MYSQL_PASSWORD: app_password
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - lnmp-network

volumes:
  mysql-data:

networks:
  lnmp-network:
    driver: bridge

说明:

  • Nginx:映射宿主机的 80 端口,挂载配置文件和 Web 根目录。
  • PHP:使用 PHP 8.1 FPM 镜像,与 Nginx 共享 Web 根目录。
  • MySQL:设置数据库 root 密码、默认数据库和用户,数据持久化到卷。
  • 网络:使用桥接网络确保容器间通信。

4. 配置 Nginx

nginx/conf.d 目录下创建 default.conf,添加以下内容:

server {
    listen 80;
    server_name default_server;
    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;
    }
}

说明:此配置使 Nginx 支持 PHP 文件处理,通过 FastCGI 转发给 PHP 容器。

5. 创建测试 PHP 文件

www 目录下创建 index.php,添加以下内容:

<?php
phpinfo();
?>

此文件用于测试 PHP 是否正常运行。

6. 启动 LNMP 环境

lnmp 目录下运行以下命令启动所有服务:

docker-compose up -d
  • -d 表示后台运行。
  • 启动后,Docker 会拉取 Nginx、PHP 和 MySQL 镜像,并创建容器。

7. 验证部署

  • 打开浏览器,访问 http://localhost,应看到 PHP 信息页面(phpinfo)。
  • 验证 MySQL:使用 MySQL 客户端连接数据库:
    docker exec -it mysql mysql -uapp_user -papp_password
    
    输入密码 app_password,进入 MySQL 后运行 SHOW DATABASES; 检查 myapp 数据库是否存在。

8. 管理服务

  • 停止服务:
    docker-compose down
    
  • 查看日志:
    docker-compose logs
    
  • 重启服务:
    docker-compose restart
    

9. 注意事项

  • 端口冲突:确保宿主机 80 端口未被占用,否则修改 docker-compose.yml 中的端口映射(例如 "8080:80")。
  • 数据持久化:MySQL 数据存储在 mysql-data 卷中,停止容器后数据不会丢失。
  • 扩展:可将 www 目录替换为您的 PHP 项目代码。

10. 故障排查

  • 如果页面无法访问,检查容器状态:
    docker ps -a
    
  • 查看具体容器日志,例如:
    docker logs nginx
    
  • 确保 nginx/conf.d/default.confwww/index.php 文件权限正确(例如 chmod -R 755 www)。
梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-08-04 09:45:02

results matching ""

    No results matching ""