Linux

通过 Docker 部署 Filament 后台管理系统

通过 Docker 部署 Filament 后台管理系统

Filament 是一套基于 Laravel 的全栈开发工具集,提供了开箱即用的管理面板,丰富的 UI 组件库,以及完整的表单和数据表功能,帮助开发者快速构建后台管理系统。

本文将介绍如何在 CentOS 7.9 环境下,通过 Docker 部署 Filament 5.x 后台管理系统。

官方演示网站:https://demo.filamentphp.com/

官方安装文档:https://filamentphp.com/docs/5.x/introduction/installation

安装 Docker CE 和 Docker Compose

1、从阿里云仓库下载 Docker 软件包,并执行安装。

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2、安装完成后启动 docker 服务。

systemctl start docker
systemctl enable docker

3、查看版本信息。

docker --version
docker compose version

4、如果你的服务器位于国内,建议更换 Docker 镜像站。

vi /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run"
  ]
}

# 保存后重启 Docker 服务
systemctl daemon-reload
systemctl restart docker

准备工作

1、执行 id 命令检查当前用户的 UID 和 GID 。

[root@server ~]# id
uid=0(root) gid=0(root) groups=0(root)

# 如果在群晖 NAS 上安装 Filament,需要通过 SSH 登录服务器,通过以下命令查看用户的 UID 和 GID 。
root@synology:~# cat /etc/passwd | grep kobin
kobin:x:1026:100::/var/services/homes/kobin:/sbin/nologin

2、创建 Docker 服务所需的文件夹。

mkdir -p /opt/filament/{app,php,nginx,mysql}

# 执行后目录结构如下:
/opt
└── filament
    ├── app		# 项目代码
    ├── php		# php 配置
    ├── nginx		# nginx 配置
    └── mysql		# mysql 数据

3、新建一个 Dockerfile 文件,用于构建 PHP 8.2 + 常用扩展的 PHP-FPM 镜像,供 Laravel / Filament 项目使用。

vi /opt/filament/php/Dockerfile

以下配置中包含创建容器用户的步骤,主要用于避免 Docker 挂载目录时出现 UID/GID 权限冲突。

如果你的服务器使用非 root 用户 运行 Docker,建议将配置中的 USER_ID 和 GROUP_ID 修改为宿主机用户实际的 UID 和 GID(见第一步);

如果服务器日常使用 root 用户登录,一般不会遇到权限问题,可以移除相关配置段。

FROM php:8.2-fpm

WORKDIR /var/www/filament

# ========== 创建容器用户开始 ==========

ARG USER_ID=1026
ARG GROUP_ID=100
ARG USER_NAME=appuser
ARG GROUP_NAME=appgroup

RUN if getent group ${GROUP_ID} > /dev/null; then \
    echo "Group ${GROUP_ID} already exists, skipping creation"; \
    else \
    groupadd -g ${GROUP_ID} ${GROUP_NAME} || groupadd -g ${GROUP_ID} appgroup || true; \
    fi

RUN if getent passwd ${USER_ID} > /dev/null; then \
    echo "User ${USER_ID} already exists, skipping creation"; \
    else \
    useradd -u ${USER_ID} -g ${GROUP_ID} -m ${USER_NAME} || useradd -u ${USER_ID} -g ${GROUP_ID} -m appuser || true; \
    fi

RUN mkdir -p /var/www && \
    chown -R ${USER_ID}:${GROUP_ID} /var/www

# ========== 创建容器用户结束 ==========

RUN sed -i 's|http://deb.debian.org|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources

RUN apt-get update && apt-get install -y \
    libpng-dev libonig-dev libzip-dev libicu-dev unzip git curl \
    && docker-php-ext-install pdo_mysql mbstring bcmath gd zip intl \
    && docker-php-ext-enable pdo_mysql mbstring bcmath gd zip intl

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

4、创建 Nginx 配置文件,用于处理 HTTP 请求,并将请求转发至 PHP-FPM 容器。

vi /opt/filament/nginx/default.conf
server {
    listen 80;
    server_name localhost;
    root /var/www/filament/public;

    index index.php index.html;

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

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS $http_x_forwarded_proto;
    }
    
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

5、创建 Docker Compose 配置文件,用于定义所有服务(PHP、Nginx、MySQL 等)。

vi /opt/filament/compose.yaml
version: '3' 
services:
  app:
    build: ./php
    networks:
      - internal
    volumes:
      - ./app:/var/www:rw
  nginx:
    image: nginx:1.24
    networks:
      - internal
    ports:
      - "20080:80"
    volumes:
      - ./app:/var/www:rw
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:rw
    depends_on:
      - app
  node:
    image: node:20
    networks:
      - internal
    volumes:
      - ./app:/var/www:rw
    command: tail -f /dev/null
  mysql:
    image: mysql:8.0.45
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - internal
    ports:
      - "23306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - ./mysql:/var/lib/mysql:rw
    restart: unless-stopped
networks:
  internal:
    driver: bridge

6、进入 Docker 项目目录,拉取所有基础镜像。

cd /opt/filament
docker compose pull

# 查看所有镜像
docker images

7、构建并启动服务。

docker compose up -d --build

# 检查运行状态
docker compose ps

配置数据库

在 MySQL 容器内创建并配置数据库,为 Laravel 提供存储。

1、进入 MySQL 容器。

docker exec -it filament-mysql-1 bash

2、使用 MySQL 客户端登录到数据库,输入密码。

mysql -uroot -p

3、创建一个名为 filament 的数据库,并设置字符集为 utf8mb4 。

CREATE DATABASE filament
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

# 验证数据库
SHOW DATABASES;

# 退出 MySQL 客户端
exit

安装 Composer 和 Laravel

通过 PHP 安装 Composer,并创建 Laravel 项目,同时进行相关配置。

1、进入 PHP 容器。

docker exec -it filament-app-1 bash

2、更新包列表,并安装 vim 编辑器。

apt-get update
apt-get install vim -y

3、使用 PHP 安装 Composer 依赖管理工具。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

# 查看 Composer 版本
composer -V

4、安装 Laravel 依赖项。

apt-get install -y git unzip curl

5、创建 Laravel 项目,并指定版本为 11.0。

cd /var/www
composer create-project laravel/laravel filament "^11.0"

# 查看 Laravel 版本
cd /var/www/filament
php artisan --version

6、确保 Laravel 的存储和缓存目录具有适当的权限,避免出现权限错误。

cd /var/www/filament
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache

7、配置数据库连接信息。

vi /var/www/filament/.env
DB_CONNECTION=mysql
DB_HOST=192.168.1.1
DB_PORT=23306
DB_DATABASE=filament
DB_USERNAME=root
DB_PASSWORD=123456

8、删除默认的 SQLite 数据库。

cd /var/www/filament
rm database/database.sqlite

9、清理 Laravel 缓存。

php artisan config:clear
php artisan cache:clear
php artisan view:clear

10、执行数据库迁移,将数据库表结构同步到 MySQL 。

php artisan migrate

配置 Tailwind CSS

通过 Node.js 容器安装并配置 Tailwind CSS,确保前端样式的正常运行。

1、进入 Node.js 容器。

docker exec -it filament-node-1 bash

2、更新包列表,并安装 vim 编辑器。

apt-get update
apt-get install vim -y

3、安装 Tailwind CSS 及其相关插件。

cd /var/www/filament

npm install -D tailwindcss@4.1 postcss autoprefixer
npm install -D @tailwindcss/postcss
npm install

4、修正 Tailwind CSS 入口文件。

vi resources/css/app.css

@import "tailwindcss";
@import "tailwindcss/preflight" layer(base);
@tailwind base;
@tailwind components;
@tailwind utilities;

5、修正 postcss.config.js 文件内容。

vi postcss.config.js

import tailwindcss from '@tailwindcss/postcss';
import autoprefixer from 'autoprefixer';
export default {
  plugins: [tailwindcss, autoprefixer],
};

6、执行构建。

npm run build

# 验证版本
cat package.json | grep tailwindcss

7、此时通过浏览器访问 http://server-ip:20080/ ,可以看到安装的 Laravel 应用。

通过 Docker 部署 Filament 后台管理系统

安装 Filament 面板

进行 Filament 管理面板安装,创建管理员账户,并调整时区和语言设置。

1、进入 PHP 容器。

docker exec -it filament-app-1 bash

2、更新 Composer 依赖并安装 Filament 面板。

cd /var/www/filament

composer update
composer require filament/filament:"^5.0"

php artisan filament:install --panels

3、安装完成后,系统会要求你为面板设置一个 ID(默认为 admin)。

What is the panel's ID?
admin
It must be unique to any others you have, and is used to reference the panel in your code.

# 询问是否前往 GitHub 为项目点星,此处根据情况选择
All done! Would you like to show some love by starring the Filament repo on GitHub?
○ Yes / ● No

4、创建一个管理员账号,根据要求输入用户名、邮箱地址和密码。

php artisan make:filament-user

5、修改 Laravel 时区和语言设置。

cd /var/www/filament
vi .env

APP_TIMEZONE=PRC

APP_LOCALE=zh_CN 
APP_FALLBACK_LOCALE=zh_CN 
APP_FAKER_LOCALE=zh_CN 

6、完成后通过浏览器访问 http://server-ip:20080/admin/login ,即可登录到 Filament 后台管理页面。

通过 Docker 部署 Filament 后台管理系统
通过 Docker 部署 Filament 后台管理系统

升级 Filament 到最新版本

1、进入 PHP 容器。

docker exec -it filament-app-1 bash

2、更新 Filament 主包。

composer update filament/filament -W

# 查看当前版本
composer show filament/filament
本文为原创文章,著作权归作者所有:来自「KOBIN 技术随笔」作者的原创作品,转载请标明出处。
通过 Docker 部署 Filament 后台管理系统
https://blog.kobin.cn/blog/system/s2/3614.html
(0)

评论功能升级维护公告

为响应国家网络信息安全合规要求,并进行全面的安全策略升级,本站自即日起暂时关闭博客的评论功能。

在此期间,您将无法发表新的评论,但仍可正常浏览所有历史文章及现有评论。如果您遇到问题需要协助,可以选择在线留言,或者发送邮件到 chen@kobin.cn 。

对于给您带来的不便,深表歉意。感谢您的理解与支持!

KOBIN 技术随笔
2025 年 8 月 26 日