[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: 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),
},
};
};