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
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; } }
就完成的服务器用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

浙公网安备 33010602011771号