检查当前配置,确定如何将这些文件上传到 MinIO。
2 tools called
前端构建产物包含 assets/、static/、uni_modules/ 和 index.html。下面是上传到 MinIO 的方案:
MinIO 目录结构规划
建议在 MinIO 中这样组织:
myapp-bucket/
├── frontend/ # 前端文件根目录
│ ├── index.html
│ ├── assets/
│ ├── static/
│ └── uni_modules/
├── static/ # Django 静态文件(admin、xadmin 等)
└── media/ # 媒体文件
方案 1:使用 MinIO 客户端(mc)上传
1. 安装 MinIO 客户端
bash
# 下载 MinIO 客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# 或者使用 Docker
docker run --rm -v $(pwd):/data minio/mc:latest --version
2. 配置 MinIO 连接
bash
# 配置 MinIO 别名(从宿主机访问,使用映射的端口)
mc alias set myminio https://localhost:11100 6mcDgoCRw89yxMMe zhvJvZS3eZ2kJwcv7JKmvtvcsSSAmzc8 --insecure
# 或者如果从容器内访问
mc alias set myminio https://minio:9000 6mcDgoCRw89yxMMe zhvJvZS3eZ2kJwcv7JKmvtvcsSSAmzc8 --insecure
3. 上传前端文件
bash
# 进入前端构建目录
cd ../yixiangfront/unpackage/dist/build/web
# 上传整个目录到 MinIO
mc cp --recursive . myminio/myapp-bucket/frontend/ --insecure
# 或者分别上传各个目录
mc cp index.html myminio/myapp-bucket/frontend/ --insecure
mc cp --recursive assets/ myminio/myapp-bucket/frontend/assets/ --insecure
mc cp --recursive static/ myminio/myapp-bucket/frontend/static/ --insecure
mc cp --recursive uni_modules/ myminio/myapp-bucket/frontend/uni_modules/ --insecure
方案 2:使用 Python 脚本上传(推荐)
创建一个上传脚本:
python
# upload_frontend_to_minio.py
from minio import Minio
from minio.error import S3Error
import os
import sys
# MinIO 配置
MINIO_ENDPOINT = "localhost:11100" # 或 "minio:9000"(从容器内访问)
MINIO_ACCESS_KEY = "6mcDgoCRw89yxMMe"
MINIO_SECRET_KEY = "zhvJvZS3eZ2kJwcv7JKmvtvcsSSAmzc8"
BUCKET_NAME = "myapp-bucket"
FRONTEND_DIR = "../yixiangfront/unpackage/dist/build/web"
MINIO_PREFIX = "frontend"
def upload_directory(client, bucket_name, local_path, minio_prefix):
"""递归上传目录到 MinIO"""
for root, dirs, files in os.walk(local_path):
for file in files:
local_file = os.path.join(root, file)
# 计算相对路径
relative_path = os.path.relpath(local_file, local_path)
# MinIO 对象路径
minio_path = f"{minio_prefix}/{relative_path}".replace("\\", "/")
try:
client.fput_object(bucket_name, minio_path, local_file)
print(f"✓ 上传成功: {minio_path}")
except S3Error as e:
print(f"✗ 上传失败: {minio_path} - {e}")
def main():
# 创建 MinIO 客户端
client = Minio(
MINIO_ENDPOINT,
access_key=MINIO_ACCESS_KEY,
secret_key=MINIO_SECRET_KEY,
secure=True # 使用 HTTPS
)
# 检查 bucket 是否存在
found = client.bucket_exists(BUCKET_NAME)
if not found:
print(f"创建 bucket: {BUCKET_NAME}")
client.make_bucket(BUCKET_NAME)
else:
print(f"Bucket {BUCKET_NAME} 已存在")
# 上传前端文件
if not os.path.exists(FRONTEND_DIR):
print(f"错误: 目录不存在 {FRONTEND_DIR}")
sys.exit(1)
print(f"开始上传前端文件从 {FRONTEND_DIR} 到 {BUCKET_NAME}/{MINIO_PREFIX}/")
upload_directory(client, BUCKET_NAME, FRONTEND_DIR, MINIO_PREFIX)
print("上传完成!")
if __name__ == "__main__":
main()
运行脚本:
bash
# 安装依赖
pip install minio
# 运行上传脚本
python upload_frontend_to_minio.py
方案 3:使用 Docker 容器上传
如果 MinIO 在 Docker 网络中,可以使用容器上传:
bash
# 创建一个临时容器来上传文件
docker run --rm \
-v $(pwd)/../yixiangfront/unpackage/dist/build/web:/data \
-v $(pwd):/script \
--network yixiang_yixiang_network \
python:3.9-slim \
sh -c "pip install minio && python /script/upload_frontend_to_minio.py"
修改 nginx.conf 支持从 MinIO 提供前端文件
上传后,需要修改 nginx 配置:
nginx:docker/configs/frontend/nginx.conf
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# ... existing code ...
# 前端静态文件从 MinIO 提供
location ~ ^/(assets|static|uni_modules)/ {
proxy_pass https://minio:9000/myapp-bucket/frontend$request_uri;
proxy_set_header Host minio:9000;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
# index.html 从 MinIO 提供(或者保持从本地提供,因为需要频繁更新)
location = /index.html {
proxy_pass https://minio:9000/myapp-bucket/frontend/index.html;
proxy_set_header Host minio:9000;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires -1; # 不缓存 index.html,确保更新及时
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
# Django 静态文件从 MinIO 提供(admin、xadmin 等)
location ^~ /static/admin/ {
proxy_pass https://minio:9000/myapp-bucket/static$request_uri;
proxy_set_header Host minio:9000;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 7d;
add_header Cache-Control "public, immutable";
}
location ^~ /static/xadmin/ {
proxy_pass https://minio:9000/myapp-bucket/static$request_uri;
proxy_set_header Host minio:9000;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 7d;
add_header Cache-Control "public, immutable";
}
# 媒体文件从 MinIO 提供
location ^~ /media/ {
proxy_pass https://minio:9000/myapp-bucket/media/;
proxy_set_header Host minio:9000;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1d;
add_header Cache-Control "public";
}
# ... existing code ...
}
快速上传命令(推荐)
最简单的方式是使用 MinIO 客户端:
bash
# 1. 下载并安装 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# 2. 配置连接
mc alias set myminio https://localhost:11100 6mcDgoCRw89yxMMe zhvJvZS3eZ2kJwcv7JKmvtvcsSSAmzc8 --insecure
# 3. 上传前端文件
cd ../yixiangfront/unpackage/dist/build/web
mc cp --recursive . myminio/myapp-bucket/frontend/ --insecure
# 4. 验证上传
mc ls myminio/myapp-bucket/frontend/ --insecure
注意事项
- 每次前端构建后需要重新上传到 MinIO
- 可以将上传步骤集成到构建脚本中
index.html建议不缓存或短缓存,确保更新及时- 其他静态资源可以设置较长缓存时间
需要我帮你创建一个自动化的上传脚本吗?