无法将搭载Postgres数据库的Vapor项目部署至VPS
Vapor连接PostgreSQL超时问题解决
错误信息
2022-08-05 11:18:26.611154+0200 Run[16315:261688] Swift/ErrorType.swift:200: Fatal error: Error raised at top level: PostgresNIO.PSQLError(base: PostgresNIO.PSQLError.Base.connectionError(underlying: NIOPosix.NIOConnectionError(host: "82.125.176.210", port: 5432, dnsAError: nil, dnsAAAAError: nil, connectionErrors: [NIOPosix.SingleConnectionFailure(target: [IPv4]82.125.176.210/82.125.176.210:5432, error: connection reset (error set): Operation timed out (errno: 60))])))
配置代码
import Fluent import FluentPostgresDriver import Vapor import Leaf public func configure(_ app: Application) throws { app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory)) app.middleware.use(app.sessions.middleware) let databaseName: String let databasePort: Int databaseName = "vapor_database" databasePort = 5432 app.databases.use(.postgres( hostname: "82.125.176.210", port: databasePort, username: Environment.get("DATABASE_USERNAME") ?? "456787555", password: Environment.get("DATABASE_PASSWORD") ?? "456787555", database: Environment.get("DATABASE_NAME") ?? databaseName ), as: .psql) app.migrations.add(CreateUser()) app.migrations.add(CreateAcronym()) app.migrations.add(CreateCategory()) app.migrations.add(CreateAcronymCategoryPivot()) app.migrations.add(CreateToken()) switch app.environment { case .development, .testing: app.migrations.add(CreateAdminUser()) default: break } app.migrations.add(AddTwitterURLToUser()) app.migrations.add(MakeCategoriesUnique()) app.logger.logLevel = .debug try app.autoMigrate().wait() app.views.use(.leaf) // register routes try routes(app) }
排查与解决步骤
- 端口连通性测试:在Vapor应用所在服务器执行
nc -zv 82.125.176.210 5432,若显示连接失败,说明端口未开放。 - VPS防火墙配置:检查VPS的防火墙(如ufw),执行
sudo ufw allow 5432/tcp对外开放5432端口,之后重启防火墙。 - PostgreSQL监听设置:修改PostgreSQL配置文件
postgresql.conf,将listen_addresses设为*以允许所有IP访问,重启PostgreSQL服务:sudo systemctl restart postgresql。 - PostgreSQL权限配置:编辑
pg_hba.conf,添加外部IP访问规则,例如:
保存后执行host vapor_database 456787555 0.0.0.0/0 scram-sha-256sudo systemctl reload postgresql使配置生效。 - 环境变量验证:确保部署环境中正确设置
DATABASE_USERNAME、DATABASE_PASSWORD和DATABASE_NAME环境变量,避免使用代码中的默认测试值,敏感信息禁止硬编码。 - 网络连通性检查:用
ping 82.125.176.210测试Vapor应用服务器与VPS的基础网络连通性,排除链路拦截问题。
内容的提问来源于stack exchange,提问作者Emmanuel Leicher
相关产品推荐
相关产品推荐

