Symfony 프로그램을 배포하는 방법


Symfony 배포는 애플리케이션 설정 및 요구 사항에 따라 복잡하고 다양한 작업이 될 수 있습니다. 이 문서는 단계별 가이드가 아니라 배포 시 일반적인 요구 사항 및 권장 사항 목록입니다.

Symfony 배포 기본 사항

Symfony 배포 시 발생하는 일반적인 단계는 다음과 같습니다.

  1. 프로덕션 서버에 코드 업로드
  2. 타사 종속성 설치(일반적으로 Composer를 통해 수행되며 업로드할 수 있는 프로그램)
  3. 데이터베이스 마이그레이션 또는 유사한 작업을 실행하여 "변경된" 데이터 구조를 업데이트하세요.
  4. 캐시를 지우세요(선택적으로 워밍업).

배포 프로세스에는 다음과 같은 다른 작업도 포함됩니다.

  • 버전 라이브러리에서 특정 버전의 코드에 릴리스로 태그를 지정합니다.
  • 준비 영역을 만들어 "오프라인" 오프라인 설정을 구축합니다. 코드 및/또는 서버 안정성을 보장하기 위해 사용 가능한 테스트를 실행합니다.
  • 디렉터리에서 불필요한 파일을 제거하여 프로덕션 환경을 깨끗하게 유지합니다.
  • 외부 캐시 시스템(예:
  • Memcached web/ 또는
  • Redis
  • )을 지웁니다. Symfony 프로그램 배포 방법

Symfony 프로그램 배포 방법에는 여러 가지가 있습니다. 몇 가지 기본 배포 전략부터 시작해 보십시오. 기본 파일 전송

프로그램을 배포하는 가장 기본적인 방법은 FTP/SCP(또는 유사한 방법)를 통해 수동으로 파일을 복사하는 것입니다. 단점은 예를 들어 업그레이드 프로세스 중에 시스템을 제어할 수 없다는 것입니다. 이 접근 방식을 사용하려면 파일 전송 후에 몇 가지 수동 단계를 수행해야 합니다(일반적인 배포 후 작업 참조).

버전 제어 사용

버전 제어(예: Git 또는 SVN)를 사용하는 경우 라이브 설치를 저장소의 복사본으로 직접 만들 수 있습니다. 업그레이드할 준비가 되면 버전 제어 시스템에서 최신 업데이트를 가져오는 것만큼 간단합니다. 이렇게 하면 파일을

더 쉽게

업데이트할 수 있지만 여전히 추가 단계를 수동으로 수행하는 것을 고려해야 합니다(

일반적인 배포 후 작업

참조). 플랫폼 서비스 이용

거의 사용되지 않음

관련 요구사항이 있는 사용자는 심포니 공식 홈페이지 원문을 참고해주세요. 또한 Microsoft Azure와 같은 최신 클라우드 플랫폼은 Symfony3+를 한 번에 지원할 수 있습니다.

특수 배포 단계는 서비스 제공업체마다 크게 다르므로 다음 개별 문서에서 원하는 서비스를 찾으세요.

빌드 스크립트 및 기타 도구 사용

배포의 어려움을 덜어줄 수 있는 여러 도구가 있습니다. 그 중 일부는 Symfony의 요구 사항에 거의 맞춰 제작되었습니다.

  • CapistranoSymfony 플러그인
  • 과 함께 작동합니다. Capistrano는 Ruby로 작성된 원격 서버 자동화 및 배포 도구입니다. Symfony 플러그인은 ​​Capifony(Capistrano 2에서만 작동)에서 영감을 받아 Symfony 관련 작업을 단순화하는 플러그인입니다.
  • sf2debpkg
  • 은 Symfony 프로젝트용 기본 Debian 패키지를 구축하는 데 도움이 됩니다.
  • Magallanes
  • 이 "Capistrano와 유사한" 배포 도구는 PHP에 내장되어 있으며 PHP 개발자가 요구 사항을 더 쉽게 확장할 수 있도록 해줍니다.
  • Fabric
  • 이 Python 기반 클래스 라이브러리는 "로컬 또는 원격 명령줄 실행 및 파일 업로드 및 다운로드"를 위한 기본 제품군을 제공합니다.
  • Deployer
  • 이것은 기본 PHP에서 다시 작성된 또 다른 Capistrano이며 Symfony용으로 특별히 제공되는 일부 기능이 있습니다.
  • 번들
  • 심포니 콘솔에서 직접 사용할 수 있는 배포 기능이 추가된 번들이 있습니다.
  • 기본 스크립트
  • 물론 명령줄, Ant 또는 기타 빌드 도구를 사용하여 프로젝트 배포를 스크립트할 수 있습니다.

일반적인 배포 후 작업

실제 소스 코드를 배포한 후 수행해야 할 몇 가지 일반적인 작업이 있습니다.

A) 요구 사항 확인

다음 명령을 실행하여 서버가 요구사항 충족:

1
$  php bin/symfony_requirements

B) app/config/parameters.yml 파일 구성

이 파일은 배포해서는 안 되지만 Symfony에서 제공하는 자동 도구로 관리됩니다.

C) 공급업체 설치/업데이트

소스 코드를 업로드하기 전에 공급업체(3자 패키지)를 업데이트할 수 있습니다(예: vendor/ 디렉터리를 업데이트한 다음 소스 코드 업로드). ) 또는 서버에서 업데이트가 완료되었습니다. 어느 쪽이든 평소대로 공급업체를 업데이트하세요.

vendor/ 目录,然后再传源代码)或是到服务器上完成更新。不管哪种方式,只需像往常一样来更新vendors:

1
$  composer install --no-dev --optimize-autoloader

通过构建一个 "class map" 类映射,--optimize-autoloader 旗标大幅改进了Composer的自动加载性能。--no-dev 旗标可确保开发环境的包不被安装到生产环境。

如果在这一步你得到 "class not found" 错误,你可能需要在执行前述命令之前先运行 export SYMFONY_ENV=prod 以便 post-install-cmd 脚本运行在 prod

1

$  php bin/console cache:clear --env=prod --no-debug
D) Symfony 캐시 지우기
< div class="admonition admonition-tip">

--optimize-autoloader 플래그는 "클래스 맵" 클래스 맵 Composer의 자동 로딩 성능을 구축하여 크게 개선되었습니다. --no-dev 플래그는 개발 패키지가 프로덕션 환경에 설치되지 않도록 합니다.

이 단계에서 "클래스를 찾을 수 없음" 오류가 발생하는 경우, post-install-cmd 스크립트가 실행되도록 이전 명령을 실행하기 전에 export SYMFONY_ENV=prod를 실행해야 할 수도 있습니다. prod 환경.

Symfony 캐시를 지우고 워밍업하세요.

1
E) 자산 제거
$  php bin/console assetic:dump --env=prod --no-debug
¶🎜🎜🎜자산을 제거해야 함 : 🎜🎜🎜🎜🎜🎜 🎜🎜rrreee🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜

F) 그 외 컨텐츠!

  • 데이터베이스 마이그레이션 실행
  • APC 캐시 지우기
  • Runassets:install (已经在 composer install프로세스가 관리됨)
  • CRON 작업 추가/편집
  • CDN에 자산 리소스 게시
  • ...

프로그램 수명 주기 : 연속 통합, 품질 보증 등

이 문서에서는 배포 프로세스의 기술적 세부 사항을 다루지만 개발에서 생산까지 코드의 전체 수명 주기에는 더 많은 단계가 필요할 수 있습니다(스테이징 배포, QA [품질 보증/품질 보증] 고려) ] ], 테스트 실행 등)

스테이징, 테스트, QA, 지속적인 통합, 데이터베이스 마이그레이션 및 실패 시 이전 버전과의 호환성을 모두 적극 권장합니다. 간단하거나 복잡한 다양한 도구가 있으며, 그 중 하나는 환경의 요구 사항을 더 쉽게(또는 더 정교하게) 충족하도록 배포 프로세스를 만들어줍니다.

배포 프로세스에는 종속성 업데이트(일반적으로 Composer를 통해), 데이터베이스 마이그레이션, 캐시 지우기 및 CDN에 리소스 게시와 같은 기타 잠재적인 문제도 포함된다는 점을 잊지 마세요(일반적인 배포 후 작업 참조).