NodeJS Strapi在生产中给了我DB错误,即使我使用了正确的凭据

lf3rwulv  于 2023-02-21  发布在  Node.js
关注(0)|答案(3)|浏览(242)

编辑:我在/config/database. js找到了一个文件,在开发中用来连接sqlite,当我把客户端名称从sqlite改为postgres时,问题就开始了。
strapi不是应该在生产中忽略这样的文件吗?我怎样才能让strapi忽略这个文件,而只使用我的postgres数据库呢?

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'sqlite',
        filename: env('DATABASE_FILENAME', '.tmp/data.db'),
      },
      options: {
        useNullAsDefault: true,
      },
    },
  },
});

结束编辑。
我试着让我的strapi应用程序在生产中启动,但它一直出错说

[2020-07-22T01:15:40.246Z] debug ⛔️ Server wasn't able to start properly.
[2020-07-22T01:15:40.247Z] error error: password authentication failed for user "<redacted>"

输出的其余部分与pg有关,这使我认为这是一个DB连接错误,我可以使用psql -U postgres -W从命令行登录到我的DB,这确认我知道我的密码。
另外,我使用pm2来运行程序,在该文件中没有使用process.env,而是直接添加了db变量,但这没有什么区别。
应用程序已经在生产模式下构建,我有3个pg格式的dbs,一个叫postgres,一个有我的apps名称,另一个叫strapi。
谢谢
我的/config/环境文件/生产数据库. json如下所示

{
  "defaultConnection": "default",
  "connections": {
    "default": {
      "connector": "bookshelf",
      "settings": {
        "client": "postgres",
        "host": "${process.env.DATABASE_HOST || '127.0.0.1'}",
        "port": "${process.env.DATABASE_PORT || 27017}",
        "database": "${process.env.DATABASE_NAME || 'strapi'}",
        "username": "${process.env.DATABASE_USERNAME || ''}",
        "password": "${process.env.DATABASE_PASSWORD || ''}"
      },
      "options": {
        "ssl": false
      }
    }
  }
}

在后端应用程序的根目录下有一个.env文件,如下所示

DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME="<redacted - all letters>"
DATABASE_USERNAME="<redacted - all letters>"
DATABASE_PASSWORD="<redacted - all letters>"
lc8prwob

lc8prwob1#

发现问题了。当我创建应用程序时,我使用sqlite作为我的数据库。结果,默认的database.js文件没有设置成可以被env变量覆盖的方式。
我创建了一个新的本地Strapi应用程序,用pgsql作为我的数据库,并将database.js文件的内容复制到我的服务器上。
新建参考文件

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'postgres',
        host: env('DATABASE_HOST', '127.0.0.1'),
        port: env.int('DATABASE_PORT', 5432),
        database: env('DATABASE_NAME', 'my-strapi-project'),
        username: env('DATABASE_USERNAME', 'testing'),
        password: env('DATABASE_PASSWORD', 'testing'),
        ssl: env.bool('DATABASE_SSL', false),
      },
      options: {}
    },
  },
});
sg24os4d

sg24os4d2#

我在开发中也遇到过同样的情况。我用SQLite创建了一个strapi应用程序,并决定使用PostgreSQL。这就是问题所在。所以修复如下:
app_name/config/database.js

module.exports = ({ env }) => ({
  connection: {
    client: 'postgres',
    connection: {
      host: env('DATABASE_HOST', '127.0.0.1'),
      port: env.int('DATABASE_PORT', 5432),
      database: env('DATABASE_NAME', 'db_name'),
      user: env('DATABASE_USERNAME', 'postgres'),
      password: env('DATABASE_PASSWORD', 'postgres'),
      ssl: env.bool('DATABASE_SSL', false),
    },
  },
});

您在app_name/package.json下的依赖关系应该如下所示

"dependencies": {
    "@strapi/strapi": "4.1.8",
    "@strapi/plugin-users-permissions": "4.1.8",
    "@strapi/plugin-i18n": "4.1.8",
    "pg": "8.6.0"
}
disbfnqx

disbfnqx3#

[2023-02-19 11:27:27.197]调试:服务️器无法正常启动。[2023-02-19 11:27:27.199]错误:用户“root”的密码验证失败
固定==〉

su - postgres

psql postgres

CREATE ROLE root SUPERUSER LOGIN PASSWORD 'password';

这里的兴趣点是strapi使用的模块。
配置文件database.js

module.exports = ({ env }) => ({
   defaultConnection: "default",
   connection: {
     client: "postgres",
     connection: {
       host: "127.0.0.1",
       port: 5432,
       database: "dbname",
       username: "postgres",
       password: "password",
       ssl: false
     },
     debug: true,
     useNullAsDefault: true
   }
});

版本包. json

"@_sh/strapi-plugin-ckeditor": "^2.0.3",
     "@strapi/plugin-i18n": "4.6.1,",
     "@strapi/plugin-users-permissions": "4.6.1,",
     "@strapi/strapi": "4.6.1,",
     "better-sqlite3": "8.0.1",
     "pg": "8.6.0"

检查版本

/etc/postgresql/{{version-postsql}}/main/pg_hba.conf

local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
host    all             postgres        127.0.0.1/32            trust
host    all             all             ::1/128                 trust

重新启动postgresql

sudo systemctl restart postgresql.service

su - postgres

psql

DROP root;

CREATE ROLE root WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWOR 'password......';

CREATEDB dbname;

我不知道为什么它最初的角色是root,但上面的简单解决方案对我很有效

相关问题