Symfony 프로그램을 배포하는 방법
Symfony 배포는 애플리케이션 설정 및 요구 사항에 따라 복잡하고 다양한 작업이 될 수 있습니다. 이 문서는 단계별 가이드가 아니라 배포 시 일반적인 요구 사항 및 권장 사항 목록입니다.
Symfony 배포 기본 사항 ¶
Symfony 배포 시 발생하는 일반적인 단계는 다음과 같습니다.
- 프로덕션 서버에 코드 업로드
- 타사 종속성 설치(일반적으로 Composer를 통해 수행되며 업로드할 수 있는 프로그램)
- 데이터베이스 마이그레이션 또는 유사한 작업을 실행하여 "변경된" 데이터 구조를 업데이트하세요.
- 캐시를 지우세요(선택적으로 워밍업).
배포 프로세스에는 다음과 같은 다른 작업도 포함됩니다.
- 버전 라이브러리에서 특정 버전의 코드에 릴리스로 태그를 지정합니다.
- 준비 영역을 만들어 "오프라인" 오프라인 설정을 구축합니다. 코드 및/또는 서버 안정성을 보장하기 위해 사용 가능한 테스트를 실행합니다. 디렉터리에서 불필요한 파일을 제거하여 프로덕션 환경을 깨끗하게 유지합니다. 외부 캐시 시스템(예:
- Memcached
web/
또는 Redis - )을 지웁니다. Symfony 프로그램 배포 방법 ¶
Symfony 프로그램 배포 방법에는 여러 가지가 있습니다. 몇 가지 기본 배포 전략부터 시작해 보십시오. 기본 파일 전송
¶프로그램을 배포하는 가장 기본적인 방법은 FTP/SCP(또는 유사한 방법)를 통해 수동으로 파일을 복사하는 것입니다. 단점은 예를 들어 업그레이드 프로세스 중에 시스템을 제어할 수 없다는 것입니다. 이 접근 방식을 사용하려면 파일 전송 후에 몇 가지 수동 단계를 수행해야 합니다(일반적인 배포 후 작업 참조).
버전 제어 사용 ¶
버전 제어(예: Git 또는 SVN)를 사용하는 경우 라이브 설치를 저장소의 복사본으로 직접 만들 수 있습니다. 업그레이드할 준비가 되면 버전 제어 시스템에서 최신 업데이트를 가져오는 것만큼 간단합니다. 이렇게 하면 파일을
더 쉽게업데이트할 수 있지만 여전히 추가 단계를 수동으로 수행하는 것을 고려해야 합니다(
일반적인 배포 후 작업참조). 플랫폼 서비스 이용 ¶
거의 사용되지 않음
관련 요구사항이 있는 사용자는 심포니 공식 홈페이지 원문을 참고해주세요. 또한 Microsoft Azure와 같은 최신 클라우드 플랫폼은 Symfony3+를 한 번에 지원할 수 있습니다.특수 배포 단계는 서비스 제공업체마다 크게 다르므로 다음 개별 문서에서 원하는 서비스를 찾으세요.
빌드 스크립트 및 기타 도구 사용 ¶
배포의 어려움을 덜어줄 수 있는 여러 도구가 있습니다. 그 중 일부는 Symfony의 요구 사항에 거의 맞춰 제작되었습니다.
- Capistrano는 Symfony 플러그인
- 과 함께 작동합니다. 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
< div class="admonition admonition-tip">
| 이 단계에서 "클래스를 찾을 수 없음" 오류가 발생하는 경우, |
Symfony 캐시를 지우고 워밍업하세요.
$ php bin/console assetic:dump --env=prod --no-debug |
F) 그 외 컨텐츠! ¶
- 데이터베이스 마이그레이션 실행
- APC 캐시 지우기
- Run
assets:install
(已经在composer install
프로세스가 관리됨) - CRON 작업 추가/편집
- CDN에 자산 리소스 게시
- ...
프로그램 수명 주기 : 연속 통합, 품질 보증 등 ¶
이 문서에서는 배포 프로세스의 기술적 세부 사항을 다루지만 개발에서 생산까지 코드의 전체 수명 주기에는 더 많은 단계가 필요할 수 있습니다(스테이징 배포, QA [품질 보증/품질 보증] 고려) ] ], 테스트 실행 등)
스테이징, 테스트, QA, 지속적인 통합, 데이터베이스 마이그레이션 및 실패 시 이전 버전과의 호환성을 모두 적극 권장합니다. 간단하거나 복잡한 다양한 도구가 있으며, 그 중 하나는 환경의 요구 사항을 더 쉽게(또는 더 정교하게) 충족하도록 배포 프로세스를 만들어줍니다.
배포 프로세스에는 종속성 업데이트(일반적으로 Composer를 통해), 데이터베이스 마이그레이션, 캐시 지우기 및 CDN에 리소스 게시와 같은 기타 잠재적인 문제도 포함된다는 점을 잊지 마세요(일반적인 배포 후 작업 참조).