记录fastadmin在docker上部署的笔记
本文提供了一份详细的FastAdmin框架Docker部署指南,包含完整的配置文件与注释说明。通过Docker Compose编排PHP-FPM 7.4、Nginx和MySQL 5.7服务,确保环境兼容性。重点解决了Nginx伪静态规则配置、PHP路径信息处理等常见问题,并提供了一键部署脚本。所有配置文件均添加详细注释,包括PHP扩展预安装、目录权限设置等关键步骤,帮助开发者快速搭建完整的Fast
·
很多网友问我怎么在docker上部署fastadmin,我看大多数网友的教程及搜索很部署方式,感觉大家都讲的一知半解,要么配置文件没有任何的注释和说明,导致很多小白不是很通透。我就自己整理了一份docker部署fastadmin笔记记录,希望对有需求的网友有用,配置文件关键的地方都有注释说明,按照我的部署可以一键安装和构建
1. 项目目录结构准备
your-project/
├── docker-compose.yaml # docker compose 构建部署文件
├── php-fpm.Dockerfile # 构建php镜像 环境和扩展的文件
├── deploy.sh # 一键执行脚本文件
├── config/ # 配置文件夹
│ ├── nginx-site.conf # nginx的fastadmin配置文件
│ └── php.ini # php的配置文件
├── fastadmin/ # (需手动创建)将从官网下载的完整包解压至此
└── .env # (可选)用于管理敏感环境变量
2. 基础介绍
-
核心要求:
3. 文件编写
1. docker-compose.yaml
version: '3.8'
services:
# PHP-FPM 7.4 服务,用于运行FastAdmin应用
php-fpm:
# 方案1:使用自定义Dockerfile构建镜像(推荐,避免运行时安装扩展)
build:
context: .
dockerfile: php-fpm.Dockerfile # 使用自定义的Dockerfile构建镜像
container_name: fastadmin-php
restart: unless-stopped
# 将宿主机上的FastAdmin源码目录挂载到容器的工作目录
volumes:
- ./fastadmin:/var/www/html
# 挂载自定义的PHP配置文件,覆盖镜像默认设置
- ./config/php.ini:/usr/local/etc/php/conf.d/custom.ini
# 注意:这里不再需要 user: "1000:1000",因为Dockerfile中已设置USER www-data
# Dockerfile会确保www-data用户的UID与宿主机匹配
depends_on:
- mysql
# 无需在运行时安装扩展,所有扩展已在Dockerfile中预先安装
networks:
- fastadmin-network
# Nginx Web服务器,处理HTTP请求并转发PHP动态请求
nginx:
image: nginx:alpine
container_name: fastadmin-nginx
restart: unless-stopped
ports:
# 将宿主机的8080端口映射到容器的80端口,通过 http://localhost:8080 访问
- "80:80"
volumes:
# 挂载FastAdmin源码,确保Nginx和PHP访问同一份文件
- ./fastadmin:/var/www/html
# 挂载自定义的Nginx站点配置(见下文配置片段)
- ./config/nginx-site.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php-fpm
networks:
- fastadmin-network
# MySQL 5.7 数据库服务
mysql:
image: mysql:5.7
container_name: fastadmin-mysql
restart: unless-stopped
environment:
# 设置数据库root密码(生产环境应使用更安全的方式管理)
MYSQL_ROOT_PASSWORD: fastadmin123
# 创建一个专用于FastAdmin的数据库
MYSQL_DATABASE: fastadmin
volumes:
# 持久化数据库数据,防止容器重启后丢失
- mysql_data:/var/lib/mysql
networks:
- fastadmin-network
ports:
- "3306:3306"
# 定义网络,允许三个服务间通过服务名称通信
networks:
fastadmin-network:
driver: bridge
# 定义卷,用于持久化MySQL数据
volumes:
mysql_data:
# 使用默认的local驱动,数据将保存在宿主机上
2.nginx-site.conf
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.html index.htm index.php;
# 核心伪静态规则:使用ThinkPHP规则[citation:1]
location / {
# 如果是访问真实存在的文件或目录,则直接访问
# 否则,将所有请求重写到 index.php 的 s 参数[citation:9]
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
# 处理PHP请求 - 此部分是修复“模块不存在”的关键
location ~ \.php(.*)$ {
# 1. 关键:注释掉 try_files,避免与pathinfo冲突[citation:7]
# try_files $uri =404;
# 2. 将请求转发到php-fpm容器的9000端口
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# 3. 核心修复:设置路径信息拆分,使ThinkPHP能正确解析 /nvuatifvyz.php/admin/index 这类URL
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info; # 传递PATH_INFO给PHP[citation:7]
include fastcgi_params;
}
# 安全设置:禁止直接访问敏感目录[citation:3]
location ~ ^/(runtime|application)/ {
deny all;
}
# 禁止上传目录执行脚本[citation:3]
location ~ ^/public/(uploads|assets)/.*\.(php|php5|jsp)$ {
deny all;
}
# 静态文件缓存,提升性能
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
3. php.ini
; 允许脚本运行时修改环境变量,某些插件可能依赖于此
disable_functions =
; 调整内存限制,满足生成和上传需求
memory_limit = 256M
; 调整POST数据和文件上传大小限制
post_max_size = 100M
upload_max_filesize = 100M
; 设置时区
date.timezone = Asia/Shanghai
4. php-fpm.Dockerfile
# 使用官方PHP 7.4 FPM镜像作为基础
FROM php:7.4-fpm
# 1. 安装系统依赖包(以root权限运行)
# libpng-dev, libjpeg-dev, libfreetype6-dev: GD扩展的依赖库
# zip, unzip: 用于Composer包管理和文件操作
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip
# 2. 配置并安装PHP扩展(以root权限运行)
# docker-php-ext-configure: 配置GD扩展支持freetype和jpeg
# docker-php-ext-install: 安装FastAdmin必需的扩展
# - pdo_mysql: MySQL数据库连接
# - gd: 图像处理(验证码、图片上传等)
# - bcmath: 高精度数学计算
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd pdo_mysql bcmath
# 3. 创建和配置非root用户(安全最佳实践)
# 将www-data用户的UID和GID改为1000,与宿主机普通用户匹配
# 这样容器内的进程可以正确读写宿主机挂载的文件
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
# 4. 设置工作目录(FastAdmin应用代码的位置)
WORKDIR /var/www/html
# 5. 确保工作目录有正确的权限
# 将/var/www/html目录的所有权授予www-data用户
RUN chown -R www-data:www-data /var/www/html
# 6. 切换到非root用户运行(安全加固)
# 注意:这里设置的是默认用户,容器启动时将以www-data运行
USER www-data
# 7. 设置容器启动时的默认命令
# php-fpm将以www-data用户在前台运行
CMD ["php-fpm"]
5. deploy.sh
#!/bin/bash
# FastAdmin Docker 一键部署脚本
# 作者:系统生成
# 功能:设置权限、启动服务、检查状态并显示配置信息
set -e # 遇到任何错误立即停止执行
echo "🚀 FastAdmin Docker 部署脚本开始执行..."
echo "=========================================="
# 1. 设置文件权限
echo "📁 步骤1/3:设置FastAdmin目录权限..."
# 检查fastadmin目录是否存在
if [ ! -d "./fastadmin" ]; then
echo "❌ 错误:未找到 ./fastadmin 目录!"
echo "请确保已将FastAdmin完整包解压到 ./fastadmin 目录"
exit 1
fi
echo "正在将 ./fastadmin 目录所有者改为UID 1000 (www-data)..."
sudo chown -R 1000:1000 ./fastadmin
echo "正在设置运行时目录权限..."
chmod -R 755 ./fastadmin/runtime ./fastadmin/public/uploads
echo "✅ 权限设置完成!"
echo ""
# 2. 启动Docker服务
echo "🐳 步骤2/3:启动Docker服务..."
echo "正在启动容器(这可能需要几分钟,首次启动需下载镜像)..."
# 使用docker compose up -d启动服务
docker compose up -d
# 检查docker compose命令是否执行成功
if [ $? -ne 0 ]; then
echo "❌ Docker服务启动失败!"
echo "请检查 docker-compose.yaml 配置或查看日志:docker compose logs"
exit 1
fi
echo "✅ Docker服务启动命令已执行!"
echo ""
# 3. 等待服务完全启动(10秒)
echo "⏳ 等待服务初始化(10秒)..."
sleep 10
# 4. 检查服务状态
echo "🔍 步骤3/3:检查服务状态..."
echo "------------------------------------------"
docker compose ps
echo "------------------------------------------"
# 检查所有服务是否正常运行
ALL_RUNNING=$(docker compose ps --format json | grep -c '"State":"running"')
EXPECTED_SERVICES=3 # php-fpm, nginx, mysql
if [ "$ALL_RUNNING" -eq "$EXPECTED_SERVICES" ]; then
echo "✅ 所有服务运行正常!"
else
echo "⚠️ 有服务未正常运行,请检查:"
docker compose ps | grep -v "Up"
echo ""
echo "查看详细日志:docker compose logs [服务名]"
fi
echo ""
echo "=========================================="
echo "🎉 FastAdmin Docker 环境部署完成!"
echo ""
echo "📋 关键配置信息:"
echo "------------------------------------------"
echo "🌐 访问地址:http://localhost:80"
echo "🔧 安装入口:http://localhost:80/install.php"
echo ""
echo "🗄️ 数据库配置(安装时使用):"
echo " 主机地址:mysql"
echo " 数据库名:fastadmin"
echo " 用户名:root"
echo " 密码:fastadmin123"
echo ""
echo "📁 项目目录结构:"
echo " /fastadmin - FastAdmin源码"
echo " /config - 配置文件目录"
echo " docker-compose.yaml - Docker编排配置"
echo " deploy.sh - 本部署脚本"
echo ""
echo "🔧 常用管理命令:"
echo " 查看日志:docker compose logs"
echo " 停止服务:docker compose down"
echo " 重启服务:docker compose restart"
echo " 重建服务:docker compose up -d --build"
echo "=========================================="
6. 把 fastadmin 从官方下载完整版解压到fastadmin目录里面
4. 安装
# 1. 创建项目目录
mkdir fastadmin-docker && cd fastadmin-docker
# 2. 把刚才编写文件与 fastadmin文件 上传到此目录
# 在此目录执行
# 3. 给脚本添加执行权限
chmod +x deploy.sh
# 4.执行部署脚本
./deploy.sh
至此 在docker 部署fastadmin 完成 通过ip或者配置域名访问安装即可使用
更多推荐
所有评论(0)