如何将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'替换成'%'。 -
编辑SuperTokens
config.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核心将在这个数据库中存储数据。如果你想把数据存储在一个现有的数据库中,请提供该数据库的名称。 -
编辑SuperTokens
config.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.yamlYAML
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; -
编辑SuperTokens
config.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.conf和pg_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; -
编辑SuperTokens
config.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.yamlYAML
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,那么核心设置就完成了!