-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support MinIO for file storage #365
base: main
Are you sure you want to change the base?
Changes from all commits
662d796
6ccd8d8
5627a97
0825028
cb403cd
322201c
a1f132b
0d22ee0
47f41d1
d38b9d2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -67,11 +67,18 @@ LANGCHAIN_API_KEY=your_langsmith_api_key_here | |||||||||||||||||||||||||||||||||||||||
# To create a LangSmith project, visit LangSmith: https://www.langchain.com/langsmith | ||||||||||||||||||||||||||||||||||||||||
LANGCHAIN_PROJECT=your_langsmith_project_name_here | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
# FILE_UPLOAD: Whether to enable file upload to storage | ||||||||||||||||||||||||||||||||||||||||
# Set to true if file upload is required. | ||||||||||||||||||||||||||||||||||||||||
# Available options: false, s3, minio | ||||||||||||||||||||||||||||||||||||||||
# If set to false, AWS_S3_BUCKET_NAME is not required. | ||||||||||||||||||||||||||||||||||||||||
FILE_UPLOAD=false | ||||||||||||||||||||||||||||||||||||||||
# AWS_S3_BUCKET_NAME: S3 Bucket name | ||||||||||||||||||||||||||||||||||||||||
# This is the name of the S3 Bucket | ||||||||||||||||||||||||||||||||||||||||
AWS_S3_BUCKET_NAME="your_s3_bucket_name" | ||||||||||||||||||||||||||||||||||||||||
# Set to true if file upload is required. | ||||||||||||||||||||||||||||||||||||||||
FILE_UPLOAD=true | ||||||||||||||||||||||||||||||||||||||||
# Storage configuration for either AWS S3 or MinIO | ||||||||||||||||||||||||||||||||||||||||
# This is the name of the S3 Bucket or MinIO Bucket | ||||||||||||||||||||||||||||||||||||||||
BUCKET_NAME="default-storage" | ||||||||||||||||||||||||||||||||||||||||
# MinIO endpoint, only required for MinIO | ||||||||||||||||||||||||||||||||||||||||
MINIO_ENDPOINT="http://localhost:9000" | ||||||||||||||||||||||||||||||||||||||||
# Common access keys for both S3 and MinIO | ||||||||||||||||||||||||||||||||||||||||
MINIO_ACCESS_KEY="minioadmin" | ||||||||||||||||||||||||||||||||||||||||
MINIO_SECRET_KEY="minioadmin" | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+78
to
+82
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance security and documentation for MinIO configuration The MinIO configuration needs better documentation and security warnings for sensitive values. Apply this diff to improve the configuration: -# MinIO endpoint, only required for MinIO
+# MINIO_ENDPOINT: The endpoint URL for the MinIO server
+# Format: http(s)://<host>:<port>
+# Example: http://localhost:9000 (For development mode)
MINIO_ENDPOINT="http://localhost:9000"
-# Common access keys for both S3 and MinIO
+# MINIO_ACCESS_KEY: Access key for authentication
+# Warning: Use a strong, unique value in production
+# Default: minioadmin (for development only)
MINIO_ACCESS_KEY="minioadmin"
+# MINIO_SECRET_KEY: Secret key for authentication
+# Warning: Keep this value secret and never commit to version control
+# Default: minioadmin (for development only)
MINIO_SECRET_KEY="minioadmin" 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
# AWS Region, only required for AWS S3 | ||||||||||||||||||||||||||||||||||||||||
AWS_REGION="your_aws_region" |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -27,15 +27,22 @@ services: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGCHAIN_API_KEY: "your_langsmith_api_key_here" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGCHAIN_PROJECT: "your_langsmith_project_name_here" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FILE_UPLOAD: false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AWS_S3_BUCKET_NAME: "your_s3_bucket_name" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AWS_REGION: "your_aws_region_here" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Default configuration values for using Minio | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BUCKET_NAME: "default-storage" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MINIO_ENDPOINT: "http://localhost:9000" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
STORAGE_ACCESS_KEY: "minioadmin" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
STORAGE_SECRET_KEY: "minioadmin" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+30
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Enhance security and usability of storage configuration. The current configuration has several issues:
Apply this diff to improve the configuration: - AWS_REGION: "your_aws_region_here"
- # Default configuration values for using Minio
- BUCKET_NAME: "default-storage"
- MINIO_ENDPOINT: "http://localhost:9000"
- STORAGE_ACCESS_KEY: "minioadmin"
- STORAGE_SECRET_KEY: "minioadmin"
+ AWS_REGION: ${AWS_REGION:-us-east-1}
+ # Storage configuration (supports both S3 and MinIO)
+ BUCKET_NAME: ${BUCKET_NAME:-default-storage}
+ MINIO_ENDPOINT: ${MINIO_ENDPOINT:-http://minio:9000}
+ STORAGE_ACCESS_KEY: ${STORAGE_ACCESS_KEY}
+ STORAGE_SECRET_KEY: ${STORAGE_SECRET_KEY} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ports: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "3000:3000" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
depends_on: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- mongo | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- minio | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
restart: unless-stopped | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
links: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "mongo:mongo" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "yorkie:yorkie" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "minio:minio" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
yorkie: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
image: "yorkieteam/yorkie:0.5.0" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -70,3 +77,30 @@ services: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interval: 5s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timeout: 2s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
retries: 20 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# You can remove the following content if you're using S3 or not using Minio. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
minio: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
image: minio/minio | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ports: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "9000:9000" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- "9001:9001" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- minio_data:/data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
environment: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MINIO_ROOT_USER: "minioadmin" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MINIO_ROOT_PASSWORD: "minioadmin" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
entrypoint: /bin/sh -c " | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/usr/bin/docker-entrypoint.sh server --console-address ':9001' --address ':9000' /data & | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sleep 1 && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mc alias set myminio http://localhost:9000 minioadmin minioadmin && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if ! mc ls myminio/default-storage; then mc mb myminio/default-storage; fi && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
wait" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command: server --console-address ":9001" --address ":9000" /data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
healthcheck: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interval: 30s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timeout: 20s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
retries: 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+83
to
+103
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance MinIO service security and configuration. Several improvements can be made to the MinIO service configuration:
Apply these changes: minio:
image: minio/minio
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
environment:
- MINIO_ROOT_USER: "minioadmin"
- MINIO_ROOT_PASSWORD: "minioadmin"
+ MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
+ MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
entrypoint: /bin/sh -c "
/usr/bin/docker-entrypoint.sh server --console-address ':9001' --address ':9000' /data &
- sleep 1 &&
+ sleep 3 &&
mc alias set myminio http://localhost:9000 minioadmin minioadmin &&
if ! mc ls myminio/default-storage; then mc mb myminio/default-storage; fi &&
wait"
command: server --console-address ":9001" --address ":9000" /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
+ interval: 10s
timeout: 20s
retries: 3 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
volumes: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
minio_data: |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import { S3Client, S3ClientConfig } from "@aws-sdk/client-s3"; | ||
import { Module } from "@nestjs/common"; | ||
import { ConfigService } from "@nestjs/config"; | ||
|
||
const s3ClientFactory = { | ||
provide: "STORAGE_CLIENT", | ||
useFactory: (configService: ConfigService): S3Client | null => { | ||
const fileUpload = configService.get<boolean | "s3" | "minio">("FILE_UPLOAD"); | ||
if (!fileUpload) { | ||
return null; | ||
} | ||
const region = configService.get<string>("AWS_REGION"); | ||
const endpoint = configService.get<string>("MINIO_ENDPOINT"); | ||
const accessKeyId = configService.get<string>("STORAGE_ACCESS_KEY"); | ||
const secretAccessKey = configService.get<string>("STORAGE_SECRET_KEY"); | ||
|
||
const config: S3ClientConfig = { | ||
region, | ||
...(fileUpload === "minio" && { | ||
endpoint, | ||
forcePathStyle: true, | ||
credentials: { | ||
accessKeyId, | ||
secretAccessKey, | ||
}, | ||
}), | ||
}; | ||
|
||
return new S3Client(config); | ||
}, | ||
inject: [ConfigService], | ||
}; | ||
|
||
@Module({ | ||
providers: [s3ClientFactory], | ||
exports: [s3ClientFactory], | ||
}) | ||
export class StorageModule {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add explicit storage type configuration
The configuration doesn't provide a clear way to select between S3 and MinIO storage backends. This could lead to confusion about which storage system is being used.
Add a STORAGE_TYPE variable to explicitly control the storage backend:
📝 Committable suggestion