Magnesium is a pluggable image processing and hosting microservice with many quality-of-life features.
It was built in Rust using Actix-Web & MongoDB.
- Bucket support.
- Image resizing.
- Pictures served as 'webp' and/or only in original format.
- Images saved locally.
You need to have Rust/Cargo installed before obviously.
- Download or clone the magnesium repository.
- Fill out the config.toml file.
Here is a small list of all the settings in config.toml & their functions:
Setting's Name | Standard Value | Explanation |
---|---|---|
parent_directory | "test_setup" | It is the name of the directory where all the images & buckets are stored. It's located at './' of the executable. |
buckets | ["test_bucket_1", "test_bucket_2"] | These are the names of the buckets where images can be uploaded, stored & served. They are directories stored in the parent directory |
serve_as_webp | true | This makes every image that is served in a link without an explicit file ending a webp image. |
allow_resizing | true | This allows resizing of images when being uploaded. |
allow_admin | true | This allows the admin API endpoints that allow to add & remove API keys. |
db_name | "magnesium_db" | This is the name of the MongoDB database that will be created/written to upon launch. |
collection_name | "keys" | This is the name of the MongoDB collection where the API keys will be stored. |
(Keep in mind that the "test_setup" directory and its content are only there to give you an example of how the working Magnesium instance could look.)
- Fill out all environment variables that are listed in the '.env.example' file.
- You can either add them directly into the environment or just remove the .example ending from the file.
- Run the
cargo build
command in the terminal. (Go to the directory first.) - Use the outputted executable or run by using the
cargo run
command.
/upload/{bucket}
- The route to upload to a specific bucket. (API_KEY
header needed.)/{bucket}/{filename}
- The route to serve a file from a specific bucket. (No API key required.)
Admin (disableable):
/keys/add
- The route to add an API key. (ADMIN_KEY
header needed.)/keys/remove
- The route to add an API key. (ADMIN_KEY
header needed.)
Testing:
If you have kept the test settings of parent_directory
and buckets
and you have kept the test_setup directory and its content you can test out Magnesium by going to the following routes:
/test_bucket_1/test1
- The test image is served as a webp file./test_bucket_1/test1.png
- The test image is served as a png file./upload/test_bucket_1
- Upload an image and play around with Magnesium for yourself. (API_KEY
header needed.)
(Alternatively use test_bucket_2
for a different bucket.
If resizing is allowed you can optionally add a width
and height
header to the HTTP request to resize the image.
Feel free to create issues or pull requests if you want.