- Go 54.9%
- HTML 31%
- CSS 12.5%
- Makefile 0.6%
- Shell 0.6%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| internal | ||
| k8s | ||
| packaging | ||
| web | ||
| .gitignore | ||
| .version | ||
| config.yaml.example | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| nfpm.yaml | ||
| README.md | ||
FS290
The Open Source S3 Bucket Manager**
Collaborative, secure, and fast S3 bucket management interface for your cloud infrastructure.
Naming Heritage
Following the naming convention established by ns116 (named after the BR-116 highway), FS290 takes its name from the BR-290 highway, the most important east-west arterial route in Rio Grande do Sul, Brazil, connecting the Atlantic coast and Porto Alegre to the western border.
Here, FS stands for File Storage (or File System), indicating its purpose as a high-performance gateway for managing S3-compatible cloud storage.
Features
- S3 & Compatible Storages: Native support for AWS S3, Min.io, VersityGW, Ceph, and any other S3-compatible API.
- Path-Style Addressing: Easily connects to local/private S3 instances using path-style URLs (
use_path_style: true), bypassing virtual-host DNS requirements. - Access Control & RBAC: Manage user permissions with distinct
adminandeditorroles. - Authentication Integrations: Supports local accounts, LDAP server authentication, and OpenID Connect (OIDC) OAuth2 providers.
- High-Performance Cache: Speeds up bucket listing and reduces API latency and transit costs by caching bucket metadata in a local PostgreSQL database.
- Integrated Audit Logs: Logs actions (uploads, downloads, deletions, folder creation, user management) with user attribution and IP tracking for compliance.
- Safe Directory Operations: Supports folder simulation (creating and recursively deleting virtual directories and their nested contents).
Project Structure
FS290 is designed as a single, static Go binary containing all backend logic, database migrations, and embedded frontend templates (utilizing TailwindCSS, Lucide Icons, and Vanilla CSS).
- Backend: Go (using Go AWS SDK v2,
pgxfor PostgreSQL, and standard libraries). - Frontend: Go templates (
html/template) with embedded static assets. - Database: PostgreSQL (handling sessions, audit logs, and bucket metadata caching).
Getting Started
1. Configuration
Create a config.yaml file in the root of the project. A template is available in config.yaml.example:
server:
port: 8080
host: "0.0.0.0"
database:
dsn: "postgres://postgres:postgres@localhost:5432/fs290?sslmode=disable"
aws:
access_key_id: "YOUR_ACCESS_KEY"
secret_access_key: "YOUR_SECRET_KEY"
region: "us-east-1"
endpoint: "http://localhost:9000" # Leave empty for official AWS S3
use_path_style: true # Set to true for Min.io or VersityGW
# Allowed buckets. If empty, lists all buckets in the S3 account.
buckets:
- name: "my-bucket-prod"
label: "Production"
- name: "my-bucket-staging"
label: "Staging"
max_upload_size: 104857600 # Maximum upload size in bytes (default: 100MB)
2. Compilation
Compile the static Go binary using the provided Makefile:
make build
This compiles a static executable fs290 in the root of the project.
3. Execution
Run the server with the configuration file path:
./fs290 --config config.yaml
The server will listen on the port specified (default http://localhost:8080). On first run, it will automatically prompt you to create the initial administrator credentials at /setup.
License
This project is licensed under the MIT License.