部署指南
基于 dux-php-admin 实际项目的部署方法和最佳实践。
🚀 快速部署
环境要求
- PHP: 8.1+
- 数据库: MySQL 5.7+ / PostgreSQL 12+
- Web服务器: Nginx / Apache
- Node.js: 16+ (用于前端构建)
基础部署
bash
# 1. 克隆项目
git clone https://github.com/your-repo/dux-php-admin.git
cd dux-php-admin
# 2. 安装依赖
composer install --no-dev --optimize-autoloader
pnpm install
# 3. 配置环境
# 编辑 config/use.toml 和 config/database.toml
# 4. 数据库迁移
php dux db:sync
# 6. 构建前端
pnpm build
# 7. 设置权限
chmod -R 755 storage
chmod -R 755 public
🐳 Docker 部署
Dockerfile
基于项目实际的 Dockerfile:
dockerfile
FROM dunglas/frankenphp:1.7-builder-php8.2
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
WORKDIR /app
COPY . .
# 安装编译扩展所需依赖
RUN apt-get update && apt-get install -y \
git unzip curl wget gnupg lsb-release \
libzip-dev zip libssl-dev
# 编译并启用 PHP 扩展
RUN docker-php-ext-install sockets zip bcmath
RUN docker-php-ext-install pdo pdo_mysql
# 安装 Composer 并优化依赖
RUN curl -sS https://getcomposer.org/installer | php && \
php composer.phar update --no-dev --optimize-autoloader
# 设置文档根目录
ENV DOCUMENT_ROOT=/app/public
EXPOSE 8080
CMD ["./dux", "worker:start"]
docker-compose.yml
yaml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
volumes:
- .:/app
environment:
DOCUMENT_ROOT: /app/public
command: ./dux worker:start
tty: true
stdin_open: true
部署命令
bash
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f app
# 进入容器
docker-compose exec app sh
# 停止服务
docker-compose down
⚙️ Nginx 配置
基础配置
nginx
server {
listen 80;
server_name your-domain.com;
root /var/www/html/public;
index index.php;
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# PHP 处理
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
# 前端路由
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 隐藏敏感文件
location ~ /\. {
deny all;
}
}
HTTPS 配置
nginx
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# SSL 优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
# 其他配置同上...
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
🔧 生产环境配置
配置文件
生产环境 config/use.toml
:
toml
[app]
name = "DuxLite 管理系统"
debug = false
timezone = "Asia/Shanghai"
secret = "your-production-secret-key"
domain = "https://your-domain.com"
[vite]
dev = false
[cloud]
key = "your-cloud-key"
生产环境 config/database.toml
:
toml
[db.drivers.default]
driver = "mysql"
host = "localhost"
database = "dux_production"
username = "dux_user"
password = "secure_password"
port = 3306
prefix = "app_"
性能优化
bash
# 1. Composer 优化
composer install --no-dev --optimize-autoloader
# 2. 数据库优化
php dux db:sync
# 3. 权限同步
php dux permission:sync
# 4. OPcache 配置
# 在 php.ini 中启用
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
🔄 CI/CD 部署
GitHub Actions
yaml
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
- name: Install dependencies
run: composer install --no-dev --optimize-autoloader
- name: Build frontend
run: |
npm install
npm run build
- name: Deploy to server
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
script: |
cd /var/www/html
git pull origin main
composer install --no-dev --optimize-autoloader
npm run build
php dux db:sync
php dux permission:sync
🛡️ 安全配置
基础安全
bash
# 1. 设置正确的文件权限
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod -R 777 storage
# 2. 隐藏敏感文件
# 在 .htaccess 中添加
<Files "*.toml">
Order allow,deny
Deny from all
</Files>
# 3. 定期更新依赖
composer update
npm update
数据库安全
sql
-- 创建专用数据库用户
CREATE USER 'dux_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON dux_production.* TO 'dux_user'@'localhost';
FLUSH PRIVILEGES;
🎉 总结
DuxLite 部署要点:
- 🐳 容器化:使用 FrankenPHP 和 Docker 部署
- ⚙️ Web服务器:Nginx 配置优化
- 🔧 生产优化:数据库同步和权限管理
- 🔄 自动化:CI/CD 自动部署
- 🛡️ 安全防护:文件权限和数据库安全
- 📁 配置分离:use.toml 和 database.toml 分离配置
合理的部署配置可以确保应用稳定高效运行!