如何将SuperTokens连接至MySQL或PostgreSQL数据库

492 阅读10分钟

如何将SuperTokens连接到MySQL或PostgreSQL数据库上

了解如何使用或不使用Docker将自我托管的SuperTokens核心连接到MySQL或PostgreSQL数据库。

这篇博客将带你了解在有或没有Docker的情况下将SuperTokens核心服务与MySQL或PostgreSQL数据库连接起来。

这只适用于你自我托管SuperTokens核心服务的情况。

对于如何将SuperTokens与数据库一起运行,有几种方法。在这篇博客中,我们将介绍。

请根据你的设置自由地浏览正确的部分。在每一节中,我们将在适当的地方链接到SuperTokens的文档,以便本博客不会很冗长。

下面的所有章节都假定你使用的是基于Linux的操作系统。对于Windows,某些步骤的语法可能有所不同,但需要执行的总体步骤是相同的。

1a) 不使用Docker运行SuperTokens和MySQL


  • 按照SuperTokens文档中的自我托管、不使用docker的说明,在你的本地机器上安装SuperTokens。

  • 连接到本地机器上的MySQL服务器,为SuperTokens创建一个可以写入的数据库。

    MySQL

    create database supertokens;
    

    如果你已经有了一个用于你的应用程序的数据库,并且希望SuperTokens在其中创建表,你可以跳过这一步。

  • 创建一个MySQL用户,该用户具有对上一步创建的数据库的完全访问权。这个用户将被 SuperTokens 用来创建和写入数据库表。

    MySQL

    CREATE USER 'supertokens_user'@'localhost' IDENTIFIED BY 'somePassword';
    

    MySQL

    GRANT ALL ON supertokens.* TO 'supertokens_user'@'localhost';
    

    MySQL

    FLUSH PRIVILEGES;
    

    注意,我们只允许这个用户通过'localhost' 工作。这只有在SuperTokens核心也在本地运行的情况下才会起作用。如果你在不同的地方运行核心,那么你需要把上面的'localhost' 替换成'%'

  • 编辑SuperTokensconfig.yaml 文件(位于/usr/lib/supertokens/config.yaml ),添加以下配置。

    属性文件

    mysql_connection_uri: "mysql://supertokens_user:somePassword@localhost:3306/supertokens"
    

    确保你在上述连接URI字符串中为用户、密码、数据库名称和你的MySQL实例的位置输入了正确的值。

  • 通过在你的终端上运行supertokens start ,运行SuperTokens。

    壳牌公司

    supertokens start
    
    Loading storage layer.
    Loading MySQL config.
    ...
    Started SuperTokens on localhost:3567 with PID: ...
    
  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

1b) 用Docker运行SuperTokens,不用Docker运行MySQL


为了使这个设置工作,我们必须通过主机的网络连接SuperTokens和MySQL。为此,我们必须将MySQL数据库暴露在本地IP上。

  • 首先,拉出与MySQL兼容的SuperTokens docker镜像。

    外壳

    docker pull registry.supertokens.io/supertokens/supertokens-mysql
    
  • 将MySQL服务器暴露给你机器上的所有网络接口。要做到这一点,编辑my.cnf 文件(MySQL配置文件)以包括。

    属性文件

    bind-address = 0.0.0.0
    

    确保在保存该文件后重新启动你的MySQL服务器。

  • 连接到本地机器上的MySQL服务器,并为SuperTokens创建一个可以写入的数据库。

    MySQL

    create database supertokens;
    

    如果您已经有一个用于您的应用程序的数据库,并且希望 SuperTokens 在其中创建表,您可以跳过这一步。

  • 创建一个MySQL用户,该用户具有对上一步创建的数据库的完全访问权。这个用户将被 SuperTokens 用来创建和写入数据库表。

    MySQL

    CREATE USER 'supertokens_user'@'%' IDENTIFIED BY 'somePassword';
    

    MySQL

    GRANT ALL ON supertokens.* TO 'supertokens_user'@'%';
    

    MySQL

    FLUSH PRIVILEGES;
    
  • 使用指定MySQL连接URI的env var来运行SuperTokens docker镜像。

    Shell

    docker run \
      -p 3567:3567 \
      --network=host \
      -e MYSQL_CONNECTION_URI="mysql://supertokens_user:somePassword@192.168.1.1:3306/supertokens" \
      -d registry.supertokens.io/supertokens/supertokens-mysql
    

    请确保用你系统的正确IP替换192.168.1.1

    这将在后台启动docker镜像。你可以通过运行找到它。

    Shell

    docker ps
    

    如果你想在前台运行它,你可以从docker run 命令中删除-d 选项。

  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

1c) 在没有Docker的情况下运行SuperTokens和使用Docker的MySQL


  • 按照SuperTokens文档中的无Docker的自我托管说明,在你的本地机器上安装SuperTokens。

  • 启动MySQL docker容器。

    壳牌

    docker run \
      -e MYSQL_ROOT_PASSWORD=root \
      -e MYSQL_USER=supertokens_user \
      -e MYSQL_PASSWORD=somePassword \
      -e MYSQL_DATABASE=supertokens \
      --network=host \
      -p 3306:3306 \
      -d mysql
    

    以上将启动MySQL数据库,建立一个名为supertokens 的新数据库。SuperTokens核心将在这个数据库中存储数据。如果你想把数据存储在一个现有的数据库中,请提供该数据库的名称。

  • 编辑SuperTokensconfig.yaml 文件(位于/usr/lib/supertokens/config.yaml ),添加以下配置。

    属性文件

    mysql_connection_uri: "mysql://supertokens_user:somePassword@localhost:3306/supertokens"
    

    请确保在上述连接URI字符串中为用户、密码、数据库名称和MySQL实例的位置输入正确的值。

  • 通过在你的终端上运行supertokens start ,运行SuperTokens。

    壳牌公司

    supertokens start
    
    Loading storage layer.
    Loading MySQL config.
    ...
    Started SuperTokens on localhost:3567 with PID: ...
    
  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

1d) 使用Docker运行SuperTokens和MySQL,但没有docker-compose


  • 首先拉出与MySQL兼容的SuperTokens docker镜像。

    Shell

    docker pull registry.supertokens.io/supertokens/supertokens-mysql
    
  • 启动MySQL docker容器。

    壳牌

    docker run \
      -e MYSQL_ROOT_PASSWORD=root \
      -e MYSQL_USER=supertokens_user \
      -e MYSQL_PASSWORD=somePassword \
      -e MYSQL_DATABASE=supertokens \
      --network=host \
      -p 3306:3306 \
      -d mysql
    

    以上将用一个新的数据库启动MySQL数据库,名为supertokens 。SuperTokens核心将在这个数据库中存储数据。如果你想把数据存储在一个现有的数据库中,请提供该数据库的名称。

  • 运行SuperTokens docker镜像,在env var中指定MySQL连接URI。

    docker run \
      -p 3567:3567 \
      --network=host \
      -e MYSQL_CONNECTION_URI="mysql://supertokens_user:somePassword@192.168.1.1:3306/supertokens" \
      -d registry.supertokens.io/supertokens/supertokens-mysql
    

    请确保用你系统的正确IP替换192.168.1.1

    这将在后台启动docker镜像。你可以通过运行找到它。

    Shell

    docker ps
    

    如果你想在前台运行它,你可以从docker run 命令中删除-d 选项。

  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

1e) 使用Docker运行SuperTokens和MySQL,使用docker-compose


  • 使用下面的docker compose文件。你可以把它叫做docker-compose.yaml

    YAML

    version: '3'
    
    services:
      db:
        image: mysql:latest
        environment:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_USER: supertokens_user
          MYSQL_PASSWORD: somePassword
          MYSQL_DATABASE: supertokens
        ports:
          - 3306:3306
        networks:
          - app_network
        restart: unless-stopped
        healthcheck:
          test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
          timeout: 20s
          retries: 10
    
      supertokens:
        image: registry.supertokens.io/supertokens/supertokens-mysql
        depends_on:
          - db
        ports:
          - 3567:3567
        environment:
          MYSQL_CONNECTION_URI: mysql://supertokens_user:somePassword@db:3306/supertokens
        networks:
          - app_network
        restart: unless-stopped
        healthcheck:
          test: >
            bash -c 'exec 3<>/dev/tcp/127.0.0.1/3567 && echo -e "GET /hello HTTP/1.1\r\nhost: 127.0.0.1:3567\r\nConnection: close\r\n\r\n" >&3 && cat <&3 | grep "Hello"'
          interval: 10s
          timeout: 5s
          retries: 5
    
    networks:
      app_network:
        driver: bridge
    
  • 你可以运行下面的命令来启动该服务。

    壳牌

    docker-compose up
    
  • 通过查询核心服务来验证它是否被正确设置了。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

2a) 不用docker运行SuperTokens和PostgreSQL


  • 按照SuperTokens文档中的不含docker的自我托管说明,在你的本地机器上安装SuperTokens。

  • 连接到本地机器上的PostgreSQL服务器,为SuperTokens创建一个可以写入的数据库。

    PLSQL

    CREATE DATABASE supertokens;
    

    如果你已经有一个用于你的应用程序的数据库,并且希望SuperTokens在其中创建表,你可以跳过这一步。

  • 创建一个PostgreSQL用户,该用户可以完全访问上一步创建的数据库。这个用户将被SuperTokens用来创建和写入数据库的表。

    PLSQL

    CREATE USER supertokens_user WITH ENCRYPTED PASSWORD 'somePassword';
    

    PLSQL

    GRANT ALL PRIVILEGES ON DATABASE supertokens TO supertokens_user;
    
  • 编辑SuperTokensconfig.yaml 文件(位于/usr/lib/supertokens/config.yaml ),添加以下配置。

    属性文件

    postgresql_connection_uri: "postgresql://supertokens_user:somePassword@localhost:5432/supertokens"
    

    确保在上面的连接uri字符串中输入正确的用户、密码、数据库名称和你的postgreSQL实例的位置的值。

  • 通过在你的终端上运行supertokens start来运行SuperTokens。

    壳牌公司

    supertokens start
    
    Loading storage layer.
    Loading PostgreSQL config.
    ...
    Started SuperTokens on localhost:3567 with PID: ...
    
  • 通过查询核心服务来验证它是否被正确设置了。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

2b) 用Docker运行SuperTokens,不用Docker运行PostgreSQL


为了使这个设置工作,我们必须通过主机的网络连接SuperTokens和PostgreSQL。为此,我们必须让PostgreSQL允许通过网络进入客户端连接。

  • 首先,拉出与PostgreSQL兼容的SuperTokens docker镜像。

    壳牌公司

    docker pull registry.supertokens.io/supertokens/supertokens-postgresql
    
  • 通过在postgresql.confpg_hba.conf 文件中添加以下几行,允许通过网络传入客户端连接到你的PostgreSQL数据库。

    postgresql.conf

    属性文件

    listen_addresses = '0.0.0.0'
    

    pg_hba.conf

    属性文件

    host all all 0.0.0.0/0 md5
    
  • 连接到本地机器上的PostgreSQL服务器,并为SuperTokens创建一个可以写入的数据库。

    PLSQL

    CREATE DATABASE supertokens;
    

    如果你已经有一个应用程序的数据库,并且希望SuperTokens在其中创建表,你可以跳过这一步。

  • 创建一个PostgreSQL用户,该用户可以完全访问上一步创建的数据库。这个用户将被SuperTokens用来创建和写入数据库的表。

    PLSQL

    CREATE USER supertokens_user with encrypted password 'somePassword';
    

    PLSQL

    GRANT ALL PRIVILEGES ON DATABASE supertokens TO supertokens_user;
    
  • 运行 SuperTokens docker 镜像,在 env var 中指定 PostgreSQL 连接 URI。

    Shell

    docker run \              
      -p 3567:3567 \
      --network=host \
      -e POSTGRESQL_CONNECTION_URI="postgresql://supertokens_user:somePassword@192.168.1.1:5432/supertokens" \
      -d registry.supertokens.io/supertokens/supertokens-postgresql
    

    请确保用你系统的正确IP替换192.168.1.1

    这将在后台启动docker镜像。你可以通过运行找到它。

    Shell

    docker ps
    

    如果你想在前台运行它,你可以从docker run 命令中删除-d 选项。

  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

2c) 在没有Docker的情况下运行SuperTokens和使用Docker的PostgreSQL


  • 按照SuperTokens文档中不含Docker的自我托管说明,在你的本地机器上安装SuperTokens。

  • 启动PostgreSQL docker容器。

    外壳

    docker run \
      -e POSTGRES_USER=root \
      -e POSTGRES_PASSWORD=root \
      --network=host \
      -p 5432:5432 \
      -d postgres \
      -c listen_addresses=0.0.0.0
    

    以上将启动PostgreSQL db。你将需要连接到数据库并创建一个具有权限的用户。

    PLSQL

    CREATE DATABASE supertokens;
    

    如果你已经有一个用于你的应用程序的数据库,并且希望SuperTokens在其中创建表,你可以跳过这一步。

  • 创建一个PostgreSQL用户,该用户具有对上一步创建的数据库的完全访问权。这个用户将被SuperTokens用来创建和写入数据库的表。

    PLSQL

    CREATE USER supertokens_user with encrypted password 'somePassword';
    

    PLSQL

    GRANT ALL PRIVILEGES ON DATABASE supertokens TO supertokens_user;
    
  • 编辑SuperTokensconfig.yaml 文件(位于/usr/lib/supertokens/config.yaml ),添加以下配置。

    YAML

    postgresql_connection_uri: "postgresql://supertokens_user:somePassword@localhost:5432/supertokens"
    

    确保在上述连接URI字符串中输入正确的用户、密码、数据库名称和PostgreSQL实例的位置的值。

  • 通过在你的终端上运行supertokens start 来运行SuperTokens。

    壳牌公司

    supertokens start
    
    Loading storage layer.
    Loading PostgreSQL config.
    ...
    Started SuperTokens on localhost:3567 with PID: ...
    
  • 通过查询核心服务来验证它是否被正确设置了。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

2d) 使用Docker运行SuperTokens和PostgreSQL,但没有docker-compose


  • 首先拉出与PostgreSQL兼容的SuperTokens docker镜像。

    docker pull registry.supertokens.io/supertokens/supertokens-postgresql
    
  • 启动PostgreSQL docker容器。

    壳牌公司

    docker run \
      -e POSTGRES_USER=root \
      -e POSTGRES_PASSWORD=root \
      --network=host \
      -p 5432:5432 \
      -d postgres \
      -c listen_addresses=0.0.0.0
    

    上述操作将启动PostgreSQL数据库。你将需要连接到数据库并创建一个具有权限的用户。

    PLSQL

    CREATE DATABASE supertokens;
    

    如果你已经有一个用于你的应用程序的数据库,并且希望SuperTokens在其中创建表,你可以跳过这一步。

  • 创建一个PostgreSQL用户,该用户具有对上一步创建的数据库的完全访问权。这个用户将被SuperTokens用来创建和写入数据库的表。

    PLSQL

    CREATE USER supertokens_user with encrypted password 'somePassword';
    

    PLSQL

    GRANT ALL PRIVILEGES ON DATABASE supertokens TO supertokens_user;
    
  • 运行 SuperTokens docker 镜像,在 env var 中指定 PostgreSQL 连接 URI。

    Shell

    docker run \              
      -p 3567:3567 \
      --network=host \
      -e POSTGRESQL_CONNECTION_URI="postgresql://supertokens_user:somePassword@192.168.1.1:5432/supertokens" \
      -d registry.supertokens.io/supertokens/supertokens-postgresql
    

    请确保用你系统的正确IP替换192.168.1.1

    这将在后台启动docker镜像。你可以通过运行找到它。

    Shell

    docker ps
    

    如果你想在前台运行它,你可以从docker run 命令中删除-d 选项。

  • 通过查询核心服务来验证它的设置是否正确。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!

2e) 使用Docker运行SuperTokens和PostgreSQL,使用docker-compose


  • 使用下面的docker compose文件。你可以把它叫做docker-compose.yaml

    YAML

    version: '3'
    
    services:
      db:
        image: 'postgres:latest'
        environment:
          POSTGRES_USER: supertokens_user 
          POSTGRES_PASSWORD: somePassword 
          POSTGRES_DB: supertokens
        ports:
          - 5432:5432
        networks:
          - app_network
        restart: unless-stopped
        healthcheck:
          test: ['CMD', 'pg_isready -U supertokens_user']
          interval: 5s
          timeout: 5s
          retries: 5
    
      supertokens:
        image: registry.supertokens.io/supertokens/supertokens-postgresql
        depends_on:
          - db
        ports:
          - 3567:3567
        environment:
          POSTGRESQL_CONNECTION_URI: "postgresql://supertokens_user:somePassword@db:5432/supertokens"
        networks:
          - app_network
        restart: unless-stopped
        healthcheck:
          test: >
            bash -c 'exec 3<>/dev/tcp/127.0.0.1/3567 && echo -e "GET /hello HTTP/1.1\r\nhost: 127.0.0.1:3567\r\nConnection: close\r\n\r\n" >&3 && cat <&3 | grep "Hello"'
          interval: 10s
          timeout: 5s
          retries: 5
    
    networks:
      app_network:
        driver: bridge
    
  • 你可以运行下面的命令来启动该服务。

    壳牌

    docker-compose up
    
  • 通过查询核心服务来验证它是否被正确设置了。

    Shell

    curl http://localhost:3567/hello
    

    如果你得到的回复是Hello ,那么核心设置就完成了!