apple/Vapor

[Vapor] Vapor + heroku

lgvv 2022. 9. 14. 14:43

Vapor + heroku

 


node.js로 서버를 개발했었는데, Swift 언어로 서버 개발을 해보고 싶어서 Vapor를 학습하고 배포에는 heroku를 사용해서 간단하게 제작해봄.

배포까지 진행한건 이번이 처음인데 익숙하지 않다보니 문서를 읽고, 이해하고 작업하는데 시간이 많이 걸려서 더 글을 간단하게 기록

 

개발환경

  • Xcode 13.4.1

 

1. Vapor 설치하기


터미널에서 brew를 통해 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