Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions macros/developer-tools/scaleway-configuration-file.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ The configuration file contains the following elements:
: The ID of the Scaleway Project to use by default

**default_zone**
: The [availability zone](console/account/reference-content/products-availability/) to use by default
: The [availability zone](/console/account/reference-content/products-availability/) to use by default

**default_region**
: The [region](console/account/reference-content/products-availability/) to use by default
: The [region](/console/account/reference-content/products-availability/) to use by default

**api_url**
: The API URL to use (`https://api.scaleway.com` by default)
Expand Down
2 changes: 1 addition & 1 deletion serverless/containers/how-to/monitor-container.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Scaleway Serverless Containers is fully integrated into [Cockpit](/observability

- A Scaleway account logged into the [console](https://console.scaleway.com)
- [Owner](/identity-and-access-management/iam/concepts/#owner) status or [IAM permissions](/identity-and-access-management/iam/concepts/#permission) allowing you to perform actions in the intended Organization
- [Created a Serverless Container](serverless/containers/how-to/deploy-a-container-from-scaleway-container-registry/)
- [Created a Serverless Container](/serverless/containers/how-to/deploy-a-container-from-scaleway-container-registry/)

## How to activate your Cockpit

Expand Down
145 changes: 145 additions & 0 deletions tutorials/deploy-mdbooks-serverless-containers/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
---
meta:
title: Fast deployment of documentation on Serverless Containers with mdBook
description: Step-by-step guide to deploy mdBooks on Scaleway Serverless Containers.
content:
h1: Fast deployment of documentation on Serverless Containers with mdBook
paragraph: Step-by-step guide to deploy mdBooks on Scaleway Serverless Containers.
tags: docker container deploy serverless mdbook documentation
categories:
- containers
- container-registry
dates:
validation: 2024-10-30
posted: 2024-10-30
---

[mdBook](https://rust-lang.github.io/mdBook/) lets you publish modern online books, for product, API documentation, tutorials, course material or anything that requires a clean, easily navigable, and customizable presentation.

This tutorial uses `mdbook` to publish simple documentation but the main goal of this tutorial is to show how simple it is to pick a project, package it inside an image, and deploy it on Serverless Containers.

<Macro id="requirements" />

- A Scaleway account logged into the [console](https://console.scaleway.com)
- [Owner](/identity-and-access-management/iam/concepts/#owner) status or [IAM permissions](/identity-and-access-management/iam/concepts/#permission) allowing you to perform actions in the intended Organization
- [Docker](https://docs.docker.com/engine/install/) installed on your local machine

## Why deploy on a Serverless infrastructure?

Serverless products are perfect for cost efficiency with a pay-as-you-go model, and scale very well.

With zero infrastructure management and many tools to integrate in CI/CD environments, an `mdBook` deployment is well suited to Serverless Containers.

## Setting up mdBook locally

1. Follow the [installation instructions](https://rust-lang.github.io/mdBook/guide/installation.html) of mdBook.

2. Run the following command to create a sample book:
```
mdbook init my-first-books
```

3. Run the following command to access the folder created by the previous `init` command:
```
cd my-first-book
```

4. Optionally, you can edit the content of the book to publish.

5. Test the book using the command below:
```
mdbook test
```

## Preparing the Container Registry

<Message type="note">
We recommend using [Scaleway Container Registry](/containers/container-registry/) instead of external registries to avoid rate limiting errors, and risks linked to CGU and pricing changes.
</Message>

1. Create a file named `Dockerfile` in the previously created folder, and add the following code to it:

```docker
FROM debian:bookworm-slim

WORKDIR /app

# Copy the necessary files (add your custom files here)
COPY book.toml /app/
COPY src/* /app/src/

# Install the mdbooks binary
RUN apt-get -y update; apt-get -y install curl;
RUN mkdir /home/mdbooks
RUN curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.40/mdbook-v0.4.40-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=/home/mdbooks
ENV PATH="$PATH:/home/mdbooks"

# Serve the book
# 0.0.0.0 is required to listen on public interface, otherwise mdbook will only listen for localhost
# 8080 port is used to match the Serverless Container settings.
ENTRYPOINT ["mdbook", "serve", "-n", "0.0.0.0", "-p", "8080" ]
```

2. Open the Scaleway console in a web browser, and navigate to the [Container Registry](https://console.scaleway.com/containers/).

3. Click **+ Create namespace**. [Namespaces](/containers/container-registry/concepts/#namespace) allow you to easily manage the images stored in your Container Registry.

4. Enter a name for your namespace, or keep the automatically generated one, then click **Create namespace**.

<Message type="note">
For more information on creating a Container Registry namespace, refer to [the dedicated documentation](/containers/container-registry/how-to/create-namespace/).
</Message>

## Building and pushing the image

<Message type="note">
Remember to replace the placeholders with the corresponding values in the steps below.
</Message>

1. Run the following command in a terminal to sign in to your Container Registry namespace:
```
docker login rg.fr-par.scw.cloud/<namespace_name> -u nologin --password-stdin <<< "$SCW_SECRET_KEY"
```
The message `Login Succeeded` appears once you are signed in.

2. Run the command below to build and tag your image locally.

```
docker build -t rg.<region>.scw.cloud/<namespace_name>/<image_name>:<tag_name> .
```

* The **region** and **namespace_name** can be found in the **Namespace settings** tab of the namespace you created.
* **image_name**: use the name you want to identify your image, such as `my-mdbook`.
* **tag_name**: use tags to identify the version of your image, such as `v1`.

3. Run the command below to push the image to the Scaleway Container Registry:
```
docker push rg.<region>.scw.cloud/<namespace>/<image_name>:<tag>
```

## Deploying the Serverless Container

1. In the [Serverless Containers](https://console.scaleway.com/containers/namespaces/) section of the Scaleway console, click **+ Create namespace**.

2. Enter a name for your namespace, or keep the automatically generated one, then click **Create namespace and add container**.

3. Select your image from the registry:
* Select the **Scaleway Container Registry**.
* From the drop-down menu, select the **registry namespace** previously created.
* Enter the **port** previously configured in the Dockerfile (`8080` by default)
* From the drop-down menus, select the **container** and **tag** you created before using the dropdown lists.
* **Name**: You can change the default name to use a more meaningful one.

4. Enter a name for your Serverless Container, or keep the automatically generated one.

5. Keep the default **resources** and **scaling** values. You can fine-tune them later without any downtime.

3. Click **Deploy container** to proceed. The initial deployment of your container can take up to a few minutes.

Your Serverless Container is deployed and ready. You can access it via its **endpoint**.

## Going further

* [Monitor logs and metrics](/serverless/containers/how-to/monitor-container/) of your container.
* [Add a custom domain](/serverless/containers/how-to/add-a-custom-domain-to-a-container/) to your container.
* Explore [other methods](/serverless/containers/reference-content/deploy-container/) to deploy your container.