MediaLit is a Node.js based app to store, convert and optimise the media files on any AWS S3 compatible storage.
Before you start uploading to your bucket, make sure you have set up the correct access on your S3 bucket.
If you need to use a Cloudfront CDN, you can enable it in the app, by setting up the following values in your .env file.
USE_CLOUDFRONT=true
CLOUDFRONT_ENDPOINT=CLOUDFRONT_DISTRIBUTION_NAME
CLOUDFRONT_PRIVATE_KEY="PRIVATE_KEY"
CLOUDFRONT_KEY_PAIR_ID=KEY_PAIR_ID
We assume that since you are using Cloudfront, you have locked down your bucket from public access. Therefore, all the files uploaded to the bucket will have ACL set to private
i.e. they will require signed URLs in order to access them.
Use the following commands to generate a key pair to be used above.
openssl genrsa -out private_key.pem 2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
This app is based on Express which cannot work reliably when it is behind a proxy. For example, it cannot detect if it behind a proxy.
Hence, we need to enable it on our own. To do that, set the following environment variable.
ENABLE_TRUST_PROXY=true
In order to interact with the service, you need to have a user. You can interact with the service using the user's API key.
To create one, set up the following variable in your .env
file:
When the app starts for the very first time, a user with the provided email will be generated, and their subscription will be renewed for 10 years.
Additionally, an API key will be generated for the user and printed in the application logs. The log containing the API key will look something like the following:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ API key: testcktI8Sa71QUgYtest @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CAUTION: Keep the generated API key confidential, as anyone could use it to store files on your instance.
In order to interact with the service, you have to use the REST API. Our official Postman collection is available here.
We build on Linux based systems. Hence the instructions are for those system only. If you are on Windows, we recommend using WSL.
sudo apt install ffmpeg webp
pnpm install
pnpm --filter=@medialit/images build
pnpm --filter=@medialit/thumbnail build
pnpm --filter=@medialit/api dev
pnpm exec changeset