diff --git a/macros/ai/chat-comp-vs-responses-api.mdx b/macros/ai/chat-comp-vs-responses-api.mdx
index 16f3ce884a..7451847bf2 100644
--- a/macros/ai/chat-comp-vs-responses-api.mdx
+++ b/macros/ai/chat-comp-vs-responses-api.mdx
@@ -6,10 +6,10 @@ Both the [Chat Completions API](https://www.scaleway.com/en/developers/api/gener
The **Chat Completions** API was released in 2023, and is an industry standard for building AI applications, being specifically designed for handling multi-turn conversations. It is stateless, but allows users to manage conversation history by appending each new message to the ongoing conversation. Messages in the conversation can include text, images and audio extracts. The API supports `function` tool-calling, allowing developers to define functions that the model can choose to call. If it does so, it returns the function name and arguments, which the developer's code must execute and feed back into the conversation.
-The **Responses** API was released in 2025, and is designed to combine the simplicity of Chat Completions with the ability to do more agentic tasks and reasoning. It supports statefulness, being able to maintain context without needing to resend the entire conversation history. It offers tool-calling by built-in tools (e.g. web or file search) that the model is able to execute itself while generating a response.
+The **Responses** API was released in 2025, and is designed to combine the simplicity of Chat Completions with the ability to do more agentic tasks and reasoning. It supports statefulness, being able to maintain context without needing to resend the entire conversation history. It offers tool-calling by built-in tools (e.g. web or file search) that the model is able to execute itself while generating a response.
-Scaleway's support for the Responses API is currently at beta stage. Support of the full feature set will be incremental: currently statefulness and tools other than `function` calling are not supported.
+Scaleway's support for the Responses API is currently at beta stage. Support of the full feature set will be incremental: currently statefulness and tools other than `function` calling are not supported.
Most supported Generative API models can be used with both Chat Completions and Responses API. For the `gpt-oss-120b` model, use of the Responses API is recommended, as it will allow you to access all of its features, especially tool-calling.
diff --git a/menu/mainLinks.json b/menu/mainLinks.json
index 9f18e9b503..f68a989974 100644
--- a/menu/mainLinks.json
+++ b/menu/mainLinks.json
@@ -10,6 +10,11 @@
"label": "Tutorials",
"slug": "tutorials"
},
+ {
+ "icon": "UseCasesCategoryIcon",
+ "label": "Use cases",
+ "slug": "use-cases"
+ },
{
"icon": "BillingCategoryIcon",
"label": "Troubleshooting Hub",
diff --git a/pages/use-cases/application-hosting/index.mdx b/pages/use-cases/application-hosting/index.mdx
new file mode 100644
index 0000000000..e1705dc6ec
--- /dev/null
+++ b/pages/use-cases/application-hosting/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Host an application
+description: Seamlessly deploy and host your applications on Scaleway's scalable cloud infrastructure.
+---
+
+## Host an application at Scaleway
+Looking to deploy a web application? Scaleway offers scalable and secure hosting solutions to support your app development and deployment. Whether you're building a small prototype or a full-scale enterprise application, we have the resources you need.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/back-up-data/index.mdx b/pages/use-cases/back-up-data/index.mdx
new file mode 100644
index 0000000000..cf29a689bb
--- /dev/null
+++ b/pages/use-cases/back-up-data/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Backup and archive data
+description: Discover how to safeguard your data with different backup and archival solutions.
+---
+
+## Backup and archive your data
+Safeguard your data with different backup and archival solutions and discover Scaleway's built-in back up solutions.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/best-practices/index.mdx b/pages/use-cases/best-practices/index.mdx
new file mode 100644
index 0000000000..a9787f1fdf
--- /dev/null
+++ b/pages/use-cases/best-practices/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Best practices
+description: Learn from Scaleway's expert guides and best practices to optimize your cloud strategy.
+---
+
+## Discover best practices
+Looking to optimize your cloud strategy? Find best practices and guidelines to help you make the most of your cloud resources and services.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/build-and-run-ai/index.mdx b/pages/use-cases/build-and-run-ai/index.mdx
new file mode 100644
index 0000000000..521a3831c0
--- /dev/null
+++ b/pages/use-cases/build-and-run-ai/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Build and run AI
+description: Discover how to leverage Scaleway's AI & Data services to develop, train, and deploy powerful AI models.
+---
+
+## Build and run AI at Scaleway
+Scaleway supports AI development and deployment with powerful compute resources and tools. Whether you're training models or deploying AI applications, our services provide the performance and scalability you need.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/deploy-external-software/index.mdx b/pages/use-cases/deploy-external-software/index.mdx
new file mode 100644
index 0000000000..b0c6088f72
--- /dev/null
+++ b/pages/use-cases/deploy-external-software/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Deploy and manage external software
+description: Discover how to deploy and manage external software with Scaleway's flexible and customizable cloud environment.
+---
+
+## Deploy and manage external software
+Need to deploy and manage external software on your cloud infrastructure? Scaleway provides the tools and services to help you deploy, manage, and scale external software efficiently.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/index.mdx b/pages/use-cases/index.mdx
new file mode 100644
index 0000000000..3f7e4941b3
--- /dev/null
+++ b/pages/use-cases/index.mdx
@@ -0,0 +1,86 @@
+---
+title: Use Cases
+description: Discover the different ways you can use the Scaleway products to develop your projects.
+---
+
+## What do you want to do?
+Browse through a wide range of use cases that help you leverage our services for your needs. Whether you're looking to host a website, build AI applications, or secure your resources, our use cases are designed to guide you through the most popular and impactful implementations.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/use-cases/iot/index.mdx b/pages/use-cases/iot/index.mdx
new file mode 100644
index 0000000000..137ef8328c
--- /dev/null
+++ b/pages/use-cases/iot/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Connect IoT devices
+description: Discover how to integrate and manage your IoT ecosystem using Scaleway's IoT Hub.
+---
+
+## Connect IoT devices with Scaleway
+Scaleway supports IoT device connectivity and management. Whether you're building a smart home solution or an industrial IoT system, our services provide the scalability and reliability you need.
+
+
+
+
+
+
+## Related tutorials
+
+
diff --git a/pages/use-cases/manage-share-and-store-data/index.mdx b/pages/use-cases/manage-share-and-store-data/index.mdx
new file mode 100644
index 0000000000..4f3152d50d
--- /dev/null
+++ b/pages/use-cases/manage-share-and-store-data/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Manage, share, store data
+description: Discover the different ways you can use the Scaleway products to develop your projects.
+---
+
+## Manage, share, store data
+Securely store your data on Scaleway's storage solutions and pair them with third-party to automate and simplify data management.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/migration/index.mdx b/pages/use-cases/migration/index.mdx
new file mode 100644
index 0000000000..24f1cd3cf2
--- /dev/null
+++ b/pages/use-cases/migration/index.mdx
@@ -0,0 +1,12 @@
+---
+title: Migrate to Scaleway
+description: Discover the different ways you can use the Scaleway products to develop your projects.
+---
+
+## Migrate to Scaleway
+Discover how to seamlessly move your infrastructure to Scaleway.
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/monitoring/index.mdx b/pages/use-cases/monitoring/index.mdx
new file mode 100644
index 0000000000..929e7a9a8d
--- /dev/null
+++ b/pages/use-cases/monitoring/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Monitor resources
+description: Discover the different ways you can use the Scaleway products to develop your projects.
+---
+
+## Monitor your resources
+Keep your cloud resources running smoothly with Scaleway and third party monitoring tools. Our services provide real-time insights and alerts to help you maintain optimal performance.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/resource-management/index.mdx b/pages/use-cases/resource-management/index.mdx
new file mode 100644
index 0000000000..55d9e84c6b
--- /dev/null
+++ b/pages/use-cases/resource-management/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Manage resources
+description: Discover how to streamline your cloud operations with open-source resource management and orchestration tools.
+---
+
+## Manage your resources
+Simplify your cloud resource management with Scaleway's tools. From provisioning to scaling, our services help you manage your infrastructure efficiently.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/security/index.mdx b/pages/use-cases/security/index.mdx
new file mode 100644
index 0000000000..cb8c7ccef1
--- /dev/null
+++ b/pages/use-cases/security/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Secure your resources
+description: Discover how to protect your cloud infrastructure.
+---
+
+## Secure your resources
+Protect your cloud resources with Scaleway's security solutions. From network security to access control, we offer tools to help you secure your infrastructure.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/set-up-and-test/index.mdx b/pages/use-cases/set-up-and-test/index.mdx
new file mode 100644
index 0000000000..446716425e
--- /dev/null
+++ b/pages/use-cases/set-up-and-test/index.mdx
@@ -0,0 +1,28 @@
+---
+title: Set up and test
+description: Discover how to set up your test infrastructures at Scaleway.
+---
+
+## Set up and test your projects
+Need to set up and test your applications in a cloud environment? Scaleway provides the tools and infrastructure to help you create, test, and deploy your applications efficiently.
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/pages/use-cases/website-hosting/index.mdx b/pages/use-cases/website-hosting/index.mdx
new file mode 100644
index 0000000000..ca40aa038b
--- /dev/null
+++ b/pages/use-cases/website-hosting/index.mdx
@@ -0,0 +1,45 @@
+---
+title: Host a website
+description: Discover how to host your website on Scaleway's scalable cloud platform.
+---
+
+## Host a website at Scaleway
+Need to deploy a simple or complex website? Scaleway provides the tools and infrastructure to help you get your site up and running quickly and efficiently. From static pages to dynamic content, we support all your web hosting needs.
+
+
+
+
+
+
+
+
+
+
+
+## Related tutorials
+
+
\ No newline at end of file
diff --git a/tutorials/abort-multipart-upload-minio/index.mdx b/tutorials/abort-multipart-upload-minio/index.mdx
index 252bfa10dd..930fbdde62 100644
--- a/tutorials/abort-multipart-upload-minio/index.mdx
+++ b/tutorials/abort-multipart-upload-minio/index.mdx
@@ -8,13 +8,18 @@ dates:
validation: 2025-06-09
validation_frequency: 12
hero: assets/scaleway_minio.webp
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
[Multipart Uploads](/object-storage/api-cli/multipart-uploads/) allows you to upload large files (up to 5 TB) to the Object Storage platform in multiple parts. This allows faster, more flexible uploads.
-If you do not complete a multipart upload, all the uploaded parts will still be stored and counted as part of your storage usage. Multipart uploads can be aborted manually [via the API and CLI](/object-storage/api-cli/multipart-uploads/#aborting-a-multipart-upload) or automatically using a [Lifecycle rule](/object-storage/api-cli/lifecycle-rules-api/#setting-rules-for-incomplete-multipart-uploads).
+If you do not complete a multipart upload, all the uploaded parts will still be stored and counted as part of your storage usage. Multipart uploads can be aborted manually [via the API and CLI](/object-storage/api-cli/multipart-uploads/#aborting-a-multipart-upload) or automatically using a [Lifecycle rule](/object-storage/api-cli/lifecycle-rules-api/#setting-rules-for-incomplete-multipart-uploads).
If you use the API or the AWS CLI, you will have to abort each incomplete multipart upload independently. However, there is an easier and faster way to abort multipart uploads, using the open-source Amazon S3-compatible client [mc](https://github.com/minio/mc), from MinIO. In this tutorial, we show you how to use mc to abort and clean up all your incomplete multipart uploads at once.
diff --git a/tutorials/access-mac-mini-with-reemo/index.mdx b/tutorials/access-mac-mini-with-reemo/index.mdx
index 513c7dda73..c4aa51f0c4 100644
--- a/tutorials/access-mac-mini-with-reemo/index.mdx
+++ b/tutorials/access-mac-mini-with-reemo/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-08-05
posted: 2022-02-18
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-reemo-portal-1.webp'
import image2 from './assets/scaleway-reemo-download.webp'
@@ -17,7 +22,7 @@ import image4 from './assets/scaleway-reemo-m1.webp'
import Requirements from '@macros/iam/requirements.mdx'
-Reemo is an ultra-low latency, high-performance desktop platform designed to allow anyone to connect to any computer and virtual environment from a Chrome browser to work and play freely from anywhere, on any device.
+Reemo is an ultra-low latency, high-performance desktop platform designed to allow anyone to connect to any computer and virtual environment from a Chrome browser to work and play freely from anywhere, on any device.
Reemo works perfectly on macOS, Linux, and Windows and supports multiple peripherals.
Scaleway's Apple silicon as-a-Service offer is highly compatible with Reemo.io. Scaleway's Mac mini is built using the latest generation of Apple Mac mini hardware.
@@ -45,7 +50,7 @@ In this tutorial, you will learn how to launch your Mac mini development environ
1. Go to the [Reemo portal](https://portal.reemo.io/) and click **Register now** to create your Reemo account.
2. Enter your personal details and click **Register**. You will receive an email with a confirmation code.
-3. Open your email account and check your security code. Then enter the code in the form and click **Validate** to confirm the account creation.
+3. Open your email account and check your security code. Then enter the code in the form and click **Validate** to confirm the account creation.
If you do not receive the validation code, check your spam folder. If you still cannot find the code, click **Send again** to receive it again.
@@ -58,9 +63,9 @@ In this tutorial, you will learn how to launch your Mac mini development environ
## Installing the Reemo client
1. Log into your Mac mini using an exsiting [remote desktop connection](/apple-silicon/how-to/access-remote-desktop-mac-mini/).
-2. Open a terminal once logged into your Mac mini, open a terminal.
+2. Open a terminal once logged into your Mac mini, open a terminal.
3. Run the following command to install the Reemo client on your machine:
- ```sh
+ ```sh
# For older MacOS version (pre ventura) you can install this audio driver for audio capture support
brew install blackhole-2ch
# You need Administrator Priviledges
diff --git a/tutorials/actility-lorawan-operator/index.mdx b/tutorials/actility-lorawan-operator/index.mdx
index 664acab32c..8fcfbe1042 100644
--- a/tutorials/actility-lorawan-operator/index.mdx
+++ b/tutorials/actility-lorawan-operator/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2020-07-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - iot
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-iothub_howto_actility_grafana.webp'
diff --git a/tutorials/add-disk-configure-datastore-esxi/index.mdx b/tutorials/add-disk-configure-datastore-esxi/index.mdx
index e79d40f48d..569282fef7 100644
--- a/tutorials/add-disk-configure-datastore-esxi/index.mdx
+++ b/tutorials/add-disk-configure-datastore-esxi/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2020-01-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-add_disk_customize.webp'
import image2 from './assets/scaleway-add_disk_choose_storage.webp'
@@ -62,7 +67,7 @@ This guide is designed to walk you through the process of ordering an additional
- [Owner](/iam/concepts/#owner) status or [IAM permissions](/iam/concepts/#permission) allowing you to perform actions in the intended Organization
- A [Dedibox](https://www.scaleway.com/en/dedibox/) running [VMware ESXi](/tutorials/configure-virtual-machine-esxi/#installing-esxi)
- Subscribed to the Business Service Level for the server
-
+
## Ordering an additional disk
1. Connect to the [Dedibox console](https://console.online.net/).
@@ -115,7 +120,7 @@ Depending on the configuration of your Dedibox, the server may come with a [hard
4. Check that all disks are **OK**, and click **Virtual Disks** in the side-menu.
- The list of all existing virtual disks displays.
+ The list of all existing virtual disks displays.
5. Click **Create** in the menu bar to create a new virtual disk.
6. Select the newly installed disk from the list. You can keep the default parameters for a basic configuration, or fine-tune them towards your needs.
@@ -166,7 +171,7 @@ It is also possible to increase the size of an existing datastore. In this case,
5. Select a partitioning configuration for the disk. To use all available disk space, go with the default settings and click **Next**:
- The summary displays.
+ The summary displays.
6. Check the summary settings and click **Finish**:
diff --git a/tutorials/ansible-bionic-beaver/index.mdx b/tutorials/ansible-bionic-beaver/index.mdx
index 71ce7e395f..3268c51604 100644
--- a/tutorials/ansible-bionic-beaver/index.mdx
+++ b/tutorials/ansible-bionic-beaver/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2018-07-26
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/ansible-galaxy/index.mdx b/tutorials/ansible-galaxy/index.mdx
index 2efe3364ef..6a45c76de0 100644
--- a/tutorials/ansible-galaxy/index.mdx
+++ b/tutorials/ansible-galaxy/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-25
posted: 2018-08-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -35,7 +40,7 @@ To use roles in Ansible playbooks, you must first download them.
ansible-galaxy install geerlingguy.apache geerlingguy.mysql geerlingguy.php
```
- In this example, we use `geerlinguy`'s role, which is a software developer involved in many open-source development communities. The latest version will be downloaded if you do not specify which one you want to download. Add the version after the role name to specify a version. Example: `geerlingguy.apache,1.0.0` or `geerlingguy.mysql,1.0.0`.
+ In this example, we use `geerlinguy`'s role, which is a software developer involved in many open-source development communities. The latest version will be downloaded if you do not specify which one you want to download. Add the version after the role name to specify a version. Example: `geerlingguy.apache,1.0.0` or `geerlingguy.mysql,1.0.0`.
If you want to use other roles, check out [geerlinguy](https://github.com/geerlingguy/ansible-role-ansible)'s Ansible profile.
2. Create an Ansible playbook named `lamp.yml` with the following contents:
@@ -56,7 +61,7 @@ The LAMP server is now created.
## Creating a Solr server with Ansible roles
-Apache Solr is a fast open-source Java search server. Solr enables you to easily create search engines that search websites, databases, and files.
+Apache Solr is a fast open-source Java search server. Solr enables you to easily create search engines that search websites, databases, and files.
For more information on Solr, refer to the [Solr official documentation](http://lucene.apache.org/solr/news.html).
diff --git a/tutorials/ark-server/index.mdx b/tutorials/ark-server/index.mdx
index 944187dd44..f43dbf799f 100644
--- a/tutorials/ark-server/index.mdx
+++ b/tutorials/ark-server/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2020-11-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-ark.webp'
import image2 from './assets/scaleway-steam_terms.webp'
diff --git a/tutorials/arqbackup-pc-mac/index.mdx b/tutorials/arqbackup-pc-mac/index.mdx
index fd245648b4..1b9d2a6da3 100644
--- a/tutorials/arqbackup-pc-mac/index.mdx
+++ b/tutorials/arqbackup-pc-mac/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2019-07-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-arq7_splash.webp'
import image2 from './assets/scaleway-arq7_license.webp'
@@ -79,7 +84,7 @@ This tutorial guides you through backing up your PC or Mac computer to Scaleway
12. Click **Create** to validate the settings and to create the new backup plan:
- The status of the new backup plan displays. By default, Arq makes an hourly backup of the entire disk of your computer:
+ The status of the new backup plan displays. By default, Arq makes an hourly backup of the entire disk of your computer:
If required, the backup frequency and the files and folders to back up can be adjusted from the backup plan preferences by clicking on **Edit** in the plan details:
diff --git a/tutorials/automate-tasks-using-cron/index.mdx b/tutorials/automate-tasks-using-cron/index.mdx
index cbada78ec5..90339a6369 100644
--- a/tutorials/automate-tasks-using-cron/index.mdx
+++ b/tutorials/automate-tasks-using-cron/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2019-11-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/back-up-postgresql-barman/index.mdx b/tutorials/back-up-postgresql-barman/index.mdx
index 6ad20c18eb..71b7cd3d72 100644
--- a/tutorials/back-up-postgresql-barman/index.mdx
+++ b/tutorials/back-up-postgresql-barman/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2018-08-29
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -198,7 +203,7 @@ The configuration of Barman is done on the server `pgsql-backup`.
Server pgsql:
PostgreSQL: OK
archive_mode: OK
- wal_level: OK
+ wal_difficulty: OK
archive_command: OK
continuous archiving: OK
directories: OK
diff --git a/tutorials/backup-dedicated-server-s3-duplicity/index.mdx b/tutorials/backup-dedicated-server-s3-duplicity/index.mdx
index ccf2ad1202..b5ba98ad63 100644
--- a/tutorials/backup-dedicated-server-s3-duplicity/index.mdx
+++ b/tutorials/backup-dedicated-server-s3-duplicity/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-24
posted: 2018-10-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -34,7 +39,7 @@ Although this tutorial focuses on backing up an Instance, you can also back up a
- A Scaleway account logged into the [console](https://console.scaleway.com)
- [Owner](/iam/concepts/#owner) status or [IAM permissions](/iam/concepts/#permission) allowing you to perform actions in the intended Organization
- A valid [API key](/iam/how-to/create-api-keys/)
-- An [Instance](/instances/how-to/create-an-instance/) running Ubuntu or Debian
+- An [Instance](/instances/how-to/create-an-instance/) running Ubuntu or Debian
## Creating an Object Storage bucket
@@ -42,7 +47,7 @@ Follow the instructions to [create an Object Storage bucket](/object-storage/how
## Installing software requirements
-In this step, we install the various software needed. As well as installing Duplicity itself, Duplicity needs us to generate a [GPG key](https://www.gnupg.org/) so that it can encrypt the data. For GPG key generation, we need to create some entropy, so we also install [Haveged](http://www.issihosts.com/haveged/) to generate a small amount of entropy.
+In this step, we install the various software needed. As well as installing Duplicity itself, Duplicity needs us to generate a [GPG key](https://www.gnupg.org/) so that it can encrypt the data. For GPG key generation, we need to create some entropy, so we also install [Haveged](http://www.issihosts.com/haveged/) to generate a small amount of entropy.
You can find the link to the latest version of Duplicity on their [website](https://duplicity.gitlab.io/). You may replace the link used with `wget` (and therefore `tar` and `cd`) if a newer version is available.
@@ -189,7 +194,7 @@ The backup policy described here makes a full backup every 10 days and removes a
### Backup script
-Using the configuration and Duplicity, we automatize the backup process with the `scw-backups.sh` script.
+Using the configuration and Duplicity, we automatize the backup process with the `scw-backups.sh` script.
1. Copy the following script to `scw-backups.sh`:
```bash
@@ -232,7 +237,7 @@ Using the configuration and Duplicity, we automatize the backup process with the
### Script the recovery of data
-Duplicity also allows you to recover a backup. We will create a script to make the process easier.
+Duplicity also allows you to recover a backup. We will create a script to make the process easier.
1. Add the following script to `scw-restore.sh`:
```bash
diff --git a/tutorials/backup-mongodb-jobs/index.mdx b/tutorials/backup-mongodb-jobs/index.mdx
index 3ebd822bc6..4e5502a525 100644
--- a/tutorials/backup-mongodb-jobs/index.mdx
+++ b/tutorials/backup-mongodb-jobs/index.mdx
@@ -51,14 +51,14 @@ Serverless Jobs are perfectly adapted for these autonomous tasks, as we do not n
For more details about variables used by `cli`, refer to the [CLI config documentation](https://github.com/scaleway/scaleway-cli/blob/master/docs/commands/config.md).
-9. In the **Execution** tab, define the command below, and replace the placeholders with the ID of your Managed MongoDB® Database Instance ID and the name of your snapshot:
+9. In the **Execution** tab, define the command below, and replace the placeholders with the ID of your Managed MongoDB® Database Instance ID and the name of your snapshot:
```sh
/scw mongodb snapshot create name="snapshot_$(date +%Y%m%d_%H%M%S)" expires-at=30d
```
10. Click **Create job**.
-Your job will automatically create a snapshot named `snapshot_` with a 30-day retention period every day at 18:00.
+Your job will automatically create a snapshot named `snapshot_` with a 30-day retention period every day at 18:00.
## Running the job
diff --git a/tutorials/backup-postgresql-pgbackrest-s3/index.mdx b/tutorials/backup-postgresql-pgbackrest-s3/index.mdx
index b11d778466..bb6ea3cf27 100644
--- a/tutorials/backup-postgresql-pgbackrest-s3/index.mdx
+++ b/tutorials/backup-postgresql-pgbackrest-s3/index.mdx
@@ -5,10 +5,14 @@ tags: postgresql pgbackrest backup configuration setup s3
dates:
validation: 2025-07-28
validation_frequency: 12
-
products:
- object-storage
- postgresql-and-mysql
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/backup-synology-nas-s3-hyper-backup/index.mdx b/tutorials/backup-synology-nas-s3-hyper-backup/index.mdx
index 914025bc4e..ac03458196 100644
--- a/tutorials/backup-synology-nas-s3-hyper-backup/index.mdx
+++ b/tutorials/backup-synology-nas-s3-hyper-backup/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-09
posted: 2019-12-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-synology_01.webp'
import image2 from './assets/scaleway-synology_02.webp'
@@ -48,7 +53,7 @@ As the NAS holds huge amounts of your personal data, a good backup strategy is i
- **Server address**: The address of the Object Storage endpoint
- It can be either
+ It can be either
- `s3.fr-par.scw.cloud` for buckets in Paris
- `s3.nl-ams.scw.cloud` for buckets in Amsterdam
- `s3.pl-waw.scw.cloud` for buckets in Warsaw.
diff --git a/tutorials/bash-christmas-tree/index.mdx b/tutorials/bash-christmas-tree/index.mdx
index 5fd4abdc16..056a5aba2e 100644
--- a/tutorials/bash-christmas-tree/index.mdx
+++ b/tutorials/bash-christmas-tree/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2019-11-26
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-animated-tree.gif'
diff --git a/tutorials/bind-dns-server/index.mdx b/tutorials/bind-dns-server/index.mdx
index 3823215704..956104bd9c 100644
--- a/tutorials/bind-dns-server/index.mdx
+++ b/tutorials/bind-dns-server/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-27
posted: 2018-12-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/building-ai-application-function-calling/index.mdx b/tutorials/building-ai-application-function-calling/index.mdx
index 9cf1d4cbcb..a96e67a1a8 100644
--- a/tutorials/building-ai-application-function-calling/index.mdx
+++ b/tutorials/building-ai-application-function-calling/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-19
posted: 2024-10-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -61,12 +66,12 @@ First, let's create a simple function that returns flight schedules. Create a fi
def get_flight_schedule(departure_airport: str, destination_airport: str, departure_date: str) -> dict:
"""
Get available flights between two airports on a specific date.
-
+
Args:
departure_airport (str): IATA code of departure airport (e.g., "CDG")
destination_airport (str): IATA code of destination airport (e.g., "LHR")
departure_date (str): Date in YYYY-MM-DD format
-
+
Returns:
dict: Available flights with their details
"""
@@ -89,7 +94,7 @@ def get_flight_schedule(departure_airport: str, destination_airport: str, depart
}
]
}
-
+
key = f"{departure_airport}-{destination_airport}-{departure_date}"
return flights.get(key, {"error": "No flights found for this route and date."})
```
@@ -106,7 +111,7 @@ from flight_schedule import get_flight_schedule
# Initialize the OpenAI client with Scaleway configuration
-MODEL="meta/llama-3.1-70b-instruct:fp8"
+MODEL="meta/llama-3.1-70b-instruct:fp8"
# use the right name according to your Managed Inference deployment or Generative APIs model
API_KEY = os.environ.get("SCALEWAY_API_KEY")
@@ -147,7 +152,7 @@ tools = [{
def process_query(user_query: str) -> str:
"""Process a natural language query about flights."""
-
+
# Initial conversation with the model
messages = [
{
@@ -159,7 +164,7 @@ def process_query(user_query: str) -> str:
"content": user_query
}
]
-
+
# Get the model's response
response = client.chat.completions.create(
model=MODEL,
@@ -167,20 +172,20 @@ def process_query(user_query: str) -> str:
tools=tools,
tool_choice="auto"
)
-
+
# Check if the model wants to call a function
response_message = response.choices[0].message
-
+
if response_message.tool_calls:
# Get function call details
tool_call = response_message.tool_calls[0]
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments)
-
+
# Execute the function
if function_name == "get_flight_schedule":
function_response = get_flight_schedule(**function_args)
-
+
# Add the function result to the conversation
messages.append(response_message)
messages.append({
@@ -188,15 +193,15 @@ def process_query(user_query: str) -> str:
"content": json.dumps(function_response),
"tool_call_id": tool_call.id
})
-
+
# Get final response
final_response = client.chat.completions.create(
model=MODEL,
messages=messages
)
-
+
return final_response.choices[0].message.content
-
+
return response_message.content
```
@@ -211,12 +216,12 @@ def main():
print("Welcome to the Flight Schedule Assistant!")
print("Ask about flights using natural language (or type 'quit' to exit)")
print("Example: What flights are available from CDG to LHR on November 1st, 2024?")
-
+
while True:
query = input("\nYour query: ")
if query.lower() == 'quit':
break
-
+
response = process_query(query)
print("\nAssistant:", response)
diff --git a/tutorials/cicd-github-action-object-storage-sync/index.mdx b/tutorials/cicd-github-action-object-storage-sync/index.mdx
index a18a61865a..0243e64096 100644
--- a/tutorials/cicd-github-action-object-storage-sync/index.mdx
+++ b/tutorials/cicd-github-action-object-storage-sync/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-10
posted: 2025-03-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/cilicon-self-hosted-ci-on-apple-silicon/index.mdx b/tutorials/cilicon-self-hosted-ci-on-apple-silicon/index.mdx
index 585605e709..07ee1855e3 100644
--- a/tutorials/cilicon-self-hosted-ci-on-apple-silicon/index.mdx
+++ b/tutorials/cilicon-self-hosted-ci-on-apple-silicon/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-12-14
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/collecting-visualizing-logs-elastic-stack/index.mdx b/tutorials/collecting-visualizing-logs-elastic-stack/index.mdx
index b5898b6969..3902134946 100644
--- a/tutorials/collecting-visualizing-logs-elastic-stack/index.mdx
+++ b/tutorials/collecting-visualizing-logs-elastic-stack/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-03-06
posted: 2015-06-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -119,7 +124,7 @@ The Elastic Stack, formerly known as the ELK Stack, is a powerful suite of open-
server.host: "0.0.0.0"
```
-4. Secure Kibana:
+4. Secure Kibana:
Ensure Kibana uses SSL to encrypt communications by adding SSL certificates in the `kibana.yml` file:
```yaml
server.ssl.enabled: true
diff --git a/tutorials/configure-apache-kafka/index.mdx b/tutorials/configure-apache-kafka/index.mdx
index b6ab57d38a..b619ea310e 100644
--- a/tutorials/configure-apache-kafka/index.mdx
+++ b/tutorials/configure-apache-kafka/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-26
posted: 2018-04-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-schema-kafka.webp'
diff --git a/tutorials/configure-apache-lets-encrypt/index.mdx b/tutorials/configure-apache-lets-encrypt/index.mdx
index 49915c7e7e..e0f46c1749 100644
--- a/tutorials/configure-apache-lets-encrypt/index.mdx
+++ b/tutorials/configure-apache-lets-encrypt/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2019-05-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-config_apache.webp'
import image2 from './assets/scaleway-ssl_enabled.webp'
@@ -18,7 +23,7 @@ import Requirements from '@macros/iam/requirements.mdx'
Let's Encrypt is a certificate authority providing free SSL certificates. The creation, validation, and installation are automated with Certbot — all major browsers trust certificates issued by Let's Encrypt.
-In this tutorial, you will discover how to secure your Apache web server on a Scaleway Instance running Ubuntu Linux.
+In this tutorial, you will discover how to secure your Apache web server on a Scaleway Instance running Ubuntu Linux.
We will walk you through the process of setting up a website on Apache and obtaining a Let's Encrypt SSL certificate using Certbot. Let's dive in and make your web presence safer and more trustworthy.
diff --git a/tutorials/configure-chatboxai-with-generative-apis/index.mdx b/tutorials/configure-chatboxai-with-generative-apis/index.mdx
index 711afe81da..e23a6b02f7 100644
--- a/tutorials/configure-chatboxai-with-generative-apis/index.mdx
+++ b/tutorials/configure-chatboxai-with-generative-apis/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-21
posted: 2025-02-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
Chatbox AI is a versatile desktop client compatible with various AI models. It offers installation packages for multiple platforms.
diff --git a/tutorials/configure-chef-ubuntu-xenial/index.mdx b/tutorials/configure-chef-ubuntu-xenial/index.mdx
index 8b431492fd..4bb612c7e4 100644
--- a/tutorials/configure-chef-ubuntu-xenial/index.mdx
+++ b/tutorials/configure-chef-ubuntu-xenial/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-14
posted: 2018-07-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-dvc-with-object-storage/index.mdx b/tutorials/configure-dvc-with-object-storage/index.mdx
index ecf7d437a9..d4a94e6b65 100644
--- a/tutorials/configure-dvc-with-object-storage/index.mdx
+++ b/tutorials/configure-dvc-with-object-storage/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-26
posted: 2023-06-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-failover-proxmox/index.mdx b/tutorials/configure-failover-proxmox/index.mdx
index 686afcf733..94b97d1bde 100644
--- a/tutorials/configure-failover-proxmox/index.mdx
+++ b/tutorials/configure-failover-proxmox/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-12
posted: 2020-01-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-proxmox_dashboard.webp'
import image2 from './assets/scaleway-proxmox_templates.webp'
diff --git a/tutorials/configure-graphite/index.mdx b/tutorials/configure-graphite/index.mdx
index 8240c3bf5a..1d4508d41f 100644
--- a/tutorials/configure-graphite/index.mdx
+++ b/tutorials/configure-graphite/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-03-06
posted: 2018-08-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-ipv6-virtual-machine-esxi/index.mdx b/tutorials/configure-ipv6-virtual-machine-esxi/index.mdx
index 982042b539..9645bfafc7 100644
--- a/tutorials/configure-ipv6-virtual-machine-esxi/index.mdx
+++ b/tutorials/configure-ipv6-virtual-machine-esxi/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-12
posted: 2022-02-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-nagios-monitoring/index.mdx b/tutorials/configure-nagios-monitoring/index.mdx
index 9eea45d11f..5369bb9f7a 100644
--- a/tutorials/configure-nagios-monitoring/index.mdx
+++ b/tutorials/configure-nagios-monitoring/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-01
posted: 2018-06-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-netbox-managed-postgresql-database/index.mdx b/tutorials/configure-netbox-managed-postgresql-database/index.mdx
index 2765155cd3..0bab27797d 100644
--- a/tutorials/configure-netbox-managed-postgresql-database/index.mdx
+++ b/tutorials/configure-netbox-managed-postgresql-database/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-14
posted: 2019-11-14
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-dbaas_netbox_dashboard.webp'
diff --git a/tutorials/configure-nextcloud-ubuntu/index.mdx b/tutorials/configure-nextcloud-ubuntu/index.mdx
index 6672d35534..f3659e16b3 100644
--- a/tutorials/configure-nextcloud-ubuntu/index.mdx
+++ b/tutorials/configure-nextcloud-ubuntu/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-14
posted: 2018-10-26
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-nextcloud-files.webp'
diff --git a/tutorials/configure-nginx-lets-encrypt/index.mdx b/tutorials/configure-nginx-lets-encrypt/index.mdx
index ad250da3ea..46fc9b0804 100644
--- a/tutorials/configure-nginx-lets-encrypt/index.mdx
+++ b/tutorials/configure-nginx-lets-encrypt/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2019-02-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-example_site.webp'
import image2 from './assets/scaleway-example_https.webp'
diff --git a/tutorials/configure-nodemcu-iot-hub/index.mdx b/tutorials/configure-nodemcu-iot-hub/index.mdx
index fa2a4af4d9..7d5035b4ac 100644
--- a/tutorials/configure-nodemcu-iot-hub/index.mdx
+++ b/tutorials/configure-nodemcu-iot-hub/index.mdx
@@ -6,7 +6,11 @@ products:
dates:
validation: 2025-05-27
validation_frequency: 12
-
+difficulty: beginner
+usecase:
+ - iot
+ecosystem:
+ - third-party
tags: iot iot-hub NodeMCU Arduino-IDE
hero: assets/scaleway_nodemcu.webp
---
@@ -60,9 +64,9 @@ Scaleway's IoT Hub lets your connected devices share messages. In this tutorial,
1. Start the Arduino IDE application on your local computer.
-2. Go to **Arduino** menu and click **Preferences**:
+2. Go to **Arduino** menu and click **Preferences**:
-3. Add the following link in the Additional Boards Manager URLs: `http://arduino.esp8266.com/stable/package_esp8266com_index.json` and click **OK** to validate:
+3. Add the following link in the Additional Boards Manager URLs: `http://arduino.esp8266.com/stable/package_esp8266com_index.json` and click **OK** to validate:
4. Go to **Tools** > **Board** > **Board Manager**
@@ -78,14 +82,14 @@ Your Arduino IDE is now ready to communicate with the NodeMCU device.
1. Log into your [Scaleway console](https://conole.scaleway.com/) and click on **IoT Hub** in the side menu:
2. Click **Create a Hub** and create your new IoT Hub.
-3. Enter a name for your hub (here we use iot-hub-esp8266) and choose a plan. For this tutorial, we use the Free plan. If your Project needs more resources you can choose one of the larger hubs. Click **Create a hub** to deploy it.
+3. Enter a name for your hub (here we use iot-hub-esp8266) and choose a plan. For this tutorial, we use the Free plan. If your Project needs more resources you can choose one of the larger hubs. Click **Create a hub** to deploy it.
4. Once your hub is ready, click on it. You will see the following page:
-5. Navigate to the **Devices** tab and click **Add device** to add a new device to the hub:
+5. Navigate to the **Devices** tab and click **Add device** to add a new device to the hub:
- Make sure to enable insecure connections to be able to communicate with the IoT Hub, as we are not using certificates in this tutorial.
+ Make sure to enable insecure connections to be able to communicate with the IoT Hub, as we are not using certificates in this tutorial.
6. Click **Add device to your hub** to add the device.
7. Once added, click on the device name to display some statistics about the device.
@@ -107,14 +111,14 @@ MQTT Explorer is a MQTT client that provides a structured overview of your MQTT
-3. Click **Connect** to establish the connection to your IoT Hub. The following screen displays:
+3. Click **Connect** to establish the connection to your IoT Hub. The following screen displays:
Your MQTT Explorer is now successfully connected to your IoT Hub.
## Connecting your ESP8266 to Scaleway IoT Hub
-We now connect the ESP8266 device to our IoT Hub. To do so, some additional libraries are required. Download them on your local computer and add them to the Arduino IDE by clicking on **Sketch** > **Include Library** > **Add .ZIP library**. We use the following libraries:
+We now connect the ESP8266 device to our IoT Hub. To do so, some additional libraries are required. Download them on your local computer and add them to the Arduino IDE by clicking on **Sketch** > **Include Library** > **Add .ZIP library**. We use the following libraries:
* [PubSubClient library](https://github.com/knolleary/pubsubclient/archive/master.zip): The PubSubClient library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT (basically allows your ESP8266 to talk with your MQTT Broker).
@@ -141,7 +145,7 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
WiFiClient espClient;
PubSubClient client(espClient);
```
-4. We use the setup function to check the connection to our WiFi network and print a message in the Serial Monitor to confirm whether the device is connected or not:
+4. We use the setup function to check the connection to our WiFi network and print a message in the Serial Monitor to confirm whether the device is connected or not:
```
void setup() {
Serial.begin(115200);
@@ -151,7 +155,7 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
-
+
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
```
@@ -160,7 +164,7 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
- Serial.println("connected");
+ Serial.println("connected");
} else {
Serial.print("failed with state ");
@@ -169,29 +173,29 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
}
}
```
-6. We test the publish/subscribe function by publishing a test message and subscribing to the topic:
+6. We test the publish/subscribe function by publishing a test message and subscribing to the topic:
```
Serial.println("Sending payload hello-world...");
client.publish("esp/test", "hello-world"); //Topic name
Serial.println("Payload sent!");
client.subscribe("esp/test");
- }
+ }
```
-7. To print out the message we specify a call-back function and print the topic name and the received message on the Serial Monitor:
+7. To print out the message we specify a call-back function and print the topic name and the received message on the Serial Monitor:
```
void callback(char* topic, byte* payload, unsigned int length) {
-
+
Serial.print("Message arrived in topic: ");
Serial.println(topic);
-
+
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
-
+
Serial.println();
Serial.println("-----------------------");
-
+
}
```
8. Finish by adding the following lines in the loop:
@@ -201,21 +205,21 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
}
```
- You should now have a sketch that begins with the following lines:
+ You should now have a sketch that begins with the following lines:
```
#include
#include
```
- and includes all the aforementioned code, ending with:
+ and includes all the aforementioned code, ending with:
```
void loop() {
client.loop();
}
```
-9. Upload your code to your ESP8266 microcontroller. An output as in the following example displays in the Serial Monitor:
+9. Upload your code to your ESP8266 microcontroller. An output as in the following example displays in the Serial Monitor:
@@ -227,7 +231,7 @@ We now connect the ESP8266 device to our IoT Hub. To do so, some additional libr
## Controlling an LED and measuring temperature and humidity
-Next, we will use our NodeMCU device to measure temperature and humidity and publish these values in a topic. Besides the NodeMCU device, you need the following hardware for this step:
+Next, we will use our NodeMCU device to measure temperature and humidity and publish these values in a topic. Besides the NodeMCU device, you need the following hardware for this step:
* A [Breadboard](https://en.wikipedia.org/wiki/Breadboard)
* An [LED](https://en.wikipedia.org/wiki/Light-emitting_diode)
@@ -238,10 +242,10 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
1. Perform the following wiring on the breadboard:
- This is the pinout table of the NodeMCU device:
+ This is the pinout table of the NodeMCU device:
| Pin Names on NodeMCU Development Kit| ESP8266 Internal GPIO Pin number|
- | ------------- |:-------------:|
+ | ------------- |:-------------:|
|D0|GPIO16|
|D1|GPIO5|
|D2|GPIO4|
@@ -308,14 +312,14 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
}
// This function is executed when some device publishes a message to a topic that your ESP8266 is subscribed to
- // Change the function below to add logic to your program, so when a device publishes a message to a topic that
+ // Change the function below to add logic to your program, so when a device publishes a message to a topic that
// your ESP8266 is subscribed you can actually do something
void callback(String topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
-
+
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
@@ -340,14 +344,14 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
}
// This functions reconnects your ESP8266 to your MQTT broker
- // Change the function below if you want to subscribe to more topics with your ESP8266
+ // Change the function below if you want to subscribe to more topics with your ESP8266
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
- Serial.println("connected");
+ Serial.println("connected");
// Subscribe or resubscribe to a topic
// You can subscribe to more topics (to control more LEDs in this example)
client.subscribe("room/lamp");
@@ -366,9 +370,9 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
// The callback function is what receives messages and actually controls the LEDs
void setup() {
pinMode(lamp, OUTPUT);
-
+
dht.begin();
-
+
Serial.begin(115200);
setup_wifi();
client.setServer(mqttServer, mqttPort);
@@ -406,19 +410,19 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
float hic = dht.computeHeatIndex(t, h, false);
static char temperatureTemp[7];
dtostrf(hic, 6, 2, temperatureTemp);
-
- // Uncomment to compute temperature values in Fahrenheit
+
+ // Uncomment to compute temperature values in Fahrenheit
// float hif = dht.computeHeatIndex(f, h);
// static char temperatureTemp[7];
// dtostrf(hic, 6, 2, temperatureTemp);
-
+
static char humidityTemp[7];
dtostrf(h, 6, 2, humidityTemp);
// Publishes Temperature and Humidity values
client.publish("room/temperature", temperatureTemp);
client.publish("room/humidity", humidityTemp);
-
+
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t Temperature: ");
@@ -431,7 +435,7 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
// Serial.print(hif);
// Serial.println(" *F");
}
- }
+ }
```
3. Transfer the Arduino Sketch to the NodeMCU device and open the Serial Monitor.
4. The following output displays, confirming the successful capture and transmission of temperature and humidity data:
@@ -439,27 +443,27 @@ Next, we will use our NodeMCU device to measure temperature and humidity and pub
## Flow Programming with Node-RED
-In the following steps, we deploy a [Node-RED](https://nodered.org/) application using the IoT-Hub Kickstart feature and use it for flow programming.
+In the following steps, we deploy a [Node-RED](https://nodered.org/) application using the IoT-Hub Kickstart feature and use it for flow programming.
-1. Go back to your IoT Hub in the Scaleway console and click on the [Kickstart](https://console.scaleway.com/iot-hub/kickstarts/create) tab. Click **Create a Kickstart**:
+1. Go back to your IoT Hub in the Scaleway console and click on the [Kickstart](https://console.scaleway.com/iot-hub/kickstarts/create) tab. Click **Create a Kickstart**:
2. Select the **Flow Programming** Kickstart and choose your Hub and Device from the drop-down lists. Then select a region for your Kickstart to deploy. Click **Create** to deploy the Node-RED application on an [Instance](https://www.scaleway.com/en/virtual-instances/)
-3. Your IoT Kickstart application is deployed. The deployment may take some seconds, once it is ready, a green dot appears next to it. Click **Dashboard** to access the Node-RED dashboard:
+3. Your IoT Kickstart application is deployed. The deployment may take some seconds, once it is ready, a green dot appears next to it. Click **Dashboard** to access the Node-RED dashboard:
-4. Log into Node Red using the credentials you have set during the deployment:
+4. Log into Node Red using the credentials you have set during the deployment:
* Username: `admin`
* Password: `your-password`
-5. Open the menu and click on **Manage Palette**:
+5. Open the menu and click on **Manage Palette**:
-6. Find the `node-red-dashboard` and install it:
+6. Find the `node-red-dashboard` and install it:
-7. Create a layout as follows:
+7. Create a layout as follows:
-8. Then add the following nodes to a new flow:
+8. Then add the following nodes to a new flow:
- The following elements are used:
+ The following elements are used:
* `switch` – this will control the ESP8266 output
* `mqtt output node` – this will publish a message to the ESP8266 according to the switch state
@@ -472,14 +476,14 @@ In the following steps, we deploy a [Node-RED](https://nodered.org/) application
11. Configure the **MQTT input nodes** for `temperature` and `humidity`:
-12. Edit the **chart node** as follows:
+12. Edit the **chart node** as follows:
13. Edit the **gauge node** as follows:
-14. Link the nodes as follows:
+14. Link the nodes as follows:
15. Click **Deploy** to deploy the configuration.
-16. Open a new browser tab and go to: `http://your-ip:1880/ui/`. A Dashboard showing temperature and humidity displays. You can use the toggle switch for `Light`. If toggled, a notification displays in the Serial Monitor of the NodeMCU device:
+16. Open a new browser tab and go to: `http://your-ip:1880/ui/`. A Dashboard showing temperature and humidity displays. You can use the toggle switch for `Light`. If toggled, a notification displays in the Serial Monitor of the NodeMCU device:
## Conclusion
diff --git a/tutorials/configure-plex-s3/index.mdx b/tutorials/configure-plex-s3/index.mdx
index 5b840d4e16..5c809c38eb 100644
--- a/tutorials/configure-plex-s3/index.mdx
+++ b/tutorials/configure-plex-s3/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-08-05
posted: 2018-09-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-plex-add-folder.webp'
diff --git a/tutorials/configure-realtime-alerting-slack/index.mdx b/tutorials/configure-realtime-alerting-slack/index.mdx
index 65a69a2541..845d5584ae 100644
--- a/tutorials/configure-realtime-alerting-slack/index.mdx
+++ b/tutorials/configure-realtime-alerting-slack/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-26
posted: 2020-11-17
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-iothub_slack_howto_scopes.webp'
import image2 from './assets/scaleway-iothub_slack_howto_install.webp'
@@ -65,13 +70,13 @@ Here is where the magic happens: We will instruct our IoT Hub to call our Slack
2. Create a new route with the settings as follows:
-Replace the authorization token with the one you got for your Slack application in the headers.
+Replace the authorization token with the one you got for your Slack application in the headers.
## Sending messages to your Slack workspace
Now that we have everything set up, let's add a Device and send a message to trigger a Slack alert message.
-1. Go to the **Devices** tab of your IoT Hub.
+1. Go to the **Devices** tab of your IoT Hub.
2. Add a new device and make sure to select the **Allow insecure connections** option.
We selected **Allow insecure connections** to simplify this example. However, in a production environment, we recommend you select the **Deny Insecure Connections** option and use mutual TLS authentication.
@@ -80,7 +85,7 @@ Now that we have everything set up, let's add a Device and send a message to tri
After you click **Add a device to your Hub**, you are taken to the credentials section. In this section, you can add a [Certificate Authority](/iot-hub/concepts/#device-certificate) for your device. This step is not mandatory.
-3. Click **Back to devices**. Then, click the name of your device. The device information page displays.
+3. Click **Back to devices**. Then, click the name of your device. The device information page displays.
4. Click **MQTT Webclient** on the device overview page. The client will open and automatically connect.
5. Publish a message to the `alert/high` topic, in the `Publish` block:
- Write `alert/high` as the topic
diff --git a/tutorials/configure-slack-alerting/index.mdx b/tutorials/configure-slack-alerting/index.mdx
index a735b402b5..5489c54564 100644
--- a/tutorials/configure-slack-alerting/index.mdx
+++ b/tutorials/configure-slack-alerting/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-08-20
posted: 2025-02-18
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import SlackNotification from './assets/scaleway-slack-alerts-firing.webp'
diff --git a/tutorials/configure-smtp-relay-tem/index.mdx b/tutorials/configure-smtp-relay-tem/index.mdx
index 05df9618ae..b12f31ea90 100644
--- a/tutorials/configure-smtp-relay-tem/index.mdx
+++ b/tutorials/configure-smtp-relay-tem/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2023-08-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/configure-tem-smtp-with-wordpress-plugin/index.mdx b/tutorials/configure-tem-smtp-with-wordpress-plugin/index.mdx
index 348d3433ca..47335c6d0e 100644
--- a/tutorials/configure-tem-smtp-with-wordpress-plugin/index.mdx
+++ b/tutorials/configure-tem-smtp-with-wordpress-plugin/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-22
posted: 2024-04-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wordpress-welcome-page.webp'
import image2 from './assets/scaleway-wp-mail-smtp.webp'
diff --git a/tutorials/configure-virtual-machine-esxi/index.mdx b/tutorials/configure-virtual-machine-esxi/index.mdx
index 653af843b5..fa949b1271 100644
--- a/tutorials/configure-virtual-machine-esxi/index.mdx
+++ b/tutorials/configure-virtual-machine-esxi/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-28
posted: 2020-01-27
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-click-on-install.webp'
import image2 from './assets/scaleway-virtualizaton-distributions.webp'
@@ -73,7 +78,7 @@ ESXi ISO images are available on VMware's ["Evaluate Products"](https://www.vmwa
2. Click **KVM over IP**:
- A **Disclaimer** window pops up.
+ A **Disclaimer** window pops up.
3. Make sure you have read and agreed to the terms displayed and click **I ACCEPT**.
diff --git a/tutorials/configure-vm-hyperv/index.mdx b/tutorials/configure-vm-hyperv/index.mdx
index 549fb76c58..a0995a0bf5 100644
--- a/tutorials/configure-vm-hyperv/index.mdx
+++ b/tutorials/configure-vm-hyperv/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-26
posted: 2020-01-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-click-on-install.webp'
import image2 from './assets/scaleway-distribution-options.webp'
diff --git a/tutorials/configuring-gitlab-scaleway-elements-database/index.mdx b/tutorials/configuring-gitlab-scaleway-elements-database/index.mdx
index 9f2ecc04a9..05e571f2bf 100644
--- a/tutorials/configuring-gitlab-scaleway-elements-database/index.mdx
+++ b/tutorials/configuring-gitlab-scaleway-elements-database/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-24
posted: 2019-11-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-gitlab_dashboard.webp'
diff --git a/tutorials/configuring-loadbalancer-wordpress/index.mdx b/tutorials/configuring-loadbalancer-wordpress/index.mdx
index 73576e3973..533a5a0e46 100644
--- a/tutorials/configuring-loadbalancer-wordpress/index.mdx
+++ b/tutorials/configuring-loadbalancer-wordpress/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-27
posted: 2019-04-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-loadbalancer.webp'
import image2 from './assets/scaleway-lb-wp-lbip.webp'
diff --git a/tutorials/connect-generative-apis-sql/index.mdx b/tutorials/connect-generative-apis-sql/index.mdx
index 7b78df4817..14e38f9024 100644
--- a/tutorials/connect-generative-apis-sql/index.mdx
+++ b/tutorials/connect-generative-apis-sql/index.mdx
@@ -1,5 +1,5 @@
---
-title: Connect Generative APIs to Serverless SQL with the Model Context Protocol
+title: Connect Generative APIs to Serverless SQL with the Model Context Protocol
description: Create an intelligent agent that can analyze your Serverless SQL data using natural language queries through Model Context Protocol.
tags: AI MCP SQL agent python database
products:
@@ -9,11 +9,16 @@ dates:
validation: 2025-05-13
posted: 2025-05-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
-[Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is an open, standardized communication protocol that enables Large Language Models to interact with external tools and services through a defined interface.
+[Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is an open, standardized communication protocol that enables Large Language Models to interact with external tools and services through a defined interface.
This tutorial demonstrates how to build a data analysis agent that connects Scaleway's Generative APIs with Serverless SQL using MCP. You'll learn how to create an AI agent that can:
- Understand your database schema automatically
@@ -112,7 +117,7 @@ generic:
mcp:
servers:
database:
- command: "uv"
+ command: "uv"
args: ["run", "postgres-mcp"]
env:
DATABASE_URI: ""
@@ -168,7 +173,7 @@ Create a file called `agent.py` which will contain your agent logic.
- Uses an iterative planning approach to refine the results
- Limits the number of iterations to prevent infinite loops
-4. Create an entrypoint running the data analysis query **Get sales from last day**:
+4. Create an entrypoint running the data analysis query **Get sales from last day**:
```python
async def main() -> None:
async with fast.run() as agent:
@@ -185,7 +190,7 @@ Create a file called `agent.py` which will contain your agent logic.
The `fast-agent` framework provides details of all operations and outputs its data analysis:
- The sales data from the last day includes two transactions: a webcam purchased by Ivan at 14:52 and a printer purchased by Judy at 03:22.
+ The sales data from the last day includes two transactions: a webcam purchased by Ivan at 14:52 and a printer purchased by Judy at 03:22.
This tutorial demonstrated how to create an AI agent that can analyze your SQL database using natural language queries. By combining Scaleway **Generative APIs** with **Serverless SQL** through Model Context Protocol, you can create powerful tools that are accessible to non-technical users.
diff --git a/tutorials/create-deploy-staging-site-cpanel/index.mdx b/tutorials/create-deploy-staging-site-cpanel/index.mdx
index 931bfcda51..15d10a1c98 100644
--- a/tutorials/create-deploy-staging-site-cpanel/index.mdx
+++ b/tutorials/create-deploy-staging-site-cpanel/index.mdx
@@ -8,6 +8,11 @@ dates:
validation_frequency: 24
products:
- webhosting
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-cpanel-wp-toolkit.webp'
import image2 from './assets/scaleway-cpanel-wp-clone.webp'
@@ -21,7 +26,7 @@ A staging website mirrors your production website, containing identical data and
Changes made on the staging website are isolated until being transferred to the production website after thorough checks from the design and development teams. Operating in the same environment as the production environment, it serves as an ideal testing ground.
Previously, setting up a staging website involved a convoluted and time-intensive process of data export, database creation, file copying, and configuration adjustment, followed by a reverse procedure for deployment.
-This complexity discouraged many WordPress users from using staging websites, favoring live edits instead. However, for WordPress websites hosted on [Scaleway Web Hosting](https://www.scaleway.com/en/web-hosting/), powered by cPanel servers, the setup is simplified to just a few clicks.
+This complexity discouraged many WordPress users from using staging websites, favoring live edits instead. However, for WordPress websites hosted on [Scaleway Web Hosting](https://www.scaleway.com/en/website-hosting/), powered by cPanel servers, the setup is simplified to just a few clicks.
Creating a staging website for your WordPress website is a smart move, allowing you to test changes before making them live. Use cases for staging websites include:
* Testing new landing pages.
diff --git a/tutorials/create-models-django/index.mdx b/tutorials/create-models-django/index.mdx
index dd957310c5..442b67178b 100644
--- a/tutorials/create-models-django/index.mdx
+++ b/tutorials/create-models-django/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2018-11-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-django_admin_questions.webp'
import image2 from './assets/scaleway-django_admin_questions_2.webp'
diff --git a/tutorials/create-openwrt-image-for-scaleway/index.mdx b/tutorials/create-openwrt-image-for-scaleway/index.mdx
index 000df8bbe5..4b115cc02e 100644
--- a/tutorials/create-openwrt-image-for-scaleway/index.mdx
+++ b/tutorials/create-openwrt-image-for-scaleway/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-09
posted: 2022-10-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/create-serverless-scraping/index.mdx b/tutorials/create-serverless-scraping/index.mdx
index 85b3e79e5f..d853f6f255 100644
--- a/tutorials/create-serverless-scraping/index.mdx
+++ b/tutorials/create-serverless-scraping/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-19
posted: 2023-12-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-scraping-architecture.webp'
diff --git a/tutorials/create-valheim-server/index.mdx b/tutorials/create-valheim-server/index.mdx
index b581da5e87..36b0eb6dc6 100644
--- a/tutorials/create-valheim-server/index.mdx
+++ b/tutorials/create-valheim-server/index.mdx
@@ -6,9 +6,13 @@ hero: assets/scaleway_valheim.webp
dates:
validation: 2025-06-09
validation_frequency: 12
-
products:
- instances
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-valheim-logo.webp'
diff --git a/tutorials/create-wordpress-instances-cli/index.mdx b/tutorials/create-wordpress-instances-cli/index.mdx
index c3bb97c22d..c101167006 100644
--- a/tutorials/create-wordpress-instances-cli/index.mdx
+++ b/tutorials/create-wordpress-instances-cli/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2021-10-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/custom-email-domain-icloud/index.mdx b/tutorials/custom-email-domain-icloud/index.mdx
index a4f8a53d28..3927f21492 100644
--- a/tutorials/custom-email-domain-icloud/index.mdx
+++ b/tutorials/custom-email-domain-icloud/index.mdx
@@ -7,6 +7,11 @@ products:
dates:
posted: 2025-04-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-icloud-nav.webp'
import image2 from './assets/scaleway-icloud-menu.webp'
diff --git a/tutorials/dagster-serverless-jobs/index.mdx b/tutorials/dagster-serverless-jobs/index.mdx
index 0062aede22..c6a361cceb 100644
--- a/tutorials/dagster-serverless-jobs/index.mdx
+++ b/tutorials/dagster-serverless-jobs/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-02-11
posted: 2024-01-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-dagster-ui.webp'
import image2 from './assets/scaleway-dagster-materialize.webp'
diff --git a/tutorials/deploy-angular-application/index.mdx b/tutorials/deploy-angular-application/index.mdx
index 9b6daefa0c..1a2af689eb 100644
--- a/tutorials/deploy-angular-application/index.mdx
+++ b/tutorials/deploy-angular-application/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-26
posted: 2022-04-26
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-choose-container.webp'
import image2 from './assets/scaleway-deployed-containers.webp'
diff --git a/tutorials/deploy-automate-mkdocs-site/index.mdx b/tutorials/deploy-automate-mkdocs-site/index.mdx
index ca61fd8bbe..575cf81f2c 100644
--- a/tutorials/deploy-automate-mkdocs-site/index.mdx
+++ b/tutorials/deploy-automate-mkdocs-site/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-13
posted: 2025-03-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-awstats/index.mdx b/tutorials/deploy-awstats/index.mdx
index 0de1c5ab14..0aa32b1906 100644
--- a/tutorials/deploy-awstats/index.mdx
+++ b/tutorials/deploy-awstats/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-02
posted: 2018-12-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-awstats_homepage.webp'
diff --git a/tutorials/deploy-chatwoot-self-care/index.mdx b/tutorials/deploy-chatwoot-self-care/index.mdx
index f5ca92719b..1555b6021f 100644
--- a/tutorials/deploy-chatwoot-self-care/index.mdx
+++ b/tutorials/deploy-chatwoot-self-care/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-05-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-chatwoot-dashboard.webp'
diff --git a/tutorials/deploy-clickhouse-database/index.mdx b/tutorials/deploy-clickhouse-database/index.mdx
index 3413c5e0ae..4122b5ad76 100644
--- a/tutorials/deploy-clickhouse-database/index.mdx
+++ b/tutorials/deploy-clickhouse-database/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2022-12-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-demo-application-kubernetes-kapsule/index.mdx b/tutorials/deploy-demo-application-kubernetes-kapsule/index.mdx
index fa9be0a25a..3ca21f6f89 100644
--- a/tutorials/deploy-demo-application-kubernetes-kapsule/index.mdx
+++ b/tutorials/deploy-demo-application-kubernetes-kapsule/index.mdx
@@ -14,7 +14,7 @@ import Requirements from '@macros/iam/requirements.mdx'
# Deploy an intermediate workload on Scaleway Kubernetes Kapsule
-This tutorial guides you through deploying a demo application (`whoami`) on Scaleway Kubernetes Kapsule. You will create a managed Kubernetes cluster, deploy a sample application, configure an ingress controller for external access, set up auto-scaling, and test the setup.
+This tutorial guides you through deploying a demo application (`whoami`) on Scaleway Kubernetes Kapsule. You will create a managed Kubernetes cluster, deploy a sample application, configure an ingress controller for external access, set up auto-scaling, and test the setup.
This tutorial is designed for users with a basic understanding of Kubernetes concepts like pods, deployments, services, and ingress.
@@ -283,5 +283,5 @@ Delete the cluster to avoid unnecessary costs.
## Conclusion
-This tutorial has guided you through the full lifecycle of a Kubernetes deployment, from creating a cluster and deploying an application to configuring ingress, enabling autoscaling, performing load testing, monitoring performance, and cleaning up resources.
+This tutorial has guided you through the full lifecycle of a Kubernetes deployment, from creating a cluster and deploying an application to configuring ingress, enabling autoscaling, performing load testing, monitoring performance, and cleaning up resources.
You have completed the first steps to effectively manage cloud-native applications on Scaleway, with a focus on both manual resource control and automated scaling to build resilient, efficient, and scalable systems.
\ No newline at end of file
diff --git a/tutorials/deploy-hasura-engine-database-postgresql/index.mdx b/tutorials/deploy-hasura-engine-database-postgresql/index.mdx
index 51b689cb5b..12ff44b087 100644
--- a/tutorials/deploy-hasura-engine-database-postgresql/index.mdx
+++ b/tutorials/deploy-hasura-engine-database-postgresql/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-02
posted: 2020-07-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-instances-packer-terraform/index.mdx b/tutorials/deploy-instances-packer-terraform/index.mdx
index ad0a94997e..ac0abb7bf0 100644
--- a/tutorials/deploy-instances-packer-terraform/index.mdx
+++ b/tutorials/deploy-instances-packer-terraform/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-04-08
posted: 2018-08-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-packer-image.webp'
diff --git a/tutorials/deploy-istio-kapsule-proxy-protocol/index.mdx b/tutorials/deploy-istio-kapsule-proxy-protocol/index.mdx
index bfb48c9b55..e7c9a02568 100644
--- a/tutorials/deploy-istio-kapsule-proxy-protocol/index.mdx
+++ b/tutorials/deploy-istio-kapsule-proxy-protocol/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-13
posted: 2025-02-18
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-k3s-cluster-with-cilium/index.mdx b/tutorials/deploy-k3s-cluster-with-cilium/index.mdx
index 99e8b631be..277678a8d5 100644
--- a/tutorials/deploy-k3s-cluster-with-cilium/index.mdx
+++ b/tutorials/deploy-k3s-cluster-with-cilium/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-12
posted: 2023-10-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-validate-configuration.webp'
diff --git a/tutorials/deploy-laravel-on-serverless-containers/index.mdx b/tutorials/deploy-laravel-on-serverless-containers/index.mdx
index aab366d131..26115a3afd 100644
--- a/tutorials/deploy-laravel-on-serverless-containers/index.mdx
+++ b/tutorials/deploy-laravel-on-serverless-containers/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-19
posted: 2023-06-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-serverless-messaging-queue.webp'
import image2 from './assets/scaleway-serverless-messaging-credential.webp'
@@ -46,7 +51,7 @@ Laravel applications make use of [queues](https://laravel.com/docs/10.x/queues)
1. Create a queue. In this example, we create a `Standard` queue (At-least-once delivery, the order of messages is not preserved) with the default parameters. This queue will be the default queue used by our application.
-
+
2. Generate credentials. In this example, we generate the credentials with `read` and `write` access.
diff --git a/tutorials/deploy-librechat-with-generative-apis/index.mdx b/tutorials/deploy-librechat-with-generative-apis/index.mdx
index acfe070912..412288087b 100644
--- a/tutorials/deploy-librechat-with-generative-apis/index.mdx
+++ b/tutorials/deploy-librechat-with-generative-apis/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-13
posted: 2025-03-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-mdbooks-serverless-containers/index.mdx b/tutorials/deploy-mdbooks-serverless-containers/index.mdx
index b892c88ca1..013695855d 100644
--- a/tutorials/deploy-mdbooks-serverless-containers/index.mdx
+++ b/tutorials/deploy-mdbooks-serverless-containers/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-19
posted: 2024-10-30
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -45,7 +50,7 @@ With zero infrastructure management and many tools to integrate in CI/CD environ
4. Optionally, you can edit the content of the book to publish.
-5. Test the book using the command below:
+5. Test the book using the command below:
```
mdbook test
```
@@ -125,7 +130,7 @@ Remember to replace the placeholders with the corresponding values in the steps
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)
+ * 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.
diff --git a/tutorials/deploy-meilisearch-instance/index.mdx b/tutorials/deploy-meilisearch-instance/index.mdx
index 5752660688..96b77708de 100644
--- a/tutorials/deploy-meilisearch-instance/index.mdx
+++ b/tutorials/deploy-meilisearch-instance/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-11
posted: 2024-07-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-nextcloud-s3/index.mdx b/tutorials/deploy-nextcloud-s3/index.mdx
index 1d236eede3..76bc199ed6 100644
--- a/tutorials/deploy-nextcloud-s3/index.mdx
+++ b/tutorials/deploy-nextcloud-s3/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-07
posted: 2018-11-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image2 from './assets/scaleway-nc_apps.webp'
import image3 from './assets/scaleway-nc_external_storage_enable.webp'
diff --git a/tutorials/deploy-openproject-database-postgresql/index.mdx b/tutorials/deploy-openproject-database-postgresql/index.mdx
index d7e6749efc..4629452d24 100644
--- a/tutorials/deploy-openproject-database-postgresql/index.mdx
+++ b/tutorials/deploy-openproject-database-postgresql/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-02-18
posted: 2020-07-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-external-database.webp'
import image2 from './assets/scaleway-postgresql-ip-or-hostname.webp'
diff --git a/tutorials/deploy-openwebui-with-generative-apis/index.mdx b/tutorials/deploy-openwebui-with-generative-apis/index.mdx
index fef335ceaf..3ab1de7374 100644
--- a/tutorials/deploy-openwebui-with-generative-apis/index.mdx
+++ b/tutorials/deploy-openwebui-with-generative-apis/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-02-17
posted: 2025-02-17
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -35,7 +40,7 @@ By the end, you will have a fully functional AI-powered setup.
## Configuring Generative APIs on Scaleway
-Scaleway's Generative APIs provide access to advanced AI models via simple API calls. Follow the instructions below to set up Generative APIs
+Scaleway's Generative APIs provide access to advanced AI models via simple API calls. Follow the instructions below to set up Generative APIs
### Creating an API key
diff --git a/tutorials/deploy-penpot-with-docker-instantapp/index.mdx b/tutorials/deploy-penpot-with-docker-instantapp/index.mdx
index dba81a8512..4da325b9a0 100644
--- a/tutorials/deploy-penpot-with-docker-instantapp/index.mdx
+++ b/tutorials/deploy-penpot-with-docker-instantapp/index.mdx
@@ -8,7 +8,11 @@ dates:
validation: 2025-05-19
posted: 2022-09-28
validation_frequency: 12
-
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
hero: assets/scaleway-penpot.webp
---
import image from './assets/scaleway-penpot-account-creation.webp'
diff --git a/tutorials/deploy-phpmyadmin-with-docker/index.mdx b/tutorials/deploy-phpmyadmin-with-docker/index.mdx
index f3bbe70a74..bc1db53399 100644
--- a/tutorials/deploy-phpmyadmin-with-docker/index.mdx
+++ b/tutorials/deploy-phpmyadmin-with-docker/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2018-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway_database_information.webp'
import image2 from './assets/scaleway_phpmyadmin_login.webp'
diff --git a/tutorials/deploy-remote-desktop-ubuntu-2204/index.mdx b/tutorials/deploy-remote-desktop-ubuntu-2204/index.mdx
index af023dbee1..31fdaba0ac 100644
--- a/tutorials/deploy-remote-desktop-ubuntu-2204/index.mdx
+++ b/tutorials/deploy-remote-desktop-ubuntu-2204/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2022-05-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-rdp_01.webp'
import image2 from './assets/scaleway-rdp_02.webp'
diff --git a/tutorials/deploy-saas-application/index.mdx b/tutorials/deploy-saas-application/index.mdx
index ac8ff260ca..74d89b711d 100644
--- a/tutorials/deploy-saas-application/index.mdx
+++ b/tutorials/deploy-saas-application/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-03-27
posted: 2021-03-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -93,7 +98,7 @@ In all applications, you have to define settings, usually based on environment v
- `AWS_S3_HOST` and `AWS_S3_ENDPOINT_URL` are the URLs needed to access your Object Storage bucket. They are composed of the previously defined variables.
- `AWS_LOCATION` is the folder that will be created in our Object Storage bucket for our static files
- `STATIC_URL` has changed
- - `STORAGES` defines the new storage class that we want to use, here standard Amazon S3 protocol storage. We now need to give values to our environment values, so that they can be correctly found by `settings.py` via `os.getenv('MY_VAR_NAME')`.
+ - `STORAGES` defines the new storage class that we want to use, here standard Amazon S3 protocol storage. We now need to give values to our environment values, so that they can be correctly found by `settings.py` via `os.getenv('MY_VAR_NAME')`.
Remember that Amazon S3 is a standard protocol. Even though the `boto3` library asks us to prefix variables with `AWS`, it nonetheless works perfectly with Scaleway Object Storage.
diff --git a/tutorials/deploy-static-website-with-hugo-and-github-runners-to-object-storage/index.mdx b/tutorials/deploy-static-website-with-hugo-and-github-runners-to-object-storage/index.mdx
index 974c40451d..88bfd5d42b 100644
--- a/tutorials/deploy-static-website-with-hugo-and-github-runners-to-object-storage/index.mdx
+++ b/tutorials/deploy-static-website-with-hugo-and-github-runners-to-object-storage/index.mdx
@@ -2,12 +2,17 @@
title: Deploying a static website to Object Storage with Hugo and GitHub runners
description: Learn how to deploy a static website to Object Storage using Hugo and GitHub runners in this comprehensive tutorial.
tags: hugo cms github
-products:
+products:
- object-storage
dates:
validation: 2025-06-25
posted: 2022-12-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -113,7 +118,7 @@ Run the following commands to create a new site using Hugo.
1. Open a web browser and go to your project's repository on [GitHub.com](http://github.com).
2. Click the **Settings** tab to display the settings of your repository.
3. Click **Secrets** > **Actions** in the side menu. The list of Actions secrets displays. GitHub Secrets are encrypted data of sensitive information. They are used here to store the Scaleway secret key and access key.
-4. Click **New repository secret** to create a new secret. Name it `SCW_ACCESS_KEY_ID` and enter your access key as secret value.
+4. Click **New repository secret** to create a new secret. Name it `SCW_ACCESS_KEY_ID` and enter your access key as secret value.
5. Click **Add secret** to save your configuration.
6. Repeat the step above with a secret named `SCW_SECRET_ACCESS_KEY` and your secret key as secret value.
7. Click the **Actions** tab. A list of suggested GitHub Actions for your project displays. Click **Skip this and set up a workflow yourself**.
diff --git a/tutorials/deploy-ubuntu-20-04-instance-scaleway-elements/index.mdx b/tutorials/deploy-ubuntu-20-04-instance-scaleway-elements/index.mdx
index 87966cd99d..875491492f 100644
--- a/tutorials/deploy-ubuntu-20-04-instance-scaleway-elements/index.mdx
+++ b/tutorials/deploy-ubuntu-20-04-instance-scaleway-elements/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-05
posted: 2021-12-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-ubuntu-22-04-instance/index.mdx b/tutorials/deploy-ubuntu-22-04-instance/index.mdx
index 1007801030..85ebf155c6 100644
--- a/tutorials/deploy-ubuntu-22-04-instance/index.mdx
+++ b/tutorials/deploy-ubuntu-22-04-instance/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-06
posted: 2022-08-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploy-umami-on-serverless-containers/index.mdx b/tutorials/deploy-umami-on-serverless-containers/index.mdx
index b556a22b10..a96617240d 100644
--- a/tutorials/deploy-umami-on-serverless-containers/index.mdx
+++ b/tutorials/deploy-umami-on-serverless-containers/index.mdx
@@ -7,10 +7,16 @@ products:
- instances
- containers
- container-registry
+ - postgresql-and-mysql
dates:
validation: 2025-03-27
posted: 2021-04-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-umami-namespace-public.webp'
import image2 from './assets/scaleway-serverless-containers-namesp-list.webp'
diff --git a/tutorials/deploy-wordpress-from-application-library/index.mdx b/tutorials/deploy-wordpress-from-application-library/index.mdx
index 820986b4ba..baebec20ec 100644
--- a/tutorials/deploy-wordpress-from-application-library/index.mdx
+++ b/tutorials/deploy-wordpress-from-application-library/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2022-04-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-kubernetes-easy-deploy.webp'
import image2 from './assets/scaleway-kubernetes-deploy-app.webp'
@@ -75,6 +80,6 @@ You can perform most of these steps directly from the Scaleway console.
This behavior is a security measure as the Application Library automatically creates the missing credentials that are not set at the deployment of the application and stores them into secrets within your Kubernetes cluster.
To retrieve these secrets, you might need to run command lines such as the following:
- `kubectl get secret --namespace "cms-ns" wordpress-mariadb -o jsonpath="{.data.mariadb-password}" | base64 --decode`
+ `kubectl get secret --namespace "cms-ns" wordpress-mariadb -o jsonpath="{.data.mariadb-password}" | base64 --decode`
All required instructions are given in the error message.
\ No newline at end of file
diff --git a/tutorials/deploy-wordpress-managed-database-mysql8/index.mdx b/tutorials/deploy-wordpress-managed-database-mysql8/index.mdx
index 62b9127e78..1d1eb5c40c 100644
--- a/tutorials/deploy-wordpress-managed-database-mysql8/index.mdx
+++ b/tutorials/deploy-wordpress-managed-database-mysql8/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-25
posted: 2020-06-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-db_list.webp'
import image2 from './assets/scaleway-new_db_1.webp'
diff --git a/tutorials/deploying-a-documentation-website-with-docusaurus-on-scaleway/index.mdx b/tutorials/deploying-a-documentation-website-with-docusaurus-on-scaleway/index.mdx
index c8085b1a33..1188f0fbe9 100644
--- a/tutorials/deploying-a-documentation-website-with-docusaurus-on-scaleway/index.mdx
+++ b/tutorials/deploying-a-documentation-website-with-docusaurus-on-scaleway/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-11
posted: 2023-01-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploying-hubble-add-on-scaleway-kubernetes-clusters/index.mdx b/tutorials/deploying-hubble-add-on-scaleway-kubernetes-clusters/index.mdx
index 5bff9dd69e..b8832d03e4 100644
--- a/tutorials/deploying-hubble-add-on-scaleway-kubernetes-clusters/index.mdx
+++ b/tutorials/deploying-hubble-add-on-scaleway-kubernetes-clusters/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-05
posted: 2025-03-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/deploying-jellyfin-docker/index.mdx b/tutorials/deploying-jellyfin-docker/index.mdx
index cd38971f53..0b8f1bcb9e 100644
--- a/tutorials/deploying-jellyfin-docker/index.mdx
+++ b/tutorials/deploying-jellyfin-docker/index.mdx
@@ -130,8 +130,8 @@ We will use an Ubuntu-based Instance and the official Jellyfin Docker container.
- JELLYFIN_PublishedServerUrl=http://your_instance_ip:8096
```
- Customize the volumes:
- - Replace `/path/to/your/media` with the actual path to your media files on the Instance. You can mount additional volumes if needed.
+ Customize the volumes:
+ - Replace `/path/to/your/media` with the actual path to your media files on the Instance. You can mount additional volumes if needed.
- Replace `your_instance_ip` with the public IP.
- Replace `` and `` with the `jellyfin` user ID and group ID retrieved in the previous step.
@@ -151,9 +151,9 @@ We will use an Ubuntu-based Instance and the official Jellyfin Docker container.
## Accessing Jellyfin
1. Open a web browser on your local machine and navigate to `http://your_instance_ip:8096`, replacing `your_instance_ip` with the Instance's public IP.
-2. Follow the on-screen setup wizard:
+2. Follow the on-screen setup wizard:
- Create an admin account
-- Add your media libraries, and
+- Add your media libraries, and
- Configure settings like language and metadata.
diff --git a/tutorials/deploying-qdrant-vectordb-kubernetes/index.mdx b/tutorials/deploying-qdrant-vectordb-kubernetes/index.mdx
index 936d991564..357bab1b37 100644
--- a/tutorials/deploying-qdrant-vectordb-kubernetes/index.mdx
+++ b/tutorials/deploying-qdrant-vectordb-kubernetes/index.mdx
@@ -6,9 +6,13 @@ dates:
validation: 2025-04-30
posted: 2024-04-16
validation_frequency: 12
-
products:
- kubernetes
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/dhclient-dedibox/index.mdx b/tutorials/dhclient-dedibox/index.mdx
index d8130086c9..f89840f27f 100644
--- a/tutorials/dhclient-dedibox/index.mdx
+++ b/tutorials/dhclient-dedibox/index.mdx
@@ -6,9 +6,13 @@ dates:
validation: 2025-06-09
posted: 2021-08-03
validation_frequency: 12
-
products:
- dedibox
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/dhcpcd-dedibox/index.mdx b/tutorials/dhcpcd-dedibox/index.mdx
index a088cd0573..7c8c6bfae6 100644
--- a/tutorials/dhcpcd-dedibox/index.mdx
+++ b/tutorials/dhcpcd-dedibox/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2021-03-12
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/discourse-forum/index.mdx b/tutorials/discourse-forum/index.mdx
index 7f86ff4383..63f2080a4a 100644
--- a/tutorials/discourse-forum/index.mdx
+++ b/tutorials/discourse-forum/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-19
posted: 2020-04-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-discourse01.webp'
import image2 from './assets/scaleway-discourse02.webp'
diff --git a/tutorials/django-ubuntu-focal-fossa/index.mdx b/tutorials/django-ubuntu-focal-fossa/index.mdx
index 6a20e8e6c1..bcb6e17e8b 100644
--- a/tutorials/django-ubuntu-focal-fossa/index.mdx
+++ b/tutorials/django-ubuntu-focal-fossa/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2018-10-29
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-django_installed.webp'
import image2 from './assets/scaleway-django_admin.webp'
diff --git a/tutorials/docker-instantapp/index.mdx b/tutorials/docker-instantapp/index.mdx
index bcec64230c..c3d150e31a 100644
--- a/tutorials/docker-instantapp/index.mdx
+++ b/tutorials/docker-instantapp/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-02
posted: 2019-05-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-docker_app_running.webp'
diff --git a/tutorials/easydeploy-argocd/index.mdx b/tutorials/easydeploy-argocd/index.mdx
index 696bf4a4bc..a03dca4a31 100644
--- a/tutorials/easydeploy-argocd/index.mdx
+++ b/tutorials/easydeploy-argocd/index.mdx
@@ -8,12 +8,17 @@ dates:
validation: 2024-06-13
posted: 2024-06-13
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
-It synchronizes application definitions from a Git repository, ensuring that the desired state of applications is maintained across clusters.
+It synchronizes application definitions from a Git repository, ensuring that the desired state of applications is maintained across clusters.
Designed for high scalability and automation, Argo CD supports multi-cluster deployments, automated rollbacks, and advanced RBAC policies.
This makes it ideal for managing complex Kubernetes environments with precision and reliability.
diff --git a/tutorials/easydeploy-gitlab-runner/index.mdx b/tutorials/easydeploy-gitlab-runner/index.mdx
index 48d684a0a8..6f89602bc1 100644
--- a/tutorials/easydeploy-gitlab-runner/index.mdx
+++ b/tutorials/easydeploy-gitlab-runner/index.mdx
@@ -7,6 +7,11 @@ dates:
validation: 2025-07-16
posted: 2024-06-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/easydeploy-gitlab-server/index.mdx b/tutorials/easydeploy-gitlab-server/index.mdx
index 3f8eb7831a..c2f4d47d30 100644
--- a/tutorials/easydeploy-gitlab-server/index.mdx
+++ b/tutorials/easydeploy-gitlab-server/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-01-02
posted: 2024-06-20
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/easydeploy-grafana/index.mdx b/tutorials/easydeploy-grafana/index.mdx
index 9032905d4e..cb14155788 100644
--- a/tutorials/easydeploy-grafana/index.mdx
+++ b/tutorials/easydeploy-grafana/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-06-13
posted: 2024-06-13
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/easydeploy-vault/index.mdx b/tutorials/easydeploy-vault/index.mdx
index 638d1d8324..8cdde9e3e9 100644
--- a/tutorials/easydeploy-vault/index.mdx
+++ b/tutorials/easydeploy-vault/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-06-13
posted: 2024-06-13
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/enabling-encryption-in-kapsule-with-cilium/index.mdx b/tutorials/enabling-encryption-in-kapsule-with-cilium/index.mdx
index 994c0d6eda..3b0f559692 100644
--- a/tutorials/enabling-encryption-in-kapsule-with-cilium/index.mdx
+++ b/tutorials/enabling-encryption-in-kapsule-with-cilium/index.mdx
@@ -8,12 +8,17 @@ dates:
validation: 2025-07-21
posted: 2024-12-31
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
Ye
-This guide explains how to enable WireGuard encryption in Scaleway’s Kapsule Managed Kubernetes service.
+This guide explains how to enable WireGuard encryption in Scaleway’s Kapsule Managed Kubernetes service.
By default, Cilium is selected as the CNI when creating a cluster. We will configure encryption via a `CiliumNodeConfig` resource and then verify that traffic is indeed encrypted.
diff --git a/tutorials/encode-videos-using-serverless-jobs/index.mdx b/tutorials/encode-videos-using-serverless-jobs/index.mdx
index c50f6a1775..88318c4d63 100644
--- a/tutorials/encode-videos-using-serverless-jobs/index.mdx
+++ b/tutorials/encode-videos-using-serverless-jobs/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-06-09
posted: 2024-05-15
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-encoding_job_image.webp'
import image2 from './assets/scaleway-encoding_job_env.webp'
diff --git a/tutorials/encrypt-s3-data-rclone/index.mdx b/tutorials/encrypt-s3-data-rclone/index.mdx
index c03606d2f5..eeadb312db 100644
--- a/tutorials/encrypt-s3-data-rclone/index.mdx
+++ b/tutorials/encrypt-s3-data-rclone/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2020-06-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ -
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/encrypt-volumes/index.mdx b/tutorials/encrypt-volumes/index.mdx
index 6aee40a7e0..0e4f725f1f 100644
--- a/tutorials/encrypt-volumes/index.mdx
+++ b/tutorials/encrypt-volumes/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2019-02-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/export-audit-trail-to-datadog/index.mdx b/tutorials/export-audit-trail-to-datadog/index.mdx
index bc5a01c290..5d0cd69ee7 100644
--- a/tutorials/export-audit-trail-to-datadog/index.mdx
+++ b/tutorials/export-audit-trail-to-datadog/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-02-10
posted: 2025-02-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-adt-logs-datadog.webp'
diff --git a/tutorials/first-steps-linux-command-line/index.mdx b/tutorials/first-steps-linux-command-line/index.mdx
index b4df529a25..38821a561c 100644
--- a/tutorials/first-steps-linux-command-line/index.mdx
+++ b/tutorials/first-steps-linux-command-line/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-06-02
posted: 2023-11-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-win.webp'
import image2 from './assets/scaleway-terminal.webp'
@@ -48,7 +53,7 @@ When you are first connected to the command line (aka the **shell**), you will s
```sh
-username@machine-name:~$
+username@machine-name:~$
```
@@ -77,7 +82,7 @@ You see an output that prints your current working directory to the screen, for
/home/username
```
-## Moving between directories - cd
+## Moving between directories - cd
You can move between directories with the `cd` command. It stands for **c**hange **d**irectory.
@@ -94,7 +99,7 @@ You can move between directories with the `cd` command. It stands for **c**hange
```
The working directory now displays, for example:
-
+
```sh
/home
```
@@ -122,7 +127,7 @@ You can use the `ls` command to list the contents of your working directory. It
The output will depend on the contents of your particular directory, but you may see something like the following:
```sh
- Documents Music Templates
+ Documents Music Templates
Desktop Pictures config.txt
Downloads Public Videos
```
@@ -312,7 +317,7 @@ You can move files and directories with the `mv` (**m**o**v**e) and `cp` (**c**o
8. List contents of the current directory, to see that `second-text-file.txt` is no longer there:
```sh
- ls
+ ls
```
9. Use the following commands to change your working directory to `dir-2` and see that `second-text-file.txt` has been moved there:
@@ -365,9 +370,9 @@ You can remove files and directories with the `rm` (**r**e**m**ove) command.
The `-r` part of this command is known as a **flag** or **option**. Flags are used to modify the behavior of a command slightly. Nearly all commands, including `ls`, `cat`, `mkdir` etc. have flags available to use.
-
+
Flags typically take the form of either one dash followed by a single letter (e.g. `-r`) or two dashes followed by a word (e.g. `--recursive`). Often both flag forms are available for the same option.
-
+
To find out about the flags that can be used with each command and what they can do, run ` --help` in your terminal, replacing `` by the command you want help with, e.g. `cat --help`, `rm --help` etc.
@@ -409,7 +414,7 @@ You need to use [sudo](#running-commands-as-the-superuser-sudo) for these comman
```sh
After this operation, 19,5 kB of additional disk space will be used.
- Do you want to continue? [Y/n]
+ Do you want to continue? [Y/n]
```
Hit `y` on your keyboard and then **Enter**, to continue.
@@ -452,16 +457,16 @@ When creating user accounts, you need to either be logged in as `root`, or else
Adding new user `sarah' (1003) with group `sarah' ...
Creating home directory `/home/sarah' ...
Copying files from `/etc/skel' ...
- New password:
- Retype new password:
+ New password:
+ Retype new password:
passwd: password updated successfully
Changing the user information for sarah
Enter the new value, or press ENTER for the default
Full Name []: Sarah
Room Number []: 3
- Work Phone []:
- Home Phone []:
- Other []:
+ Work Phone []:
+ Home Phone []:
+ Other []:
Is the information correct? [Y/n] y
```
diff --git a/tutorials/flask/index.mdx b/tutorials/flask/index.mdx
index 387e6b93b5..0810483058 100644
--- a/tutorials/flask/index.mdx
+++ b/tutorials/flask/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2018-08-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-FlaskApp.webp'
import image2 from './assets/scaleway-FlaskHello.webp'
diff --git a/tutorials/focalboard-project-management/index.mdx b/tutorials/focalboard-project-management/index.mdx
index 190e408b8c..6089d7587e 100644
--- a/tutorials/focalboard-project-management/index.mdx
+++ b/tutorials/focalboard-project-management/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2023-02-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-focalboard-splash.webp'
diff --git a/tutorials/foreman-puppet/index.mdx b/tutorials/foreman-puppet/index.mdx
index d2641f32b3..d752a8a107 100644
--- a/tutorials/foreman-puppet/index.mdx
+++ b/tutorials/foreman-puppet/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2018-08-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-foreman_login.webp'
import image2 from './assets/scaleway-dashboard.webp'
diff --git a/tutorials/get-started-containers-docker/index.mdx b/tutorials/get-started-containers-docker/index.mdx
index 1b4ca650fc..bf5a561cd5 100644
--- a/tutorials/get-started-containers-docker/index.mdx
+++ b/tutorials/get-started-containers-docker/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2022-04-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/get-started-crossplane-kubernetes/index.mdx b/tutorials/get-started-crossplane-kubernetes/index.mdx
index 5ae2dd439b..87ef87b111 100644
--- a/tutorials/get-started-crossplane-kubernetes/index.mdx
+++ b/tutorials/get-started-crossplane-kubernetes/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-06-02
posted: 2023-05-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-kubeconfig-terminal-screen.webp'
diff --git a/tutorials/get-started-deploy-kapsule/index.mdx b/tutorials/get-started-deploy-kapsule/index.mdx
index 253f102d6e..d1cd201e76 100644
--- a/tutorials/get-started-deploy-kapsule/index.mdx
+++ b/tutorials/get-started-deploy-kapsule/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-02
posted: 2022-05-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-cluster.webp'
import image2 from './assets/scaleway-worker-node-full-kubelet.webp'
diff --git a/tutorials/get-started-kubernetes-loadbalancer/index.mdx b/tutorials/get-started-kubernetes-loadbalancer/index.mdx
index 67e5bee4cb..27eee849f4 100644
--- a/tutorials/get-started-kubernetes-loadbalancer/index.mdx
+++ b/tutorials/get-started-kubernetes-loadbalancer/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2023-09-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-cluster.webp'
import image2 from './assets/scaleway-nodeport.webp'
@@ -57,7 +62,7 @@ As mentioned, NodePort is a **Service**. It is important to differentiate betwee
- **Deployments** keep a set of pods running with containerized applications
- **Services** enable network access to a specified set of pods.
-Why then can’t we just keep using NodePort, why do we need a Load Balancer?
+Why then can’t we just keep using NodePort, why do we need a Load Balancer?
NodePort is great for quick testing and can be adequate for single-node, uncomplicated clusters. It is also free. However, it is not ideal for production, for reasons of security and ease of management. You are limited in which port numbers can be opened, and as your cluster starts to scale in complexity, maybe containing many microservices, NodePort gets less practical to use.
diff --git a/tutorials/get-started-kubernetes-storage/index.mdx b/tutorials/get-started-kubernetes-storage/index.mdx
index d21a05c450..6c09762709 100644
--- a/tutorials/get-started-kubernetes-storage/index.mdx
+++ b/tutorials/get-started-kubernetes-storage/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-11
posted: 2024-01-29
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-persistent-volume-claim.webp'
import image2 from './assets/scaleway-stateful-set.webp'
@@ -65,7 +70,7 @@ What kind of applications need to use persistent volumes? To answer this, we mus
Cloud providers such as Scaleway provide and default **StorageClasses** for their managed Kubernetes products. StorageClasses define the classes of storage the provider can offer for the cluster. The user can list the StorageClasses available by using the command `kubectl get storageclass`.
-Scaleway provides [Block Storage](/block-storage/quickstart/) as its StorageClass, meaning that we offer persistent storage for Kapsule clusters via our Block Storage product.
+Scaleway provides [Block Storage](/block-storage/quickstart/) as its StorageClass, meaning that we offer persistent storage for Kapsule clusters via our Block Storage product.
Scaleway has upgraded the Block Storage used by our StorageClass, offering better performance. Our previous class was `scw-bss`, which has now been replaced by `sbs`, giving you faster read/write operations with lower latency.
@@ -144,7 +149,7 @@ Both Deployments and StatefulSets manage the deployment and scaling of a set of
- **apiVersion** specifies which version of the Kubernetes API to use to create the object
- **kind** specifies the kind of object defined in this YAML file, here a StatefulSet
- **metadata** helps uniquely identify our StatefulSet object: we give it a name (`ss-csi-scw`), and a label.
- - **spec** specifies the desired behavior of the StatefulSet. There are many sub-parts here:
+ - **spec** specifies the desired behavior of the StatefulSet. There are many sub-parts here:
- **serviceName** is the name used to create identities for the pods
- **replicas** defines the number of replica pods to create
- **selector** defines how the StatefulSet finds which pods to manage, using a label
@@ -156,7 +161,7 @@ Both Deployments and StatefulSets manage the deployment and scaling of a set of
- **metadata** helps uniquely identify the volume claim, we use the same label as before
- **spec** defines the desired specification of the volume.
- **accessMode** declares that the volume can be read-write by a single node
- - **storageClassName** defines the name of the storage class to use
+ - **storageClassName** defines the name of the storage class to use
- **resources** defines how much storage we want (1 gigabyte).
4. Tell Kubernetes to create the StatefulSet from the manifest we just created with the following command:
@@ -191,7 +196,7 @@ Both Deployments and StatefulSets manage the deployment and scaling of a set of
```
Note that each pod has its own identity.
-
+
You can now check the creation of the volumes for the StatefulSet in the Scaleway console:
2. Open a browser and go to [console.scaleway.com](https://console.scaleway.com).
diff --git a/tutorials/get-started-python/index.mdx b/tutorials/get-started-python/index.mdx
index 88affae27c..a3b8bff64c 100644
--- a/tutorials/get-started-python/index.mdx
+++ b/tutorials/get-started-python/index.mdx
@@ -4,11 +4,16 @@ description: This tutorial shows you how to get started with Python, and is aime
tags: python elif variables hello-world boolean
hero: assets/scaleway-python.webp
products:
- - compute
+ - instances
dates:
validation: 2025-02-18
posted: 2023-01-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-terminal.webp'
@@ -33,7 +38,7 @@ Follow their [beginners guide](https://wiki.python.org/moin/BeginnersGuide/Downl
[Anaconda](https://www.anaconda.com/) bundles together the basic Python interpreter with some other useful tools that can make the Python experience more user-friendly, notably:
-- **Extra packages** such as NumPy, pandas, SciPy, and Matplotlib. At a basic level, you can think of packages like "add-ons", letting you use extra commands and functions in your code that do not come with the basic Python installation. For example, the NumPy package gives you a range of complex mathematic functions and random number generators.
+- **Extra packages** such as NumPy, pandas, SciPy, and Matplotlib. At a basic level, you can think of packages like "add-ons", letting you use extra commands and functions in your code that do not come with the basic Python installation. For example, the NumPy package gives you a range of complex mathematic functions and random number generators.
- **Conda**: a package manager, which makes it easy for you to install and manage other Python packages in the future.
- **Jupyter Notebook**: an application that runs in your web browser, and gives you a user-friendly alternative to running your code in the terminal.
@@ -50,7 +55,7 @@ We will be coding from the **terminal**, also referred to as the **command line*
- If you installed Python via Anaconda, instead of the terminal open the **Anaconda Prompt**.
+ If you installed Python via Anaconda, instead of the terminal open the **Anaconda Prompt**.
2. Type the following command into the shell, and hit enter:
@@ -78,7 +83,7 @@ You're now ready to start coding with Python!
You might have heard people talk about "Hello world" before. When learning a new programming language, "Hello World" generally refers to the most basic task possible: coding something that displays "Hello world" on the screen. You can think of it as the entry-level onboarding task to familiarize yourself with the basic syntax of the language.
-So how do we get Python to display "Hello World"? The answer is: via the `print()` command. This has nothing to do with printing onto paper, and everything to do with displaying text. You can think of it like "printing" something to the screen.
+So how do we get Python to display "Hello World"? The answer is: via the `print()` command. This has nothing to do with printing onto paper, and everything to do with displaying text. You can think of it like "printing" something to the screen.
- The brackets `()` contain the text you want to print
- The text must be contained in quotation marks `" "` or `' '`
@@ -111,7 +116,7 @@ Variables are used to store and label data. They are a key part of any programmi
No output displays. This is because you have **created** a new variable (with the label `my_new_variable`) and **assigned** it (with the `=` operator) a **value** (`Hello world`) but you have not asked Python to do anything with that variable. Let's try that in the next step.
-2. Type the following command into the shell and hit enter:
+2. Type the following command into the shell and hit enter:
```
print(my_new_variable)
@@ -218,7 +223,7 @@ Variables are used to store and label data. They are a key part of any programmi
## 5: If statements
-This is where things start to get really interesting! If statements are fundamental to a lot of computer programs and scripts. They tell Python to only carry out an action **if** a certain condition is satisfied. Let's try some examples.
+This is where things start to get really interesting! If statements are fundamental to a lot of computer programs and scripts. They tell Python to only carry out an action **if** a certain condition is satisfied. Let's try some examples.
We assume that, as per our previous commands, we already have the variables `dogs` (=4) and `cats` (=2).
@@ -377,7 +382,7 @@ So far, we've been doing all our coding in the Python Interactive Shell, where y
3. Save the file as `animals.py`. Take note of where you save this file, specifically the **path** to the file. If you are using a graphical interface for your OS, you should be able to right-click the saved file and choose **properties** or similar to see the path of the file, e.g. `/home/user/animals.py`
-4. Open the terminal, [as you did in the earlier step](#2-getting-ready-to-code-opening-the-python-interactive-shell).
+4. Open the terminal, [as you did in the earlier step](#2-getting-ready-to-code-opening-the-python-interactive-shell).
5. Tell Python to run the code in `animals.py` by entering the following command. Make sure you replace the path to the file with the path you noted in step 3.
@@ -407,7 +412,7 @@ So far, we've been doing all our coding in the Python Interactive Shell, where y
if too_many_pets == True:
print("You have too many pets!")
- if cats > dogs:
+ if cats > dogs:
print("You should rehome some cats")
elif cats == dogs:
print("You should rehome some cats or dogs")
diff --git a/tutorials/getting-started-with-kops-on-scaleway/index.mdx b/tutorials/getting-started-with-kops-on-scaleway/index.mdx
index 29282bc9d7..db2f092417 100644
--- a/tutorials/getting-started-with-kops-on-scaleway/index.mdx
+++ b/tutorials/getting-started-with-kops-on-scaleway/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-10-08
posted: 2023-03-23
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/gitlab-instant-app/index.mdx b/tutorials/gitlab-instant-app/index.mdx
index 9ea7bbc084..bb00495118 100644
--- a/tutorials/gitlab-instant-app/index.mdx
+++ b/tutorials/gitlab-instant-app/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2015-05-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/glpi/index.mdx b/tutorials/glpi/index.mdx
index 2e84d2a035..9aff2a3d6b 100644
--- a/tutorials/glpi/index.mdx
+++ b/tutorials/glpi/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2020-08-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-agree-to-terms.webp'
import image2 from './assets/scaleway-install.webp'
diff --git a/tutorials/glusterfs/index.mdx b/tutorials/glusterfs/index.mdx
index a21d6c4b74..2f61705bef 100644
--- a/tutorials/glusterfs/index.mdx
+++ b/tutorials/glusterfs/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-02
posted: 2018-09-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/gpu-super-resolution/index.mdx b/tutorials/gpu-super-resolution/index.mdx
index 10be95ee0f..a145ca1351 100644
--- a/tutorials/gpu-super-resolution/index.mdx
+++ b/tutorials/gpu-super-resolution/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2020-09-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-plot.webp'
import image2 from './assets/scaleway-input-output.webp'
@@ -43,7 +48,7 @@ In this tutorial, we will show you how to prepare your data, construct the **sub
```
scp -r root@:/
```
-
+
Replace `` with the path to the directory you dataset is located in your local host. In `root@` replace `` with your remote GPU instance's IP address. `` should be replaced with the path you wish to save your datasets in your GPU Instance.
@@ -140,7 +145,7 @@ In this tutorial, we will show you how to prepare your data, construct the **sub
return image_LR, image_HR
```
-
+
If you want to know more about creating custom Python dataset classes, refer to the Pytorch ["Writing Custom Datasets, Dataloaders and Transforms"](https://pytorch.org/tutorials/beginner/data_loading_tutorial.html#dataset-class) tutorial.
diff --git a/tutorials/hadoop/index.mdx b/tutorials/hadoop/index.mdx
index e32052c873..28003da13e 100644
--- a/tutorials/hadoop/index.mdx
+++ b/tutorials/hadoop/index.mdx
@@ -3,11 +3,16 @@ title: Configuring Hadoop on Ubuntu Linux
description: This page details how to install and configure Hadoop
tags: Hadoop big-data Ubuntu
products:
- - compute
+ - instances
dates:
validation: 2025-04-22
posted: 2018-08-29
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-apacheDL.webp'
import image2 from './assets/scaleway-checksumDL.webp'
diff --git a/tutorials/hestiacp/index.mdx b/tutorials/hestiacp/index.mdx
index 114dea413a..61d6df5834 100644
--- a/tutorials/hestiacp/index.mdx
+++ b/tutorials/hestiacp/index.mdx
@@ -7,6 +7,11 @@ dates:
validation: 2025-04-22
posted: 2020-07-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-hestiacp_login.webp'
import image2 from './assets/scaleway-hestiacp_login.webp'
diff --git a/tutorials/host-github-runner/index.mdx b/tutorials/host-github-runner/index.mdx
index d5a3b4bcd0..bd6b43321b 100644
--- a/tutorials/host-github-runner/index.mdx
+++ b/tutorials/host-github-runner/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2018-04-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-github-actions-menu.webp'
import image2 from './assets/scaleway-github-settings-menu.webp'
diff --git a/tutorials/how-to-implement-rag-generativeapis/index.mdx b/tutorials/how-to-implement-rag-generativeapis/index.mdx
index abde02c1ab..ff71220a57 100644
--- a/tutorials/how-to-implement-rag-generativeapis/index.mdx
+++ b/tutorials/how-to-implement-rag-generativeapis/index.mdx
@@ -6,9 +6,13 @@ dates:
validation: 2025-05-12
posted: 2024-10-10
validation_frequency: 12
-
products:
- generative-apis
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/how-to-implement-rag/index.mdx b/tutorials/how-to-implement-rag/index.mdx
index 112e4850da..b57367f0db 100644
--- a/tutorials/how-to-implement-rag/index.mdx
+++ b/tutorials/how-to-implement-rag/index.mdx
@@ -6,6 +6,11 @@ products:
- managed-inference
dates:
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-apache-ansible/index.mdx b/tutorials/install-apache-ansible/index.mdx
index fdb1f29341..0fddbb5d73 100644
--- a/tutorials/install-apache-ansible/index.mdx
+++ b/tutorials/install-apache-ansible/index.mdx
@@ -3,11 +3,16 @@ title: Ansible Playbook for Apache installation
description: Learn to install Apache using Ansible playbook. Follow our guide to configure Ansible and deploy Apache on your servers effortlessly.
tags: Ansible Apache Playbook
products:
- - compute
+ - instances
dates:
validation: 2025-07-28
posted: 2018-08-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-apache_defaultpage.webp'
diff --git a/tutorials/install-cassandra/index.mdx b/tutorials/install-cassandra/index.mdx
index 4f63efe175..3083263548 100644
--- a/tutorials/install-cassandra/index.mdx
+++ b/tutorials/install-cassandra/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2018-10-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-cockroachdb-scaleway-instances/index.mdx b/tutorials/install-cockroachdb-scaleway-instances/index.mdx
index 77e2c2fad2..82cfc26036 100644
--- a/tutorials/install-cockroachdb-scaleway-instances/index.mdx
+++ b/tutorials/install-cockroachdb-scaleway-instances/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-04-09
posted: 2023-10-02
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -36,7 +41,7 @@ This article shows you how to install CockroachDB using three nodes on a Private
- Run each node on a separate machine.
Since CockroachDB replicates across nodes, running more than one node per machine increases the risk of data loss if a machine fails. Likewise, if a machine has multiple disks or SSDs, run one node with multiple `--store` flags and not one node per disk.
-
+
For more details about stores, see the [Start a Node](https://www.cockroachlabs.com/docs/v23.2/cockroach-start#store) documentation page.
- When starting each node, use the `--locality` flag to describe the node's location, for example, `--locality=region=fr-par,zone=fr-par-1`.
diff --git a/tutorials/install-configure-couchdb/index.mdx b/tutorials/install-configure-couchdb/index.mdx
index cce20e7efd..f5a1b092f5 100644
--- a/tutorials/install-configure-couchdb/index.mdx
+++ b/tutorials/install-configure-couchdb/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2018-07-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-couchdb-install-clustered.webp'
import image2 from './assets/scaleway-couchdb-privatedns-fqdn.webp'
diff --git a/tutorials/install-docker-ubuntu-bionic/index.mdx b/tutorials/install-docker-ubuntu-bionic/index.mdx
index 7da3e41cde..779297ab31 100644
--- a/tutorials/install-docker-ubuntu-bionic/index.mdx
+++ b/tutorials/install-docker-ubuntu-bionic/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2018-07-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-docker-container-run.webp'
import image2 from './assets/scaleway-docker-hello-world.webp'
diff --git a/tutorials/install-docker-ubuntu-jammy-jellyfish/index.mdx b/tutorials/install-docker-ubuntu-jammy-jellyfish/index.mdx
index 12323d831c..2d04af56c3 100644
--- a/tutorials/install-docker-ubuntu-jammy-jellyfish/index.mdx
+++ b/tutorials/install-docker-ubuntu-jammy-jellyfish/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-18
posted: 2023-08-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-github-actions-runner-mac/index.mdx b/tutorials/install-github-actions-runner-mac/index.mdx
index 1f836d7af3..eb52e22ef6 100644
--- a/tutorials/install-github-actions-runner-mac/index.mdx
+++ b/tutorials/install-github-actions-runner-mac/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2024-01-31
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-gh-runner-mac-arm64.webp'
import image2 from './assets/scaleway-gh-runner-status-idle.webp'
diff --git a/tutorials/install-ispconfig/index.mdx b/tutorials/install-ispconfig/index.mdx
index 5e82c7ef47..9d52931cc2 100644
--- a/tutorials/install-ispconfig/index.mdx
+++ b/tutorials/install-ispconfig/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2019-01-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-kvm-elastic-metal/index.mdx b/tutorials/install-kvm-elastic-metal/index.mdx
index 4fc7900dc4..738c71e183 100644
--- a/tutorials/install-kvm-elastic-metal/index.mdx
+++ b/tutorials/install-kvm-elastic-metal/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-02
posted: 2019-05-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-mattermost/index.mdx b/tutorials/install-mattermost/index.mdx
index cceb12e26e..e5310675a3 100644
--- a/tutorials/install-mattermost/index.mdx
+++ b/tutorials/install-mattermost/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-02-18
posted: 2019-01-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mattermost-login.webp'
import image2 from './assets/scaleway-mattermost-listen-address.webp'
diff --git a/tutorials/install-medusa/index.mdx b/tutorials/install-medusa/index.mdx
index f4e2a43e59..7a0f608a22 100644
--- a/tutorials/install-medusa/index.mdx
+++ b/tutorials/install-medusa/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-06-02
posted: 2023-05-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-openlitespeed-wordpress/index.mdx b/tutorials/install-openlitespeed-wordpress/index.mdx
index 7b1bddad0c..0c84ced5b9 100644
--- a/tutorials/install-openlitespeed-wordpress/index.mdx
+++ b/tutorials/install-openlitespeed-wordpress/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2019-08-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-ols_demo.webp'
import image2 from './assets/scaleway-ols_login.webp'
diff --git a/tutorials/install-openvpn/index.mdx b/tutorials/install-openvpn/index.mdx
index 3c1d7c111f..75d38a8439 100644
--- a/tutorials/install-openvpn/index.mdx
+++ b/tutorials/install-openvpn/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2019-01-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-parse-server/index.mdx b/tutorials/install-parse-server/index.mdx
index 917794e270..5dcb8934cf 100644
--- a/tutorials/install-parse-server/index.mdx
+++ b/tutorials/install-parse-server/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-19
posted: 2020-11-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-parse_dashboardlogin.webp'
import image2 from './assets/scaleway-parse_dashboard.webp'
diff --git a/tutorials/install-pgbouncer/index.mdx b/tutorials/install-pgbouncer/index.mdx
index 625138f04c..e2d12423fd 100644
--- a/tutorials/install-pgbouncer/index.mdx
+++ b/tutorials/install-pgbouncer/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-19
posted: 2022-02-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-php-composer/index.mdx b/tutorials/install-php-composer/index.mdx
index 1a46702b68..4d0df6f304 100644
--- a/tutorials/install-php-composer/index.mdx
+++ b/tutorials/install-php-composer/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2024-05-27
posted: 2018-01-29
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-postgresql/index.mdx b/tutorials/install-postgresql/index.mdx
index 5ed0764a89..77c41ef6cb 100644
--- a/tutorials/install-postgresql/index.mdx
+++ b/tutorials/install-postgresql/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-02
posted: 2018-08-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-rkhunter/index.mdx b/tutorials/install-rkhunter/index.mdx
index aa611a3848..62f46a7ff4 100644
--- a/tutorials/install-rkhunter/index.mdx
+++ b/tutorials/install-rkhunter/index.mdx
@@ -2,12 +2,17 @@
title: Detecting rootkits and security holes with rkhunter on Ubuntu
description: Detecting rootkits and security holes with rkhunter on Ubuntu
products:
- - compute
+ - instances
tags: Rootkits rkhunter security
dates:
validation: 2025-06-02
posted: 2018-10-30
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/install-wireguard/index.mdx b/tutorials/install-wireguard/index.mdx
index 186e5f7140..ef6911f42b 100644
--- a/tutorials/install-wireguard/index.mdx
+++ b/tutorials/install-wireguard/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2019-03-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wg-android-home.webp'
import image2 from './assets/scaleway-wg-android-conf.webp'
diff --git a/tutorials/installation-jekyll/index.mdx b/tutorials/installation-jekyll/index.mdx
index 7ec289c7ff..561fa948fe 100644
--- a/tutorials/installation-jekyll/index.mdx
+++ b/tutorials/installation-jekyll/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-06-03
posted: 2018-07-12
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/installation-lemp-ubuntu-bionic/index.mdx b/tutorials/installation-lemp-ubuntu-bionic/index.mdx
index 9599f03d86..efc7696b4b 100644
--- a/tutorials/installation-lemp-ubuntu-bionic/index.mdx
+++ b/tutorials/installation-lemp-ubuntu-bionic/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2018-07-31
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-lemp-php72.webp'
diff --git a/tutorials/installation-lemp-ubuntu-focal/index.mdx b/tutorials/installation-lemp-ubuntu-focal/index.mdx
index 8e484047dd..3393f595d2 100644
--- a/tutorials/installation-lemp-ubuntu-focal/index.mdx
+++ b/tutorials/installation-lemp-ubuntu-focal/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2021-12-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-lemp-php72.webp'
diff --git a/tutorials/installation-uncomplicated-firewall/index.mdx b/tutorials/installation-uncomplicated-firewall/index.mdx
index 5823308391..ea8b0022e5 100644
--- a/tutorials/installation-uncomplicated-firewall/index.mdx
+++ b/tutorials/installation-uncomplicated-firewall/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-08-05
posted: 2018-07-18
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/jitsi-debian/index.mdx b/tutorials/jitsi-debian/index.mdx
index 993d4a83a7..d6907ef0f0 100644
--- a/tutorials/jitsi-debian/index.mdx
+++ b/tutorials/jitsi-debian/index.mdx
@@ -2,12 +2,17 @@
title: Installing Jitsi Meet on Debian Buster
description: Learn how to install Jitsi Meet videoconferencing on Debian Buster (10)) with this step-by-step guide.
products:
- - compute
+ - instances
tags: media Jitsi-Meet Debian-Buster videoconferencing
dates:
validation: 2024-06-17
posted: 2020-03-16
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-jitsi_home_2.webp'
import image2 from './assets/scaleway-jitsi-meet-conf-call-2.webp'
diff --git a/tutorials/jitsi-docker/index.mdx b/tutorials/jitsi-docker/index.mdx
index 81378274a7..3aa2901723 100644
--- a/tutorials/jitsi-docker/index.mdx
+++ b/tutorials/jitsi-docker/index.mdx
@@ -2,12 +2,17 @@
title: Deploying Jitsi Meet with Docker
description: Learn how to deploy a self-hosted Jitsi Meet video conferencing solution using Docker in a few simple steps.
products:
- - compute
+ - instances
tags: media Jitsi-Meet videoconferencing Docker deployment
dates:
validation: 2025-08-05
posted: 2020-03-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-jitsi_login.webp'
import image2 from './assets/scaleway-jitsi-meet-conf-call.webp'
diff --git a/tutorials/jitsi-ubuntu-jammy-jellyfish/index.mdx b/tutorials/jitsi-ubuntu-jammy-jellyfish/index.mdx
index 2b48b091ca..089fa1d452 100644
--- a/tutorials/jitsi-ubuntu-jammy-jellyfish/index.mdx
+++ b/tutorials/jitsi-ubuntu-jammy-jellyfish/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-19
posted: 2022-11-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-jitsi_home.webp'
import image2 from './assets/scaleway-jitsi-meet-conf-call.webp'
diff --git a/tutorials/jump-desktop/index.mdx b/tutorials/jump-desktop/index.mdx
index 0f90f21514..b23620224d 100644
--- a/tutorials/jump-desktop/index.mdx
+++ b/tutorials/jump-desktop/index.mdx
@@ -8,6 +8,11 @@ hero: assets/scaleway_jump_desktop.webp
dates:
validation: 2025-05-26
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/k8s-gitlab/index.mdx b/tutorials/k8s-gitlab/index.mdx
index 04aa7f6ed8..fd51b7b9e1 100644
--- a/tutorials/k8s-gitlab/index.mdx
+++ b/tutorials/k8s-gitlab/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2020-06-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-token.webp'
import image2 from './assets/scaleway-token.webp'
diff --git a/tutorials/k8s-kapsule-multi-az/index.mdx b/tutorials/k8s-kapsule-multi-az/index.mdx
index fb0173a5e2..3c41e81152 100644
--- a/tutorials/k8s-kapsule-multi-az/index.mdx
+++ b/tutorials/k8s-kapsule-multi-az/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-05
posted: 2023-04-15
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-k8s-kapsule-multi-az-1-v2.webp'
import image2 from './assets/scaleway-k8s-kapsule-multi-az-2-v2.webp'
@@ -397,7 +402,7 @@ In this configuration, we use the `http_service` block to check that the `ingres
8. Check that both services of type LoadBalancer are up and get their external IPs.
```
- kubectl get services -n ingress-nginx
+ kubectl get services -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.42.12.8 443/TCP 31m
@@ -559,7 +564,7 @@ It is important to use a storage class with the `volumeBindingMode` option set t
name = "kibana"
namespace = kubernetes_namespace.elasticsearch.metadata[0].name
}
-
+
spec {
ingress_class_name = "nginx"
rule {
diff --git a/tutorials/k8s-velero-backup/index.mdx b/tutorials/k8s-velero-backup/index.mdx
index 96aba949b0..a87d62dd98 100644
--- a/tutorials/k8s-velero-backup/index.mdx
+++ b/tutorials/k8s-velero-backup/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2023-06-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-velero-backup-console.webp'
diff --git a/tutorials/kubernetes-package-management-helm/index.mdx b/tutorials/kubernetes-package-management-helm/index.mdx
index 04c4875f89..ea5f17fc17 100644
--- a/tutorials/kubernetes-package-management-helm/index.mdx
+++ b/tutorials/kubernetes-package-management-helm/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-06-02
posted: 2024-05-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-helm-schema.webp'
@@ -121,7 +126,7 @@ helm search repo nginx
```
- The Cloud Native Computing Foundation operates [ArtifactHUB](https://artifacthub.io/), a web-based application that enables finding, installing, and publishing Cloud Native packages and configurations.
+ The Cloud Native Computing Foundation operates [ArtifactHUB](https://artifacthub.io/), a web-based application that enables finding, installing, and publishing Cloud Native packages and configurations.
It allows you to search for Helm Charts and more using a web browser.
diff --git a/tutorials/large-messages/index.mdx b/tutorials/large-messages/index.mdx
index 587e60f22d..1ba05c8e5c 100644
--- a/tutorials/large-messages/index.mdx
+++ b/tutorials/large-messages/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-19
posted: 2024-01-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-large-messages-architecture.webp'
diff --git a/tutorials/lb-firewall-haproxy-pfsense/index.mdx b/tutorials/lb-firewall-haproxy-pfsense/index.mdx
index 33eabde765..db9a666e9c 100644
--- a/tutorials/lb-firewall-haproxy-pfsense/index.mdx
+++ b/tutorials/lb-firewall-haproxy-pfsense/index.mdx
@@ -8,8 +8,13 @@ products:
tags: Load-balancer pfSense HAproxy dedibox
dates:
validation: 2025-06-02
- validation_frequency: 18
posted: 2020-03-11
+ validation_frequency: 18
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-pfsense_install_01.webp'
import image2 from './assets/scaleway-pfsense_install_02.webp'
diff --git a/tutorials/librenms-monitoring/index.mdx b/tutorials/librenms-monitoring/index.mdx
index 02443364b6..1c428c87be 100644
--- a/tutorials/librenms-monitoring/index.mdx
+++ b/tutorials/librenms-monitoring/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2019-07-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-librenms_install.webp'
import image2 from './assets/scaleway-librenms_db.webp'
diff --git a/tutorials/load-overflow-proxmox-and-elastic-metal/index.mdx b/tutorials/load-overflow-proxmox-and-elastic-metal/index.mdx
index bb61809e76..3b9b72bc96 100644
--- a/tutorials/load-overflow-proxmox-and-elastic-metal/index.mdx
+++ b/tutorials/load-overflow-proxmox-and-elastic-metal/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-05-12
posted: 2019-05-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-px-create-linux-bridge.webp'
import image2 from './assets/scaleway-px-create-vm.webp'
@@ -43,7 +48,7 @@ Finally, we can introduce and configure a Load Balancer to evenly distribute tra
- An [SSH key](/organizations-and-projects/how-to/create-ssh-key/)
- 2 [Elastic Metal servers](/instances/how-to/create-an-instance/) running on Proxmox
- [Created a Private Network](/vpc/how-to/create-private-network/) and added your resources to it
-- [Created a Public Gateway](/public-gateways/how-to/create-a-public-gateway/)
+- [Created a Public Gateway](/public-gateways/how-to/create-a-public-gateway/)
- A [domain or subdomain](/domains-and-dns/quickstart/) pointed to your Instance
## Preparing Proxmox
diff --git a/tutorials/load-testing-vegeta/index.mdx b/tutorials/load-testing-vegeta/index.mdx
index e64dc9d519..c633b3a2e1 100644
--- a/tutorials/load-testing-vegeta/index.mdx
+++ b/tutorials/load-testing-vegeta/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-19
posted: 2019-05-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - set-up-and-test
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-vegeta-plot.webp'
diff --git a/tutorials/loriot-lorawan-network-server/index.mdx b/tutorials/loriot-lorawan-network-server/index.mdx
index f56b407842..f88cb82013 100644
--- a/tutorials/loriot-lorawan-network-server/index.mdx
+++ b/tutorials/loriot-lorawan-network-server/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-02
posted: 2020-07-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - iot
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mqtt_webclient.webp'
import image2 from './assets/scaleway-mqtt_webclient_2.webp'
diff --git a/tutorials/magento-ubuntu/index.mdx b/tutorials/magento-ubuntu/index.mdx
index 17ff91026e..e5dfe414b4 100644
--- a/tutorials/magento-ubuntu/index.mdx
+++ b/tutorials/magento-ubuntu/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-07-16
posted: 2020-06-17
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-magento_storefront.webp'
import image2 from './assets/scaleway-magento_admin_dashboard.webp'
diff --git a/tutorials/manage-container-registry-images/index.mdx b/tutorials/manage-container-registry-images/index.mdx
index f37d6b39f9..c1ee4e4b08 100644
--- a/tutorials/manage-container-registry-images/index.mdx
+++ b/tutorials/manage-container-registry-images/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-02
posted: 2021-10-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/manage-database-instance-pgadmin4/index.mdx b/tutorials/manage-database-instance-pgadmin4/index.mdx
index 8ea4d34428..b7558a3664 100644
--- a/tutorials/manage-database-instance-pgadmin4/index.mdx
+++ b/tutorials/manage-database-instance-pgadmin4/index.mdx
@@ -3,12 +3,17 @@ title: Manage PostgreSQL Database Instances with pgAdmin 4
description: Efficiently manage Scaleway Database Instances using pgAdmin 4's web interface for optimal performance and security.
tags: database postgresql postgre pqAdmin
products:
- - compute
+ - instances
- postgresql-and-mysql
dates:
validation: 2025-07-16
posted: 2019-10-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-pgadmin_login.webp'
import image2 from './assets/scaleway-pgadmin_dashboard.webp'
diff --git a/tutorials/manage-instances-with-terraform-and-functions/index.mdx b/tutorials/manage-instances-with-terraform-and-functions/index.mdx
index 5a1869d221..5c4959c30c 100644
--- a/tutorials/manage-instances-with-terraform-and-functions/index.mdx
+++ b/tutorials/manage-instances-with-terraform-and-functions/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-07-02
posted: 2021-12-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/manage-k8s-logging-loki/index.mdx b/tutorials/manage-k8s-logging-loki/index.mdx
index 6312312266..1f421d3273 100644
--- a/tutorials/manage-k8s-logging-loki/index.mdx
+++ b/tutorials/manage-k8s-logging-loki/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2019-11-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/manage-zigbee-devices-with-iot/index.mdx b/tutorials/manage-zigbee-devices-with-iot/index.mdx
index 02d77f1be1..efc74f92be 100644
--- a/tutorials/manage-zigbee-devices-with-iot/index.mdx
+++ b/tutorials/manage-zigbee-devices-with-iot/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-21
posted: 2022-12-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - iot
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-download-hub-certificate.webp'
import image2 from './assets/scaleway-validate-configuration.webp'
diff --git a/tutorials/mariadb-ubuntu-bionic/index.mdx b/tutorials/mariadb-ubuntu-bionic/index.mdx
index 3fd60101f1..14bc5e82cb 100644
--- a/tutorials/mariadb-ubuntu-bionic/index.mdx
+++ b/tutorials/mariadb-ubuntu-bionic/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2018-06-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/mastodon-community/index.mdx b/tutorials/mastodon-community/index.mdx
index 8ffcb5c895..444b3c6225 100644
--- a/tutorials/mastodon-community/index.mdx
+++ b/tutorials/mastodon-community/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2019-03-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/matomo-analytics/index.mdx b/tutorials/matomo-analytics/index.mdx
index 65f103b14b..33c51c5eda 100644
--- a/tutorials/matomo-analytics/index.mdx
+++ b/tutorials/matomo-analytics/index.mdx
@@ -9,6 +9,11 @@ dates:
posted: 2019-07-24
validation_frequency: 24
hero: assets/scaleway-matomo.webp
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-matomo-setup1.webp'
import image2 from './assets/scaleway-matomo-setup2.webp'
diff --git a/tutorials/migrate-data-minio-client/index.mdx b/tutorials/migrate-data-minio-client/index.mdx
index 72a9210d1e..499f41b4f8 100644
--- a/tutorials/migrate-data-minio-client/index.mdx
+++ b/tutorials/migrate-data-minio-client/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2019-03-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mc.webp'
diff --git a/tutorials/migrate-data-rclone/index.mdx b/tutorials/migrate-data-rclone/index.mdx
index 819c3a8e31..619b6999c7 100644
--- a/tutorials/migrate-data-rclone/index.mdx
+++ b/tutorials/migrate-data-rclone/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-01
posted: 2019-03-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/migrate-databases-instance/index.mdx b/tutorials/migrate-databases-instance/index.mdx
index a0953bc1b2..36f45ad7e0 100644
--- a/tutorials/migrate-databases-instance/index.mdx
+++ b/tutorials/migrate-databases-instance/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2020-09-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-create_database.webp'
import image2 from './assets/scaleway-user_permissions.webp'
diff --git a/tutorials/migrate-dedibox-to-elastic-metal/index.mdx b/tutorials/migrate-dedibox-to-elastic-metal/index.mdx
index 9a1fa1f634..c650dbe750 100644
--- a/tutorials/migrate-dedibox-to-elastic-metal/index.mdx
+++ b/tutorials/migrate-dedibox-to-elastic-metal/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2022-01-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/migrate-mysql-databases-postgresql-pgloader/index.mdx b/tutorials/migrate-mysql-databases-postgresql-pgloader/index.mdx
index 548659fe48..a1f3510a3d 100644
--- a/tutorials/migrate-mysql-databases-postgresql-pgloader/index.mdx
+++ b/tutorials/migrate-mysql-databases-postgresql-pgloader/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-22
posted: 2019-11-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/migrating-docker-workloads-to-kubernetes-kapsule/index.mdx b/tutorials/migrating-docker-workloads-to-kubernetes-kapsule/index.mdx
index c417cd62f7..33e0277ed2 100644
--- a/tutorials/migrating-docker-workloads-to-kubernetes-kapsule/index.mdx
+++ b/tutorials/migrating-docker-workloads-to-kubernetes-kapsule/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2024-11-14
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/migrating-from-another-managed-kubernetes-service-to-scaleway-kapsule/index.mdx b/tutorials/migrating-from-another-managed-kubernetes-service-to-scaleway-kapsule/index.mdx
index ba9a8a2576..01e17383d7 100644
--- a/tutorials/migrating-from-another-managed-kubernetes-service-to-scaleway-kapsule/index.mdx
+++ b/tutorials/migrating-from-another-managed-kubernetes-service-to-scaleway-kapsule/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2024-11-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/minikube-elastic-metal/index.mdx b/tutorials/minikube-elastic-metal/index.mdx
index f72b40d377..b1087f02fc 100644
--- a/tutorials/minikube-elastic-metal/index.mdx
+++ b/tutorials/minikube-elastic-metal/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2024-08-27
posted: 2019-05-27
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/mist-streaming-server/index.mdx b/tutorials/mist-streaming-server/index.mdx
index db55b4dc4e..8ea20319cb 100644
--- a/tutorials/mist-streaming-server/index.mdx
+++ b/tutorials/mist-streaming-server/index.mdx
@@ -2,13 +2,18 @@
title: Deploying a Mist open source streaming server
description: Explore how to deploy Mist, a streaming server solution, for broadcasting video content over the internet.
products:
- - compute
+ - instances
tags: streaming mist-server Mist OBS
hero: assets/scaleway_mistserver.webp
dates:
validation: 2025-07-16
posted: 2020-07-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mistserver_01.webp'
import image2 from './assets/scaleway-mistserver_02.webp'
diff --git a/tutorials/mlx-array-framework-apple-silicon/index.mdx b/tutorials/mlx-array-framework-apple-silicon/index.mdx
index 4277432484..4d390cf1b8 100644
--- a/tutorials/mlx-array-framework-apple-silicon/index.mdx
+++ b/tutorials/mlx-array-framework-apple-silicon/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-12-15
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/mongodb-ubuntu-1604/index.mdx b/tutorials/mongodb-ubuntu-1604/index.mdx
index de399d53f7..d5c0763243 100644
--- a/tutorials/mongodb-ubuntu-1604/index.mdx
+++ b/tutorials/mongodb-ubuntu-1604/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2018-06-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/monitor-gpu-instance-cockpit/index.mdx b/tutorials/monitor-gpu-instance-cockpit/index.mdx
index 21442a1de9..6a19107b59 100644
--- a/tutorials/monitor-gpu-instance-cockpit/index.mdx
+++ b/tutorials/monitor-gpu-instance-cockpit/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-30
posted: 2024-10-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/monitor-k8s-grafana/index.mdx b/tutorials/monitor-k8s-grafana/index.mdx
index a74c8e18aa..e8d5c1cd56 100644
--- a/tutorials/monitor-k8s-grafana/index.mdx
+++ b/tutorials/monitor-k8s-grafana/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2020-03-18
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-prom1.webp'
import image2 from './assets/scaleway-prom2.webp'
diff --git a/tutorials/mutli-node-rocket-chat-community-private-network/index.mdx b/tutorials/mutli-node-rocket-chat-community-private-network/index.mdx
index 943ece103d..769c5ba526 100644
--- a/tutorials/mutli-node-rocket-chat-community-private-network/index.mdx
+++ b/tutorials/mutli-node-rocket-chat-community-private-network/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2020-10-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-private_network_schema.webp'
import image2 from './assets/scaleway-create_private_network.webp'
diff --git a/tutorials/nats-rdb-offload/index.mdx b/tutorials/nats-rdb-offload/index.mdx
index 40959a57b5..3f2ee459eb 100644
--- a/tutorials/nats-rdb-offload/index.mdx
+++ b/tutorials/nats-rdb-offload/index.mdx
@@ -7,9 +7,14 @@ products:
- postgresql-and-mysql
tags: terraform scraping-architecture
dates:
- validation:
+ validation:
posted:
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-nats-offload-archi.webp'
@@ -38,7 +43,7 @@ To properly follow this tutorial, we recommend you [create a dedicated Project](
- [Installed the NATS CLI](https://github.com/nats-io/natscli) on your local machine
- [Created a Scaleway NATS account](/nats/how-to/create-account/)
- [Generated NATS credentials](/nats/how-to/create-credentials/)
-- [Created a mySQL Managed Database](/managed-databases-for-postgresql-and-mysql/quickstart/)
+- [Created a mySQL Managed Database](/managed-databases-for-postgresql-and-mysql/quickstart/)
## Create a NATS stream
@@ -47,7 +52,7 @@ Refer to the [dedicated documentation](/nats/api-cli/nats-cli/) to create your N
When your NATS server is up and running, check you did not forget anything for the Scaleway [context](/nats/api-cli/nats-cli/#define-a-context) by running the following code in a new window of your terminal:
```bash
- nats context info scaleway
+ nats context info scaleway
```
The output should mention "OK" for the credentials path, and confirm that your NATS server is ready.
If not, go back to the NATS CLI documentation to properly create a Scaleway context.
@@ -58,7 +63,7 @@ If not, go back to the NATS CLI documentation to properly create a Scaleway cont
2. Install the following dependencies for the tutorial:
```sh
sudo apt-get install mysql-server
- pip install mysql-connector-python
+ pip install mysql-connector-python
pip install pynacl
pip install nkeys
pip install nats-python
@@ -74,7 +79,7 @@ If not, go back to the NATS CLI documentation to properly create a Scaleway cont
6. Paste the snippet into the terminal window and update it with your created username.
7. Follow the instructions in the terminal to validate your password.
You should now have access to the `mysql` environment.
-8. Create the database and table with the following code:
+8. Create the database and table with the following code:
```sql
CREATE DATABASE nats_messages;
@@ -116,7 +121,7 @@ We start by creating the publisher application.
if __name__ == '__main__':
asyncio.run(run_publisher())
```
-
+
Do not forget to replace `NATS ACCOUNT URL` and `NATS CREDENTIALS PATH` with your own NATS account details.
This small Python application will publish a "Hello World!" message under the "foo" subject.
@@ -168,12 +173,12 @@ Next we create the subscriber application.
```
Do not forget to replace the subscriber code with the correct configuration details for your Scaleway Managed Database information, and `NATS ACCOUNT URL` and `NATS CREDENTIALS PATH` with your own NATS account details.
-
+
You will note that they are the same as the publisher's. This is normal as both applications are communicating through the same NATS server.
## Put it all in motion
-Your architecture is now ready:
+Your architecture is now ready:
- A NATS server to handle the pub/sub messaging pattern
- A publisher application that will send a message through the NATS server
- A subscriber application that will retrieve the message from the NATS server and write it to the mySQL database
diff --git a/tutorials/nextcloud-instantapp/index.mdx b/tutorials/nextcloud-instantapp/index.mdx
index 669f105482..f3f139c451 100644
--- a/tutorials/nextcloud-instantapp/index.mdx
+++ b/tutorials/nextcloud-instantapp/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-06
posted: 2018-08-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-instantapp-nextcloud-install.webp'
import image2 from './assets/scaleway-instantapp-nextcloud-splash.webp'
diff --git a/tutorials/nextjs-app-serverless-functions-sqldb/index.mdx b/tutorials/nextjs-app-serverless-functions-sqldb/index.mdx
index 86afdf31f4..2ec64903ad 100644
--- a/tutorials/nextjs-app-serverless-functions-sqldb/index.mdx
+++ b/tutorials/nextjs-app-serverless-functions-sqldb/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2024-03-14
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -202,7 +207,7 @@ Your application cannot store any data persistently yet. We will now add a serve
2. Connect to your database using the `psql` tool:
```bash
- psql
+ psql
```
`psql` automatically uses `PGHOST`, `PGPORT`, `PGDATABASE`, `PGUSER`, `PGPASSWORD` environment variables as default arguments.
@@ -290,7 +295,7 @@ If you want to avoid doing these modifications manually, you can also retrieve t
git clone git@github.com:scaleway/serverless-examples.git
```
Note that this repository differs slightly in configuration, as it will dynamically render pages and not pre-render them in the Nextjs app build phase.
-
+
1. Edit the file located at `src/lib/api.ts` by replacing its content with the following code. This will switch frontend content from local data to your **Serverless SQL Database**.
```typescript
@@ -328,7 +333,7 @@ Note that this repository differs slightly in configuration, as it will dynamica
//This default function handles Nextjs pre-rendering with undefined values
export function getPostFromRow(row: Row){
- if (row === undefined){
+ if (row === undefined){
var postRow: Row = {
slug: "Title",
title: "Excerpt",
@@ -498,7 +503,7 @@ To secure your deployment, we will now add a dedicated [IAM application](/iam/co
## Secure and redeploy your application
-1. Run the following command to create an [IAM application](/iam/concepts/#application) and export it as a variable:
+1. Run the following command to create an [IAM application](/iam/concepts/#application) and export it as a variable:
```bash
export SCW_APPLICATION_ID=$(scw iam application create name=tutorial-nextjs-app -o json | jq -r '.id')
```
@@ -517,7 +522,7 @@ To secure your deployment, we will now add a dedicated [IAM application](/iam/co
4. Build your application container with the updated code:
```bash
- docker build -t my-nextjs-blog --build-arg PGHOST --build-arg PGDATABASE --build-arg PGPORT --build-arg PGUSER=$SCW_APPLICATION_ID --build-arg PGPASSWORD=$SCW_APPLICATION_SECRET .
+ docker build -t my-nextjs-blog --build-arg PGHOST --build-arg PGDATABASE --build-arg PGPORT --build-arg PGUSER=$SCW_APPLICATION_ID --build-arg PGPASSWORD=$SCW_APPLICATION_SECRET .
```
This time, the `build` command requires environment variables, because Next.js pre-rendering will access your database while building time to load page content.
@@ -544,7 +549,7 @@ To secure your deployment, we will now add a dedicated [IAM application](/iam/co
scw container container deploy $CONTAINER_ID
```
-9. Refresh your browser page displaying the blog. An updated version displays.
+9. Refresh your browser page displaying the blog. An updated version displays.
Congratulations, you have deployed a full serverless Next.js application!
@@ -617,7 +622,7 @@ To secure your deployment, we will now add a dedicated [IAM application](/iam/co
docker build -t my-nextjs-blog .
```
- An error message `Error: connect ECONNREFUSED` might display when building. This is linked to Next.js prerendering stage without any database to connect to yet but will raise any issue at runtime because all pages will be dynamically rendered.
+ An error message `Error: connect ECONNREFUSED` might display when building. This is linked to Next.js prerendering stage without any database to connect to yet but will raise any issue at runtime because all pages will be dynamically rendered.
2. Run the following command to check that your container runs locally:
@@ -658,7 +663,7 @@ To secure your deployment, we will now add a dedicated [IAM application](/iam/co
cd ..
mkdir terraform-nextjs-blog
&& cd terraform-nextjs-blog
- ```
+ ```
2. Create an empty `main.tf` Terraform/OpenTofu file inside the folder.
@@ -784,7 +789,7 @@ The Terraform/OpenTofu file creates several resources:
2. Add the `REGISTRY_ENDPOINT` and `DEFAULT_PROJECT_ID` environment variables to Terraform/OpenTofu:
```bash
export TF_VAR_REGISTRY_ENDPOINT=$REGISTRY_ENDPOINT
- export TF_VAR_DEFAULT_PROJECT_ID=$(scw config get default-project-id)
+ export TF_VAR_DEFAULT_PROJECT_ID=$(scw config get default-project-id)
```
3. Create and review the Terraform/OpenTofu execution plan of your infrastructure:
@@ -833,9 +838,9 @@ The Terraform/OpenTofu file creates several resources:
```sql
psql (15.3, server 16.1 (Debian 16.1-1.pgdg120+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
- Type "help" for help.
+ Type "help" for help.
- tutorial-nextjs=>
+ tutorial-nextjs=>
```
2. Create a table structure with the following query:
```sql
@@ -903,7 +908,7 @@ The Terraform/OpenTofu file creates several resources:
- Push the new container to **Container Registry**:
```bash
- docker tag my-nextjs-blog:latest $REGISTRY_ENDPOINT/my-nextjs-blog:latest
+ docker tag my-nextjs-blog:latest $REGISTRY_ENDPOINT/my-nextjs-blog:latest
docker push $REGISTRY_ENDPOINT/my-nextjs-blog:latest`
```
diff --git a/tutorials/nginx-reverse-proxy/index.mdx b/tutorials/nginx-reverse-proxy/index.mdx
index b9b3e4547d..220061fede 100644
--- a/tutorials/nginx-reverse-proxy/index.mdx
+++ b/tutorials/nginx-reverse-proxy/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-02
posted: 2018-10-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/nvidia-triton/index.mdx b/tutorials/nvidia-triton/index.mdx
index d5f3da7753..3834eb72ba 100644
--- a/tutorials/nvidia-triton/index.mdx
+++ b/tutorials/nvidia-triton/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-04-01
posted: 2023-08-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -90,7 +95,7 @@ For this tutorial, we will use a pre-trained model available in the Triton Infer
- `-v ${PWD}/model:/models`: Mounts your local model repository inside the container.
- `--model-repository=s3://https://s3.fr-par.scw.cloud:443//`: The path to your Scaleway Object Storage bucket
- Once Triton Server is running, you can access it for inference using the appropriate REST APIs or SDKs provided by NVIDIA.
+ Once Triton Server is running, you can access it for inference using the appropriate REST APIs or SDKs provided by NVIDIA.
You can run a health check on your deployment by running the following command:
diff --git a/tutorials/object-storage-s3fs/index.mdx b/tutorials/object-storage-s3fs/index.mdx
index e11da0d5f0..d8182a3554 100644
--- a/tutorials/object-storage-s3fs/index.mdx
+++ b/tutorials/object-storage-s3fs/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2018-07-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/odoo-easy-deploy/index.mdx b/tutorials/odoo-easy-deploy/index.mdx
index 8efa447d28..debb08942d 100644
--- a/tutorials/odoo-easy-deploy/index.mdx
+++ b/tutorials/odoo-easy-deploy/index.mdx
@@ -7,12 +7,16 @@ dates:
validation: 2025-04-08
posted: 2020-12-01
validation_frequency: 12
-
products:
- instances
- kubernetes
- container-registry
- postgresql-and-mysql
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-registry_home.webp'
import image2 from './assets/scaleway-create-namespace.webp'
diff --git a/tutorials/odoo/index.mdx b/tutorials/odoo/index.mdx
index 6e9f4f2aca..70c6cee281 100644
--- a/tutorials/odoo/index.mdx
+++ b/tutorials/odoo/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-07-16
posted: 2020-08-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-odoo14_install.webp'
import image2 from './assets/scaleway-odoo_app_dashboard.webp'
diff --git a/tutorials/openvpn-instant-app/index.mdx b/tutorials/openvpn-instant-app/index.mdx
index 10a0ae1e98..9a558de39d 100644
--- a/tutorials/openvpn-instant-app/index.mdx
+++ b/tutorials/openvpn-instant-app/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2015-06-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-tunnelblick03.webp'
import image2 from './assets/scaleway-tunnelblick04.webp'
diff --git a/tutorials/overleaf/index.mdx b/tutorials/overleaf/index.mdx
index 2e759e2299..3470cd0a03 100644
--- a/tutorials/overleaf/index.mdx
+++ b/tutorials/overleaf/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-10-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/pihole-vpn/index.mdx b/tutorials/pihole-vpn/index.mdx
index 74bd5be2a1..996baeeb14 100644
--- a/tutorials/pihole-vpn/index.mdx
+++ b/tutorials/pihole-vpn/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-02-11
posted: 2020-12-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/plausible-analytics-ubuntu/index.mdx b/tutorials/plausible-analytics-ubuntu/index.mdx
index 702c4a157f..f8bf8fba03 100644
--- a/tutorials/plausible-analytics-ubuntu/index.mdx
+++ b/tutorials/plausible-analytics-ubuntu/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-06
posted: 2023-02-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/postgis-managed-databases/index.mdx b/tutorials/postgis-managed-databases/index.mdx
index 7ca5990421..4e898f8101 100644
--- a/tutorials/postgis-managed-databases/index.mdx
+++ b/tutorials/postgis-managed-databases/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2019-12-31
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-dbaas_advanced_settings.webp'
diff --git a/tutorials/postman-api/index.mdx b/tutorials/postman-api/index.mdx
index 3d1167da38..78ed166ca5 100644
--- a/tutorials/postman-api/index.mdx
+++ b/tutorials/postman-api/index.mdx
@@ -1,6 +1,6 @@
---
title: How to use Postman to manage Scaleway APIs
-description: This page shows how to import APIs into Postman, configure your environment variables and authentication, and share your workspace with other users.
+description: This page shows how to import APIs into Postman, configure your environment variables and authentication, and share your workspace with other users.
tags: postman api json
products:
- instances
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2022-03-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-postman-create-workspace.webp'
import image2 from './assets/scaleway-postman-download-open-api.webp'
@@ -21,7 +26,7 @@ import image8 from './assets/scaleway-postman-response.webp'
import Requirements from '@macros/iam/requirements.mdx'
-Postman is an API client that allows you to build, test, and manage APIs through a graphical interface. The platform includes features that make it easy for you to:
+Postman is an API client that allows you to build, test, and manage APIs through a graphical interface. The platform includes features that make it easy for you to:
- create, import, and test APIs
- work collaboratively with other users
- create different environments with unique variables
@@ -29,7 +34,7 @@ Postman is an API client that allows you to build, test, and manage APIs through
- configure granular request authorization rules, using different authorization types
- capture and monitor request data (status, time, size)
-In this tutorial, you will learn how to import Scaleway APIs into Postman, configure your environment variables and authentication, and share your workspace with other users.
+In this tutorial, you will learn how to import Scaleway APIs into Postman, configure your environment variables and authentication, and share your workspace with other users.
@@ -43,16 +48,16 @@ In this tutorial, you will learn how to import Scaleway APIs into Postman, confi
1. Click **Workspaces** > **Create Workspace** in the top menu of the Postman interface.
2. Enter a name and description and select a visibility setting for your workspace. Your workspace displays.
-3. Go to the Scaleway [developers website](https://www.scaleway.com/en/developers/) and select a product API to download.
+3. Go to the Scaleway [developers website](https://www.scaleway.com/en/developers/) and select a product API to download.
In this tutorial, we use the [Scaleway Instances API](https://www.scaleway.com/en/developers/api/instance/).
4. Click **Download OpenAPI**.
5. Click **Collections** > **Import** in the side menu of the Postman interface.
-6. Drag and drop the Instance's Open API `yml` file into the indicated space to upload.
-7. Click **Import** to conclude.
-
+6. Drag and drop the Instance's Open API `yml` file into the indicated space to upload.
+7. Click **Import** to conclude.
+
The Instances API displays under the **Collections** tab in the side menu. The API is organized into files, following the different request categories (including servers, images, placement groups, and IPs).
## Setting up an environment
@@ -61,8 +66,8 @@ Postman environments are sets of key/value pairs. They are spaces in which you c
In this section, we show you how to create an environment with environment variables for a Scaleway Project.
-1. Click **Create Environment**.
-2. Enter a name for your environment.
+1. Click **Create Environment**.
+2. Enter a name for your environment.
3. Configure your variables, as such:
- **VARIABLE** - enter the key for your variable.
- **TYPE** - select between `default`, which will be visible in plaintext, and `secret`, which will mask the values on the screen.
@@ -105,12 +110,12 @@ In this tutorial, we will create an Instance through an API request operated wit
If you always create resources in the same region, you can [set up a variable](/tutorials/postman-api/#setting-up-an-environment) for the zone in your environment.
-
+
5. Edit the parameters in the request with your preferences following the example below. In this tutorial, we will create a GP1-M Instance with the default local volume.
- For more information on how to fill out the parameters, refer to the [Scaleway Developers website](https://www.scaleway.com/en/developers/api/instance/#path-instances-create-an-instance).
- To find the image UUID, [follow this procedure](/instances/faq/#what-is-a-marketplace-image).
-
+
```json
{
diff --git a/tutorials/power-on-off-instances-jobs/index.mdx b/tutorials/power-on-off-instances-jobs/index.mdx
index 1f2ee4768b..afd96c1989 100644
--- a/tutorials/power-on-off-instances-jobs/index.mdx
+++ b/tutorials/power-on-off-instances-jobs/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-23
posted: 2025-06-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/prestashop-dedibox/index.mdx b/tutorials/prestashop-dedibox/index.mdx
index 8c124723f4..4caf69a527 100644
--- a/tutorials/prestashop-dedibox/index.mdx
+++ b/tutorials/prestashop-dedibox/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-19
posted: 2020-08-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-prestashop_install_1.webp'
import image2 from './assets/scaleway-prestashop_install_2.webp'
diff --git a/tutorials/processing-images-structured-outputs-pixtral/index.mdx b/tutorials/processing-images-structured-outputs-pixtral/index.mdx
index e67aa857b1..cd9f9b8e67 100644
--- a/tutorials/processing-images-structured-outputs-pixtral/index.mdx
+++ b/tutorials/processing-images-structured-outputs-pixtral/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-04-22
posted: 2024-10-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -141,7 +146,7 @@ def process_images(image_urls):
client = get_pixtral_client()
prompt = """
- Extract detailed information from the provided images. Create an entry for each image.
+ Extract detailed information from the provided images. Create an entry for each image.
Include the following details for each item:
- A descriptive name and detailed description
- Appropriate category and subcategory
@@ -206,7 +211,7 @@ if __name__ == "__main__":
]
processed_output = process_images(image_urls)
-
+
if processed_output:
save_output_to_json(processed_output, "processed_image_data.json")
print(f"Image processing complete. Structured data for {processed_output.total_products} items generated.")
@@ -251,7 +256,7 @@ You can easily customize the image processor for your specific needs:
In this tutorial, we've explored how to leverage Mistral's Pixtral vision model to process images and generate structured outputs following a strict and complex JSON schema. This approach can be applied to a wide range of industries and use cases, from cataloging products to analyzing medical images, from interpreting financial charts to processing historical documents.
-By combining the power of AI vision models with structured data validation, we've created a flexible and extensible solution that can be adapted to various image processing needs.
+By combining the power of AI vision models with structured data validation, we've created a flexible and extensible solution that can be adapted to various image processing needs.
Remember to always verify the AI-generated information for accuracy before using it in critical applications or decision-making processes.
diff --git a/tutorials/prometheus-monitoring-grafana-dashboard/index.mdx b/tutorials/prometheus-monitoring-grafana-dashboard/index.mdx
index a93a54b8b3..338618856f 100644
--- a/tutorials/prometheus-monitoring-grafana-dashboard/index.mdx
+++ b/tutorials/prometheus-monitoring-grafana-dashboard/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-08-05
posted: 2018-06-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-grafana_stats.webp'
diff --git a/tutorials/protect-server-fail2ban/index.mdx b/tutorials/protect-server-fail2ban/index.mdx
index eb9fa3a94f..15870c4f6f 100644
--- a/tutorials/protect-server-fail2ban/index.mdx
+++ b/tutorials/protect-server-fail2ban/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-08-25
posted: 2018-08-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-postfix-install.webp'
diff --git a/tutorials/protect-server-using-crowdsec/index.mdx b/tutorials/protect-server-using-crowdsec/index.mdx
index dedd1d1eb6..a00d891612 100644
--- a/tutorials/protect-server-using-crowdsec/index.mdx
+++ b/tutorials/protect-server-using-crowdsec/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2021-10-11
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-crowdsec-ecosystem.webp'
import image2 from './assets/scaleway-crowdsec-dashboard.webp'
@@ -19,7 +24,7 @@ CrowdSec is an open-source software that detects malicious behavior from various
Once malicious behavior is detected, its IP is stored via the Local API (LAPI), and another software called `bouncer`, also deployed on your machine, restricts access to this IP on your resources by querying the LAPI every X seconds. Various bouncers exist, blocking IPs with a firewall (iptables, nftables), Cloudflare, or Nginx.
-Another feature enables every user of CrowdSec to share their banned IPs to a Central API (CAPI) managed by the CrowdSec team. When an IP is identified as being dangerous, it is shared with the whole community and is banned by the bouncers. This feature can be deactivated.
+Another feature enables every user of CrowdSec to share their banned IPs to a Central API (CAPI) managed by the CrowdSec team. When an IP is identified as being dangerous, it is shared with the whole community and is banned by the bouncers. This feature can be deactivated.
@@ -119,13 +124,13 @@ In this tutorial, we will use a bouncer that can manage `iptables` and `ipset`.
```
cscli bouncers list
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
- NAME IP ADDRESS VALID LAST API PULL TYPE VERSION
+ NAME IP ADDRESS VALID LAST API PULL TYPE VERSION
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
- FirewallBouncer-1633604730 127.0.0.1 ✔️ 2021-10-07T11:07:32Z crowdsec-firewall-bouncer v0.0.16-debian-pragmatic-ea64223d4e41c28b5d6324e82ab07625874ce507
+ FirewallBouncer-1633604730 127.0.0.1 ✔️ 2021-10-07T11:07:32Z crowdsec-firewall-bouncer v0.0.16-debian-pragmatic-ea64223d4e41c28b5d6324e82ab07625874ce507
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
```
- Ban a random IP manually to test it:
+ Ban a random IP manually to test it:
```
cscli decisions add -i 1.2.3.4
diff --git a/tutorials/proxmox-softraid/index.mdx b/tutorials/proxmox-softraid/index.mdx
index 5a46ddb8d1..83c7e7adfd 100644
--- a/tutorials/proxmox-softraid/index.mdx
+++ b/tutorials/proxmox-softraid/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-07-08
posted: 2020-01-22
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-proxmox_installer-01.webp'
import image2 from './assets/scaleway-proxmox_installer-02.webp'
@@ -60,7 +65,7 @@ The tool provides a REST-API as well as a graphical web interface to manage the
- **Netmask**: The netmask of the subnet: `255.255.255.0`
- **Gateway**: The Gateway for the machine. It is available on your server's main IP ending on `.1` (i.e. `62.210.16.1`)
- **DNS Server**: The resolving DNS server to use (i.e. `51.159.47.28` or `51.159.47.26`)
-
+
A summary of the configuration displays.
10. Verify that all parameters are correct and click **Install** to launch the installation.
diff --git a/tutorials/proxy-protocol-v2-load-balancer/index.mdx b/tutorials/proxy-protocol-v2-load-balancer/index.mdx
index 25c34ed567..0710938cd5 100644
--- a/tutorials/proxy-protocol-v2-load-balancer/index.mdx
+++ b/tutorials/proxy-protocol-v2-load-balancer/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2019-06-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/pushing-metrics-logs-from-scw-instance/index.mdx b/tutorials/pushing-metrics-logs-from-scw-instance/index.mdx
index 8f354ca79b..175edb6d46 100644
--- a/tutorials/pushing-metrics-logs-from-scw-instance/index.mdx
+++ b/tutorials/pushing-metrics-logs-from-scw-instance/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-22
posted: 2023-06-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-import-dashboard.webp'
import image2 from './assets/scaleway-metrics-display.webp'
diff --git a/tutorials/python-for-loops/index.mdx b/tutorials/python-for-loops/index.mdx
index d685db6eb4..98d4021792 100644
--- a/tutorials/python-for-loops/index.mdx
+++ b/tutorials/python-for-loops/index.mdx
@@ -3,11 +3,16 @@ title: Getting started with Python for loops
description: Learn Python for loops with syntax, examples, and exercises. Perfect for beginners to understand and practice Python loops.
tags: python loops syntax programming
products:
- - compute
+ - instances
dates:
validation: 2025-07-28
posted: 2023-06-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -28,19 +33,19 @@ Imagine you have a list of numbers, and you want to find every number higher tha
```python
my_list = [3, 10.1, 62, 9]
-
+
if my_list[0] > 10:
print(my_list[0])
-
+
if my_list[1] > 10:
print(my_list[1])
-
+
if my_list[2] > 10:
print(my_list[2])
-
+
if my_list[3] > 10:
print(my_list[3])
-
+
## Output:
10.1
62
@@ -52,7 +57,7 @@ With a for loop, we can do it in just three lines of code:
for number in my_list:
if number > 10:
print(number)
-
+
## Output:
10.1
62
@@ -61,9 +66,9 @@ for number in my_list:
Let's dive into the world of for loops in Python, and learn how to code them and what we can do with them.
-There are two types of loops in Python:
+There are two types of loops in Python:
- **while**-loops repeat while a certain condition is true and exit once the condition is false.
-- **for**-loops iterate over a sequence or collection of data and exit when they reach the end of the sequence/collection.
+- **for**-loops iterate over a sequence or collection of data and exit when they reach the end of the sequence/collection.
This tutorial concerns only **for** loops.
@@ -89,10 +94,10 @@ Here are some basic examples of loops iterating over different types of objects:
```python
my_list = ["red", "blue", "yellow"]
-
+
for color in my_list:
print(color)
-
+
## output:
red
blue
@@ -103,15 +108,15 @@ Here are some basic examples of loops iterating over different types of objects:
```python
word = "hello"
-
+
for letter in word:
print(letter)
-
+
## output:
h
e
l
- l
+ l
o
```
@@ -119,18 +124,18 @@ Here are some basic examples of loops iterating over different types of objects:
```python
product_dict = {"bread": 1.5, "jam": 2.75, "butter": 0.99}
-
+
for product in product_dict:
print(product)
-
+
### output:
bread
jam
butter
-
+
for product in product_dict:
print(product_dict.get(product))
-
+
### output:
1.5
2.75
@@ -141,7 +146,7 @@ Here are some basic examples of loops iterating over different types of objects:
```python
for x in range (1, 4):
print(x)
-
+
## output:
1
2
@@ -155,7 +160,7 @@ Ingredients of a for loop (see the syntax above):
- **for**: this keyword is required to start a loop
- **element**: after the `for` keyword, we can use any variable name we want. This variable will simply access each item of the sequence on each iteration. In the examples above you can see that we've called it variously `element`, `color`, `letter`, `product`, and `x`. Anything works, but generally you should try to give this variable a meaningful name: it will make your code easier to read for yourself and anyone else who looks at it.
- **in**: this keyword is required to introduce the object you want to iterate over in the loop
-- **iterable-object**: after the `in` keyword, state the object you want to iterate over. This can be any iterable object, including lists, strings, dictionaries, ranges, tuples, and sets.
+- **iterable-object**: after the `in` keyword, state the object you want to iterate over. This can be any iterable object, including lists, strings, dictionaries, ranges, tuples, and sets.
- The for statement must end with a **colon**, followed by a **line return** and **indentation**.
- **statement(s)**: One or more actions to be carried out on every iteration of the loop. In the examples above we simply use a print statement, but anything is possible.
@@ -169,7 +174,7 @@ Ingredients of a for loop (see the syntax above):
```python
my_list = ["red", "blue", "yellow"]
-
+
for color in my_list:
print(color)
```
@@ -197,10 +202,10 @@ Ingredients of a for loop (see the syntax above):
4. Using the example of looping over a string as shown [above](#for-loop-syntax-and-basic-examples), create a loop that prints out the letters A B C D E. The output should look like this:
```python
- A
- B
- C
- D
+ A
+ B
+ C
+ D
E
```
@@ -236,7 +241,7 @@ for number in [1, 10, 9, 4]:
print(number, " is greater than 5")
else:
print(number, " is not greater than 5")
-
+
## Output:
1 is not greater than 5
10 is greater than 5
@@ -300,7 +305,7 @@ With just one parameter, the range starts at a default of 0 and finishes at (not
```python
for x in range(3):
print(x)
-
+
## Output:
0
1
@@ -312,7 +317,7 @@ With two parameters, we set the start and finish numbers of the range:
```python
for x in range(2, 6):
print(x)
-
+
## Output:
2
3
@@ -325,7 +330,7 @@ With three parameters, we set the start and finish numbers of the range, and the
```python
for x in range(2, 10, 2):
print(x)
-
+
## Output:
2
4
@@ -346,7 +351,7 @@ for x in range(2, 10, 2):
```
Answer [below](#range-exercises-answers).
-
+
2. Create a loop that iterates over a range and produces the following output:
```
@@ -379,14 +384,14 @@ We can use a loop inside another loop: this is called a **nested loop**. This is
```python
groups = [["Kendall", "Shiv", "Roman"], ["Logan", "Ewan", "Gerri"], ["Tom", "Greg"]]
-
+
# this first loop iterates through each group:
for group in groups:
# this second loop iterates through the people in each group:
for person in group:
## we can access both the 'group' and 'person' variables here!
print(person, "is in the group", group)
-
+
## Output:
Kendall is in the group ['Kendall', 'Shiv', 'Roman']
Shiv is in the group ['Kendall', 'Shiv', 'Roman']
@@ -456,7 +461,7 @@ for word in words:
if word == "bingo":
print("The list contains the word bingo")
break
-
+
## Output:
The list contains the word bingo
```
@@ -467,14 +472,14 @@ In the example below we want to find words with first letter "b" and last letter
```python
words = ["tennis", "poker", "bingo", "chess"]
-
+
for word in words:
if word[0] != "b":
continue
else:
if word[-1] == "o":
print("The word", word, "starts with b and ends with o")
-
+
## Output:
The word bingo starts with b and ends with o.
```
@@ -503,34 +508,34 @@ Let's imagine we want to check whether a particular word is in a list. We could
```python
words = ["tennis", "poker", "bingo", "chess"]
-
+
for word in words:
if word == "bingo":
print("bingo is in the list")
-
+
## output:
bingo is in the list
```
However, there are two problems:
- If the word "bingo" was in the list multiple times, we risk printing the statement multiple times when it is not necessary (though we could solve this with a break statement)
-- If the word "bingo" wasn't on the list, nothing would be printed. This is not very explicit and might lead us to wonder if the code worked properly or not.
+- If the word "bingo" wasn't on the list, nothing would be printed. This is not very explicit and might lead us to wonder if the code worked properly or not.
We can improve this by using a variable that we create outside the loop and conditionally modify inside the loop. It then has a useful, meaningful value once the loop has finished:
```python
words = ["tennis", "poker", "bingo", "chess"]
bingo_in_list = False
-
+
for word in words:
if word == "bingo":
bingo_in_list = True
-
+
if bingo_in_list == True:
print("The list contains the word bingo")
else:
print("The list does not contain the word bingo")
-
+
## Output:
The list contains the word bingo
```
@@ -540,13 +545,13 @@ Another common practice is to instantiate a variable outside a list, and use it
```
words = ["deranged", "anger", "cowardly", "things", "abject", "cuddly", "rhyme", "bed", "harm"]
c_words = []
-
+
for word in words:
if word[0] == "c":
c_words.append(word)
-
+
print(c_words)
-
+
## Output:
['cowardly', 'cuddly']
```
@@ -606,7 +611,7 @@ The name of the loop variable (`x`, `country`, `number` etc.) could be different
```python
for x in range(1,7):
print(x)
-
+
## output:
1
2
@@ -621,23 +626,23 @@ for x in range(1,7):
```python
for x in "ABCDE":
print(x)
-
+
## output:
-A
-B
-C
-D
-E
+A
+B
+C
+D
+E
```
**5a:** Create a dictionary `{"France": "Paris", "Japan": "Tokyo", "USA": "Washington DC"}`, then create a loop that prints out the name of the countries, then another that prints out the names of the capital cities.
```python
countries = {"France": "Paris", "Japan": "Tokyo", "USA": "Washington DC"}
-
+
for country in countries:
print(country)
-
+
## output:
France
Japan
@@ -645,7 +650,7 @@ USA
for country in countries:
print(countries.get(country))
-
+
## output:
Paris
Tokyo
@@ -658,13 +663,13 @@ Washington DC
```python
numbers = [1, 10, 9, 4]
-
+
for number in numbers:
if number>3:
print(number, "is greater than 3")
-
+
## output:
-
+
1 is not greater than 3
10 is greater than 3
9 is greater than 3
@@ -675,15 +680,15 @@ for number in numbers:
```python
countries = ["France", "Japan", "the USA"]
-
+
for country in countries:
if country=="the USA":
print("This country is the USA")
else:
print("This country is not the USA")
-
+
## output:
-
+
This country is not the USA
This country is not the USA
This country is the USA
@@ -692,8 +697,8 @@ This country is the USA
**3:** Create a loop that iterates over the list `[-1, 2, 3, 0, -4]` and checks whether each number is positive or negative:
```python
-numbers = [-1, 2, 3, 0, -4]
-
+numbers = [-1, 2, 3, 0, -4]
+
for number in numbers:
if number > 0:
print(number, "is a positive number")
@@ -701,9 +706,9 @@ for number in numbers:
print(number, "is a negative number")
else:
print(number, "is neither positive nor negative")
-
+
## output:
-
+
-1 is a negative number
2 is a positive number
3 is a positive number
@@ -716,12 +721,12 @@ for number in numbers:
**1:** Create a loop that iterates over a range and produces the output shown below:
```python
-
+
for x in range(5,10):
print(x)
-
+
## output:
-
+
5
6
7
@@ -734,9 +739,9 @@ for x in range(5,10):
```python
for x in range(0,100,25):
print(x)
-
+
## output:
-
+
0
25
50
@@ -747,14 +752,14 @@ for x in range(0,100,25):
```python
print("Counting down")
-
+
for x in range(5,0,-1):
print(x)
-
+
print("Go!")
## output:
-
+
Counting down...
5
4
@@ -769,13 +774,13 @@ Go!
**1:** Create code with a nested loop based on the list of lists `[["apple", "orange"], ["carrot", "cabbage"], ["chicken", "beef"]]` which produces the output shown below:
```python
-
+
for group in foods:
for item in group:
print(item)
-
+
## output:
-
+
apple
orange
carrot
@@ -788,14 +793,14 @@ beef
```python
conjugations = [["go", "went", "gone"], ["see", "saw", "seen"], ["take", "took", "taken"]]
-
+
for group in conjugations:
print("The conjugations of ", group[0], " are:")
for conjugation in group:
print(conjugation)
-
+
## output:
-
+
The conjugations of go are:
go
went
@@ -814,14 +819,14 @@ taken
```python
numbers=[[50, 48, -40], [57, 99, 80], [49, 40, 45]]
-
+
for group in numbers:
for number in group:
if number >=50:
print(number)
-
+
## output:
-
+
50
57
99
@@ -833,8 +838,8 @@ for group in numbers:
**1:** Create a loop to check whether the list `[3, 5, 11, 12, 1]` contains at least one number higher than 10, and print "This list contains a number higher than 10" if it does. Include a break statement. The output should be as shown below.
```python
-numbers = [3, 5, 11, 12, 1]
-
+numbers = [3, 5, 11, 12, 1]
+
for number in numbers:
if number > 10:
print("This list contains a number higher than 10")
@@ -845,13 +850,13 @@ if number > 10:
```python
numbers = [[1, 3, 9], [3, 2], [4, 2, 1, 3]]
-
+
for group in numbers:
if len(group) != 2:
continue
elif sum(group) <= 5:
print(group, "contains two items which have a sum no greater than 5")
-
+
## output:
[3, 2] contains two items which have a sum no greater than 5
```
@@ -863,12 +868,12 @@ for group in numbers:
```python
numbers = [1, 5, 2, 6]
sum_of_numbers = 0
-
+
for number in numbers:
sum_of_numbers += number
-
+
print("The sum of numbers in the list is", sum_of_numbers)
-
+
## output:
The sum of the numbers in the list is 14
```
@@ -878,13 +883,13 @@ for group in numbers:
```python
numbers = [1, 5, 2, 6]
max_number = numbers[0]
-
+
for number in numbers:
if number > max_number:
max_number = number
-
+
print("The highest number in the list is", max_number)
-
+
## output:
The highest number in the list is 6
```
@@ -894,12 +899,12 @@ for group in numbers:
```python
numbers = [3, 6, 1, 2, 5]
doubled = []
-
+
for number in numbers:
doubled.append(number *2)
-
+
print(doubled)
-
+
## output:
[6, 12, 2, 4, 10]
```
@@ -910,16 +915,16 @@ for group in numbers:
items = {"bread": 1.5, "jam": 2.75, "butter": 0.99, "sugar": 0.75}
less_1 = []
more_1 = []
-
+
for item in items:
if items.get(item) < 1:
less_1.append(item)
else:
more_1.append(item)
-
+
print("Items that cost less than 1 euro:", less_1)
print("Items that cost more than (or exactly) 1 euro:", more_1)
-
+
## output:
Items that cost less than 1 euro: ['butter', 'sugar']
Items that cost more than (or exactly) 1 euro: ['bread', 'jam']
diff --git a/tutorials/python-lists-dicts/index.mdx b/tutorials/python-lists-dicts/index.mdx
index 2ef5f981a4..a843e1524c 100644
--- a/tutorials/python-lists-dicts/index.mdx
+++ b/tutorials/python-lists-dicts/index.mdx
@@ -3,11 +3,16 @@ title: Getting started with Python lists and dictionaries
description: This tutorial shows you how to get started with Python lists and dictionaries, and is aimed at complete beginners who do not necessarily have any coding experience.
tags: python loops
products:
- - compute
+ - instances
dates:
validation: 2025-04-22
posted: 2023-03-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-python-list.webp'
import image2 from './assets/scaleway-python-list-reverse-index.webp'
@@ -44,7 +49,7 @@ Once you know how to create variables in Python, like `my_variable = 3`, it is r
The examples in this tutorial use short, manually-created lists and dictionaries, without huge amounts of data in them. But, bear in mind that:
- **Lists and dictionaries can handle big amounts of data**: A large part of why lists and dictionaries are so useful is that they can handle huge amounts of data, and provide efficient ways to manage and manipulate it. It is possible to import data from other sources (spreadsheets, text files, websites, etc.) directly into Python to feed your lists and dictionaries.
- **Lists and dictionaries are made for loops!** Another reason that lists and dictionaries are such an important thing to learn in Python, is that they go hand-in-hand with loops. Loops are a coding fundamental, and something we will focus on in the next tutorial in this series. Among many other things, loops let you **iterate** over the data in your lists and dictionaries and carry out complex operations on it. But before we can start on loops, we need to understand lists and dictionaries.
-
+
Read on to find out more about lists and dictionaries, and learn how to create and manipulate them in Python, with lots of examples provided.
@@ -56,7 +61,7 @@ Read on to find out more about lists and dictionaries, and learn how to create a
### Creating and displaying lists
-For the purposes of this tutorial, we'll imagine that we have a class of 5 students who have taken a test, and we want to use a list to hold the test results. Remember, Python knows to create a variable of list type when you use square brackets.
+For the purposes of this tutorial, we'll imagine that we have a class of 5 students who have taken a test, and we want to use a list to hold the test results. Remember, Python knows to create a variable of list type when you use square brackets.
1. Use the following code to create an empty list. You can use either the Python Interactive Shell or save the code in a file using a text editor then execute it in the terminal as described in the [previous tutorial](/tutorials/get-started-python/#6-from-the-shell-to-a-script):
@@ -70,14 +75,14 @@ For the purposes of this tutorial, we'll imagine that we have a class of 5 stude
```python
class_marks = [99, 68, 72, 50, 72]
- ```
+ ```
3. Ask Python to display the list of marks with the following code:
```python
class_marks
- ```
-
+ ```
+
In this example, we've created a list of [integers](/tutorials/get-started-python/#4-variables-and-assignment) (whole numbers), but you can store any type of variable in a list. Look at the following examples:
- `student_names = ["Sara", "Aneesa", "Emmanuel", "Tom", "Candice"]` creates a list of strings
@@ -107,8 +112,8 @@ To access an item in a list, use the name of the list variable, followed by the
68
```
- Once you know how to access a list item, you can change its value. Let's imagine we realized we made a mistake, and the second class mark was actually 67, not 68.
-
+ Once you know how to access a list item, you can change its value. Let's imagine we realized we made a mistake, and the second class mark was actually 67, not 68.
+
2. Use the following code to change the second mark in the list:
```python
@@ -152,7 +157,7 @@ You can access a subsection of a list, or a **slice** of the list, by using squa
```python
[68, 72, 50]
```
-
+
If you do not put a number after the colon, Python returns a slice of the list starting from the first index position you specify, including all the rest of the list to the end.
2. Use the following code to access a subsection of the list starting from the third item and going through to the end:
@@ -165,10 +170,10 @@ You can access a subsection of a list, or a **slice** of the list, by using squa
```python
[72, 50, 72]
- ```
+ ```
If you do not put a number **before** the colon, Python returns a slice of the list starting from the beginning, and up to but not including the item at the index position after the colon.
-
+
3. Use the following code to access the subsection of the list starting from the beginning, up to but not including the item at index position 3:
```python
@@ -270,7 +275,7 @@ Remember that our list of marks currently looks like the following: `[99, 30, 68
If you use the `remove()` method with an item that has more than one occurrence in the list (e.g. for the mark 72 in our case) it will remove the first occurrence of the item only.
-
+
Next, we have the `pop()` method, which removes the item at the specified index position:
@@ -354,7 +359,7 @@ Remember that our list of marks currently looks like the following: `[99, 30, 68
```
Python no longer remembers the variable, so our request to display it after deleting it returns an error.
-
+
Note that the syntax for appending, removing, extending, etc. is `list_name.method_name()`, whereas the syntax for deleting is `del list_name`. This is because append, remove, extend, etc. are all **methods**, whereas del is a **keyword**. Methods and keywords have different syntax, even if they both carry out operations on a given variable or item.
@@ -450,7 +455,7 @@ The table below provides a summary of everything covered above:
| Access the first item in a list | `class_marks[0]` Output: `99` |
| Access the second item in a list | `class_marks[1]` Output: `68` |
| Access the last item in a list | `class_marks[-1]` Output: `72` |
-| Access a slice from the middle of a list | `class_marks[1:3]` Output: `[68, 72]` |
+| Access a slice from the middle of a list | `class_marks[1:3]` Output: `[68, 72]` |
| Access a slice from the start of a list | `class_marks[:3]` Output: `[99, 68, 72]` |
| Access a slice from the end of a list | `class_marks[-2:]` Output: `[50, 72]` |
| Add a single item to a list | `class_marks.append(83)` |
@@ -541,7 +546,7 @@ There are a number of different ways to access the keys and values within the di
-2. Use the following code to get a view object showing a list of all the keys in the dictionary, in our case the list of student names:
+2. Use the following code to get a view object showing a list of all the keys in the dictionary, in our case the list of student names:
```python
student_marks.keys()
@@ -553,7 +558,7 @@ There are a number of different ways to access the keys and values within the di
dict_keys(['Sara', 'Aneesa', 'Emmanuel', 'Tom', 'Candice'])
```
-3. Use the following code to get a view object showing a list of all the values in the dictionary, in our case the list of student marks:
+3. Use the following code to get a view object showing a list of all the values in the dictionary, in our case the list of student marks:
```python
student_marks.values()
diff --git a/tutorials/remote-desktop-with-xrdp/index.mdx b/tutorials/remote-desktop-with-xrdp/index.mdx
index 6001719c4f..c92861deca 100644
--- a/tutorials/remote-desktop-with-xrdp/index.mdx
+++ b/tutorials/remote-desktop-with-xrdp/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-28
posted: 2019-12-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-rdp_01.webp'
import image2 from './assets/scaleway-rdp_02.webp'
diff --git a/tutorials/restic-s3-backup/index.mdx b/tutorials/restic-s3-backup/index.mdx
index 868c1b5088..0e0e1c5bb1 100644
--- a/tutorials/restic-s3-backup/index.mdx
+++ b/tutorials/restic-s3-backup/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-06-19
posted: 2022-04-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/rtmp-self-hosted-streaming/index.mdx b/tutorials/rtmp-self-hosted-streaming/index.mdx
index 25cf0faf30..87797b4748 100644
--- a/tutorials/rtmp-self-hosted-streaming/index.mdx
+++ b/tutorials/rtmp-self-hosted-streaming/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2019-05-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-obs_settings.webp'
import image2 from './assets/scaleway-obs_stream_settings.webp'
diff --git a/tutorials/ruby-on-rails/index.mdx b/tutorials/ruby-on-rails/index.mdx
index faa9a84c4a..6e0e3e3f79 100644
--- a/tutorials/ruby-on-rails/index.mdx
+++ b/tutorials/ruby-on-rails/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-07-28
posted: 2020-01-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -117,7 +122,7 @@ Ruby on Rails typically uses an SQL database for data persistence. In this secti
Jul 16 10:23:54 scw-gallant-neumann systemd[1]: Starting PostgreSQL RDBMS...
Jul 16 10:23:54 scw-gallant-neumann systemd[1]: Finished PostgreSQL RDBMS.
```
-3. Create an unprivileged role and database so that Rails can connect to the database.
+3. Create an unprivileged role and database so that Rails can connect to the database.
Call this role `deploy`, just like our username on the instance:
4. Use `su` to enter commands as the `postgres` user, which is the default administrator of PostgreSQL:
diff --git a/tutorials/run-manage-linux-vm-on-apple-silicon-tart/index.mdx b/tutorials/run-manage-linux-vm-on-apple-silicon-tart/index.mdx
index 775ee32f05..f3fb137ec6 100644
--- a/tutorials/run-manage-linux-vm-on-apple-silicon-tart/index.mdx
+++ b/tutorials/run-manage-linux-vm-on-apple-silicon-tart/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-11
posted: 2024-01-30
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/tart-run-sonoma.webp'
import image2 from './assets/tart-run-ubuntu.webp'
diff --git a/tutorials/run-messaging-platform-with-rocketchat/index.mdx b/tutorials/run-messaging-platform-with-rocketchat/index.mdx
index ed2d125208..4a9f520d82 100644
--- a/tutorials/run-messaging-platform-with-rocketchat/index.mdx
+++ b/tutorials/run-messaging-platform-with-rocketchat/index.mdx
@@ -3,12 +3,17 @@ title: Running a messaging platform with RocketChat
description: Learn how to use RocketChat to run your community with chat, private messaging, and file sharing.
tags: messaging RocketChat chat mongodb nodejs
products:
- - compute
+ - instances
hero: assets/scaleway_rocketchat.webp
dates:
validation: 2024-06-24
posted: 2019-01-30
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-rocketchat_setup.webp'
import image2 from './assets/scaleway-rocketchat_chat.webp'
diff --git a/tutorials/run-nodejs-express-server-on-serverless-containers/index.mdx b/tutorials/run-nodejs-express-server-on-serverless-containers/index.mdx
index eb87dcc04f..5fbf65aab3 100644
--- a/tutorials/run-nodejs-express-server-on-serverless-containers/index.mdx
+++ b/tutorials/run-nodejs-express-server-on-serverless-containers/index.mdx
@@ -1,6 +1,6 @@
---
title: Running a Node.js + Express Server on Serverless Container
-description: This page shows how to run a Node.js and Express Server on a Serverless Container
+description: This page shows how to run a Node.js and Express Server on a Serverless Container
products:
- containers
tags: serverless containers caas nodejs express-server
@@ -8,6 +8,11 @@ dates:
validation: 2024-07-15
posted: 2021-10-14
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -31,12 +36,12 @@ To begin, we need to create a web server with Node.js and an Express.js framewor
```
mkdir my_nodejs_project
```
-2. Install the `express` library:
+2. Install the `express` library:
```
npm install express
```
- Two files are created during this step: `package.json` and `package-lock.json`.
+ Two files are created during this step: `package.json` and `package-lock.json`.
3. Create a `server.js` file with the following code. This creates a simple Web Server using Express.js:
```js
const express = require('express');
@@ -59,7 +64,7 @@ To begin, we need to create a web server with Node.js and an Express.js framewor
To Dockerize our simple web app, we will use the official Node.js image.
-1. Create a Dockerfile using the following command:
+1. Create a Dockerfile using the following command:
```
touch Dockerfile
```
@@ -112,7 +117,7 @@ To Dockerize our simple web app, we will use the official Node.js image.
The final Dockerfile should look like this example:
- ```dockerfile
+ ```dockerfile
FROM node:14
# Create app directory
@@ -135,7 +140,7 @@ To Dockerize our simple web app, we will use the official Node.js image.
To lighten your image, some folders and files need to be excluded from the image generation:
3. Create a `.dockerignore` file in the same directory as your Dockerfile:
```
- touch .dockerignore
+ touch .dockerignore
```
4. Open the `.dockerignore` file in a text editor and add the following content:
```
@@ -145,7 +150,7 @@ To Dockerize our simple web app, we will use the official Node.js image.
## Deploying the application on Serverless Containers
-1. Build your image using the following command:
+1. Build your image using the following command:
```sh
docker build . -t
```
diff --git a/tutorials/run-python-flask-server-on-serverless-container/index.mdx b/tutorials/run-python-flask-server-on-serverless-container/index.mdx
index 69656cec7c..e31f1ae033 100644
--- a/tutorials/run-python-flask-server-on-serverless-container/index.mdx
+++ b/tutorials/run-python-flask-server-on-serverless-container/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-06-25
posted: 2021-10-14
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -128,7 +133,7 @@ To Dockerize our simple web app, we will use the official Python 3 Alpine image
## Deploying the application on Serverless Containers
-1. Build your image using the following command:
+1. Build your image using the following command:
```sh
docker build . -t
```
diff --git a/tutorials/s3-customize-url-cname/index.mdx b/tutorials/s3-customize-url-cname/index.mdx
index 1cc6e8ac55..0a8ebf481d 100644
--- a/tutorials/s3-customize-url-cname/index.mdx
+++ b/tutorials/s3-customize-url-cname/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-07-28
posted: 2019-05-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-bucket_cname.webp'
diff --git a/tutorials/s3cmd/index.mdx b/tutorials/s3cmd/index.mdx
index 64740ffe9e..11e86bf759 100644
--- a/tutorials/s3cmd/index.mdx
+++ b/tutorials/s3cmd/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-21
posted: 2018-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/scaleway-packer-plugin/index.mdx b/tutorials/scaleway-packer-plugin/index.mdx
index b907879425..a47a7491f3 100644
--- a/tutorials/scaleway-packer-plugin/index.mdx
+++ b/tutorials/scaleway-packer-plugin/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2023-06-06
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
Packer is a popular open-source tool used for creating machine images and provisioning infrastructure. Packer plugins enhance the functionality and capabilities of Packer by providing additional features, integrations, and customization options.
diff --git a/tutorials/scaleway-slack-community/index.mdx b/tutorials/scaleway-slack-community/index.mdx
index 22e05d4279..49bc5d3401 100644
--- a/tutorials/scaleway-slack-community/index.mdx
+++ b/tutorials/scaleway-slack-community/index.mdx
@@ -2,12 +2,17 @@
title: Using the Scaleway Slack community
description: This page shows how to create and use a Scaleway Slack community account.
products:
- - compute
+ - instances
tags: Slack forum
dates:
validation: 2025-03-06
posted: 2020-02-12
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-slack-signup.webp'
import image2 from './assets/scaleway-list-of-scaleway-community-slack-channels.webp'
diff --git a/tutorials/self-hosted-repository-gitea/index.mdx b/tutorials/self-hosted-repository-gitea/index.mdx
index bb16b195d4..8ad29b0845 100644
--- a/tutorials/self-hosted-repository-gitea/index.mdx
+++ b/tutorials/self-hosted-repository-gitea/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-06
posted: 2019-05-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-gitea_app.webp'
import image2 from './assets/scaleway-gitea_dashboard.webp'
diff --git a/tutorials/sem-terraform/index.mdx b/tutorials/sem-terraform/index.mdx
index 60bd8078b2..1ed17a13c3 100644
--- a/tutorials/sem-terraform/index.mdx
+++ b/tutorials/sem-terraform/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-06-19
posted: 2024-06-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-db-secret.webp'
diff --git a/tutorials/send-emails-tem-serverless-framework/index.mdx b/tutorials/send-emails-tem-serverless-framework/index.mdx
index 355f8fe56e..de7977ff56 100644
--- a/tutorials/send-emails-tem-serverless-framework/index.mdx
+++ b/tutorials/send-emails-tem-serverless-framework/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-02-18
posted: 2024-02-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/send-emails-with-serverless-and-tem/index.mdx b/tutorials/send-emails-with-serverless-and-tem/index.mdx
index d6d9ec1ae1..ba52bb46c0 100644
--- a/tutorials/send-emails-with-serverless-and-tem/index.mdx
+++ b/tutorials/send-emails-with-serverless-and-tem/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-02-11
posted: 2023-04-27
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-sign-in-super-website.webp'
import image2 from './assets/scaleway-tem-email.webp'
diff --git a/tutorials/send-sms-iot-device-twilio/index.mdx b/tutorials/send-sms-iot-device-twilio/index.mdx
index b803aeaea8..4c75c9dbcf 100644
--- a/tutorials/send-sms-iot-device-twilio/index.mdx
+++ b/tutorials/send-sms-iot-device-twilio/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2020-10-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - iot
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-twilio-signup.webp'
import image2 from './assets/scaleway-twilio-welcome-dashboard.webp'
diff --git a/tutorials/sentry-error-tracking/index.mdx b/tutorials/sentry-error-tracking/index.mdx
index e8bd928cfa..7785d32676 100644
--- a/tutorials/sentry-error-tracking/index.mdx
+++ b/tutorials/sentry-error-tracking/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-27
posted: 2018-06-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - monitoring
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-sentry_login.webp'
import image2 from './assets/scaleway-sentry_dashboard.webp'
diff --git a/tutorials/set-up-spf-dkim-for-dns-providers/index.mdx b/tutorials/set-up-spf-dkim-for-dns-providers/index.mdx
index 3151be535a..a70d66b9d4 100644
--- a/tutorials/set-up-spf-dkim-for-dns-providers/index.mdx
+++ b/tutorials/set-up-spf-dkim-for-dns-providers/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-16
posted: 2022-11-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway_dkim_record_name.webp'
import image2 from './assets/scaleway_dkim_value_tuto.webp'
diff --git a/tutorials/set-up-yunohost-debian/index.mdx b/tutorials/set-up-yunohost-debian/index.mdx
index eb290f010e..cecb43b737 100644
--- a/tutorials/set-up-yunohost-debian/index.mdx
+++ b/tutorials/set-up-yunohost-debian/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2019-02-27
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-yunohost_01.webp'
import image2 from './assets/scaleway-yunohost_09.webp'
@@ -70,7 +75,7 @@ Yunohost is an open-source solution designed for the administration of a persona
Click **Advanced** to proceed to the site, which will display the post-installation interface. Click **Begin** to continue.
5. Set the main domain for the Yunohost Instance. You can either add a domain or subdomain, request a free subdomain from the Yunohost project, or opt for a domain for local usage/testing only. Then click **Next**.
The login form displays. Enter your username and password to access the admin interface.
-
+
### Creating a user
To use the server, it is recommended to create a user. It will have an e-mail address `user@domain.tld` and can be used to configure additional applications.
diff --git a/tutorials/setting-up-tunnel/index.mdx b/tutorials/setting-up-tunnel/index.mdx
index d8728d3bbc..a436a1d470 100644
--- a/tutorials/setting-up-tunnel/index.mdx
+++ b/tutorials/setting-up-tunnel/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-08
posted: 2019-08-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-gre-private-tunnel.webp'
diff --git a/tutorials/setup-ampere-ai-framework-arm-instances/index.mdx b/tutorials/setup-ampere-ai-framework-arm-instances/index.mdx
index e0d2017cdd..bc6a802e23 100644
--- a/tutorials/setup-ampere-ai-framework-arm-instances/index.mdx
+++ b/tutorials/setup-ampere-ai-framework-arm-instances/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2024-08-12
posted: 2024-02-09
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-ampere-ai-pytorch.webp'
diff --git a/tutorials/setup-elastic-metal-proxmox-cluster-with-private-networks/index.mdx b/tutorials/setup-elastic-metal-proxmox-cluster-with-private-networks/index.mdx
index da7ce43557..9802e10184 100644
--- a/tutorials/setup-elastic-metal-proxmox-cluster-with-private-networks/index.mdx
+++ b/tutorials/setup-elastic-metal-proxmox-cluster-with-private-networks/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-12
posted: 2022-01-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-proxmox-image.webp'
import image2 from './assets/scaleway-proxmox-network-dashboard.webp'
@@ -77,7 +82,7 @@ Instead of [configuring the Private Network interface directly from your server'
* **Name**: The name of your primary network interface followed by a dot and the VLAN ID of your Private Network (e.g. `eno1.1918` for the primary network interface `eno1` and the VLAN ID `1918`)
- * **(Optional) IPv4/CIDR**: The private IP of your server will be configured through DHCP if IPAM is configured correctly. Optionally, set the IP address of the machine in your Private Network followed by its CIDR netmask (e.g. `192.168.1.101/24`).
+ * **(Optional) IPv4/CIDR**: The private IP of your server will be configured through DHCP if IPAM is configured correctly. Optionally, set the IP address of the machine in your Private Network followed by its CIDR netmask (e.g. `192.168.1.101/24`).
* **(Optional) Gateway (IPv4)**: The IP address of your [Public Gateway](/public-gateways/concepts/#public-gateway), if you want to use one.
* **Autostart**: Tick this box to automatically bring up the interface during system startup.
5. Click **Create** to create the Private Network interface.
diff --git a/tutorials/setup-jupyter-notebook/index.mdx b/tutorials/setup-jupyter-notebook/index.mdx
index fde0024f39..5cafae711b 100644
--- a/tutorials/setup-jupyter-notebook/index.mdx
+++ b/tutorials/setup-jupyter-notebook/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-03-27
posted: 2019-07-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - build-and-run-ai
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-login_mac.webp'
import image2 from './assets/scaleway-putty.webp'
diff --git a/tutorials/setup-k8s-cluster-rancher/index.mdx b/tutorials/setup-k8s-cluster-rancher/index.mdx
index 0bb4ea1c61..e5c6ee3c15 100644
--- a/tutorials/setup-k8s-cluster-rancher/index.mdx
+++ b/tutorials/setup-k8s-cluster-rancher/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-03-06
posted: 2019-08-12
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-rancher_instances.webp'
import image2 from './assets/scaleway-rancher_instant_apps.webp'
diff --git a/tutorials/setup-lamp-stack-ubuntu2204/index.mdx b/tutorials/setup-lamp-stack-ubuntu2204/index.mdx
index c94ffe60d7..140e222314 100644
--- a/tutorials/setup-lamp-stack-ubuntu2204/index.mdx
+++ b/tutorials/setup-lamp-stack-ubuntu2204/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2022-04-28
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-lamp-php81.webp'
diff --git a/tutorials/setup-minecraft/index.mdx b/tutorials/setup-minecraft/index.mdx
index 2ecaf3aa2b..22cdca174a 100644
--- a/tutorials/setup-minecraft/index.mdx
+++ b/tutorials/setup-minecraft/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2019-11-15
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-minecraft_game.webp'
diff --git a/tutorials/setup-mongodb-on-ubuntu/index.mdx b/tutorials/setup-mongodb-on-ubuntu/index.mdx
index 2a8b5ff59d..786202d0fa 100644
--- a/tutorials/setup-mongodb-on-ubuntu/index.mdx
+++ b/tutorials/setup-mongodb-on-ubuntu/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-27
posted: 2022-03-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/setup-moodle/index.mdx b/tutorials/setup-moodle/index.mdx
index c850c85f6f..a9529b3002 100644
--- a/tutorials/setup-moodle/index.mdx
+++ b/tutorials/setup-moodle/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-22
posted: 2020-06-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-language.webp'
import image2 from './assets/scaleway-paths.webp'
diff --git a/tutorials/setup-mysql/index.mdx b/tutorials/setup-mysql/index.mdx
index 9bded61221..e7931063d6 100644
--- a/tutorials/setup-mysql/index.mdx
+++ b/tutorials/setup-mysql/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-08
posted: 2020-06-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/setup-nginx-reverse-proxy-s3/index.mdx b/tutorials/setup-nginx-reverse-proxy-s3/index.mdx
index 358fb59b60..6777bb84eb 100644
--- a/tutorials/setup-nginx-reverse-proxy-s3/index.mdx
+++ b/tutorials/setup-nginx-reverse-proxy-s3/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-28
posted: 2020-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-object-storage-with-nginx.webp'
import image2 from './assets/scaleway-nginx-with-cached-data.webp'
diff --git a/tutorials/setup-nomad-cluster/index.mdx b/tutorials/setup-nomad-cluster/index.mdx
index 0171a9a7dc..436e568487 100644
--- a/tutorials/setup-nomad-cluster/index.mdx
+++ b/tutorials/setup-nomad-cluster/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-04-22
posted: 2023-03-23
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/setup-postfix-ubuntu-bionic/index.mdx b/tutorials/setup-postfix-ubuntu-bionic/index.mdx
index b308b9fb5e..e53da57cf9 100644
--- a/tutorials/setup-postfix-ubuntu-bionic/index.mdx
+++ b/tutorials/setup-postfix-ubuntu-bionic/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-07
posted: 2020-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/silence-grafana-alerts/index.mdx b/tutorials/silence-grafana-alerts/index.mdx
index 2a126f0e71..672e5789ee 100644
--- a/tutorials/silence-grafana-alerts/index.mdx
+++ b/tutorials/silence-grafana-alerts/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-18
posted: 2025-06-16
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-silenced-alert.webp'
import image2 from './assets/scaleway-unsilence-button.webp'
diff --git a/tutorials/sinatra/index.mdx b/tutorials/sinatra/index.mdx
index 0f0474fc79..9aa5c1cfb8 100644
--- a/tutorials/sinatra/index.mdx
+++ b/tutorials/sinatra/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-14
posted: 2018-08-17
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-firstapp.webp'
import image2 from './assets/scaleway-firstindex.webp'
diff --git a/tutorials/snapshot-instances-jobs/index.mdx b/tutorials/snapshot-instances-jobs/index.mdx
index 9c2cecd480..c677ffaa3b 100644
--- a/tutorials/snapshot-instances-jobs/index.mdx
+++ b/tutorials/snapshot-instances-jobs/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-03-12
posted: 2024-06-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -52,7 +57,7 @@ Serverless Jobs are perfectly adapted for these autonomous tasks, as we do not n
For more details about variables used by `cli`, refer to the [CLI config documentation](https://github.com/scaleway/scaleway-cli/blob/master/docs/commands/config.md).
-9. In the **Execution** tab, define the command below, and replace the placeholder with the ID of your Block Storage volume:
+9. In the **Execution** tab, define the command below, and replace the placeholder with the ID of your Block Storage volume:
```sh
/scw block snapshot create volume-id=11111111-1111-1111-1111-111111111111
```
diff --git a/tutorials/snapshot-managed-databases/index.mdx b/tutorials/snapshot-managed-databases/index.mdx
index e50f416132..3ce511605b 100644
--- a/tutorials/snapshot-managed-databases/index.mdx
+++ b/tutorials/snapshot-managed-databases/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-06-12
posted: 2024-06-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - scaleway-only
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/sns-instances-notification-system/index.mdx b/tutorials/sns-instances-notification-system/index.mdx
index d499ba84db..8b1e5dc3a4 100644
--- a/tutorials/sns-instances-notification-system/index.mdx
+++ b/tutorials/sns-instances-notification-system/index.mdx
@@ -1,6 +1,6 @@
---
title: Creating a simulated CPU monitor notification system with Terraform/OpenTofu using Scaleway Instances and Topics and Events
-description: Learn how to set up a simulated CPU monitor notification system with Terraform/OpenTofu using Scaleway Instances and Topics and Events. Trigger alerts based on CPU usage with ease.
+description: Learn how to set up a simulated CPU monitor notification system with Terraform/OpenTofu using Scaleway Instances and Topics and Events. Trigger alerts based on CPU usage with ease.
products:
- topics-and-events
- instances
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-30
posted: 2024-03-08
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import image from './assets/publication.webp'
import image2 from './assets/subscription.webp'
diff --git a/tutorials/socket-io/index.mdx b/tutorials/socket-io/index.mdx
index d11e25fa38..0c2b7198c9 100644
--- a/tutorials/socket-io/index.mdx
+++ b/tutorials/socket-io/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2018-07-05
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-Hello_world.webp'
diff --git a/tutorials/stop-outgoing-spam/index.mdx b/tutorials/stop-outgoing-spam/index.mdx
index b54d5938d5..2ac7fc4f49 100644
--- a/tutorials/stop-outgoing-spam/index.mdx
+++ b/tutorials/stop-outgoing-spam/index.mdx
@@ -3,11 +3,16 @@ title: Stopping outgoing spam
description: This page provides information on how to identify and stop abusive usage of your Instances.
tags: Instances spam
products:
- - compute
+ - instances
dates:
validation: 2024-04-22
posted: 2020-08-24
validation_frequency: 24
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - scaleway-only
---
While the most widely recognized form of spam is email spam, other spam types exist, such as Usenet newsgroup spam, spam in communities, spam in blog comments, and much more. Users concerned by spam can contact the abuse helpdesk of the service provider (unknowingly), hosting the machines being abused to distribute these messages. The service provider will inform his customer about the situation. If you have received an abuse complaint about spam, immediate action from your side is required to stop the transmission of these unsolicited messages and secure your system.
@@ -22,10 +27,10 @@ Your immediate action is required in this case to stop the spam outgoing from th
- [Rescue Mode on Elastic Metal servers](/elastic-metal/how-to/reboot-server/)
- [Rescue Mode on Dedibox dedicated servers](/dedibox/how-to/use-rescue-mode/)
-The rescue mode is a small Linux distribution, based on Ubuntu Linux, that runs directly in your server's RAM. It allows you to check your machine in a secure environment without being in a potentially infected environment.
+The rescue mode is a small Linux distribution, based on Ubuntu Linux, that runs directly in your server's RAM. It allows you to check your machine in a secure environment without being in a potentially infected environment.
Once the server has booted into rescue mode, connect to it using SSH (depending on your product, the username, and password required for the connection are displayed in the console.)
-## Mounting volumes
+## Mounting volumes
Mount the volumes of the server to have access to your files:
diff --git a/tutorials/store-s3-cyberduck/index.mdx b/tutorials/store-s3-cyberduck/index.mdx
index e03440788c..de26bc5e23 100644
--- a/tutorials/store-s3-cyberduck/index.mdx
+++ b/tutorials/store-s3-cyberduck/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-19
posted: 2018-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-cyberduckprofile.webp'
diff --git a/tutorials/store-s3-transmit/index.mdx b/tutorials/store-s3-transmit/index.mdx
index fb9b08ed84..cf47b7843b 100644
--- a/tutorials/store-s3-transmit/index.mdx
+++ b/tutorials/store-s3-transmit/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2018-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - manage-share-and-store-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-transmit-00.webp'
import image2 from './assets/scaleway-transmit-01.webp'
diff --git a/tutorials/store-wp-mediacloud-s3/index.mdx b/tutorials/store-wp-mediacloud-s3/index.mdx
index 97d560212a..af9d7a588d 100644
--- a/tutorials/store-wp-mediacloud-s3/index.mdx
+++ b/tutorials/store-wp-mediacloud-s3/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-19
posted: 2019-02-13
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mediacloud_01.webp'
import image2 from './assets/scaleway-mediacloud_02.webp'
diff --git a/tutorials/strapi-app-serverless-containers-sqldb/index.mdx b/tutorials/strapi-app-serverless-containers-sqldb/index.mdx
index ad629a9837..caa2899b38 100644
--- a/tutorials/strapi-app-serverless-containers-sqldb/index.mdx
+++ b/tutorials/strapi-app-serverless-containers-sqldb/index.mdx
@@ -8,6 +8,11 @@ products:
dates:
posted: 2024-05-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/strapi/index.mdx b/tutorials/strapi/index.mdx
index 9a1302b65d..7174424c9e 100644
--- a/tutorials/strapi/index.mdx
+++ b/tutorials/strapi/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-02
posted: 2020-11-30
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-create-admin.webp'
import image2 from './assets/scaleway-create-blog.webp'
diff --git a/tutorials/systemd-essentials/index.mdx b/tutorials/systemd-essentials/index.mdx
index 8b341cb38f..a86518a25a 100644
--- a/tutorials/systemd-essentials/index.mdx
+++ b/tutorials/systemd-essentials/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2018-07-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/terraform-quickstart/index.mdx b/tutorials/terraform-quickstart/index.mdx
index 6a68c1bba1..553eeca9dc 100644
--- a/tutorials/terraform-quickstart/index.mdx
+++ b/tutorials/terraform-quickstart/index.mdx
@@ -10,6 +10,11 @@ hero: assets/scaleway_terraform.webp
dates:
validation: 2025-05-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-terraform-schema.webp'
import image2 from './assets/scaleway-terraform-scw-instances-list.webp'
diff --git a/tutorials/traefik-v2-cert-manager/index.mdx b/tutorials/traefik-v2-cert-manager/index.mdx
index cf7e628535..4af3456684 100644
--- a/tutorials/traefik-v2-cert-manager/index.mdx
+++ b/tutorials/traefik-v2-cert-manager/index.mdx
@@ -11,6 +11,11 @@ dates:
validation: 2025-08-05
posted: 2020-07-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/transform-bucket-images-triggers-functions-deploy/index.mdx b/tutorials/transform-bucket-images-triggers-functions-deploy/index.mdx
index 8290597dad..85d55ac5f4 100644
--- a/tutorials/transform-bucket-images-triggers-functions-deploy/index.mdx
+++ b/tutorials/transform-bucket-images-triggers-functions-deploy/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-05-19
posted: 2023-07-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ -
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -39,7 +44,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
console.log("init");
const { S3Client, ListObjectsV2Command } = require("@aws-sdk/client-s3");
const { SQSClient, SendMessageCommand } = require("@aws-sdk/client-sqs");
-
+
// Get info from env variables
const S3_ACCESS_KEY = process.env.S3_ACCESS_KEY;
const S3_ACCESS_KEY_ID = process.env.S3_ACCESS_KEY_ID;
@@ -50,7 +55,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
const QUEUE_URL = process.env.QUEUE_URL;
const SQS_ENDPOINT = process.env.SQS_ENDPOINT;
const S3_ENDPOINT = `https://s3.${S3_REGION}.scw.cloud`;
-
+
// Create Object Storage service object
const s3Client = new S3Client({
credentials: {
@@ -60,12 +65,12 @@ You will now learn how to deploy Serverless Functions and connect them using tri
endpoint: S3_ENDPOINT,
region: S3_REGION
});
-
+
// Configure parameters for the listObjectsV2 Command
const input = {
"Bucket": SOURCE_BUCKET
};
-
+
// Create SQS service
var sqsClient = new SQSClient({
credentials: {
@@ -75,9 +80,9 @@ You will now learn how to deploy Serverless Functions and connect them using tri
region: "par",
endpoint: SQS_ENDPOINT,
})
-
+
console.log("init Ok")
-
+
exports.handle = async (event, context, callback) => {
const s3ListCommand = new ListObjectsV2Command(input);
const s3List = await s3Client.send(s3ListCommand);
@@ -118,8 +123,8 @@ You will now learn how to deploy Serverless Functions and connect them using tri
"Content-Type": "application/json",
},
};
- };
-
+ };
+
/* This is used to test locally and will not be executed on Scaleway Functions */
if (process.env.NODE_ENV === 'test') {
import("@scaleway/serverless-functions").then(scw_fnc_node => {
@@ -158,7 +163,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
console.log("init");
const { S3Client, PutObjectCommand, GetObjectCommand } = require("@aws-sdk/client-s3");
const sharp = require("sharp");
-
+
// Get connexion information from secret environment variables
const S3_ACCESS_KEY=process.env.S3_ACCESS_KEY;
const S3_ACCESS_KEY_ID=process.env.S3_ACCESS_KEY_ID;
@@ -167,12 +172,12 @@ You will now learn how to deploy Serverless Functions and connect them using tri
const S3_REGION=process.env.S3_REGION;
const RESIZED_WIDTH=process.env.RESIZED_WIDTH;
const S3_ENDPOINT = `https://s3.${S3_REGION}.scw.cloud`;
-
+
let width = parseInt(RESIZED_WIDTH, 10);
if (width < 1 || width > 1000) {
width = 200;
}
-
+
// Create Object Storage service object
const s3Client = new S3Client({
credentials: {
@@ -182,7 +187,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
endpoint: S3_ENDPOINT,
region: S3_REGION
});
-
+
// Handler
exports.handle = async (event, context, callback) => {
// Object key may have spaces or unicode non-ASCII characters.
@@ -208,7 +213,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
const imageType = typeMatch[1].toLowerCase();
if (["jpeg", "jpg", "png"].includes(imageType) !== true) {
console.error(`Unsupported image type: ${imageType}`);
-
+
return {
statusCode: 500,
body: JSON.stringify({
@@ -220,7 +225,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
},
};
};
-
+
// Download the image from the Object Storage source bucket.
try {
const input = {
@@ -234,7 +239,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
console.error(error);
return error;
}
-
+
// Use the sharp module to resize the image.
try {
var sharpImg = sharp().resize({ width, withoutEnlargement: true })
@@ -243,7 +248,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
console.error(error);
return error;
}
-
+
// Upload the image as a Buffer to the destination bucket
try {
const destinput = {
@@ -271,8 +276,8 @@ You will now learn how to deploy Serverless Functions and connect them using tri
},
};
};
-
-
+
+
/* This is used to test locally and will not be executed on Scaleway Functions */
if (process.env.NODE_ENV === 'test') {
import("@scaleway/serverless-functions").then(scw_fnc_node => {
@@ -291,7 +296,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
```bash
npm i @aws-sdk/client-s3 @aws-sdk/client-sqs @scaleway/serverless-functions
- npm install sharp --platform=linuxmusl --arch=x64 sharp --ignore-script=false
+ npm install sharp --platform=linuxmusl --arch=x64 sharp --ignore-script=false
```
7. Run the following command in the same terminal to zip the content of the folder:
@@ -382,7 +387,7 @@ You will now learn how to deploy Serverless Functions and connect them using tri
2. Run the following command:
```bash
- curl --location --request GET '' \\ --header 'X-Auth-Token: '
+ curl --location --request GET '' \\ --header 'X-Auth-Token: '
```
The following response displays:
diff --git a/tutorials/upgrade-managed-postgresql-database/index.mdx b/tutorials/upgrade-managed-postgresql-database/index.mdx
index d12195aa7d..241289005c 100644
--- a/tutorials/upgrade-managed-postgresql-database/index.mdx
+++ b/tutorials/upgrade-managed-postgresql-database/index.mdx
@@ -5,9 +5,13 @@ tags: storage PostgreSQL Database rdb
dates:
validation: 2025-06-02
validation_frequency: 12
-
products:
- postgresql-and-mysql
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-database-information.webp'
import image2 from './assets/scaleway-database-restored.webp'
diff --git a/tutorials/use-cockpit-with-terraform/index.mdx b/tutorials/use-cockpit-with-terraform/index.mdx
index 1ce9b6e9a6..13219bfd77 100644
--- a/tutorials/use-cockpit-with-terraform/index.mdx
+++ b/tutorials/use-cockpit-with-terraform/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-02-11
posted: 2024-06-04
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
diff --git a/tutorials/use-container-registry-github-actions/index.mdx b/tutorials/use-container-registry-github-actions/index.mdx
index b9ee8cac00..4659ca32b1 100644
--- a/tutorials/use-container-registry-github-actions/index.mdx
+++ b/tutorials/use-container-registry-github-actions/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-06
posted: 2023-02-27
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - best-practices
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-container-registry-settings.webp'
import image2 from './assets/scaleway-github-workflow-trigger.webp'
diff --git a/tutorials/use-managed-redis-with-mysql/index.mdx b/tutorials/use-managed-redis-with-mysql/index.mdx
index 71b378f47b..8069b5d5eb 100644
--- a/tutorials/use-managed-redis-with-mysql/index.mdx
+++ b/tutorials/use-managed-redis-with-mysql/index.mdx
@@ -3,11 +3,16 @@ title: Use Scaleway Managed Redis™ for MySQL caching with Entity Framework
description: In this tutorial, you will learn to use Scaleway Redis™ as a record cache for Scaleway MySQL
tags: mysql redis entity-framework cache
products:
- - postgresql-and-mysql
+ - redis
dates:
validation: 2025-07-16
posted: 2023-11-25
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mysql-db-information.webp'
import image2 from './assets/scaleway-mysql-user-information.webp'
diff --git a/tutorials/using-bucket-website-with-mkdocs/index.mdx b/tutorials/using-bucket-website-with-mkdocs/index.mdx
index 27103151e9..4ab67e508f 100644
--- a/tutorials/using-bucket-website-with-mkdocs/index.mdx
+++ b/tutorials/using-bucket-website-with-mkdocs/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-04-22
posted: 2024-10-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-mkdocs-files-in-bucket.webp'
import image2 from './assets/scaleway-mkdocs-website-light-mode.webp'
diff --git a/tutorials/using-own-grafana/index.mdx b/tutorials/using-own-grafana/index.mdx
index ab841d9724..371392a35e 100644
--- a/tutorials/using-own-grafana/index.mdx
+++ b/tutorials/using-own-grafana/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-05-10
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import image from './assets/scaleway_cockpit_tuto_data_source.webp'
import image2 from './assets/scaleway_cockpit_tuto_data_source.webp'
diff --git a/tutorials/using-secret-manager-with-github-action/index.mdx b/tutorials/using-secret-manager-with-github-action/index.mdx
index 564006bf7c..e54c66f919 100644
--- a/tutorials/using-secret-manager-with-github-action/index.mdx
+++ b/tutorials/using-secret-manager-with-github-action/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-16
posted: 2023-06-01
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - scaleway-only
---
import image from './assets/repository-secrets.webp'
diff --git a/tutorials/vaultwarden-serverless/index.mdx b/tutorials/vaultwarden-serverless/index.mdx
index f6e293a8fb..ef64158613 100644
--- a/tutorials/vaultwarden-serverless/index.mdx
+++ b/tutorials/vaultwarden-serverless/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-04-03
posted: 2025-04-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - security
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -28,7 +33,7 @@ Scaleway Serverless Containers and Serverless SQL Databases allow you to quickly
## Creating a new Project
-For the sake of this tutorial, we recommend you create all the required resources in a dedicated new Project. Using dedicated Projects serves several purposes:
+For the sake of this tutorial, we recommend you create all the required resources in a dedicated new Project. Using dedicated Projects serves several purposes:
- It allows you to separate different applications, environments, or teams, keeping their resources isolated and organized.
@@ -37,7 +42,7 @@ For the sake of this tutorial, we recommend you create all the required resource
- It simplifies the process of monitoring and tracking usage, as you can view the resources and usage associated with each Project separately.
- You can also use Projects to create a logical separation between different parts of your infrastructure, making it easier to scale, maintain, and optimize your resources.
-
+
## Creating a serverless SQL Database
Vaultwarden relies on a database to store all password data securely. The database stores encrypted passwords, associated metadata, and user data. Serverless SQL Databases adapt to your workloads automatically thanks to autoscaling, and can scale down to zero to reduce costs.
@@ -46,7 +51,7 @@ Vaultwarden relies on a database to store all password data securely. The databa
2. On the **Overview** page of the database you created, click **Connect application**.
-3. To connect to the database you can either:
+3. To connect to the database you can either:
- use an existing API secret key, by copying the **Connection string** and replacing the placeholder with your secret key.
- create a new API key, by clicking **Generate new secret key**, and by copying the newly created **Connection string**.
diff --git a/tutorials/veeam-backup-replication-s3/index.mdx b/tutorials/veeam-backup-replication-s3/index.mdx
index 1962397d5e..91acb95c69 100644
--- a/tutorials/veeam-backup-replication-s3/index.mdx
+++ b/tutorials/veeam-backup-replication-s3/index.mdx
@@ -1,12 +1,17 @@
---
title: Using Veeam Backup & Replication with Object Storage
description: How to manage backups of vSpehere VMs on Scaleway Object Storage with Veeam Backup & Replication
-products:
+products:
- object-storage
tags: vSphere Object-Storage Veeam-Backup Veeam
dates:
validation: 2025-06-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - back-up-data
+ecosystem:
+ - third-party
---
import image from './assets/scaleway_schema_veeam.webp'
import image2 from './assets/scaleway-veeam-target.webp'
@@ -86,8 +91,8 @@ The following schema represents the functionality of Veeam Backup and Restore wh
- **[Glacier storage class](/object-storage/concepts/#storage-class) is currently not supported by Veeam.**
- If you use lifecycle rules to transition your objects from Standard to Glacier, you will lose the link between Veeam and your data.
- In this case, your data will still exist, but it will no longer be usable.
+ If you use lifecycle rules to transition your objects from Standard to Glacier, you will lose the link between Veeam and your data.
+ In this case, your data will still exist, but it will no longer be usable.
diff --git a/tutorials/vpc-public-gateway-autoconfiguration/index.mdx b/tutorials/vpc-public-gateway-autoconfiguration/index.mdx
index 4755fb30b4..4b98c85331 100644
--- a/tutorials/vpc-public-gateway-autoconfiguration/index.mdx
+++ b/tutorials/vpc-public-gateway-autoconfiguration/index.mdx
@@ -8,6 +8,11 @@ tags: Private-Network instances Public-Gateway
dates:
validation: 2025-05-14
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - scaleway-only
---
import image from './assets/scaleway-vpc-create-pn.webp'
import image2 from './assets/scaleway-vpc-attach-resource.webp'
@@ -47,9 +52,9 @@ import NetworkPublicGateways from '@macros/network/public-gateways.mdx'
link/ether de:00:00:7b:1f:91 brd ff:ff:ff:ff:ff:ff
inet 51.158.99.14/32 metric 100 scope global dynamic enp0s1
valid_lft 771sec preferred_lft 771sec
- inet6 2001:bc8:710:5c70:dc00:ff:fe7b:1f91/64 scope global dynamic mngtmpaddr noprefixroute
+ inet6 2001:bc8:710:5c70:dc00:ff:fe7b:1f91/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86391sec preferred_lft 14391sec
- inet6 fe80::dc00:ff:fe7b:1f91/64 scope link
+ inet6 fe80::dc00:ff:fe7b:1f91/64 scope link
valid_lft forever preferred_lft forever
```
3. Go to the [VPC page](https://console.scaleway.com/vpc/vpc) of the Scaleway console.
@@ -60,7 +65,7 @@ import NetworkPublicGateways from '@macros/network/public-gateways.mdx'
7. Click **Create Private Network**.
The Private Network is created inside the specified VPC, and its **Overview** page displays.
8. Click the **Attached Resources** tab to see the list of Instances attached to the Private Network. Currently, no resources are attached.
-9. Click **Attach resource** and select your Instance from the dropdown list that displays. Leave the default IPv4 and IPv6 address settings in place, or specify these addresses yourself if you prefer.
+9. Click **Attach resource** and select your Instance from the dropdown list that displays. Leave the default IPv4 and IPv6 address settings in place, or specify these addresses yourself if you prefer.
10. Click **Attach to Private Network**. You are returned to the **Attached resources** tab, where your Instance now displays.
11. Use the `ip a` command on the Instance to verify the presence of the new Ethernet interface:
@@ -69,9 +74,9 @@ import NetworkPublicGateways from '@macros/network/public-gateways.mdx'
link/ether 02:00:00:11:cf:fe brd ff:ff:ff:ff:ff:ff
inet 172.16.8.2/22 metric 50 brd 172.16.11.255 scope global dynamic enp1s0
valid_lft 86369sec preferred_lft 86369sec
- inet6 fdf6:47af:d6e7:e60e:d4bf:b161:6073:1c8f/128 scope global dynamic noprefixroute
+ inet6 fdf6:47af:d6e7:e60e:d4bf:b161:6073:1c8f/128 scope global dynamic noprefixroute
valid_lft 86371sec preferred_lft 71971sec
- inet6 fe80::ff:fe11:cffe/64 scope link
+ inet6 fe80::ff:fe11:cffe/64 scope link
valid_lft forever preferred_lft forever
```
@@ -84,7 +89,7 @@ The Instance is now added to the Private Network, and the Private Network's inbu
2. Enter the details of the new Public Gateway:
- Choose the Availability Zone of the Public Gateway. It must match the Availability Zone of your Instance.
- Select the Public Gateway offer type.
- - Select the Public Gateway IP address. Either allocate a new IP, or use one of your existing Public Gateway flexible IPs.
+ - Select the Public Gateway IP address. Either allocate a new IP, or use one of your existing Public Gateway flexible IPs.
- Enter a name and optional tags for the Public Gateway, or leave the default ones in place.
3. Click **Create a Public Gateway**. The Public Gateway is created, and you are taken to the list of your Public Gateways:
4. Click the Public Gateway you just created to go to its dashboard.
diff --git a/tutorials/vuls-security-scanner/index.mdx b/tutorials/vuls-security-scanner/index.mdx
index 13f04ba42c..c4b415c2f9 100644
--- a/tutorials/vuls-security-scanner/index.mdx
+++ b/tutorials/vuls-security-scanner/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2019-03-19
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-vuls-scan.webp'
import image2 from './assets/scaleway-vuls_webhook.webp'
diff --git a/tutorials/waypoint-plugin-scaleway/index.mdx b/tutorials/waypoint-plugin-scaleway/index.mdx
index 0cfd20e2c5..40a8fbb24b 100644
--- a/tutorials/waypoint-plugin-scaleway/index.mdx
+++ b/tutorials/waypoint-plugin-scaleway/index.mdx
@@ -10,6 +10,11 @@ dates:
validation: 2025-07-21
posted: 2023-06-15
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - resource-management
+ecosystem:
+ - third-party
---
import Requirements from '@macros/iam/requirements.mdx'
@@ -41,7 +46,7 @@ Currently, the only plugin available is `container`.
### From sources
1. Clone the [Waypoint plugin repository](https://github.com/scaleway/waypoint-plugin-scaleway) on your local machine.
-2. Run the following command to build and install the plugin:
+2. Run the following command to build and install the plugin:
```
make all install
```
diff --git a/tutorials/web-deploy-windows-instance/index.mdx b/tutorials/web-deploy-windows-instance/index.mdx
index 529638f8df..43be2c88f9 100644
--- a/tutorials/web-deploy-windows-instance/index.mdx
+++ b/tutorials/web-deploy-windows-instance/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-28
posted: 2025-01-20
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - website-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-webdeploy_profile.webp'
diff --git a/tutorials/wireguard-mesh-vpn/index.mdx b/tutorials/wireguard-mesh-vpn/index.mdx
index 44b8938279..51d118bbf2 100644
--- a/tutorials/wireguard-mesh-vpn/index.mdx
+++ b/tutorials/wireguard-mesh-vpn/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-07-28
posted: 2020-07-02
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - deploy-external-software
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wireguard_mesh.webp'
diff --git a/tutorials/wordpress-instantapp/index.mdx b/tutorials/wordpress-instantapp/index.mdx
index 06268d0272..30037f190c 100644
--- a/tutorials/wordpress-instantapp/index.mdx
+++ b/tutorials/wordpress-instantapp/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-07-02
posted: 2015-05-07
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-nc-new-sg.webp'
import image2 from './assets/scaleway-wp-configuration.webp'
diff --git a/tutorials/wordpress-lemp-stack-focal/index.mdx b/tutorials/wordpress-lemp-stack-focal/index.mdx
index 9ebca7ddbb..81ab663d4b 100644
--- a/tutorials/wordpress-lemp-stack-focal/index.mdx
+++ b/tutorials/wordpress-lemp-stack-focal/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2021-12-03
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wordpress_lemp.webp'
import image2 from './assets/scaleway-wordpress_install.webp'
diff --git a/tutorials/wordpress-lemp-stack-ubuntu-jammy-jellyfish-22-04/index.mdx b/tutorials/wordpress-lemp-stack-ubuntu-jammy-jellyfish-22-04/index.mdx
index 1c1789ffda..5e2e01c246 100644
--- a/tutorials/wordpress-lemp-stack-ubuntu-jammy-jellyfish-22-04/index.mdx
+++ b/tutorials/wordpress-lemp-stack-ubuntu-jammy-jellyfish-22-04/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-03-19
posted: 2023-02-24
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wordpress_lemp.webp'
import image2 from './assets/scaleway-wordpress_install.webp'
diff --git a/tutorials/wordpress-lemp-stack/index.mdx b/tutorials/wordpress-lemp-stack/index.mdx
index e0153d74ec..835b840131 100644
--- a/tutorials/wordpress-lemp-stack/index.mdx
+++ b/tutorials/wordpress-lemp-stack/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-13
posted: 2018-11-09
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-wordpress_lemp.webp'
import image2 from './assets/scaleway-wordpress_install.webp'
diff --git a/tutorials/zabbix-monitoring/index.mdx b/tutorials/zabbix-monitoring/index.mdx
index 81aa075899..e37b4c2f4f 100644
--- a/tutorials/zabbix-monitoring/index.mdx
+++ b/tutorials/zabbix-monitoring/index.mdx
@@ -8,6 +8,11 @@ dates:
validation: 2025-05-19
posted: 2019-06-17
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - migration
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-zabbix-62-1.webp'
import image2 from './assets/scaleway-zabbix-install-02.webp'
diff --git a/tutorials/zammad-ticketing/index.mdx b/tutorials/zammad-ticketing/index.mdx
index ca74a80e65..9142afecb6 100644
--- a/tutorials/zammad-ticketing/index.mdx
+++ b/tutorials/zammad-ticketing/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-19
posted: 2020-12-22
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-zammad_01.webp'
import image2 from './assets/scaleway-zammad_02.webp'
diff --git a/tutorials/zulip/index.mdx b/tutorials/zulip/index.mdx
index 2193ebe708..acb5f54d1c 100644
--- a/tutorials/zulip/index.mdx
+++ b/tutorials/zulip/index.mdx
@@ -9,6 +9,11 @@ dates:
validation: 2025-05-14
posted: 2021-10-21
validation_frequency: 12
+difficulty: beginner
+usecase:
+ - application-hosting
+ecosystem:
+ - third-party
---
import image from './assets/scaleway-zulip_new_orga.webp'
import image2 from './assets/scaleway-zulip_dashboard.webp'