doctl 및 AppSpec YAML 파일을 통해 Laravel 어플리케이션을 Digital Ocean 어플리케이션 플랫폼에 배포

요컨대 DigitalOcean's App Platform는 응용 프로그램을 배치하는 최적화된 방법을 제공하고 새 코드를 지정한 지점으로 전송할 때마다 자동으로 배치하며 응용 프로그램 구성 요소에 대한 고급 도량과 제어도 제공한다.우호적인 UI에서 전체 과정을 완성할 수 있지만, 어떤 사람들은 더 세밀한 제어를 좋아하고, 명령줄에서 환경을 비슷한 새로운 프로그램으로 빠르게 다시 사용할 수도 있습니다.이때App Spec 파일이 도착했습니다.

농담은 그만두고, 왜 UI 대신 spec YAML 파일을 사용해서 응용 프로그램을 배치하는 것을 더 좋아하는지 설명할 수 있는 몇 가지 이유가 있다.만약 응용 프로그램이 많은 구성 요소, 많은 환경 변수를 설정해야 하거나 buildpack 정확하게 감지되지 않으면 app spec 파일로 응용 프로그램의 배치 방식을 정의할 수 있습니다.
내가 처음에 이 노선을 선택한 이유는buildpack에서 나의 프로그램을 노드 프로그램으로 감지할 수 없기 때문이다. 왜냐하면 새로운 Laravel 프로그램은 기본적으로 package.json 파일을 첨부하기 때문이다.다른 사람들이 비슷한 질문을 할 수 있기 때문에, 나는 댓글을 만들어서 나에게 유용한 것을 공유하기로 결정했다.
내 앱은 상당히 간단한 Laravel 8 앱으로 네가 직접 개발할 수 있다this tutorial series on DigitalOcean.이것은 링크 로그인 페이지입니다.다른 점은 새 프로젝트는 단순화된 버전으로 제한된 영역이나 사용자 등록이 없고 순수한 Laravel에 기반을 두고 있으며 Bulma CSS를 한 페이지의 전단으로 사용한다는 점이다.링크는 CLI의 Artisan 명령을 통해 관리됩니다.

이 프로젝트는 매우 간단합니다. NPM/Tailwind/etc를 사용하지 않기 때문에 제가 하는 첫 번째 일은 저장소에서 포함된 package.json 파일을 삭제하는 것입니다. 환경이 PHP로 설정되어 있어도 이 파일은buildpack에서 가져와서 오류가 발생합니다. 왜냐하면 나머지 구성 요소를 제대로 설정하지 않았기 때문입니다. npm install (필요 없습니다.)
이 파일을 삭제하면 UI를 통해 빌드를 완료할 수 있지만 환경 변수와 마이그레이션을 실행하는 방법에 여전히 문제가 있습니다.여러 차례의 시도와 대량의 실험을 통해 저는 응용 프로그램 규범 파일을 통해 모든 일을 완벽하게 완성할 수 있습니다. 저는 잠시 후에 여러분과 공유할 것입니다.우선, 나는 약간의 관찰을 하고 싶다.

  • PostgreSQL을 더 좋아합니다. 데이터베이스를 개발하든 위탁 데이터베이스를 사용하든 PostgreSQL을 사용하면 번거로움을 줄일 수 있습니다.일부 Laravel 프로그램에서 키 사용과 이전을 실행할 때 테이블을 만드는 방법에 대한 문제가 있습니다. known issuesLaravel + Jetstream 응용 프로그램을 배치하려고 시도했을 때 이 문제가 발생했습니다. 이 문제는 Laravel Passport 패키지에서 나온 것입니다.

  • 환경 설정: environment_slugphp로 설정하는 것이 매우 중요하다.
  • 이전은 단독 작업으로 한다. 이전을 실행하려면 데이터베이스 정보가 필요하고 이 정보는 구축이 완료된 후에만 사용할 수 있기 때문에 구축에 이 명령을 포함할 수 없다.이것은 "run"명령에 나타나지 말아야 합니다. 따라서migration 명령을 실행하기 위한 단독 POST_DEPLOY 형식의 작업을 만들어야 합니다.

  • 환경 변수 설정: 응용 프로그램 저장소에 .env 파일을 포함하지 말고 UI나 app spec 파일을 통해 환경 변수를 설정해야 합니다.사용자 인터페이스는 나중에 일부 값을 변경할 때 매우 편리하지만, 처음에 모든 값을 설정하는 것은 매우 힘들고 오류가 발생하기 쉽다.응용 프로그램 규범은 이런 초기 설정에 매우 적합하다.정의된 ENV 변수 목록을 반복해야 합니다. 이것은 작업이 하나의 단독 구성 요소로서 하나의 단독 환경에서 작업하기 때문에 변수를 설정해야 합니다.내 동료는 이 상황이 곧 바뀔 것이라고 말했다. ENV 변수는 전 세계적으로 사용할 수 있지만, 이 기능은 아직 jobs 도구에 도달하지 못했다.현재, 우리는 모든 구성 요소의 변수를 반복해야 한다.
  • app spec로 프로그램을 배치하려면 로컬 컴퓨터에 설치해야 합니다. 리눅스, Mac, Windows에 적용됩니다.응용 프로그램 코드를 가져올 수 있도록 GitHub 계정이 DigitalOcean 계정에 연결되어 있는지 확인해야 합니다.
    됐어, 충분히 설명했어.이 파일은 내 응용 프로그램 사양명세 파일이므로 다음과 같은 경우에도 사용할 수 있기를 바랍니다.
    databases:
    - engine: PG
      name: db
      num_nodes: 1
      size: db-s-dev-database
      version: "12"
    name: landing-laravel
    region: ams
    services:
    - environment_slug: php
      run_command: heroku-php-apache2 public/
      envs:
      - key: APP_NAME
        scope: RUN_TIME
        value:  Landing_Laravel
      - key: APP_ENV
        scope: RUN_TIME
        value: dev
      - key: APP_KEY
        scope: RUN_TIME
        value: base64:ffYPNP8kPeQDf8gE/qh3kWjk59p6gFY66kCKhhKUa2w=
      - key: APP_DEBUG
        scope: RUN_TIME
        value: "1"
      - key: APP_URL
        scope: RUN_TIME
        value: ${APP_URL}
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}
      - key: DB_CONNECTION
        scope: RUN_TIME
        value: pgsql
      - key: DB_HOST
        scope: RUN_TIME
        value: ${db.HOSTNAME}
      - key: DB_PORT
        scope: RUN_TIME
        value: ${db.PORT}
      - key: DB_DATABASE
        scope: RUN_TIME
        value: ${db.DATABASE}
      - key: DB_USERNAME
        scope: RUN_TIME
        value: ${db.USERNAME}
      - key: DB_PASSWORD
        scope: RUN_TIME
        value: ${db.PASSWORD}
      github:
        branch: main
        deploy_on_push: true
        repo: do-community/landing-laravel
      http_port: 8080
      instance_count: 1
      instance_size_slug: basic-xs
      name: landing-laravel
      routes:
      - path: /
    jobs:
    - name: migrate
      kind: POST_DEPLOY
      github:
        repo: do-community/landing-laravel
        branch: main
        deploy_on_push: true
      run_command: php artisan migrate --seed
      envs:
      - key: APP_NAME
        scope: RUN_TIME
        value:  Landing_Laravel
      - key: APP_ENV
        scope: RUN_TIME
        value: dev
      - key: APP_KEY
        scope: RUN_TIME
        value: base64:ffYPNP8kPeQDf8gE/qh3kWjk59p6gFY66kCKhhKUa2w=
      - key: APP_DEBUG
        scope: RUN_TIME
        value: "1"
      - key: APP_URL
        scope: RUN_TIME
        value: ${APP_URL}
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}
      - key: DB_CONNECTION
        scope: RUN_TIME
        value: pgsql
      - key: DB_HOST
        scope: RUN_TIME
        value: ${db.HOSTNAME}
      - key: DB_PORT
        scope: RUN_TIME
        value: ${db.PORT}
      - key: DB_DATABASE
        scope: RUN_TIME
        value: ${db.DATABASE}
      - key: DB_USERNAME
        scope: RUN_TIME
        value: ${db.USERNAME}
      - key: DB_PASSWORD
        scope: RUN_TIME
        value: ${db.PASSWORD}
    
    이 규범에 따라 프로그램을 배치하려면 먼저 두 구성 요소의 doctlgithub.reposervices 아래에서 Laravel 응용 프로그램 저장소를 가리키고 jobs을 자신의 이름으로 변경해야 합니다.다음 작업을 수행할 수 있습니다.
    doctl apps create --spec <path-to-spec>
    
    다음과 같은 출력이 표시됩니다.
    Notice: App created
    ID                                      Spec Name           Default Ingress    Active Deployment ID    In Progress Deployment ID    Created At                                Updated At
    371e211e-1ad1-4f23-b0d0-aac838cf922f    landing-laravel                                                                            2020-12-23 12:25:10.25023846 +0000 UTC    2020-12-23 12:25:10.25023846 +0000 UTC
    
    
    그런 다음 애플리케이션 플랫폼 대시보드로 이동하여 구축 프로세스를 시작할 수 있습니다.
    doctl
    아직 제가 제출한 내용은 아니지만 이 정보를 최대한 빨리 여러분과 공유하는 것이 중요하다고 생각합니다. Laravel 앱을 배치하려고 할 때 문제가 있는 모든 사람을 도울 수 있습니다.도움이 되었으면 좋겠어요!건배, 다음에 봐요. 제 의견이 있었으면 좋겠어요.

    좋은 웹페이지 즐겨찾기