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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/pages/tutorials/[category]/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ if (!page.value) {
</UPageHeader>

<UPageBody>
<div
v-if="page?.body"
class="content prose mb-8"
>
<ContentRenderer :value="page!" />
</div>
<TutorialsArticles :path="route.path" />
</UPageBody>
</UPage>
Expand Down
34 changes: 12 additions & 22 deletions content/getting-started/1.overview.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,39 @@
---
title: Overview
headline: Getting Started
description: Learn about the Directus Data Engine and Studio, when to use it, and a how it works.
description: Learn about the Directus Data Engine and Studio, when to use it, and how it works.
navigation:
title: Overview
---

Directus is a backend for building your projects. Connect it to your database, asset storage, and external services, and immediately receive rich developer tooling (Data Engine) and a comprehensive web application (Data Studio) to work with your data. Granular and powerful access control means users can only see, interact, and create data allowed by their role used by both the Engine and Studio.
Directus is a backend for building your projects. Connect it to your database, asset storage, and external services, and immediately receive rich developer tooling (Data Engine) and a comprehensive web application (Data Studio) to work with your data. Granular access control means users can only see, interact with, and create the data their role allows.

:partial{content="engine-studio-box"}

## How It Works

:video-embed{video-id="96b44cbc-1b14-4bea-87cd-0c4cb34d261d"}

## Use Cases
## Choose How to Run Directus

### Backend as a Service
You can use Directus Cloud for a fully managed project or self-host with Docker on your own infrastructure.

Tools that developers need to build successful applications including autogenerated APIs, event- or schedule-based automations, user management and authentication, realtime, and webhooks.

### Headless CMS
## Directus Cloud

Remember, *content* is just data from a database. Manage your files and data, delivering it across websites, apps, kiosks, digital signage, or any other data-driven application.
Directus Cloud is a fully managed service. Cloud architecture can be complicated and resource-intensive, so Directus Cloud provides scalable, optimized storage and infrastructure, and automatic updates so you can focus on building your project.

### Internal Tool Builder
With your Directus Cloud account, you can set up teams to organize projects and billing. You'll be able to get a project running in about 90 seconds. Directus Cloud projects scale automatically to improve reliability, even with unexpected peaks in traffic.

Using Directus Insights, your whole team can build custom applications. Ditch the spreadsheet and quickly build back-office apps and admin panels for customers, inventory, projects, or reporting.
:cta-cloud

### Data Management and Analytics
## Self-Hosted

Establish a single source of truth for all data. Build no-code analytics dashboards to gain insights into company KPIs and other metrics. Coalesce previously siloed data and use Directus Automate to keep everything in sync.
If you want to run Directus on your own infrastructure, start with [Create a project](/getting-started/create-a-project).

::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials"}
See all project and use-case tutorials.
::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/self-hosting"}
See all deployment options (Cloud, Docker, and platform-specific guides).
::

## Directus Cloud

Cloud architecture can be complicated and resource-intensive. Directus Cloud provides scalable, optimized storage and infrastructure, and automatic updates so you can focus on what makes your project special.

With your Directus Cloud account, you can set up teams to organize projects and billing. You'll be able to get a project running in about 90 seconds. Directus Cloud projects scale automatically to improve reliability, even with unexpected peaks in traffic.

:cta-cloud

Need advanced configuration, unlimited scalability, and dedicated support? **[Contact us to check out Directus Enterprise Cloud](https://directus.io/contact).**

:partial{content="license"}
6 changes: 4 additions & 2 deletions content/getting-started/2.create-a-project.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ navigation:

There are several ways to start a new Directus project. This guide walks through the most common scenarios.

If you want to compare all deployment paths (including one-click platform guides like Railway), see [How to Deploy Directus](/tutorials/self-hosting).

:partial{content="license"}

## Directus Cloud
Expand Down Expand Up @@ -59,7 +61,7 @@ Create a `docker-compose.yml` file in the `directus` directory:
```yaml [docker-compose.yml]
services:
directus:
image: directus/directus:11.14.1
image: directus/directus:11.17.0
ports:
- 8055:8055
volumes:
Expand Down Expand Up @@ -99,7 +101,7 @@ The project that runs from this `docker-compose.yml` file is not production-read
We also have a number of guides on self-hosting Directus on various cloud providers, like Amazon Web Services, Microsoft Azure, and Google Cloud Platform.

::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/self-hosting"}
See how to deploy Directus on multiple hosting providers.
See how to deploy Directus (all options).
::

## Next Steps
Expand Down
15 changes: 12 additions & 3 deletions content/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ navigation: false

## Getting Started

::shiny-grid{class="lg:grid-cols-2"}
::shiny-grid{class="lg:grid-cols-3"}
:::shiny-card
---
title: Platform Overview
description: Get starting with using Directus.
description: Choose how to run Directus and get started.
icon: simple-icons:directus
to: /getting-started/overview
---
Expand All @@ -54,6 +54,15 @@ navigation: false
to: https://directus.io/tv/directus-academy
---
:::

:::shiny-card
---
title: How to Deploy Directus
description: Explore Cloud, Docker, and platform-specific deployment guides.
icon: heroicons-outline:cloud
to: /tutorials/self-hosting
---
:::
::

## Features
Expand Down Expand Up @@ -286,7 +295,7 @@ navigation: false
:::shiny-card
---
title: Self-Hosting
description: Learn to self-host Directus in your infrastructure.
description: Learn self-hosting concepts and deployment paths.
icon: heroicons-outline:cloud
to: '/self-hosting/overview'
---
Expand Down
4 changes: 4 additions & 0 deletions content/self-hosting/1.overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ On top of the Directus license, you will need to consider the cost of your infra

And, of course, the cost of time to manage and maintain all of these moving parts. In some contexts, this is a non-issue, but in others, it can be a significant factor.

::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/self-hosting"}
How to deploy Directus: see all options (Cloud, Docker, and platform-specific guides).
::

### Directus Cloud

Directus Cloud is a hosted version of Directus that is maintained by the Directus team. It is a fully managed service that provides a secure and scalable environment for your Directus project.
Expand Down
4 changes: 2 additions & 2 deletions content/self-hosting/3.deploying.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ navigation:
Directus is provided as a Docker image. This means you can deploy it on many different platforms. While each is slightly different, the core concepts are the same.

::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/self-hosting"}
See all vendor-specifc self-hosting deployment tutorials.
How to deploy Directus (all methods).
::

## Environment Variables
Expand All @@ -27,7 +27,7 @@ This also means your project will not be automatically updated to the latest ver

Docker containers are ephemeral by design. This means that any changes you make while the container is running will be lost when the container is stopped or restarted.

To persist data, you will need to mount a volume to the container. When using Docker Compose, this is done by adding a `volumes` section to the `docker-compose.yml` file, which you can see in our [create a project page](/getting-started/overview).
To persist data, you will need to mount a volume to the container. When using Docker Compose, this is done by adding a `volumes` section to the `docker-compose.yml` file, which you can see in our [Create a project](/getting-started/create-a-project) guide.

Files can be persisted by mounting a volume to the container, or by setting up an [external storage location](/configuration/files).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ This guide covers setting up Docker, configuring Docker Compose, using Nginx as

## Upload Your Local Directus Application Folder to the Server

If you have successfully followed the [Self-Hosted Quickstart](/getting-started/overview), you should have a directory with a `docker-compose.yml` file, `database/` directory with a `data.db` file, `uploads/` directory, and `extensions/` directory.
If you have successfully followed the [Create a Project guide](/getting-started/create-a-project), you should have a directory with a `docker-compose.yml` file, `database/` directory with a `data.db` file, `uploads/` directory, and `extensions/` directory.

Make sure your `docker-compose.yml` uses `directus/directus:11.17.0`, a `SECRET` value, and a `PUBLIC_URL` that matches the final URL you plan to use.

Use `scp` (Secure Copy Protocol) to upload the local folder to your server.

Expand Down Expand Up @@ -320,6 +322,17 @@ After the setup is complete, visit your Directus application using `https://dire

![URL in the browser uses http and is marked as secure.](/img/480c9f17-8819-48e4-9d01-ed0e8afc2322.webp)

## Validation Checklist

Verify the setup:

- Open your public URL and confirm Directus loads correctly.
- Confirm that HTTP requests are redirected to HTTPS.
- Sign in or complete onboarding, depending on whether you preconfigured admin credentials in your `docker-compose.yml`.
- Create and read an item in a test collection to verify database access.
- Upload a test file and confirm it persists after container restart.
- Run `sudo systemctl status directus.service` and confirm the service is healthy.

## Summary

This tutorial guided you through hosting a Directus application on an Ubuntu server, covering essential steps such as Docker setup, firewall configuration, and SSL encryption. By following these instructions, you have ensured a secure, accessible, and continuously running environment for your Directus project.
Expand Down
24 changes: 21 additions & 3 deletions content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@ description: Learn how to deploy a Directus to AWS EC2, with a RDS database and
---
In this tutorial, you will learn how to deploy a self-hosted instance of Directus to Amazon Web Services (AWS) EC2, connect it to an AWS RDS PostgreSQL database and S3 storage bucket.

Before you start, you will need an Amazon Web Service account ([AWS](https://aws.amazon.com)) with access to its `SecretKey` and `AccessKey`.
## Before You Start

You will need:

- An Amazon Web Services account ([AWS](https://aws.amazon.com)).
- Access to create EC2, RDS, and S3 resources.
- An AWS access key and secret access key if you plan to configure S3 storage.

## Set up an AWS RDS Database

Expand Down Expand Up @@ -109,15 +115,15 @@ Update the `docker-compose.yml` file with the content:
version: "3"
services:
directus:
image: directus/directus:10.8.3
image: directus/directus:11.17.0
ports:
- 80:80
volumes:
- ./uploads:/directus/uploads
- ./extensions:/directus/extensions
environment:
PORT: 80
KEY: "replace-with-random-value"
PUBLIC_URL: "http://YOUR_EC2_PUBLIC_DNS"
SECRET: "replace-with-random-value"
ADMIN_EMAIL: "admin@example.com"
ADMIN_PASSWORD: "d1r3ctu5"
Expand All @@ -133,6 +139,8 @@ services:

Save the file and exit `nano`.

Set `PUBLIC_URL` to the exact public URL you will use to access Directus. Update it later if you place Directus behind a domain name or reverse proxy.

To ensure that Directus can write and save data in the `extensions` and `uploads` directories, enter the following command to grant the current user ownership of the directory:

```bash
Expand Down Expand Up @@ -177,6 +185,16 @@ Re-run the Directus server with `docker-compose up` to implement the new changes

Alternatively, you can run the command `docker-compose up -d` to run the Directus application in the background.

## Validation Checklist

Verify the setup:

- Open your EC2 public URL. Because `ADMIN_EMAIL` and `ADMIN_PASSWORD` are set, Directus should show the login screen instead of onboarding.
- Sign in with the admin credentials you configured and create and read an item in a test collection to confirm database connectivity.
- Upload a test file and confirm it is accessible from the Directus file library.
- If S3 is configured, confirm that uploaded files are written to the S3 bucket.
- Restart the container (`docker-compose restart`) and confirm the instance comes back online.

## Next Steps

Some steps you could consider moving forward towards improving your deployment include:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ Within the Azure Marketplace, select the Web App resource. When creating a Web A
- **Image source:** Other container registries
- **Access Type:** Public
- **Registry server URL:** https://index.docker.io
- **Image and tag:** directus/directus:11.13.2
- **Image and tag:** directus/directus:11.17.0
- **Port:** 8055


::callout{icon="material-symbols:info-outline"}

In this section, we will specify the version of Directus as `11.13.2` as the latest at the time of writing. Please refer to the [releases](https://github.com/directus/directus/releases) and replace this with the latest version.
In this section, we will specify the version of Directus as `11.17.0` as the latest at the time of writing. Please refer to the [releases](https://github.com/directus/directus/releases) and replace this with the latest version.

::

Expand All @@ -74,6 +74,7 @@ Once the web app has been created, we will return to it to enter the required en
| Name | Value |
|------|-------|
| `SECRET` | <REPLACE_WITH_RANDOM_VALUE> |
| `PUBLIC_URL` | https://<YOUR_AZURE_WEB_APP_URL> |
| `ADMIN_EMAIL` | admin@example.com |
| `ADMIN_PASSWORD` | d1r3ctu5 |
| `DB_CLIENT` | pg |
Expand All @@ -83,10 +84,11 @@ Once the web app has been created, we will return to it to enter the required en
| `DB_USER` | <YOUR_DB_USER> |
| `DB_PASSWORD` | <YOUR_DB_PASSWORD> |

Let’s go through some of the key parameters in this configuration above:
Let’s go through the important parameters in this configuration:

- Set the `DB_HOST` value to the your Azure Database for PostgreSQL's server name. You can find it in the resource's overview section.
- Also set `DB_USER and DB_PASSWORD` to the credentials you set up during the creation of your Azure Database for PostgreSQL.
- Set `PUBLIC_URL` to the exact HTTPS URL of your Azure Web App.
- Set the `DB_HOST` value to your Azure Database for PostgreSQL's server name. You can find it in the resource's overview section.
- Also set `DB_USER` and `DB_PASSWORD` to the credentials you set up during the creation of your Azure Database for PostgreSQL.


::callout{icon="material-symbols:info-outline"}
Expand Down Expand Up @@ -119,13 +121,23 @@ Then return to the Web App and head to Settings -> Configuration -> Path mapping
::callout{icon="material-symbols:info-outline"}

Although Azure Web Apps provide an option to configure volume mounts in the container's configuration screen, this does not work with Directus.
To use the built-in App Service storage, the environment variable `WEBSITES_ENABLE_APP_SERVICE_STORAGE` must be set to true.
When this setting is enabled, Azure automatically mounts an Azure Files share over the container’s `/home` directory. Unfortunately, this mount hides critical files and directories that Directus expects to be present in `/home`, causing the application to fail during startup.
Keep `WEBSITES_ENABLE_APP_SERVICE_STORAGE` set to its default value of "off".
If you enable it, Azure automatically mounts an Azure Files share over the container’s `/home` directory, which can hide critical files and directories that Directus expects and may cause startup to fail.

::

Following the creation of the Web App Resource, Directus is now successfully deployed and can be visited via the default domain in the Azure Web App page.

## Validation Checklist

Verify the setup:

- Open the Azure Web App URL. Because `ADMIN_EMAIL` and `ADMIN_PASSWORD` are set, Directus should show the login screen instead of onboarding.
- Sign in with the admin credentials you configured and create and read an item in a test collection to confirm PostgreSQL connectivity.
- Upload a test file and confirm persistence in the configured mounted share.
- Restart the Web App and confirm Directus comes back online with data intact.
- Review App Service logs for startup errors after any environment variable changes.

## Troubleshooting Tips

Here are few troubleshooting tips:
Expand Down
Loading