356 lines
7.4 KiB
Markdown
356 lines
7.4 KiB
Markdown
# Adastra Storage Appliance
|
|
|
|
A comprehensive storage appliance management system providing ZFS pool management, NFS/SMB shares, iSCSI targets, object storage, and monitoring capabilities with a modern web interface.
|
|
|
|
## Features
|
|
|
|
- **Storage Management**: ZFS pool and dataset management with snapshots
|
|
- **Network Shares**: NFS and SMB/CIFS share management
|
|
- **Block Storage**: iSCSI target and LUN management
|
|
- **Object Storage**: MinIO integration for S3-compatible storage
|
|
- **Authentication & RBAC**: User management with role-based access control
|
|
- **Monitoring**: Prometheus metrics and real-time monitoring dashboard
|
|
- **Audit Logging**: Comprehensive audit trail of all operations
|
|
- **Modern UI**: HTMX-based web interface with TailwindCSS
|
|
|
|
## Requirements
|
|
|
|
- Ubuntu 24.04 (or compatible Linux distribution)
|
|
- Go 1.21 or later
|
|
- ZFS utilities (`zfsutils-linux`)
|
|
- SMART monitoring tools (`smartmontools`)
|
|
- NFS server (`nfs-kernel-server`)
|
|
- Samba (`samba`)
|
|
- iSCSI target utilities (`targetcli-fb`)
|
|
- MinIO (included in installer)
|
|
|
|
## Installation
|
|
|
|
### Option 1: Using the Installation Script (Recommended)
|
|
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone <repository-url>
|
|
cd storage-appliance
|
|
```
|
|
|
|
2. Run the installation script as root:
|
|
```bash
|
|
sudo bash packaging/install.sh
|
|
```
|
|
|
|
The installer will:
|
|
- Install all system dependencies
|
|
- Build the application
|
|
- Create the service user
|
|
- Set up systemd service
|
|
- Configure directories and permissions
|
|
|
|
3. Start the service:
|
|
```bash
|
|
sudo systemctl start adastra-storage
|
|
sudo systemctl enable adastra-storage # Enable on boot
|
|
```
|
|
|
|
4. Check the status:
|
|
```bash
|
|
sudo systemctl status adastra-storage
|
|
```
|
|
|
|
5. View logs:
|
|
```bash
|
|
sudo journalctl -u adastra-storage -f
|
|
```
|
|
|
|
### Option 2: Building a Debian Package
|
|
|
|
1. Build the Debian package:
|
|
```bash
|
|
cd packaging
|
|
chmod +x build-deb.sh
|
|
sudo ./build-deb.sh
|
|
```
|
|
|
|
2. Install the package:
|
|
```bash
|
|
sudo dpkg -i ../adastra-storage_1.0.0_amd64.deb
|
|
sudo apt-get install -f # Install any missing dependencies
|
|
```
|
|
|
|
3. Start the service:
|
|
```bash
|
|
sudo systemctl start adastra-storage
|
|
sudo systemctl enable adastra-storage
|
|
```
|
|
|
|
### Option 3: Manual Installation
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
sudo apt-get update
|
|
sudo apt-get install -y golang-go zfsutils-linux smartmontools \
|
|
nfs-kernel-server samba targetcli-fb build-essential
|
|
```
|
|
|
|
2. Install MinIO:
|
|
```bash
|
|
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio
|
|
chmod +x /usr/local/bin/minio
|
|
```
|
|
|
|
3. Build the application:
|
|
```bash
|
|
go build -o appliance ./cmd/appliance
|
|
```
|
|
|
|
4. Create directories:
|
|
```bash
|
|
sudo mkdir -p /opt/adastra-storage/{bin,data,templates,migrations,logs}
|
|
```
|
|
|
|
5. Copy files:
|
|
```bash
|
|
sudo cp appliance /opt/adastra-storage/bin/adastra-storage
|
|
sudo cp -r internal/templates/* /opt/adastra-storage/templates/
|
|
sudo cp -r migrations/* /opt/adastra-storage/migrations/
|
|
```
|
|
|
|
6. Create service user:
|
|
```bash
|
|
sudo useradd -r -s /bin/false -d /opt/adastra-storage adastra
|
|
sudo chown -R adastra:adastra /opt/adastra-storage
|
|
```
|
|
|
|
7. Install systemd service:
|
|
```bash
|
|
sudo cp packaging/adastra-storage.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable adastra-storage
|
|
sudo systemctl start adastra-storage
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Installation Directory
|
|
|
|
The application is installed to `/opt/adastra-storage` with the following structure:
|
|
```
|
|
/opt/adastra-storage/
|
|
├── bin/
|
|
│ └── adastra-storage # Main binary
|
|
├── data/
|
|
│ └── appliance.db # SQLite database
|
|
├── templates/ # HTML templates
|
|
├── migrations/ # Database migrations
|
|
├── logs/ # Log files
|
|
└── uninstall.sh # Uninstaller script
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
The service uses the following environment variables (set in systemd service):
|
|
- `INSTALL_DIR`: Installation directory (default: `/opt/adastra-storage`)
|
|
- `DATA_DIR`: Data directory (default: `/opt/adastra-storage/data`)
|
|
|
|
### Service Configuration
|
|
|
|
The systemd service file is located at `/etc/systemd/system/adastra-storage.service`.
|
|
|
|
To modify the service:
|
|
```bash
|
|
sudo systemctl edit adastra-storage
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Accessing the Web Interface
|
|
|
|
After installation, access the web interface at:
|
|
```
|
|
http://localhost:8080
|
|
```
|
|
|
|
Default credentials:
|
|
- **Username**: `admin`
|
|
- **Password**: `admin`
|
|
|
|
⚠️ **IMPORTANT**: Change the default password immediately after first login!
|
|
|
|
### Service Management
|
|
|
|
Start the service:
|
|
```bash
|
|
sudo systemctl start adastra-storage
|
|
```
|
|
|
|
Stop the service:
|
|
```bash
|
|
sudo systemctl stop adastra-storage
|
|
```
|
|
|
|
Restart the service:
|
|
```bash
|
|
sudo systemctl restart adastra-storage
|
|
```
|
|
|
|
Check status:
|
|
```bash
|
|
sudo systemctl status adastra-storage
|
|
```
|
|
|
|
View logs:
|
|
```bash
|
|
sudo journalctl -u adastra-storage -f
|
|
```
|
|
|
|
### Prometheus Metrics
|
|
|
|
The application exposes Prometheus metrics at:
|
|
```
|
|
http://localhost:8080/metrics
|
|
```
|
|
|
|
### API Examples
|
|
|
|
Get pools (requires authentication):
|
|
```bash
|
|
curl -b cookies.txt http://127.0.0.1:8080/api/pools
|
|
```
|
|
|
|
Create a pool (requires admin permission):
|
|
```bash
|
|
curl -X POST -b cookies.txt -H "Content-Type: application/json" \
|
|
-d '{"name":"tank","vdevs":["/dev/sda"]}' \
|
|
http://127.0.0.1:8080/api/pools
|
|
```
|
|
|
|
## Development
|
|
|
|
### Quick Start
|
|
|
|
```bash
|
|
make run
|
|
```
|
|
|
|
### Build
|
|
|
|
```bash
|
|
make build
|
|
```
|
|
|
|
### Run Tests
|
|
|
|
```bash
|
|
make test
|
|
```
|
|
|
|
### Lint
|
|
|
|
```bash
|
|
make lint
|
|
```
|
|
|
|
## Uninstallation
|
|
|
|
### Using the Uninstaller Script
|
|
|
|
```bash
|
|
sudo /opt/adastra-storage/uninstall.sh
|
|
```
|
|
|
|
The uninstaller will:
|
|
- Stop and disable the service
|
|
- Remove application files (optionally preserve data)
|
|
- Optionally remove the service user
|
|
|
|
### Manual Uninstallation
|
|
|
|
1. Stop and disable the service:
|
|
```bash
|
|
sudo systemctl stop adastra-storage
|
|
sudo systemctl disable adastra-storage
|
|
```
|
|
|
|
2. Remove files:
|
|
```bash
|
|
sudo rm -rf /opt/adastra-storage
|
|
sudo rm /etc/systemd/system/adastra-storage.service
|
|
sudo systemctl daemon-reload
|
|
```
|
|
|
|
3. Remove service user (optional):
|
|
```bash
|
|
sudo userdel adastra
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Components
|
|
|
|
- **HTTP Server**: Chi router with middleware for auth, RBAC, CSRF
|
|
- **Database**: SQLite with migrations
|
|
- **Services**: Storage, Shares, iSCSI, Object Store
|
|
- **Infrastructure Adapters**: ZFS, NFS, Samba, iSCSI, MinIO
|
|
- **Job Runner**: Async job processing for long-running tasks
|
|
- **Monitoring**: Prometheus metrics and UI dashboard
|
|
- **Audit**: Comprehensive audit logging
|
|
|
|
### Security
|
|
|
|
- Session-based authentication with secure cookies
|
|
- CSRF protection compatible with HTMX
|
|
- Role-based access control (RBAC) with fine-grained permissions
|
|
- Password hashing using Argon2id
|
|
- Audit logging of all operations
|
|
|
|
## Troubleshooting
|
|
|
|
### Service Won't Start
|
|
|
|
1. Check service status:
|
|
```bash
|
|
sudo systemctl status adastra-storage
|
|
```
|
|
|
|
2. Check logs:
|
|
```bash
|
|
sudo journalctl -u adastra-storage -n 50
|
|
```
|
|
|
|
3. Verify permissions:
|
|
```bash
|
|
ls -la /opt/adastra-storage
|
|
```
|
|
|
|
4. Check if port 8080 is available:
|
|
```bash
|
|
sudo netstat -tlnp | grep 8080
|
|
```
|
|
|
|
### Database Issues
|
|
|
|
The database is located at `/opt/adastra-storage/data/appliance.db`. If you need to reset:
|
|
```bash
|
|
sudo systemctl stop adastra-storage
|
|
sudo rm /opt/adastra-storage/data/appliance.db
|
|
sudo systemctl start adastra-storage
|
|
```
|
|
|
|
⚠️ **Warning**: This will delete all data!
|
|
|
|
### Permission Issues
|
|
|
|
Ensure the service user has proper permissions:
|
|
```bash
|
|
sudo chown -R adastra:adastra /opt/adastra-storage
|
|
sudo usermod -aG disk adastra # For ZFS access
|
|
```
|
|
|
|
## License
|
|
|
|
[Specify your license here]
|
|
|
|
## Support
|
|
|
|
For issues and questions, please open an issue on the project repository.
|