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:1.28.0
container_name: lnmp-nginx
ports:
- "8090:8090"
- "8080:8080"
- "8081:8081"
- "80:80"
volumes:
- ./www:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
depends_on:
- php74
- php80
- php82
networks:
- lnmp

php74:
build:
context: ./php/base
args:
PHP_VERSION: "7.4"
image: php-base:7.4
container_name: lnmp-php74
volumes:
- ./www:/var/www
# - ./php/php74.ini:/usr/local/etc/php/php.ini
- ./php/conf/php74:/usr/local/etc
- ./logs/php74:/var/log
networks:
- lnmp

php80:
build:
context: ./php/base
args:
PHP_VERSION: "8.0"
image: php-base:8.0
container_name: lnmp-php80
volumes:
- ./www:/var/www
# - ./php/php80.ini:/usr/local/etc/php/php.ini
- ./php/conf/php80:/usr/local/etc
- ./logs/php80:/var/log
networks:
- lnmp

php82:
build:
context: ./php/base
args:
PHP_VERSION: "8.2"
image: php-base:8.2
container_name: lnmp-php82
volumes:
- ./www:/var/www
# - ./php/php82.ini:/usr/local/etc/php/php.ini
- ./php/conf/php82:/usr/local/etc
- ./logs/php82:/var/log
networks:
- lnmp

redis:
image: redis:7.2
container_name: lnmp-redis
ports:
- "6379:6379"
command: redis-server --requirepass redis123
volumes:
- ./redis/data:/data
networks:
- lnmp

mysql:
image: mysql:8.0
container_name: lnmp-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: simis_tool
MYSQL_USER: simis
MYSQL_PASSWORD: Simis@2025!
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql/data:/var/lib/mysql
networks:
- lnmp


networks:
lnmp:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "1450"
 

 

3 在php/base 下新建Dockerfile 用于扩展

ARG PHP_VERSION
FROM php:${PHP_VERSION}-fpm

RUN apt-get update && apt-get install -y \
    git curl zip unzip \
    libzip-dev \
    libpng-dev libjpeg-dev libfreetype6-dev \
    libonig-dev \
    libxml2-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        pdo_mysql \
        mysqli \
        mbstring \
        bcmath \
        zip \
        exif \
        pcntl \
        xml \
        gd \
        opcache \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && rm -rf /var/lib/apt/lists/*

 

 


4 我目前是/www/lnmp/www 然后新建 project74 project80 project82 目录,项目在这个文件下。

5  在nginx 的conf.d/中新增
default.conf

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

 


default.conf  project74.conf  project80.conf  project82.conf

server {
    listen 80;
    server_name docker80.laravel.com;

    root /var/www/project80/util-google-helpers/public;
    index index.php index.html;

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

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

注意 root 的地址是容器项目的地址,不是宿主机的地址

 

 

 

就完成的服务器用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  专心写代码  阅读(16)  评论(0)    收藏  举报