웹사이트에는 수천 개의 파일이 있는데, 수십 개의 파일이 변경될 때마다 FTP를 사용하여 전체 웹사이트를 다시 업로드하는 것은 불가능합니다. 그러나 매번 어떤 파일이 변경되었는지 기억하는 것은 쉬운 일이 아닙니다. 그리고 이러한 수정된 파일은 여러 폴더에 흩어져 있기 때문에 하나씩 찾아서 업로드하는 것이 더 번거롭습니다.
그럼 매번 수정된 파일만 정확하고 편리하게 업로드하려면 어떻게 해야 할까요?
PS. 현재 접근 방식은 로컬 개발 환경에 git을 설치하고, 원격 서버에 git을 설치한 다음 여기에서 밀고 끌어오는 것입니다. 하지만 끌어오려면 원격 끝에 telnet이나 ssh를 연결해야 합니다. 여기에서 푸시한 후에 서버가 자동으로 업데이트됩니까? 모든 사람의 제안을 듣고 싶습니다.
가장 간단한 방법은 자동 배포를 구현할 수 있는 후크가 포함된 git을 사용하여 업로드하는 것입니다.
이전에 주제와 동일한 작업을 수행했지만 여러 사람이 프로젝트를 망칠 수 있습니다.
이를 상기시켜 준 @Cocbin에게 감사드립니다. 이를 바탕으로 Git의 후크 원리를 주의 깊게 연구한 후 내 프로젝트를 기반으로 다음을 수행했습니다.
우선 프로젝트를 github 홈페이지에 배포했기 때문에 복잡한 Hooks를 직접 설정할 필요 없이 github에서 제공하는 Webhook을 이용하면 됩니다. Webhook는 GitHub에 푸시할 때 설정한 콜백 URL을 트리거한 다음 이 URL에서 가져오기 작업을 수행할 수 있습니다.
또한 서버에서 개발자 자체 SSH 키를 사용하여 가져오지 마세요. 대신 배포 키를 생성하여 github에 넣으세요. 이 키는 수동으로 비밀번호를 입력할 필요가 없으며 특별히 github에서 콘텐츠를 가져오는 데 사용됩니다. . Down을 클릭하면 자동 배포가 완료됩니다.
허드슨(Hudson)과 젠킨스(Jenkins)도 살펴봤는데 둘 다 아주 좋은 툴입니다. 자바 프로젝트를 한다면 젠킨스를 사용해야 하는데, 허드슨이 오라클에 인수된 후 점점 더 이상 공개되지 않게 되었기 때문입니다. 하지만 내 프로젝트가 PHP로 되어 있기 때문에 이를 위해 또 다른 Java 8 세트를 설치할 여유가 없어서 고려하지 않았습니다. 사실 PHP용 특별한 Jenkins도 있지만 여전히 너무 무겁게 느껴집니다. 앞으로 프로젝트가 더 커질 때까지 기다릴 수도 있습니다.
위 내용은 몇 가지 경험담으로, 같은 문제를 겪고 있는 학생들에게 도움이 되었으면 좋겠습니다.
------------ 화려한 구분선입니다 -------------
보충:
실제 작업 과정은 생각보다 훨씬 복잡합니다.
으아아아이때 push upload가 발생하면 github에서 call back을 하게 되는데, 문제는 ssh in할 때 사용한 user name이 아닌 callback 시 user name apache를 사용한다는 점에서 문제가 되는 것을 알 수 있습니다. 사용자 이름 apache가 다릅니다. 디렉토리에 작업 권한이 없습니다.
으아아아error: cannot open .git/FETCH_HEAD: Permission denied
따라서 먼저 apache 그룹에 ssh_user를 추가해야 합니다.
그런 다음 권한을 수정합니다.
으아아아이 디렉터리에 배치된 이유는 Apache 사용자의 기본 디렉터리가 /var/www이기 때문입니다. 물론 더 안전할 수 있는 다른 디렉터리로 변경할 수도 있습니다.
그런 다음:
으아아아apache의 .ssh 폴더에
known_hosts
파일이 생성됩니다. 그런 다음 ssh를 사용하는 경우 위에서 생성한 배포 키에id_rsa
및id_rsa.pub
두 파일도 추가해야 합니다. .ssh 폴더. 그런 다음 다음 명령을 여러 번 실행하여 오류가 다시 보고되지 않는지 확인하십시오. 그런 다음 클라이언트에서 새 버전을 푸시하여 자동 배포가 성공할 수 있는지 확인할 수 있습니다.================ 국내판 =====================
Github의 서버가 중국에 없기 때문에 push/pull이 안되는 문제가 자주 발생하므로 중국의 git.oschina.net으로 마이그레이션하는 것을 고려해 보세요. 마이그레이션 프로세스는 자세히 설명하지 않습니다. 주의해야 할 몇 가지 사항은 다음과 같습니다.
으아아아웹훅에 대한 코드:
으아아아여기에 갇혀 오랫동안 이유를 찾을 수 없었던 중요한 단계를 수행해야 합니다.
git이 버전 관리라는 것은 누구나 알고 있습니다
제가 사용한 방법을 말씀드리겠습니다.
1. 먼저 버전 관리 서비스와 rsync 서비스가 있어야 합니다
2. 버전 서버에서 배포해야 하는 안정적인 버전 코드를 임시 폴더
3. rsync의 서버 디렉터리를 임시 폴더로 지정
4. rsync 명령을 사용하여 서버 디렉터리를 배포 디렉터리에 동기화합니다
5. 임시 폴더(양 추가), 임시 폴더 파일에 대한 일부 업데이트 작업 수행(필요한 경우), rsync는 임시 폴더 파일을 배포 디렉터리에 동기화(증분)
위 과정을 완료한 후 코드를 제출할 때마다 위 항목 5의 셸만 실행하면 됩니다.
조금 귀찮더라도 뿌리지 않는 것이 더 효과적입니다.