Replicating to DigitalOcean Spaces - Litestream (2022)

Replicating to DigitalOcean Spaces - Litestream (1)

  1. Digitalocean spaces configuration
  2. Добавление кастомного домена для DigitalOcean Space
  3. Как создать Space хранилище в DigitalOcean
  4. A detailed look at the Source field
  5. Following redirects to Spaces objects and caching Spaces responses
  6. Creating a Space
  7. Вывод
  8. Minio
  9. Configuration:
  10. Object and File Size Limits
  11. Rate Limits

Now DigitalOcean spaces configuration will be contained in two files

Добавление кастомного домена для DigitalOcean Space

Click generate new key

Replicating to DigitalOcean Spaces - Litestream (2)

Spaces is an S3-compatible object storage service that lets you store and serve large amounts of data. Each Space is a bucket for you to store and serve files. The free, built-in Spaces CDN minimizes page load times, improves performance, and reduces bandwidth and infrastructure costs.

‘https://%s/%s/’ % (AWS_S3_ENDPOINT_URL, ‘mediafiles’)

Укажем настройки публичного доступа к мета-информации объектов. В этом пункте указывается, может ли кто-то, кроме людей, имеющих ключи авторизации, просматривать информацию об именах, размере, и прочих данных файлов, опубликованных в этом хранилище.


This is used to set parameters on all objects, in our example we have
‘CacheControl’: ‘max-age=86400’

Follow the instructions for creating a new service.

Minio is an open source object storage server that provides an interface for S3 compatible block storages. If you have never used minio, you can read this quick start guide. Any S3 compatible object storage is supported by Athens through the minio interface. Below, you can find different configuration options we provide for Minio. Example configuration for Digital Ocean and Alibaba OSS block storages are provided below.

Как создать Space хранилище в DigitalOcean

After naming your key and clicking the check mark you will see the following page

Replicating to DigitalOcean Spaces - Litestream (3)

The base rate of a Spaces subscription is $5.00 per month and gives you the ability to create multiple Spaces.


Регистрация не закончилась, и нам нужно указать настройки для нового хранилища.

This is your Amazon Web Services storage bucket name , In our example our bucket name is ‘our-project-space’, you can set this name in DigitalOcean.

(Video) Hands-on Introduction to Litestream | Rawkode Live

Here we are simply setting how long in seconds content stays in the cache

By default, we create DNS mapping called . In the example above, it would be . Create a DNS alias for the domain name you specified (e.g., CNAME to ).

For Athens to communicate with DigitalOcean Spaces, we are using Minio driver because DO Spaces tries to be fully compatible with it. Also configuration for this storage looks almost the same in our proxy as for Minio.

A detailed look at the Source field

You’ll need to create a key to authenticate Litestream to your account so it can access the space. In the Spaces UI, click the “Manage Keys” button. This will bring up the Applications & API screen.

Replicating to DigitalOcean Spaces - Litestream (4)

The first operation that we are going to demonstrate is that of uploading a files or files to our Space. The command to upload a file is very simple:

Введите имя для идентификации ключа доступа. После сохранения вам будет представлен ключ и связанный с ним секрет.

DigitalOcean Spaces offers Amazon S3 compatible object storage for a low cost and with a built-in CDN. Especially if you use the DigitalOcean services, Spaces offers a great way to store backup files (when used as a private repository) or even to host a static site using the CDN capabilities.

Наконец, мы выберем уникальное имя, lc-articles в этом случае и стоит ли размещать его в проекте. Далее мы нажмем на Создать пространство кнопку, чтобы подготовить наше пространство.

Our file will have the following settings

Following redirects to Spaces objects and caching Spaces responses

Scroll down to the Spaces access keys section and click the “Generate New Key” button. You’ll need to provide a name for key and then hit Enter. You’ll be presented with the access key id and secret access key. You will need to copy those for use later.

Replicating to DigitalOcean Spaces - Litestream (5)

We can verify that this works by simply running the command s3cmd ls . If we see the output of our newly created Space (bucket in S3 parlance), then we know that the connection is working.

При нажатии на «Настройки» отображаются все конфигурации, которые мы можем изменить. Здесь очень полезны несколько дополнительных функций. В частности, опция Purge Cache и конфигурации CORS.

Updated Nov 12, 2020, 2:00 am EDT | 4 min read

После того, как вы вошли в DigitalOcean и выбрали создание нового пространства, вам будут представлены варианты предоставления вашего пространства. Вам нужно будет определить следующее:

The above code will make sure that all static files and media files will be copied to a folder called staticfiles and mediafiles respectively when python collectstatic command is run, the folders will be created automatically in our bucket.

Creating a Space

Once you have signed into DigitalOcean and chosen to create a new Space, you will be presented with the options to provision your Space. You will need to determine the following:

(Video) Blazor WASM Litestream Apps - the ultimate performance & value combo

Replicating to DigitalOcean Spaces - Litestream (6)

Spaces have the following request rate limits:

You can create up to 100 Spaces per account. If you need to raise this limit, contact support.

All of them can be configured using config.toml file. You need to set a valid driver in StorageType value or you can set it in environment variable ATHENS_STORAGE_TYPE on your server. Also for most of the drivers you need to provide additional configuration data which will be described below.


I named mine our-project-space , I chose same name for my space and bucket name.

Мы можем убедиться, что это работает, просто выполнив команду s3cmd ls , Если мы видим результат работы нашего вновь созданного пространства (bucket на языке S3), то мы знаем, что соединение работает.

Только закончилась предыдущая акция у FriendHosting, как практически тут же началась новая в честь их дня рождения. И продлится аж до конца мая!

Скидка 50% на VDS и хостинг по промокоду: 13year

Оплата любыми картами, неплохой выбор гео серваков - короче, регайтесь тут, гайз, рекомендую данный хостинг

The next step now is getting the values we need from DigitalOcean , we will use those in our and complete our setup


In this article, we are going to explore how to get started with DigitalOcean Spaces and some common operations that would be used.

Replicating to DigitalOcean Spaces - Litestream (7)

SSL wildcard certificates will not match Spaces if the Space name has a period, . , in it. If you need browser-based access to a Space, we recommend against using periods in the Space name. Spaces supports browser and API access with path-style requests and API access with vhost-style requests.

You can control how long your CDN content is cached using the TTL settings, either for all the content in your Space or for individual objects. You can similarly choose to purge the cache for the entire Space or individual objects at any time. Each request with a unique URL, including the query string, is treated as a unique asset and has its own cache.

Litestream is built to handle many types of failures so these requests will be retried on the next sync attempt which is 1 second later by default. While it’s always troublesome to see errors, these do not affect the integrity of your backups.

You will see how we will create our bucket in DigitalOcean later, think of a bucket as our parent folder in DigitalOcean that will contain staticfiles and mediafiles.

(Video) GopherCon 2021: Ben Johnson - Building Production Applications Using Go & SQLite

The folders mediafiles and staticfiles will be created automatically inside this bucket just as we declared in STATICFILES_STORAGE and DEFAULT_FILE_STORAGE

Также разумно использовать опцию тестового подключения, чтобы убедиться, что настройки верны, прежде чем сохранять файл конфигурации.



Spaces subscriptions include 1,024 GiB of outbound data transfer (from Spaces to the internet), which is shared between all Spaces. Additional outbound transfer is Be sure to read our instructions about mixing and matching Fastly VCL with custom VCL. It’s important to include the entire VCL boilerplate if you do not intend to override the Fastly default settings..01 per GiB. Outbound data transfer is free in the following cases:

Replicating to DigitalOcean Spaces - Litestream (8)

После чего, создадим хранилище, нажав на кнопку Create a Space.

  • Files , где вы можете управлять файлами хранилища
  • и вкладка Settings , в которой вы можете переопределить текущие настройки хранилища.

К 2021 году DigitalOcean имеет восемь центров обработки данных, расположенных по всему миру, в том числе:

You will land on a page that looks like this

It tells us the following:


Inbound bandwidth to Spaces never counts against your Spaces transfer allowance.

Replicating to DigitalOcean Spaces - Litestream (9)

To configure Fastly to follow redirects to Spaces objects, insert the following VCL in your custom VCL:

И последнее, укажем уникальное имя для хранилища (по этому имени будет создан ещё один глобальный поддомен, для нашего хранилища)

На основании чего, можем увидеть, что поддомен работает, загрузка файлов тоже, и они доступны по публичной ссылке

По сравнению с Amazon и Google Cloud количество дата-центров DigitalOcean невелико. Однако их присутствие находится в самых важных районах мира. Что еще более важно, в будущем он будет расширяться.

Chose your datacenter I chose New York

Object and File Size Limits

This is your Amazon Web Services secret access key, we will also learn how to get this value from DigitalOcean

Replicating to DigitalOcean Spaces - Litestream (10)

(Video) SQLite & Litestream - Save 10x on hosting .NET Web Apps with this ultimate value combo

Clone or download it, go to the file

After creating your DigitalOcean account, log in and click on the green button labeled create and then click on space

We will use these two values to connect to the DigitalOcean Space that we created.

Once you added these VCL snippets to your custom VCL, upload the VCL file and then activate the new version of your service to apply the changes.

‘https://%s/%s/’ % (AWS_S3_ENDPOINT_URL, ‘staticfiles’)

By default, s3cmd stores its configuration file, .s3cfg , in the home directory of the user that ran the configuration command. .s3cfg is a plain text file of key/value pairs which can be edited directly once it has been created.

After we generated our access keys, we were given two keys , a shorter one with few characters and a longer one .

Rate Limits

file_overwrite = False simply means do not overwrite files with same name

Replicating to DigitalOcean Spaces - Litestream (11)

I have already prepared a Django app for you to test this , you can find it here :

This is the same as STATICFILES_STORAGE setting above but now we will set it to point to our MediaStorage class in our file

Make sure to copy the Secret value out, as once this is hidden, by navigating away from the page or performing another operation you will not be able to get back to this secret value.

Be sure to set the Main_Origin and spaces_backend to the actual name of your backends in the service to which you’re applying these redirects. You can find the exact names by reviewing your VCL. Simply click on the VCL button at the top of the page while viewing the service.

This points to the URL where our static files will be located in our DigitalOcean bucket , the value you use here should be the same as the one declared in .

To use s3cmd with DigitalOcean Spaces, you need:

The shorter one will be our AWS_ACCESS_KEY_ID

Replicating to DigitalOcean Spaces - Litestream (12)


Do Spaces rate limit? ›

Spaces have the following request rate limits: 750 requests (any operation) per IP address per second to all Spaces on an account. 240 total operations per second to any individual Space. 150 combined PUT , POST , COPY , DELETE , and LIST operations per second to any individual Space.

What are DigitalOcean spaces used for? ›

DigitalOcean Spaces allow you to store and serve large amounts of data. Each Space you create within an account has its own URL and can be used as a logical unit for segmenting content.

Are digital ocean spaces free? ›

Each Space is a bucket for you to store and serve files. The free, built-in Spaces CDN minimizes page load times, improves performance, and reduces bandwidth and infrastructure costs. The base rate of a Spaces subscription is $5.00 per month and gives you the ability to create multiple Spaces.

What is a DigitalOcean space? ›

DigitalOcean Spaces provide S3-compatible object storage which lets you store and serve large amounts of data. You can create them in a few seconds and use them immediately with no configuration. Data transfer is automatically secured with HTTPS, and the available storage capacity scales seamlessly.

How do I fix the API rate limit exceeded? ›

To fix this error, try any of the following:
  1. Raise the per-user quota in the Google Cloud project. For more information, request a quota increase.
  2. Batch requests to make fewer API calls.
  3. Use exponential backoff to retry the request.

Do spaces backup? ›

We make backups every 6 hours, and each backup contains all your data (images, attachments, git repositories, etc). The only option for restoring from a backup now is to ask the Space support team.

How do I connect to digital ocean spaces? ›

How to Connect to DigitalOcean Spaces
  1. Choose Edit > Settings > Transfers > S3 Providers.
  2. In the Providers list click Add and enter DigitalOcean.
  3. In the Regions list click Add and enter:
  4. Do the same for the following regions:
  5. In Catch All enter: (note it starts with a dot)
10 Jan 2021

What CDN does digital ocean use? ›

Many DigitalOcean customers use a CDN along with their DigitalOcean Droplets for an optimal website setup. DigitalOcean also includes a CDN with DigitalOcean Spaces, our object storage solution, and App Platform, our Platform as a Service solution.

Does Digital Ocean have S3? ›

Spaces is an S3-compatible object storage service that lets you store and serve large amounts of data. Each Space is a bucket for you to store and serve files.

Is Digitalocean spaces encrypted? ›

Files you store in Spaces are encrypted on physical disks with 256-bit AES-XTS full-disk encryption. In addition, you can encrypt files with your own keys before uploading them to Spaces.

What is S3 compatible object storage? ›

S3-Compatible Object Storage, or S3 is a storage solution that uses the S3 API. Data management and access to data is through an S3 compliant interface.

What is R2 Cloudflare? ›

Cloudflare R2 Storage allows developers to store large amounts of unstructured data without the costly egress bandwidth fees associated with typical cloud storage services.

How do I get my digital ocean API token? ›

To generate a personal access token, log in to the DigitalOcean Control Panel. Click the API link in the main navigation, which takes you to the Applications & API page on the Tokens/Keys tab. In the Personal access tokens section, click the Generate New Token button.

What is an object storage service? ›

Object storage, also known as object-based storage, is a computer data storage architecture designed to handle large amounts of unstructured data. Unlike other architectures, it designates data as distinct units, bundled with metadata and a unique identifier that can be used to locate and access each data unit.

How many API calls is too many? ›

But in most cases our servers will reject API requests from a particular application if the request rate exceeds 30 API requests per minute. In this case the client will get an HTTP error with status code 429 “too many requests”.

How long does a rate limit ban last? ›

A rate limit means there were too many attempts in a small period of time. You'll need to wait roughly 15 minutes before attempting it again.

How do I download all digital ocean space files? ›

Download Files

To download a file from a Space to your local computer, open the More menu of the file. Select Download to start a download of the item to your local machine. Depending on your browser's preferences, the download may start automatically or you may be prompted to save the file first.

Is CDN only for static content? ›

Traditional CDNs can only cache static content, which is fairly straightforward because it doesn't change based on user input. Some examples of static content include things like images, video, CSS, and Javascript.

Can CDN be used for static content caching? ›

A Content Delivery Network (CDN) is a critical component of nearly any modern web application. It used to be that CDN merely improved the delivery of content by replicating commonly requested files (static content) across a globally distributed set of caching servers.

How can CDN be used for all static assets? ›

Once you roll out a CDN and offload these static assets onto CDN servers, either by “pushing” them out manually or having the CDN “pull” the assets automatically (both mechanisms are covered in the next section), you then instruct your web server to rewrite links to static content such that these links now point to ...

Do spaces upload file? ›

By default do-spaces-action will upload all files to the root of your Space.

How do you create an encrypted file system? ›

How to encrypt a file
  1. Right-click (or press and hold) a file or folder and select Properties.
  2. Select the Advanced button and select the Encrypt contents to secure data check box.
  3. Select OK to close the Advanced Attributes window, select Apply, and then select OK.

Can S3 be on premise? ›

Amazon S3 on Outposts delivers object storage to your on-premises AWS Outposts environment to meet local data processing and data residency needs. Using the S3 APIs and features, S3 on Outposts makes it easy to store, secure, tag, retrieve, report on, and control access to the data on your Outpost.

What does it mean to be S3 compatible? ›

The term “S3 compatible” means that the storage employs the S3 API as its “language.” Applications that speak the S3 API should be able to plug and play with S3 compatible storage.

Why should I use MinIO? ›

Minio is an open source distributed object storage server written in Go, designed for Private Cloud infrastructure providing S3 storage functionality. It is the best server which is suited for storing unstructured data such as photos, videos, log files, backups, and container.

Is Cloudflare access free? ›

Free Options

Secure access to Internet, self-hosted and SaaS applications for up to 50 users for free. Deploy serverless code, up to 100k requests per day, across all Cloudflare data centers.

What is egress fee? ›

What Are Egress Charges? Most leading cloud providers allow their customers to input data into the cloud for free. However, when that data is retrieved from the cloud, these providers will then charge large fees; this is what's known as a data egress.

What is Cloudflare used for? ›

Fundamentally, Cloudflare is a large network of servers that can improve the security, performance, and reliability of anything connected to the Internet. Cloudflare does this by serving as a reverse proxy Open external link for your web traffic.

Can Load Balancer Do rate limiting? ›

When rate limiting is performed by the reverse proxy, and when there is a load balancer or other network device terminating traffic and then forwarding onto the reverse proxy, the IP address flag ip: true is not useful. The IP address is effectively static (as it is the address of the network terminating device).

How long does discord rate limit last? ›

Currently, this limit is 10,000 per 10 minutes.

Where do you implement rate limiting? ›

Often rate-limiting is applied at a reverse proxy, API gateway, or load balancer before the request reaches the API, so that it can be applied to all requests arriving at a cluster of servers. By handling this at a proxy server, you also avoid excess load being generated on your application servers.

What is the meaning of rate limited? ›

Rate limiting is a strategy for limiting network traffic. It puts a cap on how often someone can repeat an action within a certain timeframe – for instance, trying to log in to an account. Rate limiting can help stop certain kinds of malicious bot activity. It can also reduce strain on web servers.

How do you deal with rate limiting? ›

A better way: randomization

While the reset option is one way to deal with rate limiting, you may want more granular control over your rate limit handling. For example, you might have a specific retry timeframe that you want to follow and not wait for the minute window to pass for your entire rate limit to be reset.

How do I test a rate limiting API? ›

Setting up an API-Level Global Rate Limit
  1. Navigate to the API you want to set the global rate limit on.
  2. In the Core Settings tab, navigate to the Rate Limiting and Quotas section.
  3. Ensure that Disable rate limiting is unchecked.
  4. Enter in your request per second threshold.
  5. Save/Update your changes.
3 Feb 2021

Can Nginx Do rate limiting? ›

You can use the NGINX Controller to configure request rate limiting for each of your published API on your deployed NGINX instance(s). The following table describes the settings available for configuring request rate limiting on the NGINX Controller. The request variable used to apply the rate limit.

How do I bypass the limit on Discord? ›

Restart your device, router and modem to avoid the 'You are being rate limited' ban
  1. Log out of Discord and turn off your device.
  2. Press and hold the power button on your router for about 30 seconds. ...
  3. Now, plug the router back in and restart it by pressing the power button. ...
  4. Next, open Discord and log in to your account.

Are Discord API bans permanent? ›

Server Bans

The ban will be permanent until a moderator unbans the user, bots can however be used to temporarily ban a user. There are 2 different types of bans: Kick The user's account is removed from the server but they can join again if they want to.

How do I get rid of Discord rate limit? ›

How to Fix “You Are Being Rate Limited” on Discord
  1. Wait It Out. The best fix for the “You Are Being Rate Limited” error message is to wait. ...
  2. Use a Mobile Hotspot. ...
  3. Restart Your Device And Router. ...
  4. Access Discord Using Incognito Mode. ...
  5. Use a VPN. ...
  6. Ask For Help.
15 Mar 2022

What is a good rate limiting algorithm? ›

As you can tell, the sliding window algorithm is the ideal candidate to ensure that the rate limit is strictly adhered to at any given point in time. Since we are storing all the requests in the past 1 minute and looping through the array every time a request reaches, the algorithm consumes much more memory and CPU.

What is the difference between rate limiting and throttling? ›

Rate Limiting and Throttling policies are designed to limit API access, but have different intentions: Rate limiting protects an API by applying a hard limit on its access. Throttling shapes API access by smoothing spikes in traffic.

How many API requests is too many? ›

These plans can vary depending on a particular API or a user's current service plan. But in most cases our servers will reject API requests from a particular application if the request rate exceeds 30 API requests per minute. In this case the client will get an HTTP error with status code 429 “too many requests”.

What is rate limiting example? ›

Rate limiting is used to control the amount of incoming and outgoing traffic to or from a network. For example, let's say you are using a particular service's API that is configured to allow 100 requests/minute. If the number of requests you make exceeds that limit, then an error will be triggered.

Why is rate limiting important? ›

Rate limiting helps prevent a user from exhausting the system's resources. Without rate limiting, it's easier for a malicious party to overwhelm the system. This is done when the system is flooded with requests for information, thereby consuming memory, storage, and network capacity.

What is API limit exceeded? ›

A rate limit is the number of API calls an app or user can make within a given time period. If this limit is exceeded or if CPU or total time limits are exceeded, the app or user may be throttled. API requests made by a throttled user or app will fail. All API requests are subject to rate limits.


1. David Crawshaw SQLite and Go
(Go Northwest)
2. Hacking Temporal to run on SQLite! [Intro to Temporalite, Jacob LeGrone, Datadog]
3. Build Multi-Platform Applications for Mobile, Desktop and Web in .NET with the Uno Platform
(SSW TV | Videos for developers, by developers)

Top Articles

You might also like

Latest Posts

Article information

Author: Rueben Jacobs

Last Updated: 11/16/2022

Views: 5849

Rating: 4.7 / 5 (77 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Rueben Jacobs

Birthday: 1999-03-14

Address: 951 Caterina Walk, Schambergerside, CA 67667-0896

Phone: +6881806848632

Job: Internal Education Planner

Hobby: Candle making, Cabaret, Poi, Gambling, Rock climbing, Wood carving, Computer programming

Introduction: My name is Rueben Jacobs, I am a cooperative, beautiful, kind, comfortable, glamorous, open, magnificent person who loves writing and wants to share my knowledge and understanding with you.