Connect ETIMEDOUT

[details=“System Information”]

  • Strapi Version: 4.25.2
  • Operating System: MacBook pro 16
  • Database: mysql
  • Node Version: v19.9.0
  • NPM Version: 9.6.3
  • Yarn Version:

I’m trying to deploy my Strapi app on Heroku. This application is connected to my MySQL database hosted on AWS. Since Heroku uses dynamic IPs, I used QuotaGuard to create a static IP. The static IPs already have access allowed to the database.

When I run the application locally, I can connect to the database normally. But when I try to deploy it on Heroku, I’m encountering some errors. Could you help me?

2024-07-09T12:38:11.207673+00:00 app[web.1]: > strapi start
2024-07-09T12:38:11.207673+00:00 app[web.1]:
2024-07-09T12:38:23.108187+00:00 app[web.1]: [2024-07-09 12:38:23.106] debug: :no_entry: Server wasn’t able to start properly.
2024-07-09T12:38:23.108652+00:00 app[web.1]: [2024-07-09 12:38:23.108] error: connect ETIMEDOUT
2024-07-09T12:38:23.108653+00:00 app[web.1]: Error: connect ETIMEDOUT
2024-07-09T12:38:23.108653+00:00 app[web.1]: at Connection._handleConnectTimeout (/app/node_modules/mysql/lib/Connection.js:409:13)

my config file:

const { URL } = require('url');

module.exports = ({ env }) => {
  const client = env('DATABASE_CLIENT', 'mysql');

  const proxyUrl = env('QUOTAGUARDSTATIC_URL');
  const parsedProxyUrl = proxyUrl ? new URL(proxyUrl) : null;

  const connections = {
    mysql: {
      connection: {
        host: env('DATABASE_HOST', 'localhost'),
        port: env.int('DATABASE_PORT', 3306),
        database: env('DATABASE_NAME', 'strapi'),
        user: env('DATABASE_USERNAME', 'strapi'),
        password: env('DATABASE_PASSWORD', 'strapi'),
        ssl: env.bool('DATABASE_SSL', false) && {
          key: env('DATABASE_SSL_KEY', undefined),
          cert: env('DATABASE_SSL_CERT', undefined),
          ca: env('DATABASE_SSL_CA', undefined),
          capath: env('DATABASE_SSL_CAPATH', undefined),
          cipher: env('DATABASE_SSL_CIPHER', undefined),
          rejectUnauthorized: env.bool(
            'DATABASE_SSL_REJECT_UNAUTHORIZED',
            true
          ),
        },
        options: {
          proxy: parsedProxyUrl ? {
            host: parsedProxyUrl.hostname,
            port: parsedProxyUrl.port,
            protocol: parsedProxyUrl.protocol.replace(':', ''), 
            auth: parsedProxyUrl.username && parsedProxyUrl.password ? `${parsedProxyUrl.username}:${parsedProxyUrl.password}` : undefined,
          } : undefined,
        }
      },
      pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
    }
  };

  return {
    connection: {
      client,
      ...connections[client],
      acquireConnectionTimeout: env.int('DATABASE_CONNECTION_TIMEOUT', 60000),
    },
  };
};