#screenshot #chrome #chromedriver #redis

yanked website-screenshot

📸 website screenshots as a service

1.0.0 May 4, 2022
0.1.1 Apr 26, 2022
0.1.0 Apr 25, 2022

#5 in #screenshots

MIT/Apache and GPL-3.0-or-later

38KB
714 lines

website-screenshot

Rust: 1.62+ Continuous Delivery Continuous Integration

📸 website screenshots as a service

Features

Deployment

Prerequisites

Environment Variables

  • PORT - the port that the application will run (optional, defaults to 3000)
  • REDIS_URL - the address of your redis database (required)
  • FULLSCREEN_SCREENSHOT - if set, it will screenshot the whole website (optional)

Railway

Deploy on Railway

Changing Providers

To change the provider in railway:

  1. Open the repo that railway made for you.
  2. Open the Dockerfile
  3. Edit lines 39 and 44 with fleet build --release --no-default-features --features <your_provider>.
  4. Deploy your app again.

Pre-built Binaries

⚠️- You can't change the provider when using the pre-built binaries.

Linux

curl -fsSL https://raw.githubusercontent.com/devtomio/website-screenshot/main/install.sh

Other

See the Releases page of this repository and download the appropriate binary.

Docker

⚠️- You can't change the provider when using the docker image.

A dockerized version of this application is available here.

Cargo

Installing website-screenshot as a crate.

cargo install website-screenshot

Building from source

  1. Clone this repository. e.g. git clone https://github.com/devtomio/website-screenshot
  2. Build the binary cargo build --release

Authentication

Authentication will be enabled if the AUTH_TOKEN variable is set.

It will check if the Authorization header sent by the user is equal to the AUTH_TOKEN that you set.

Storage Providers

Fs (Filesystem) Provider

📝 - This is the default provider.

Build Command

cargo build --release

Cloudinary Provider

📝 - You must make an unsigned upload preset.

Environment Variables

  • CLOUDINARY_API_KEY - your api key (required)
  • CLOUDINARY_UPLOAD_PRESET - the name of your unsigned upload preset (required)
  • CLOUDINARY_CLOUD_NAME - the cloud name that you set during registration (required)

Build Command

cargo build --release --no-default-features --features cloudinary_provider

Amazon AWS S3 Provider

⚠️ - This is untested. If you encounter a bug please don't hesitate to open an issue.

Environment Variables

  • S3_BUCKET_NAME - the name of your s3 bucket (required)
  • S3_REGION - the region of your s3 bucket (required, only optional if using self-hosted s3)
  • S3_ACCESS_KEY - your access key (required)
  • S3_SECRET_KEY - your secret key (required)
  • S3_SECURITY_TOKEN - your security token (optional)
  • S3_SESSION_TOKEN - your session token (optional)

Self-hosted S3 Storage

To use a self-hosted S3 Storage, set the S3_ENDPOINT_URL environment variable to the endpoint url.

Build Command

cargo build --release --no-default-features --features s3_provider

Tixte Provider

Environment Variables

  • TIXTE_UPLOAD_KEY - your upload key, can be found on the integrations tab (required)
  • TIXTE_DOMAIN_CONFIG - whether to use random domains or a specific domain (required, can only be standard, or random)
  • TIXTE_CUSTOM_DOMAIN - the specific domain to use (only required when TIXTE_DOMAIN_CONFIG is set to standard)

Build Command

cargo build --release --no-default-features --features tixte_provider

Sled Provider

Environment Variables

  • SLED_PATH - the path to provide when opening the sled database (optional, defaults to .website-screenshot)

Build Command

cargo build --release --no-default-features --features sled_provider

Endpoints

GET /

Hello, world!

Example Response:

Hello, world!

POST /screenshot

Creates a screenshot.

JSON payload with the url key.

Example Payload:

{
  "url": "https://rust-lang.org" 
}

Example Response

{
  "slug": "abcdefghijk",
  "path": "/s/abcdefghijk",
  "metadata": {
    "url": "https://rust-lang.org"
  }
}

GET /s/:slug

Gets the screenshot that is corresponding to the slug.

Example URL

http://localhost:3000/s/abcdefghijk

Example Response

Rust Website

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Tomio

💻 📖 🚇 🚧

This project follows the all-contributors specification. Contributions of any kind welcome!

Dependencies

~35–50MB
~1M SLoC