You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将搭载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-256
    
    保存后执行sudo systemctl reload postgresql使配置生效。
  • 环境变量验证:确保部署环境中正确设置DATABASE_USERNAME、DATABASE_PASSWORD和DATABASE_NAME环境变量,避免使用代码中的默认测试值,敏感信息禁止硬编码。
  • 网络连通性检查:用ping 82.125.176.210测试Vapor应用服务器与VPS的基础网络连通性,排除链路拦截问题。

内容的提问来源于stack exchange,提问作者Emmanuel Leicher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:54:16