Our Visual Editing feature is live! 🎉 Learn more
Directus Logo
  • Use Cases and Features
    • Headless CMS
      Manage and deliver content with ease
    • Backend-as-a-Service
      Build and ship applications faster
    • Headless Commerce
      A single source of truth for products
    • 100+ More Use Cases
      Build anything (or everything)
    • Instant APIs
      Connect a database, get REST + GraphQL APIs
    • Granular Policy-Based Auth
      Provide secure, autonomous data access
    • Visual Automation Builder
      Automate content and data workflows with ease
    • 50+ More Features
      Get everything you need out-of-the-box
    Project Showcase
    Built With Directus

    Built With Directus

    See what everyone's been building with Directus

  • Learn More
    • Blog
      Read our latest articles and guides
    • Case Studies
      Case studies and success stories
    • Community
      Join our 13k member Discord community.
    • Agency Directory
      Browse our list of agency partners
    • About Us
      Learn more about Directus and the team
    • Wall of Love
      See what others are saying about us
    • Contact
      Have a general inquiry or question for us?
    • Support
      Reach out to Directus support
    Watch Directus TV
    Directus TV
    Video

    Directus TV

    Go down the rabbit hole with hours of original video content from our team.

  • Developers
  • Enterprise
  • Pricing
Chat With UsGet Started Free
GitHub logo30,643
Back
resource
Thursday, January 20, 2022

Integrating Directus with Azure SQL

Discover how Directus and Azure SQL collaborate, offering automatic GraphQL and REST endpoints.
Integrating Directus with Azure SQL

Davide Mauri, senior program manager of Azure SQL, and Rijk van Zanten, CTO and Co-Founder of Directus, share insight on how to get up and running with Directus, and explain how to host Directus itself on Azure App Service.

Recently Directus was featured in a Microsoft blog article, the full version can be found here: "Automatic GraphQL and REST endpoint for Azure SQL with Directus".

“Extremely performant and built entirely on Node.js, Directus is an open-source Data Platform that enables anyone in an organization — from developers to data scientists to business users — to access and manage the database content that powers all your applications and digital experiences. It installs as a layer on top of your existing SQL database, mirroring its content and schema, so there is no need to migrate or alter your data. Once installed, you instantly get a dynamic API (REST and GraphQL) and no-code app that democratizes data so you can extract maximum value from it across your organization.”

In this post, Rijk van Zanten details how to quickly and easily deploy and get up and running with Directus, using this sample implementation, and explains how to host Directus itself on Azure App Service, allowing your app and APIs to be accessible from anywhere. Let’s get started.

**Before we begin, you will need Node.js 12.20 or later, and an Azure SQL database server accessible from your local machine.**

To spin up a Directus instance running on Azure SQL and Azure App Service, begin by setting up a local project working directory and configure the connection to Azure SQL.

Next, create a Directus compatible Azure SQL database using CLI commands.

Creating the Database

Create a resource group to hold the resources for this project:

az group create \--location eastus \--name {GROUP\_NAME}

Create the database server:

az sql server create \-l eastus \-g {GROUP\_NAME} \--name {DB\_SERVER\_NAME} \--admin user {DB\_ADMIN\_USER} \--admin\-password {DB\_PASSWORD} \--enable\-public\-network true

Make sure to note the database name, username and password somewhere safe.

Create the database:

az sql db create \--resource\-group {GROUP\_NAME} \--server {DB\_SERVER\_NAME} \--name {DB\_NAME} \--service\-objective Basic

Allow your computer to access the database:

az sql server firewall\-rule create \--resource\-group {GROUP\_NAME} \--server {DB\_SERVER\_

Creating the Project & Installing Directus

Create a project directory, and install Directus by running:

npm init directus\-project ./directus\-example

In the prompts, enter:

  • Database Client: Microsoft SQL Server
  • Database host: {DB_SERVER_NAME}.database.windows.net
  • Port: 1433 (default)
  • Database Name: {DB_NAME}
  • Database User: {DB_ADMIN_USER}
  • Database Password: {DB_ADMIN_PASSWORD}
  • Encrypt Connection: Yes

Next, enter an email address and password combination for the first user.

Now, navigate into the project folder and run npx directus start to launch Directus.

Directus will run on port 8055 by default. To open the admin app, navigate to localhost:8055, and log in with the admin email and password combination you just created.

Creating the Data Model

For a more in-depth explanation on what Directus has to offer, please visit the Directus Documentation here.

Collections and fields correspond directly to tables and columns in the database. Every collection you build creates a table in the database, and, similarly, every field you create will be a column in the database.

Opening the admin panel app without having any existing collections will prompt you to create your first collection. For this example, we will name our collection articles.

Now that the collection is created, it's time to add some fields. Go to Settings > Data Model > Articles and select "Create Field." We’ll keep it easy here and stick to a regular input, but be sure to check out the other fields if you’re curious. Let’s give this field a key of title, then click Save.

Configuring Permissions

Now that you have a basic data model spun up, be sure only the correct people have access to it. Let’s talk about permissions and how to give public read/write access to the articles collection we’ve created.

Select Settings > Roles & Permissions > Public and use the checkbox icons in the table to Create (plus) and Read (eye) to “All Access.” This allows anyone outside the service to create and read items from your “articles” table.

Use Directus’s powerful rule-based permissions system to fine-tune access control for your exact needs. The example above is just the tip of the iceberg! For more information about permissions, please refer to the Directus Documentation.

Connecting Data

Directus ships with powerful RESTful and GraphQL APIs that beautifully wrap the raw power of Azure SQL. Now that you have a basic data model in place with permissions to save and retrieve data, you are ready to start using the API to easily interact with your data!

With your local server running, start by querying the API using curl or any other local request dev tool you prefer.

Use this command to create an article:

curl localhost:8055/items/articles
   -X POST
   -H "Content-Type: application/json"
   -d "{\"title\": \"Hello World!\"}"

Use this command to retrieve all articles:

curl localhost:8055/items/articles

Or, in GraphQL, you can use the GraphQL endpoint:

# localhost:8055/graphql
query {
   articles {
      title
   }
}

You can use any desktop GraphQL client or the online interactive client: https://graphiql-online.com/graphiql

This is just a sample of what the APIs have to offer. To keep it short in this quick introduction, we are skipping over the powerful query parameters that allow you to search, filter, sort, limit and nest relational data. To learn more about the flexibility Directus APIs provide, please refer to the Directus Documentation API Reference.

Going Live

Directus runs on anything that can run Node, but for the easiest deployment, we recommend using Azure App Service running the official Directus Docker Image. This enables you to run a highly available installation of Directus, without having to deal with server maintenance or other manual intervention.

Take these steps to get started:

Allow Azure services to reach the database:

az sql server firewall-rule create --resource-group {GROUP_NAME} --server {DB_SERVER_NAME} --name allow-azure-services --start-ip-address 0.0.0.0 --end ip-address 0.0.0.0

Create an App Service plan:

az appservice plan create --name {APP_PLAN_NAME} --resource-group {GROUP_NAME} --is-linux

Create the web app:

az webapp create --resource-group {GROUP_NAME} --plan {APP_PLAN_NAME} --name {APP_NAME} --deployment-container-image-name directus/directus:latest

Configure Azure to use port 8055 for Directus:

az webapp config appsettings set --resource-group {GROUP_NAME} --name {APP_NAME} --settings WEBSITES_PORT=8055

Import the environment variables from your local project installation:

az webapp config appsettings set --resource-group {GROUP_NAME} --name {APP_NAME} --settings DB_CLIENT=mssql
DB_HOST={DB_SERVER_NAME}.database.windows.net DB_PORT=1433 

DB_DATABASE={DB_NAME} DB_USER={DB_ADMIN_USER} DB_PASSWORD={DB_ADMIN_PASSWORD} DB_OPTIONS__ENCRYPT=true KEY={KEY} SECRET={SECRET}

(See your local .env file for the correct values to use above.)

You now have your Directus installation running on the web! You can access it directly on {APP_NAME}.azurewebsites.net. Try executing some of the requests from earlier to this new address!

Summary

Congratulations! You have successfully created a production-ready installation of Directus on top of your own Azure SQL database. Continue exploring Directus by adding more collections, fields, roles and permissions, discovering important insights, modifying files, and much more.

If you need a one-click, ready-to-go deployment of everything we went over, check out this article and GitHub Repo to learn how to complete an end-to-end setup. This is a great sandbox environment for you to explore and discover the power of Directus.

And once you’ve kicked the tires and are ready to graduate from a development environment into a production environment, Directus Cloud has price points available for any project. Learn more about Directus Cloud here.

Posted By

Directus Staff

Directus Staff

Share

LinkedIn LogoTwitter LogoReddit LogoDev.to Logo

Sign up for updates 🐇

Get insights, releases, and exciting news delivered directly to your inbox once a month. No spam - we promise. 🙂

  • Directus LogoDirectus Logo

    A composable backend to build your Headless CMS, BaaS, and more. 

  • Solutions
    • Headless CMS
    • Backend-as-a-Service
    • Product Information
    • 100+ Things to Build
  • Resources
    • Documentation
    • Guides
    • Community
    • Release Notes
  • Support
    • Issue Tracker
    • Feature Requests
    • Community Chat
    • Cloud Dashboard
  • Organization
    • About
    • Careers
    • Brand Assets
    • Contact
©2025 Monospace Inc
  • Cloud Policies
  • License
  • Terms
  • Privacy