下载本次记录所用到的全部软件和镜像
项目结构
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 服务的名称。
本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!