docker 部署lnmp环境

1 生成docker-compose.yml,用这个脚本生成

 

#!/bin/bash
echo "======================================="
echo "   LNMP 多 PHP + 多项目 + Redis"
echo "======================================="

# MySQL 镜像修复:Oracle 官方镜像
MYSQL_IMAGE="mysql/mysql-server:8.0"

echo "[1] 创建目录结构..."
mkdir -p /www/lnmp/{nginx,php80,php82,project80,project82,mysql,redis}

# --------------------------------------------------------
# 写入 Nginx 配置
# --------------------------------------------------------
echo "[2] 写入 Nginx 多站点配置..."

cat > /www/lnmp/nginx/default.conf <<EOF
server {
    listen 80;
    server_name project80.local;
    root /var/www/project80;
    index index.php;

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

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

server {
    listen 80;
    server_name project82.local;
    root /var/www/project82;
    index index.php;

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

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


# --------------------------------------------------------
# PHP 8.0 Dockerfile
# --------------------------------------------------------
echo "[3] 写入 PHP 8.0 Dockerfile..."

cat > /www/lnmp/php80/Dockerfile <<EOF
FROM php:8.0-fpm
RUN apt-get update && apt-get install -y zip unzip curl \\
    && docker-php-ext-install pdo_mysql mysqli
EOF

# --------------------------------------------------------
# PHP 8.2 Dockerfile
# --------------------------------------------------------
echo "[4] 写入 PHP 8.2 Dockerfile..."

cat > /www/lnmp/php82/Dockerfile <<EOF
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y zip unzip curl \\
    && docker-php-ext-install pdo_mysql mysqli
EOF


# --------------------------------------------------------
# Docker Compose 配置
# --------------------------------------------------------
echo "[5] 生成 docker-compose.yml..."

cat > /www/lnmp/docker-compose.yml <<EOF
services:
  nginx:
    image: registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./project80:/var/www/project80
      - ./project82:/var/www/project82
    depends_on:
      - php80
      - php82

  php80:
    build: ./php80
    volumes:
      - ./project80:/var/www/project80

  php82:
    build: ./php82
    volumes:
      - ./project82:/var/www/project82

  mysql:
    image: ${MYSQL_IMAGE}
    environment:
      MYSQL_ROOT_PASSWORD: root123456
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"

  redis:
    image: registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis:7
    command: redis-server --requirepass redis123
    ports:
      - "6379:6379"
    volumes:
      - ./redis:/data
EOF


# --------------------------------------------------------
# 创建测试项目
# --------------------------------------------------------
echo "[6] 创建测试 index.php..."

echo "<?php phpinfo();" > /www/lnmp/project80/index.php
echo "<?php phpinfo();" > /www/lnmp/project82/index.php


# --------------------------------------------------------
# 启动服务
# --------------------------------------------------------
echo "[7] 启动 LNMP..."

cd /www/lnmp
docker compose up -d --build

echo "======================================="
echo " LNMP 运行成功!"
echo "======================================="
echo "项目 1(PHP 8.0): http://project80.local"
echo "项目 2(PHP 8.2): http://project82.local"
echo "请在本机 hosts 文件中加入:"
echo " 127.0.0.1 project80.local"
echo " 127.0.0.1 project82.local"
echo
echo "Redis 密码:redis123"
echo "MySQL 密码:root123456"
echo "使用 MySQL 镜像:$MYSQL_IMAGE"

 


2 docker compose up -d 启动
生成后的yml是

services:

  nginx:
    image: nginx:latest
    volumes:
      - ./www:/var/www
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - php74
      - php82
    networks:
      - lnmp

  php74:
    image: php:7.4-fpm
    container_name: lnmp-php74
    volumes:
      - ./www:/var/www
      - ./php/php74.ini:/usr/local/etc/php/php.ini
    networks:
      - lnmp

  php80:
    image: php:8.0-fpm
    container_name: lnmp-php80
    volumes:
      - ./www:/var/www
      - ./php/php80.ini:/usr/local/etc/php/php.ini
    networks:
      - lnmp

  php82:
    image: php:8.2-fpm
    container_name: lnmp-php82
    volumes:
      - ./www:/var/www
      - ./php/php82.ini:/usr/local/etc/php/php.ini
    networks:
      - lnmp

  redis:
    image: redis:7.2
    container_name: lnmp-redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data
    networks:
      - lnmp

  mysql:
    image: mysql:8.0       # ← 修复:使用正确的 MySQL 镜像
    container_name: lnmp-mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf.d:/etc/mysql/conf.d
    networks:
      - lnmp

networks:
  lnmp:
    driver: bridge
View Code

 


3 我目前是/www/lnmp/www 然后新建 project74 project80 project82 目录,
 default.conf的配置是

# PHP 7.4 项目
server {
    listen 80;
    server_name project74.local;
    root /var/www/project74/public;
    index index.php index.html;

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

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

# PHP 8.0 项目
server {
    listen 80;
    server_name docker80.laravel.com;
    root /var/www/project80/public;
    index index.php index.html;

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

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

# PHP 8.2 项目
server {
    listen 80;
    server_name project82.local;
    root /var/www/project82/public;
    index index.php index.html;

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

    location ~ \.php$ {
        fastcgi_pass php82:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
View Code

就完成的服务器用docker 不是项目的环境。

4  重启命令

启动
docker compose up -d
停止
docker compose down
重启
docker compose restart 
重启php80  php82
docker compose restart php80   docker compose restart php82
重启nginx
docker compose restart nginx
View Code

 

posted @ 2025-12-17 16:10  专心写代码  阅读(3)  评论(0)    收藏  举报