Docker를 사용하여 Heroku에 명령줄을 통해 빛나는 애플리케이션 배포

Docker를 사용하여 Heroku에 명령줄을 통해 빛나는 애플리케이션 배포

반응형

피터 솔리모스

원래 2021-07-10년 Hosting Data Apps 블로그에 게시되었습니다.

Heroku는 인프라스트럭처를 관리하지 않고도 애플리케이션을 호스팅하고 확장할 수 있는 인기 옵션입니다. 이 게시물에서는 Heroku 명령줄 인터페이스(CLI)를 사용하여 Heroku에 도킹된 Shiny 애플리케이션을 배포하는 방법을 배우게 됩니다.

헤로쿠란 무엇인가

Heroku는 애플리케이션을 구현, 실행 및 관리할 수 있는 클라우드 PaaS(Platform-as-a-Service)입니다. 또한 Heroku는 Salesforce 플랫폼의 일부로서, 기업이 Salesforce에 고객 데이터를 저장하고 활용하여 전체 CRM 작업을 수행할 수 있도록 지원합니다.

애플리케이션(앱)은 애플리케이션을 빌드 및 실행하는 방법을 결정하는 소스 코드와 종속성 설명을 조합한 것입니다. 빌드 메커니즘은 일반적으로 언어별로 다르며 이른바 빌드 팩을 기반으로 합니다.

R은 Heroku에서 공식적으로 지원되는 언어가 아니기 때문에, R용 빌드 팩은 모두 커뮤니티가 유지 관리되고 지연될 수 있습니다(예: 이 제품은 R3.4.3 사용). 이 R Buildpack GitHub 저장소는 매우 최신이며 Shiny 및 Plumber용 팩터 Renv 기반 워크플로우를 지원합니다.

물론 이러한 R Build Pack의 주요 주의 사항은 커뮤니티가 유지된다는 것이 아닙니다. 우리의 삶을 단순화하고 다른 모든 사람들을 위해 무거운 짐을 들어주신 정비사분들께 감사드립니다! 이들의 말에 따르면 주된 주의 사항은 다음과 같습니다.

즉, 까다로운 시스템 종속성을 모두 처리하기 위해 Docker 기반 스택을 사용하는 것이 좋습니다. 앞서 보신 것처럼, 도커 기반 워크플로우(Shiny 포함)는 구축 전에 로컬 테스트를 수행할 수 있는 기회를 제공합니다. 이 또한 매우 유용할 수 있습니다.

Heroku는 모든 Heroku 애플리케이션이 dynos라고 하는 경량 Linux 컨테이너 컬렉션에서 실행되기 때문에 Docker 기반 워크플로우에 매우 적합합니다.

전제조건

이 튜토리얼을 따르려면 Heroku에 가입해야 합니다. 우선, 그것은 무료이다. 일반 Heroku 가격, Dyno 유형 및 무료 Dyno 시간에 대해 자세히 알아보십시오.

Heroku에는 계정 확인 및 신용 카드 정보가 필요하지 않지만 확인되지 않은 계정에는 제한이 있습니다. 예를 들어 앱 수(5 대 100), 사용자 지정 도메인 등 검증 후에도 무료 플랜을 사용할 수 있으므로 그렇게 하는 것이 합리적일 수 있습니다. 너에게 달렸어.

생성할 Git 저장소를 변경하려면 Git을 로컬에 설치해야 합니다.

명령줄에서 Heroku와 통신할 수 있으려면 Heroku 명령줄 인터페이스(CLI)를 사용합니다. 설치 방법에 대한 자세한 내용은 여기를 참조하십시오. heroku --version을 사용하여 CLI를 사용할 준비가 되었는지 테스트합니다. 그런 다음 자격 증명을 입력하라는 메시지가 표시될 heroku 로그인을 입력합니다. 다음 번에 CLI에서 자동으로 로그인합니다.

R, 반짝임 및 Docker Engine 설치가 필요하다는 것은 말할 필요도 없습니다.

샤이니 앱

Heroku-hello라는 새 폴더를 Docker 파일 안에 생성해 보겠습니다.

mkdir heroku-hello cd heroku-hello touch Dockerfile

Dockerized Hello 예제를 사용하겠습니다. Docker 파일에서 상위 이미지로 사용하는 기존 이미지입니다.

FROM registry.gitlab.com/analythium/shinyproxy-hello/hello ENV PORT=3838 CMD ["R", "-e", "shiny::runApp('/home/app', host = '0.0.0.0', port=as.numeric(Sys.getenv('PORT')))"]

포트 설정 및 CMD 부분이 이전 Docker 파일과 다릅니다. 포트 번호는 Heroku 컨테이너 런타임에 의해 환경 변수로 전달됩니다. 따라서 runApp() 명령은 Sys.getenv( PORT )를 사용하여 포트 번호를 선택해야 합니다. ENVPORT=3838을 추가하는 이유는 로컬 테스트를 지원하기 위해서입니다.

만약 당신이 이것을 당신의 앱에 적용하기를 원한다면, 당신은 할 수 있다.

위에서 설명한 것처럼 앱의 도커라이즈된 버전을 상위 이미지로 사용합니다.

또는 Docker 파일을 편집하여 특정 포트를 하드 코딩하고 노출하는 대신 $PORT 변수를 사용하도록 할 수 있습니다.

앱을 테스트해 보겠습니다.

docker build -t heroku-hello . docker run -p 3838:3838 heroku-hello

샘플 크기 슬라이더를 사용한 친숙한 보라색 히스토그램을 보려면 127.0.0.1:3838을 방문하십시오.

배치

애플리케이션의 루트 디렉터리에 heroku.yml(touch heroku.yml) 파일을 생성합니다. 다음 예제 heroku.yml은 앱의 웹 프로세스에 사용할 이미지를 만드는 데 사용할 Docker 파일을 지정합니다.

js build: docker: web: Dockerfile

## 응용 프로그램 생성 이 지점이 변경 사항이 있는 경우 이를 커밋해야 하는 지점입니다. 애플리케이션이 Heroku에 이미 있는 경우 새 커밋이 있는 저장소만 배포됩니다. ```js # Initialize the local directory as a Git repository git init -b main # Add the files and stage them for commit git add . # Commit tracked changes and sign-off the message git commit -s -m "First commit" ``` 용기 스택을 사용하여 Heroku 애플리케이션을 생성합니다. ```js heroku create --stack=container ``` 명령을 실행하면 응용 프로그램 URL이 표시됩니다. ```js Creating app... done, ⬢ morning-plateau-34336, stack is container https://morning-plateau-34336.herokuapp.com/ | https://git.heroku.com/morning-plateau-34336.git ``` 애플리케이션에서 변경 사항을 추적할 수 있도록 Herokit 원격도 추가되었을 수 있습니다. heroku stack:set container를 사용하여 컨테이너 스택을 사용하도록 기존 애플리케이션을 구성할 수 있습니다. ## 애플리케이션 배포 애플리케이션을 Heroku에 배포하고, main을 다른 지점 이름으로 바꿉니다. ```js git push heroku main ``` 그러면 원격 Heroku 서버에서 Git Push 및 Docker 빌드가 트리거되고 Heroku 컨테이너 레지스트리로 Docker Push는 다음과 같습니다. ```js Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 1.09 KiB | 1.09 MiB/s, done. Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Compressing source files... done. remote: Building source: remote: === Fetching app code remote: remote: === Building web (Dockerfile) remote: Sending build context to Docker daemon 3.072kB remote: Step 1/3 : FROM registry.gitlab.com/analythium/shinyproxy-hello/hello remote: latest: Pulling from analythium/shinyproxy-hello/hello remote: 4363cc522034: Pulling fs layer ... remote: Successfully built 8b891983b438 remote: Successfully tagged 6dc2e345582f143cd104cf98fec788c65e9a72a6:latest remote: remote: === Pushing web (Dockerfile) remote: Tagged image "6dc2e345582f143cd104cf98fec788c65e9a72a6" as "registry.heroku.com/morning-plateau-34336/web" remote: Using default tag: latest remote: The push refers to repository [registry.heroku.com/morning-plateau-34336/web] remote: cec4817fd20b: Preparing ... remote: Verifying deploy... done. To https://git.heroku.com/morning-plateau-34336.git * [new branch] main -> main ``` heroku open 명령을 사용하여 브라우저에서 앱을 엽니다. ![](https://miro.medium.com/max/1400/0*aUHEyukDxYPu-klz.png) Heroku 계정에 로그인하고 대시보드에 나열된 애플리케이션을 확인합니다. 애플리케이션 설정에서 앱에 대한 사용자 지정 도메인을 설정할 수 있습니다. 사용자 지정 도메인에는 사용 가능한 SSL이 없으며 사용 가능한 리소스를 사용하는 앱의 경우 HTTPS가 아닌 HTTP를 통해 제공됩니다. 추가 보안을 원하는 경우 세 가지 옵션이 있습니다. - 유료 Heroku 계층으로 업그레이드; - Cloudflare 사용; - 원래의 보안 앱 URL과 iframe을 통해 앱을 제공합니다. ## 결론들 Heroku는 도킹된 Shiny 앱을 포함한 웹 애플리케이션을 호스팅하기 위한 번거롭지 않은 솔루션입니다. Docker를 사용하면 최소한의 수정만으로 이미 익숙한 워크플로우에 쉽게 의존할 수 있습니다. Heroku CLI는 Git 기반 워크플로우와 잘 맞는 강력한 선언 도구입니다. ## 추가 판독 - 헤로쿠 참조 - Heroku 컨테이너 레지스트리 및 런타임 - Git을 사용한 Heroku 구축 - Heroku + 도커 + R 예제 - 빌드 팩을 사용한 샤이온 헤로쿠

from http://recommend-sea.tistory.com/7 by ccl(A) rewrite - 2021-07-15 23:26:02

댓글