cloudflare / worker-template-mysql

Reference demo and modified MySQL driver to connect Cloudflare Workers to a relational database.
Apache License 2.0
46 stars 14 forks source link
cloudflare database mysql serverless sql workers

Cloudflare Workers + MySQL

This repo contains example code and a MySQL driver that can be used in any Workers project. If you are interested in using the driver outside of this template, copy the driver/mysql module into your project's node_modules or directly alongside your source.

Usage

Before you start, please refer to the official tutorial.

const mysql = new Client()
const mysqlClient = await mysql.connect({
    username: '<DATABASE_USER>',
    db: '<DATABASE_NAME>',
    // hostname is the full URL to your pre-created Cloudflare Tunnel, see documentation here:
    // https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/create-tunnel
    hostname: env.TUNNEL_HOST || 'https://dev.example.com',
    password: env.DATABASE_PASSWORD, // use a secret to store passwords
})

Please Note:

Running the MySQL Demo

mysql/docker-compose.yml

This docker-compose composition will get you up and running with a local instance of mysql and a copy of cloudflared to enable your applications to securely connect through an encrypted tunnel. Unlike the PostgreSQL example, this does not contain any server-side connection pool, but you can configure one behind cloudflared should it be necessary.

Usage

from within scripts/mysql, run:

  1. Create credentials file (first time only)

    docker run -v ~/.cloudflared:/etc/cloudflared cloudflare/cloudflared:2021.10.5 login
  2. Start a local dev stack (cloudflared/mysql)

    TUNNEL_HOSTNAME=dev.example.com docker-compose up