apple/Vapor

[Vapor] Vapor + heroku

lgvv 2022. 9. 14. 14:43

Vapor + heroku

 

 

직접 서버 개발을 주도해보고 싶어서 Vapor를 학습하고 heroku를 통해 배포해 보았습니다.

서버 개발 경험이 전무해서 문서를 읽고, 이해하고 만드는데 시간이 많이 걸려서 다음번에 더 손쉽게 하기 위해서 기록해 두려고 합니다.

 

개발환경

 - Xcode 13.4.1

 

1. Vapor 설치하기

터미널에 아래의 코드를 입력

 

brew install vapor

2. Vapor 프로젝트 생성

터미널에 순서대로 입력.

// 1. 터미널에 vapor 프로젝트 생성
vapor new { 프로젝트 이름 } // ex. vapor new vaportest
// 2. y, 1, y 순서로 입력 

// 3. 생성된 파일 내부로 이동
cd { 프로젝트 이름 } 

// 4. vapor Xcode 열기
vapor xcode

// 5. 엑스코드 연 후 빌드 후 실행
// 6. 실행이 된 후 크롬 창에 localhost:8080

6번 과정 이후, 브라우저에 결과가 표시되면 성공

 

3. 가장 중요한 것은 대시보드!

 

대시보드에서 Reource - Add-ons섹션에서 postgres 선택 후 Heroku Postgres를 선택하고 Hobby Dev - Free 플랜을 선택하고 완료하면 된다.

 

다시 로컬로 돌아와서 터미널에

 

4. Heroku CLI 설치

brew install heroku/brew/heroku

5. heroku login

heroku login

정상적으로 로그인 되는지 확인하려면,

heroku auth:whoami

6. git

대시보드에 설정한 앱 이름을 넣어준다.

여기서 git이라고 하면은 heroku가 git을 이용한다는 거지, 내가 깃헙에 git을 굳이 안올려도 돼.

그러니까 heroku용 깃과 코드를 위한 나의 git이 따로 있다고 생각하면 된다.

heroku git:remote { 대시보드에 지정한 heroku 앱 이름 }

7. 빌드팩 설정

heroku buildpacks:set vapor/vapor

8. .swift-version 생성 및 Profile 생성

echo "5.2.4" > .swift-version

echo "web: Run serve --env production" \
  "--hostname 0.0.0.0 --port \$PORT" > Procfile

9. PostgreSQL 설정

앱이 데이터베이스에 접근할 수 있도록 설정한다.

heroku config

 

만약 설정이 정상적으로 되었다면, 명령어를 입력했을 때

=== { 대시보드에 등록한 앱 이름 } Config VarsDATABASE_URL: postgres:// { ... }

위 처럼 나타난다.

만약 제대로 나타나지 않는다면 3번 과정을 수행하지 않았는지 확인이 필요하다.

 

10. configure.swift 파일에 다음의 코드를 추가합니다.

import Fluent
import FluentPostgresDriver
import Leaf
import Vapor

// configures your application
public func configure(_ app: Application) throws {
    //     uncomment to serve files from /Public folder
    app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
    
    if let databaseURL = Environment.get("DATABASE_URL"), var postgresConfig = PostgresConfiguration(url: databaseURL) {
        postgresConfig.tlsConfiguration = .forClient(certificateVerification: .none)
        app.databases.use(.postgres(
            configuration: postgresConfig
        ), as: .psql)
    } else {
        // ...
    }
    
    app.databases.use(.postgres(
        hostname: Environment.get("DATABASE_HOST") ?? "localhost",
        port: Environment.get("DATABASE_PORT").flatMap(Int.init(_:)) ?? PostgresConfiguration.ianaPortNumber,
        username: Environment.get("DATABASE_USERNAME") ?? "vapor_username",
        password: Environment.get("DATABASE_PASSWORD") ?? "vapor_password",
        database: Environment.get("DATABASE_NAME") ?? "vapor_database"
    ), as: .psql)
    
    app.migrations.add(CreateTodo())
    
    app.views.use(.leaf)
    
    
    
    // register routes
    try routes(app)
}

위 코드처럼 작성합니다.

 

 

마지막으로 배포!

heroku는 기본적으로 master 브랜치에 배포 

git push heroku master

이 과정에서 약간의 시간일 걸림

 

이후 코드가 변경되었다면

git add * 
git commit -m "커밋 메시지"
git push heroku master

커밋하고 푸시하면 된다.

 

 

다음에 포스트 맨으로

https://{대시보드 앱 이름}.herokuapp.com/...

 

 

 

hello vapor!

 

 

 

🚨 이슈

heroku ps:scale web=1 입력시, Couldn't find that process type, Heroku가 나타났을 때 사용

아래처럼 해도 되었으나, 저의 경우에는 heroku 대시보드에서 데이터베이스를 제대로 설정하지 않아서 나타나는 문제였습니다.

heroku config를 했을 때 아무것도 나타

 

https://www.appsloveworld.com/django/100/149/couldnt-find-that-process-type-web-error-on-heroku

 

[Solved]-Couldn't find that process type (web) error on heroku-django

Coding example for the question Couldn't find that process type (web) error on heroku-django

www.appsloveworld.com

 

 

(참고)

https://yagom.net/courses/start-vapor/lessons/vapor-app-%eb%b0%b0%ed%8f%ac%ed%95%98%ea%b8%b0/

 

Vapor App 배포하기 - 야곰닷넷

Server-Side Swift with Vapor Vapor App 배포하기 앱을 구현하기에 앞서 배포를 먼저 진행하겠습니다. 현재 Vapor […]

yagom.net

https://hururuek-chapchap.tistory.com/128?category=933474 

 

Vapor ) Vapor와 Leaf로 웹 사이트를 만들어보자 2부

안녕하세요 후르륵짭짭 입니다. 2020/10/12 - [Vapor] - Vapor ) Vapor와 Leaf로 웹 사이트 만들어보자 1부 Vapor ) Vapor와 Leaf로 웹 사이트 만들어보자 1부 안녕하세요 후르륵짭짭 입니다. 오늘은 Vapor에 대..

hururuek-chapchap.tistory.com