이 프로젝트는 두 가지 구성 요소로 만들어졌습니다.
| 의존 | 버전 요구 사항 |
|---|---|
| 자바 | 17 |
| Maven | 3.9 |
| MySQL | 8.3 |
| 플라이 웨이 | 10.13 |
| cloc 1 | 2.00 |
| git 1 | 2.43 |
깨끗한 슬레이트 또는 사전 인구 데이터베이스로 시작하는지 여부를 선택하기 전에 다음 요구 사항이 충족되어 있는지 확인하십시오.
데이터베이스 타임 존은 +00:00 으로 설정됩니다. 당신은 이것을 통해 이것을 확인할 수 있습니다 :
SELECT @@ global . time_zone , @@ session . time_zone ; 이벤트 스케줄러가 ON 있습니다. 당신은 이것을 통해 이것을 확인할 수 있습니다 :
SELECT @@ global . event_scheduler ; 저장된 함수를 생성하는 동안 이진 로깅은 1 으로 설정됩니다. 당신은 이것을 통해 이것을 확인할 수 있습니다 :
SELECT @@ global . log_bin_trust_function_creators ; gse 데이터베이스가 존재합니다. 그것을 만들려면 :
CREATE DATABASE gse CHARACTER SET utf8 COLLATE utf8_bin; gseadmin 사용자가 존재합니다. 하나를 만들려면 실행 :
CREATE USER IF NOT EXISTS ' gseadmin ' @ ' % ' IDENTIFIED BY ' Lugano2020 ' ;
GRANT ALL ON gse. * TO ' gseadmin ' @ ' % ' ;빈 데이터베이스로 시작하기를 원한다면 더 이상 할 일이 없습니다. 필요한 테이블은 서버의 초기 시작 중 플라이 웨이 마이그레이션을 통해 생성됩니다. 그러나 로컬 데이터베이스를 수집 한 데이터로 미리 인과하려면 압축 된 SQL 덤프를 사용할 수 있습니다. Dropbox에서 4 개의 이전 반복과 함께이 덤프를 호스팅합니다. 데이터베이스 덤프를 선택하고 다운로드 한 후 다음을 수행하여 데이터를 가져올 수 있습니다.
gzcat < gse.sql.gz | mysql -u gseadmin -pLugano2020 gse 서버를 실행하기 전에 자신의 Github Personal Access Token (PAT)을 생성해야합니다. Crawler는 GraphQL API에 의존하며 인증없이 접근 할 수 없습니다. GitHub API가 제공 한 정보에 액세스하려면 토큰에는 repo 스코프가 포함되어야합니다.
완료되면 Maven을 사용하여 서버를 로컬로 실행할 수 있습니다.
mvn spring-boot:run크롤링 할 때 토큰을 사용하려면 실행 인수에 지정하십시오.
mvn spring-boot:run -Dspring-boot.run.arguments=--ghs.github.tokens= < your_access_token >또는 항아리를 직접 컴파일하고 실행할 수 있습니다.
mvn clean package
ln target/ghs-application- * .jar target/ghs-application.jar
java -Dghs.github.tokens= < your_access_token > -jar target/ghs-application.jar 다음은 응용 application.properties 에서 찾을 수있는 응용 프로그램에서 지원하는 프로젝트 별 주장 목록입니다.
| 변수 이름 | 유형 | 기본값 | 설명 |
|---|---|---|---|
ghs.github.tokens | 목록 <문자열> | GitHub API를 채굴하는 데 사용될 GitHub 개인 액세스 토큰 (PATS) 목록. 빈 줄을 포함해서는 안됩니다. | |
ghs.github.api-version | 끈 | 2022-11-28 | GitHub API 버전은 다양한 작업에서 사용됩니다. |
ghs.git.username | 끈 | GIT 계정 로그인은 버전 제어 시스템과 상호 작용하는 데 사용되었습니다. | |
ghs.git.password | 끈 | 지정된 GIT 계정을 인증하는 데 사용되는 비밀번호. | |
ghs.git.config | 지도 <문자열, 문자열> | Application.Properties를 참조하십시오 | 응용 프로그램에 특정한 GIT 구성 2 . |
ghs.git.folder-prefix | 끈 | ghs-clone- | 분석 된 리포지토리가 복제되는 임시 디렉토리에 사용되는 접두사. 비워서는 안됩니다. |
ghs.git.ls-remote-timeout-duration | 지속 | 1m | GIT 리포지토리의 리모컨을 나열 할 수있는 최대 시간. |
ghs.git.clone-timeout-duration | 지속 | 5m | git 리포지토리 복제에 허용되는 최대 시간. |
ghs.cloc.max-file-size | 데이터를 데이터화하십시오 | 25MB | cloc 사용한 분석을위한 최대 파일 크기 임계 값. |
ghs.cloc.timeout-duration | 지속 | 5m | cloc 명령을 실행할 수있는 최대 시간. |
ghs.crawler.enabled | 부울 | 진실 | 저장소 크롤링 작업이 활성화되어 있는지 여부를 지정합니다. |
ghs.crawler.minimum-stars | int | 10 | 크롤러가 프로젝트를 수령하기 위해 프로젝트가 필요한 별의 수에 대한 포괄적 인 하한. 부정적이어서는 안됩니다. |
ghs.crawler.languages | 목록 <문자열> | Application.Properties를 참조하십시오 | 크롤링 중에 타겟팅 될 언어 이름 목록. 빈 줄을 포함해서는 안됩니다. 적절한 작업을 보장하려면 이름이 언어 학자에 지정된 이름과 일치해야합니다. |
ghs.crawler.start-date | 날짜 | 2008-01-01T00 : 00 : 00z | 기본 크롤러 시작 날짜 : 이전 크롤링 작업이없는 상태에서 크롤링하는 가장 빠른 날짜. 값 형식 : yyyy-MM-ddTHH:MM:SSZ . |
ghs.crawler.delay-between-runs | 지속 | PT6H | 연속 크롤러 실행 사이의 지연은 지속 시간 문자열로 표현됩니다. |
ghs.analysis.enabled | 부울 | 진실 | 분석 작업이 활성화되어 있는지 여부를 지정합니다. |
ghs.analysis.delay-between-runs | 지속 | PT6H | 연속 분석 실행 사이의 지연은 지속 시간 문자열로 표현됩니다. |
ghs.analysis.max-pool-threads | int | 3 | 동시에 리포지토리를 동시에 분석하는 데 전용되는 최대 라이브 스레드 양. 긍정적이어야합니다. |
ghs.clean-up.enabled | 부울 | 진실 | 사용할 수없는 리포지토리 (정리)를 제거하는 작업이 활성화되어 있는지 여부를 지정합니다. |
ghs.clean-up.cron | 크론 트리거 | 0 0 0 * * 1 | 스프링 CRON 표현식으로 표현 된 연속 저장소 정리 실행 사이의 지연. |
프론트 엔드를 시작하는 가장 쉬운 방법은 제공된 NPM 스크립트를 통한 것입니다.
npm run dev IDE의 내장 웹 서버 또는 원하는 다른 웹 서버를 사용할 수도 있습니다. 호스팅을 위해 선택한 방법에 관계없이 백엔드 CORS는 포트 3030 및 7030 사용하도록 제한합니다.
배포 스택은 다음 컨테이너로 구성됩니다.
| 서비스/컨테이너 이름 | 영상 | 설명 | 기본적으로 활성화됩니다 |
|---|---|---|---|
gse-database | MySQL | 플랫폼 데이터베이스 | ✅ |
gse-migration | 플라이 웨이 | 데이터베이스 스키마 마이그레이션 실행 | ✅ |
gse-backup | 피곤한/db-backup | 자동화 된 데이터베이스 백업 | ❎ |
gse-server | Seart/GHS-Server | 스프링 부트 서버 응용 프로그램 | ✅ |
gse-website | Seart/GHS-Website | HTML 공급 업체 역할을하는 Nginx 웹 서버 | ✅ |
gse-watchtower | CONTIRALRRR/WATCHTOWER | 자동 Docker 이미지 업데이트 | ❎ |
서비스 종속성 체인은 다음과 같이 표현할 수 있습니다.
그래프 rl
gse-migration-> | service_healthy | gse-database
gse-backup-> | service_completed_successly | GSE 마이그레이션
gse-server-> | service_completed_successly | GSE 마이그레이션
gse-website-> | service_healthy | GSE 서버
GSE-WatchTower-> | Service_Healthy | gse-website
배포는 Docker-Compose 디렉토리에서 실행하는 것만 큼 간단합니다.
docker-compose -f docker-compose.yml up -d Docker와 함께 실행할 때는 이전 섹션에서 설명 된 데이터베이스 설정 단계가 필요하지 않다는 점에 유의해야합니다. 서비스에 전달 된 환경 속성이 초기 시작 중에 MySQL 사용자 및 데이터베이스를 자동으로 생성하기 때문입니다. 그러나 기본 배포가 빈 데이터베이스를 생성하므로 이러한 편의성은 데이터베이스 데이터로 확장되지 않습니다. 덤프에서 기존 데이터를 사용하려면 docker-compose 배포를 무시하고 덤프가 포함 된 사용자 정의 데이터베이스 이미지를 사용해야합니다. 이를 달성하려면 docker-compose.override.yml 파일을 다음 내용으로 만듭니다.
version : " 3.9 "
name : " gse "
services :
gse-database :
image : seart/ghs-database:latest위의 이미지에는 실제 플랫폼 데이터보다 최대 15 일 동안 가장 신선한 데이터베이스 덤프가 포함됩니다. 보다 구체적인 데이터베이스 버전은 Docker Hub 페이지를 참조하십시오. 배포하는 동안 재정의 파일을 지정해야합니다.
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d 데이터베이스 데이터 자체는 gse-data 볼륨으로 유지되며 상세한 백엔드 로그는 로그라는 로컬 마운트에 보관됩니다. 이 재정의 파일을 사용하여 다른 서비스의 구성을 변경할 수도 있습니다. 예를 들어, 크롤러에 대해 자신의 PAT를 지정합니다.
version : " 3.9 "
name : " gse "
services :
# other services omitted...
gse-server :
environment :
GHS_GITHUB_TOKENS : " A single or comma-separated list of token(s) "
GHS_CRAWLER_ENABLED : " true " 스프링 부팅 속성 또는 위에서 언급 한 응용 프로그램 별 속성 중 하나는 재정의 할 수 있습니다. ghs.xy 와 같은 속성은 GHS_X_Y 서비스 환경 설정에 해당합니다.
또 다른 예는 기본적으로 비활성화되는 자동 데이터베이스 백업 서비스입니다. 다시 활성화하려면 The Override 파일에 다음을 추가해야합니다.
version : " 3.9 "
name : " gse "
services :
# other services omitted...
gse-backup :
restart : always
entrypoint : " /init " 구현을보고 싶은 기능에 대한 아이디어가 있거나 궁금한 점이 있으면 새로운 토론을하는 것이 좋습니다. 토론을 시작함으로써 커뮤니티 및 우리 팀에 참여할 수 있으며, 쿼리를 해결하거나 기능 요청을 고려하기 위해 즉시 응답 할 것입니다.
발생하는 문제 나 버그를보고하려면 새로운 문제를 만듭니다. 직면 한 문제에 대한 자세한 정보를 제공하면보다 효과적으로 이해하고 해결하는 데 도움이됩니다. 우리는 버그를 해결하고 전반적인 사용자 경험을 향상시키기 위해 협력하여 제기 한 문제를 즉시 검토하고 응답하기 위해 노력하고 있습니다.
자세한 내용은 Contributing.md를 참조하십시오.
이를 위해서는 데이터베이스 마이그레이션 도구 및 사례에 익숙해야합니다. 이 프로젝트는 Redgate의 Flyway를 사용합니다. 스키마 조작의 일반적인 규칙은 다음과 같습니다. 새 마이그레이션을 만들고 기존 마이그레이션을 자제합니다 .
1.7.0 ↩ ↩ 2 이전 버전에서만 필요합니다.
잠재적 충돌이나 혼란을 피하기 위해 응용 프로그램 수준 GIT 구성을 사용자가 사용하는 것과 분리합니다. 따라서 응용 프로그램 별 구성 파일은 시작시 임시 디렉토리에 생성됩니다. 파일에 추가 된 설정은 application.properties 의 ghs.git.config 항목에 따라 다릅니다. 구성 하위 섹션은 현재 지원되지 않습니다. ↩