Self-hosted image storage, management, indexing and searching utility. Built with ASP.NET Core and React on top of Elasticsearch and Minio.
This project is currently in a
work-in-progerss
state, so there is a lot of unfinished stuff. ;)
For seaching, type keywords into the search
field on the main view. This will fuzzy-match the single words primarily on the tags
of the images and secondary on other metadata like title
and description
.
Each word is now and-combined. This means, the following search term will look for images including the tags wallpaper
and nature
.
wallpaper nature
You can also explicitly exclude matches, which are or-combined.
wallpaper nature -flowers -animals
This will look for images tagges with wallpaper
and nature
and which are not tagged with flowers
or animals
.
As mentioned above, the search is fuzzy, which makes it less sensible for typos and tag inconsistency. So the following search terms will all match images tagged with wallpaper
and nature
.
wallpapers nartue
wall_paper nature
walpaper naturw
...
voidseeker is split into two main components: a back end and a front end server.
The back end, created with ASP.NET Core, exposes a REST API which is accessed by the front end client to get information about images and users and commands to manage them. Therefore, the backend connects to a Elasticsearch database instance, which can also be hostet on a different machine. This database holds the information about users and images and provides a fast endpoints for an efficient and complex search over image meta data. Also, the backend acts like a gateway to Minio, which is a self-hosted object storage. The minio client also allows to connect to more common object storages like Amazon S3 or Google Cloud Storage.
The front end is a React SPA (Single Page Application), which connects to the REST API of the back end. The compiled front end files are served using Nginx and are not served directly by the back end to prevent putting the load of providing static front end files to the back end.
You can use the provided docker-compose.yml to set all all nessecary parts to rune voidsearch on one single server. This contains the following instances:
- nginx
Reverse proxy which provides one single endpoint for the backend and frontend. - elasticsearch
Elasticsearch database instance sotring data of users, images and settings. - minio
Minio object storage instance for storing images and thumbnails. - voidsearch-backend
voidsearch backend providing the REST API. - voidsearch-frontend
voidsearch frontend static file host.
The following image tags are available over docker hub and automatically compiled by GitHub Actions:
Clone the repository using git.
$ git clone https://github.com/zekroTJA/voidseeker.git .
Use the .NET Core SDK to compile the RESTAPI project. <RID>
is the runtime identifier for the target platform you want to build the executable. Here you can find a list of valid RIDs.
$ dotnet publish RESTAPI -c Release -r <RID>
The executable and libraries are located at voidseeker/RESTAPI/bin/Release/netcoreapp3.1/win10-x64/publish/
.
To build the front end, you need to have Node.js and npm installed.
First of all, change directory to WebApp
.
$ cd WebApp
After that, install the required node dependencies.
$ npm install
Then, use the provided build
script to build the production assets.
$ npm run build
After that, compiled files are located at voidseeker/WebApp/build/
and can now be uploaded to a web server which serves the SPA files.
© 2020 Ringo Hoffmann (zekro Development)
Covered by the MIT Licence.