ky818smKy818sm  2025-03-16 13:19 旷野小站 隐藏边栏 |   抢沙发  2 
文章评分 0 次,平均分 0.0

下载本次记录所用到的全部软件和镜像

项目结构

lnmp/
├── docker-compose.yml
├── nginx/
│   ├── conf.d/
│   │   └── default.conf
├── php/
│   └── Dockerfile

创建compose.yml文件

version: '3'

services:
  # MySQL 服务
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpass
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"

  # PHP-FPM 服务
  php:
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php
    restart: always
    volumes:
      - ./www:/var/www/html
    depends_on:
      - mysql

  # Nginx 服务
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - php

  # phpMyAdmin 服务
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: always
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    ports:
      - "8080:80"
    depends_on:
      - mysql

volumes:
  mysql-data:

创建nginx/conf.d/default.conf文件

server {
    listen 80;
    server_name _;
    root /var/www/html;
    index index.php index.html index.htm;

    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;
    }
}

创建php/Dockerfile文件

FROM php:8.1-fpm

# 安装必要的扩展
RUN docker-php-ext-install pdo_mysql

# 可选:安装其他扩展,如 mysqli、gd 等
# RUN apt-get update && apt-get install -y \
#     libfreetype6-dev \
#     libjpeg62-turbo-dev \
#     libpng-dev \
#     && docker-php-ext-configure gd --with-freetype --with-jpeg \
#     && docker-php-ext-install -j$(nproc) gd

# 创建项目目录
RUN mkdir -p /var/www/html

# 设置工作目录
WORKDIR /var/www/html

启动容器

docker-compose up -d

关于在Docker中单独构建PHP镜像的部分

这里用的是直接使用 docker-compose 自动构建:

# PHP-FPM 服务
  php:
    build:
      context: ./php
      dockerfile: Dockerfile

优点:

开发环境友好:修改 Dockerfile 后自动重建

配置简单:无需额外操作

版本同步:确保代码与镜像完全匹配

缺点:

重复构建:每次 docker-compose up 都会检查构建

缺乏版本控制:无法追溯历史镜像

分发不便:需要共享整个项目目录

可以预先构建镜像再使用

# PHP-FPM 服务
  php:
    image: kysm/php81

验证部署

在 www 目录下创建一个 info.php 文件:

echo "<?php phpinfo(); ?>" > www/info.php

打开浏览器,访问 http://localhost/info.php,如果能看到 PHP 信息页面,则说明部署成功。
访问 http://localhost:8080,使用之前配置的 MySQL 用户名和密码(如 root 和 root )登录 phpMyAdmin,若能成功登录,则 phpMyAdmin 服务正常运行。

注意事项

MySQL 配置:在 docker-compose.yml 中,MYSQL_ROOT_PASSWORD 是 MySQL 的 root 用户密码,你可以根据需要修改。
PHP 扩展:如果你的项目需要其他 PHP 扩展,可以在 php/Dockerfile 中添加相应的安装命令。
数据持久化:MySQL 数据存储在 mysql-data 卷中,即使容器被删除,数据也不会丢失。
端口冲突:如果 8080 端口已被占用,可在 docker-compose.yml 中修改 phpmyadmin 服务的端口映射。
安全设置:在生产环境中,建议对 phpMyAdmin 进行更严格的访问控制,例如使用防火墙限制访问 IP 等。

在已有的 Docker LNMP 环境基础上再建立一个新网站,可按以下步骤进行设置:

在 www 目录下为新网站创建一个独立的目录,例如 new_site,并将新网站的文件放置到该目录中。如果是全新的项目,可在该目录下进行开发。

cd lnmp/www
mkdir new_site
# 可以将新网站文件复制到 new_site 目录下,例如:
# cp -r /path/to/your/new/site/files new_site

配置 Nginx
为新网站创建一个独立的 Nginx 配置文件,在 nginx/conf.d 目录下创建一个新的 .conf 文件,例如 new_site.conf。

touch nginx/conf.d/new_site.conf
server {
    listen 80;
    # 这里可以设置新网站的域名,如果没有域名,也可以使用 IP 地址
    server_name new.site.com; 
    root /var/www/html/new_site;
    index index.php index.html index.htm;

    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;
    }

    location ~ /\.ht {
        deny all;
    }
}

配置 hosts 文件(仅用于本地测试)

如果没有真实的域名,在本地测试时可以通过修改 hosts 文件来模拟域名访问。
Windows:在 C:\Windows\System32\drivers\etc\hosts 文件中添加以下内容
127.0.0.1 new.site.com
Linux 和 macOS:在 /etc/hosts 文件中添加以下内容:
127.0.0.1 new.site.com

创建新的数据库(如果需要)

如果新网站需要使用数据库,可以通过 phpMyAdmin 来创建新的数据库。
打开浏览器,访问 http://localhost:8080 登录 phpMyAdmin。
点击 “新建”,输入数据库名称(例如 new_site_db),然后点击 “创建”。

5. 配置新网站的数据库连接(如果需要)

如果新网站是基于数据库的应用,需要在网站的配置文件中设置数据库连接信息。以 PHP 项目为例,通常在配置文件中设置以下信息:

define('DB_NAME', 'new_site_db');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'mysql');

重启 Nginx 容器

配置完成后,需要重启 Nginx 容器使新的配置生效。
docker-compose restart nginx

7. 访问新网站

在浏览器中输入配置的域名(如 new.site.com),如果一切配置正确,就可以访问新网站了。

注意事项

端口冲突:确保新网站的配置不会与现有网站的端口设置冲突。
权限问题:确保新网站目录及其文件的权限设置正确,以便 PHP 进程可以正常读写文件。
域名解析:如果要在公网访问新网站,需要将域名解析到服务器的 IP 地址。
数据库主机:由于使用 Docker 部署,数据库主机名应设置为 mysql,这是 docker-compose.yml 中 MySQL 服务的名称。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

声明:如果本站发布的内容侵犯到您的权益,请通过邮件【[email protected]】联系本站,我们将及时删除!

发表评论

表情 格式 链接 私密 签到