How to setup custom domain for Linode object storage


3 min read

Object storage, also known as object-based storage, is a modern data storage architecture designed for handling large volumes of unstructured data efficiently.

Unlike traditional storage systems, object storage organizes data into individual objects, each with its own metadata and unique identifier for easy retrieval.

With its scalability and cost-effectiveness, object storage has become increasingly popular for storing diverse types of data, such as emails, media files, web pages, and sensor data. It is commonly used for creating data archives, managing backups, and storing static content due to its efficient and affordable nature.

Accessing Object Storage with Custom Domains

Most cloud object storage service providers offer both shared and custom domain names for accessing uploaded files. For example, Linode provides secure (HTTPS) URLs within the shared domain "" by default. Alternatively, users can opt for a custom subdomain of their object storage, such as "", to access their stored files.

Below, we present a guide on setting up a custom domain on Linode Object Storage, using and the ap-south-1 cluster as examples.

Step 1: Creating a Bucket

Create a bucket labelled and set the Access Control List (ACL) to Private.

Step 2: Configuring DNS Settings

Navigate to the Domains DNS settings and create a CNAME record.

Hostname: [subdomain]
Alias To: [bucket-label].[cluster-id]

For example:

Hostname: assets 
Alias To:

Step 3: Setting up Let's Encrypt Certificate

Follow the instructions outlined in dcoles/acme-linode-objectstorage to set up a Let's Encrypt certificate for

Step 4: Prerequisites

Ensure that Python 3.8+ is installed, along with the Cryptography and Requests libraries.

pip install cryptography requests

Step 5: Installing the Package

Use pip to install the package:

pip install --user git+

Step 6: Generating Let's Encrypt Account Key

Before proceeding, navigate to the desired directory, such as the user's home directory with cd ~, or any preferred location for storing the .pem file.

Then, generate the Let's Encrypt account key using the command:

openssl genrsa 4096 > account_key.pem

Step 7: Create Linode API Personal Access Token

Create a Linode API Personal Access Token with Read/Write permission to Object Storage.

Step 8: Provision a certificate for this bucket:

Execute the following code, make sure to replace Your Personal Access Token with your actual Linode Personal Access Token, with your desired domain name, and ap-south-1 with your Linode Object Storage cluster region before executing the following command.

export LINODE_TOKEN=Your Personal Access Token
python3 -m acme_linode_objectstorage -k account_key.pem -C ap-south-1 --agree-to-terms-of-service

# Output:
# INFO:root:Generating 2048-bit RSA private key
# INFO:root:Creating CSR for
# INFO:root:Registering account
# INFO:root:Creating new order for
# INFO:root:Performing authorizations
# INFO:root:Finalizing order
# INFO:root:Updating certs

Step 9: Setting up Automatic SSL Renewal

Set up a cron job to run the renewal script periodically.

Open the crontab editor by running the following command:

crontab -e

Add a new line to the crontab file to schedule the SSL renewal script to run. For example, to run the renewal script at midnight on the 1st day of every second month.

0 0 1 */2 * python3 -m acme_linode_objectstorage -k /path/to/account_key.pem -C ap-south-1

Save and exit the crontab editor. The cron job is now set up to automatically renew your SSL certificate at the specified intervals.


Configure a Custom Domain (with a TLS/SSL Certificate) | Linode Docs
dcoles/acme-linode-objectstorage: ACME ("Let's Encrypt") client for Linode Object Storage (

Did you find this article valuable?

Support Chaiwei by becoming a sponsor. Any amount is appreciated!