diff --git a/en/learn/tutorials/news-1-deploy-an-application.md b/en/learn/tutorials/news-1-deploy-an-application.md
index ca51b8d1f6..bda89f9a04 100644
--- a/en/learn/tutorials/news-1-deploy-an-application.md
+++ b/en/learn/tutorials/news-1-deploy-an-application.md
@@ -1,6 +1,6 @@
---
# Copyright Vespa.ai. All rights reserved.
-title: "News search and recommendation tutorial - getting started on Docker"
+title: "News search and recommendation tutorial - getting started on Vespa Cloud"
redirect_from:
- /en/tutorials/news-1-getting-started.html
- /en/tutorials/news-1-deploy-an-application
@@ -8,7 +8,7 @@ redirect_from:
Our goal with this series is to set up a Vespa application for personalized
-news recommendations. We will do this in stages, starting with a simple news
+news recommendations on Vespa Cloud. We will do this in stages, starting with a simple news
search system and gradually adding functionality as we go through the
tutorial parts.
@@ -22,32 +22,33 @@ The parts are:
6. [News recommendation with searchers](news-6-recommendation-with-searchers.html) - custom searchers, doc processors
7. [News recommendation with parent-child](news-7-recommendation-with-parent-child.html) - parent-child, tensor ranking
-There are different entry points to this tutorial. This one is describing how to get
-started using Docker on your local machine. You can also deploy the application we are creating on
-[Vespa Cloud](https://cloud.vespa.ai).
-
-In this part, we will start with a minimal Vespa application to
-get used to some basic operations for running the application on Docker.
+In this part, we will start with a minimal Vespa application to get used to some basic
+operations for deploying and running an application on Vespa Cloud.
In the next part of the tutorial, we'll start developing our application.
-{% include pre-req.html memory="4 GB" extra-reqs='
-
Python3 for converting the dataset to Vespa JSON.
-
curl to download the dataset and run the Vespa health-checks.
' %}
-
-{% include note.html content='4 GB Docker memory is sufficient for the demo dataset in part 2.
-The full MIND dataset requires more, use 10 GB.' %}
+
+
Prerequisites:
+
+
A Vespa Cloud account - create a tenant
+ if you do not have one.
In upcoming parts of this series, we will have some additional Python dependencies -
we use [PyTorch](https://pytorch.org/) to train vector representations for news and users
and train machine learning models for use in ranking.
-## Installing vespa-cli
+## Installing Vespa CLI
This tutorial uses [Vespa-CLI](../../clients/vespa-cli.html),
-Vespa CLI is the official command-line client for Vespa.ai.
+Vespa CLI is the official command-line client for Vespa.ai.
It is a single binary without any runtime dependencies and is available for Linux, macOS, and Windows.
@@ -57,18 +58,23 @@ $ brew install vespa-cli
-For the rest of this tutorial, you will be using localhost, so you need to configure your Vespa CLI to connect to localhost.
-Run the following to use endpoints on localhost:
+In this tutorial it is possible to use either a local or global
+Vespa CLI configuration mode for configuration variables. Using
+local configuration mode is generally recommended when working
+with multiple distinct Vespa applications, but most parts of
+this tutorial uses the same configuration values which makes
+it easier to use global configuration mode. The global
+configuration mode is useful because you don't have to reapply
+the same Vespa configurations for each part of this tutorial series:
-$ vespa config set target local
+$ vespa config set default_config_scope global
-
## A minimal Vespa application
This tutorial has a [companion sample application](https://github.com/vespa-engine/sample-apps/tree/master/news).
@@ -105,58 +111,69 @@ There are two files there:
We will revisit these files in the next part of the tutorial.
-## Starting Vespa
+## Configuring Vespa CLI for Vespa Cloud
+Configure the Vespa CLI to use Vespa Cloud, and set the application name.
+Replace `tenant-name` with your tenant name from [console.vespa-cloud.com](https://console.vespa-cloud.com):
-This application doesn't contain much at the moment,
-let's start up the application anyway by starting a Docker container to run it:
+
+
+
+$ vespa config set target cloud
+$ vespa config set application tenant-name.news
+
+
+
+Usually its better to use local configuration for each application,
+but this tutorial uses global configuration to avoid having to set the
+configuration values for each part of the tutorial.
+
+Authenticate with Vespa Cloud:
-First, we pull the latest [vespa-image](https://hub.docker.com/r/vespaengine/vespa/)
-from the Docker hub, then we
-start it with the name `vespa`. This starts the Docker container and the
-initial Vespa services to be able to deploy an application.
+Follow the browser instructions to complete authentication.
-Starting the container can take a short while. Before continuing, make sure
-that the configuration service is running by using `vespa status`.
+Next, add a certificate for [data plane access](/en/security/guide#data-plane) to the application:
-
-$ vespa status deploy --wait 300
+
+$ vespa auth cert app-1-getting-started
-With the config server up and running, deploy the application using vespa-cli:
+
+
+
+## Deploying to Vespa Cloud
+
+This application doesn't contain much at the moment,
+but let's deploy it to Vespa Cloud anyway to get used to the basic operations.
+The first deployment may take a few minutes while nodes are provisioned:
The command uploads the application and verifies the content.
If anything is wrong with the application, this step will fail with a failure description;
-Otherwise, this switches the application to a live status.
+otherwise, this switches the application to a live status.
-Whenever you have a new version of your application,
+Whenever you have a new version of your application,
run the same command to deploy the application.
In most cases, there is no need to restart services.
Vespa takes care of reconfiguring the system.
-If a restart of services is required in some rare case, however, the output will notify
-which services need restart to make the change effective.
-In the upcoming parts of the tutorials, we'll frequently deploy the
-application changes in this manner.
+In the upcoming parts of the tutorials, we'll frequently deploy the
+application changes in this manner.
## Feeding to Vespa
@@ -167,7 +184,7 @@ For now, to test that everything is up and running, we'll feed in a single test
@@ -237,57 +254,12 @@ $ vespa document -v remove id:news:news::1
Well done!
-## Stopping and starting Vespa
-
-Keep Vespa running to continue with the next steps in this tutorial set (skip the below).
+## Managing the Vespa Cloud application
-To stop Vespa, we can run the following commands:
-
-
-
-If a [restart is required](../../reference/schemas/schemas.html#changes-that-require-restart-but-not-re-feed)
-due to changes in the application package,
-these two steps are what you need to do.
-
-To wipe the index and restart:
-
-
-
-You can stop and kill the Vespa container application like this:
-
-
-
-
-$ docker stop vespa; docker rm -f vespa
-
-
+Application instances in the [dev zone](../operations/environments.html#dev) will by default keep running for 14 days after the last deployment.
+You can control this in the [console](https://console.vespa-cloud.com/).
-This will delete the Vespa application, including all data and configuration. See
-[container tuning for production](../../operations/self-managed/docker-containers.html).
+The [Vespa Cloud console](https://console.vespa-cloud.com) can also be used to delete the application instance.
## Conclusion
diff --git a/en/learn/tutorials/news-2-basic-feeding-and-query.md b/en/learn/tutorials/news-2-basic-feeding-and-query.md
index 7f765496ff..64b12d06c6 100644
--- a/en/learn/tutorials/news-2-basic-feeding-and-query.md
+++ b/en/learn/tutorials/news-2-basic-feeding-and-query.md
@@ -56,7 +56,33 @@ news content at first. We'll use the impression data as we begin building
the recommendation system later in this series.
Let's start by downloading the data. The `news` sample app directory will
-be our starting point. We've included a script to download the data for us:
+be our starting point. The MIND dataset is hosted on
+[Hugging Face](https://huggingface.co/datasets/yjw1029/MIND) and requires
+a free account and acceptance of the dataset's terms of use.
+
+### Accept the dataset terms
+
+1. Log in at [huggingface.co](https://huggingface.co)
+2. Go to the [MIND dataset page](https://huggingface.co/datasets/yjw1029/MIND)
+3. Click **Agree and access repository** to accept the terms
+
+### Create a Hugging Face access token
+
+1. Go to [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens)
+2. Click **New token**, give it a name, select **Read** role, and copy the token
+
+### Download the dataset
+
+Set your token as an environment variable:
+
+
+
+
+$ export HF_TOKEN=hf_your_token_here
+
+
+
+Then run the download script from the **news** sample app directory:
@@ -110,12 +136,6 @@ ranking will be done and how data will be processed during feeding and indexing.
The schema, e.g., `news.sd`, is a required part of an
application package — the other file needed is `services.xml`.
-For self-hosted multi-node deployments, a `hosts.xml` file is also needed.
-For multi-node self-hosted deployments using `hosts.xml`, see
-the [multinode high
-availability](https://github.com/vespa-engine/sample-apps/tree/master/examples/operations/multinode-HA)
-sample application.
-
We mentioned these files in the previous part but didn't really explain them at the time.
We'll go through them here, starting with the specification of services.
@@ -135,9 +155,7 @@ service. Write the following to `news/my-app/services.xml`:
<container id="default" version="1.0">
<search />
<document-api />
- <nodes>
- <node hostalias="node1" />
- </nodes>
+ <nodes count="1" />
</container>
<content id="mind" version="1.0">
@@ -145,9 +163,7 @@ service. Write the following to `news/my-app/services.xml`:
<documents>
<document type="news" mode="index" />
</documents>
- <nodes>
- <node hostalias="node1" distribution-key="0" />
- </nodes>
+ <nodes count="1" />
</content>
</services>
@@ -163,13 +179,13 @@ Quite a lot is set up here:
for how to use mTLS with Vespa.
- `` sets up the [document
endpoint](../../reference/api/document-v1.html) for feeding and visiting.
-- `` defines the nodes required per service. (See the
+- `` defines the number of nodes for the service. (See the
[reference](../../reference/applications/services/container.html) for more on container
cluster setup).
- `` The stateful content cluster
- `` denotes how many copies to store of each document.
- `` assigns the document types in the _schema_ — the content
- cluster capacity can be increased by adding node elements — see [elasticity](../../content/elasticity.html). (See also the
+ cluster capacity can be increased by raising the node count — see [elasticity](../../content/elasticity.html). (See also the
[reference](../../reference/applications/services/content.html) for more on content cluster
setup.)
@@ -278,10 +294,40 @@ my-app/
└── services.xml
+If not already done from the previous [news tutorial](news-1-deploy-an-application.html), set Vespa configuration variables. Use your tenant name from the [Vespa Cloud console](https://console.vespa-cloud.com/) instead of `tenant-name`:
+
+
+
+
+$ vespa config set target cloud
+$ vespa config set application tenant-name.news
+
+
+
+Log in to Vespa Cloud:
+
+
+
+
+$ vespa auth login
+
+
+
+Add security credentials to the application package for data plane access:
+
+
+
+
+$ vespa auth cert my-app -f
+
+
+
+Finally, deploy the application package to Vespa Cloud:
+
@@ -364,14 +410,19 @@ $ vespa query -v 'yql=select * from news where default contains "music"'
-or a POST JSON query (Notice the *Content-Type* header specification):
+or a POST JSON query. The values can be found by using the previous `vespa query -v` command.
+The content type should be changed to `application/json`.
+It's also possible to use `vespa status` to find the url of your cloud instance.
+:
diff --git a/en/learn/tutorials/news-5-recommendation.md b/en/learn/tutorials/news-5-recommendation.md
index df6f55781c..1230b62015 100644
--- a/en/learn/tutorials/news-5-recommendation.md
+++ b/en/learn/tutorials/news-5-recommendation.md
@@ -177,9 +177,7 @@ so we modify `services.xml` and add it under `documents` in the `content` sectio
<container id="default" version="1.0">
<search />
<document-api />
- <nodes>
- <node hostalias="node1" />
- </nodes>
+ <nodes count="1" />
</container>
<content id="mind" version="1.0">
@@ -188,9 +186,7 @@ so we modify `services.xml` and add it under `documents` in the `content` sectio
<document type="news" mode="index" />
<document type="user" mode="index" />
</documents>
- <nodes>
- <node hostalias="node1" distribution-key="0" />
- </nodes>
+ <nodes count="1" />
</content>
</services>
@@ -200,7 +196,7 @@ so we modify `services.xml` and add it under `documents` in the `content` sectio
-Introducing the HNSW `index` requires a content node restart, in this case we restart all services:
+Introducing the HNSW `index` requires a content node restart.
+On Vespa Cloud, this is handled automatically after deployment —
+wait for the deployment to complete and the application to become ready:
-