이번 내용은 배포와 관련된 이전 포스팅에서 다룬 적이 있으므로 사전 작업은 해당 포스팅의 Postgres
섹션을 참고해주세요. 자세하게 다룰 부분은 해당 포스팅의 데이터베이스 구성
파트입니다.
직전 포스팅인 로컬 환경과 달리 구성해주셔야 하는 부분은 configure.swift
입니다. 아래와 같이 작성해주시면 됩니다.
import Vapor
import Fluent
import FluentPostgresDriver
public func configure(_ app: Application) throws {
app.migrations.add(CreateProjectItem(), to: .psql)
if let databaseURL = Environment.get("DATABASE_URL"), var postgresConfig = PostgresConfiguration(url: databaseURL) {
var clientTLSConfiguration = TLSConfiguration.makeClientConfiguration()
clientTLSConfiguration.certificateVerification = .none
postgresConfig.tlsConfiguration = clientTLSConfiguration
app.databases.use(.postgres(configuration: postgresConfig), as: .psql)
} else {
throw Abort(.internalServerError)
}
try routes(app)
}
TLSConfiguration
의 인스턴스를 생성하는 방식이 Vapor Docs와 다릅니다. 이는 Vapor Docs에서 TLSConfiguration 인스턴스 생성에 사용한 TLSConfiguration.forClient(certificationVerification:)
메서드가 deprecated 되었기 때문입니다. 이제는 TLSConfiguration.makeClientConfiguration()
을 통해 인스턴스를 생성할 수 있지만 certificationVerification
을 초기화 시점에 바로 .none
값으로 할당해줄 수는 없게 되었습니다. 만들어준 인스턴스의 certificationVerification
프로퍼티를 .none
으로 설정해주시고 postgresConfig.tlsConfiguration
에 할당해줍니다. 이를 통해 Heroku Postgres에서 발생할 수 있는 SSL Certification 관련 에러(Handshake Error)를 방지할 수 있습니다.
커밋하시고 서버에 푸시해주세요! CD로 인해 자동 배포됩니다.
git commit -m "feat: Configure heroku postgres database"
git push heroku master // 브랜치를 이용하고 있다면 git push heroku branchName:master
마이그레이션은 아래 명령을 통해 할 수 있습니다.
heroku run Run -- migrate --env production
데이터베이스를 되돌리려면 아래 명령을 입력하세요.
heroku run Run -- migrate --revert --all --yes --env production
revert 작업에 실패하면 아래 명령어를 입력해보세요.
heroku run Run -- migrate --revert