작업은 메인 브랜치를 기반으로 하고 PR되어야 합니다. 우리는 GitHub PR 승인 프로세스를 사용하므로 PR이 준비되면 병합하기 전에 한 사람이 이를 승인하고 CI 테스트를 통과해야 합니다.
이 저장소를 복제한 다음 새 디렉토리로 cd
.
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
rbenv
아직 설치되어 있지 않은 경우 다음과 같이 설치하십시오.
$ brew install rbenv ruby-build
$ rbenv init
rbenv init
명령에서 인쇄된 지침을 따르고 그에 따라 ~/.bash_profile
또는 동등한 파일을 업데이트한 다음 새 터미널을 시작하고 repo 디렉터리로 이동합니다.
rbenv
사용하여 .ruby-version
에 정의된 최신 버전의 Ruby를 설치합니다(repo 경로에 있는지 확인하세요).
$ rbenv install
포스트그레SQL
$ brew install postgresql
오픈서치
$ brew install opensearch
다음 명령을 사용하여 gem과 javascript 패키지를 설치한 후 데이터베이스를 생성하세요.
$ bin/setup
데모 팀 만들기
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
백그라운드 작업 없이 웹 서버를 실행하려면(일반적으로 충분함):
$ bin/rails server
사이트는 http://localhost:3000에서 액세스할 수 있습니다.
환경별로 설정을 정의해야 하는 경우 config/application.rb 또는 Enviroments/ environment .rb 파일에 정의해야 합니다.
config.app_title
예: '나의 새로운 사람 찾기'
config.default_url_options
예: { 호스트: mail.peoplefinder.example.com }
config.open_search_url
프로덕션에 필요합니다(아래 검색 섹션 참조).
config.support_email
예: '[email protected]'
config.send_reminder_emails
cronjobs에서 미리 알림 이메일을 보내는 경우 true로 설정합니다.
시스템에서는 화이트리스트에 있는 도메인이 있는 이메일에 로그인할 수 있습니다. 화이트리스트는 PermittedDomain
모델에 의해 관리되는 데이터베이스에 있습니다. 누구나 로그인하려면 최소한 하나의 도메인을 화이트리스트에 추가해야 합니다(개발에도 적용됨).
bash/zsh 등에서 프로덕션 데이터베이스에 새 도메인 추가:
kubectl get pods -n <NAMESPACE>
kubectl exec -it <POD> -n <NAMESPACE> ash
rails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
해당 사이트는 MOJ IP 주소에서 읽기 전용 모드로 접속할 수 있습니다. IP 목록은 kubernetes 비밀에 있는 IP_ALLOWLIST
라는 환경 변수에 저장됩니다. 동일한 IP 목록은 관리자의 관리 섹션에 대한 액세스를 제한하는 데에도 사용됩니다.
토큰 인증 방법은 사용자를 인증하기 위해 이메일 계정에 대한 사용자 액세스에 의존합니다.
사용자가 세션을 시작하려고 할 때마다 인증 토큰을 생성해야 합니다. 로그인 화면에 (허용된 도메인의) 이메일 주소를 입력하면 됩니다. 고유한 무작위 토큰이 포함된 링크가 포함된 이메일 메시지가 전송됩니다. 링크를 클릭하면 로그인이 가능해집니다.
로컬 테스트의 경우 - 토큰을 얻을 수 있는 몇 가지 방법이 있습니다.
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
그런 다음 이 URL에서 토큰을 사용하십시오: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- 토큰으로 바꾸십시오.
People Finder는 GOV.UK Notify를 사용하여 몇 가지 유형의 이메일을 보냅니다.
프로덕션에서는 다음과 같은 사용자에게 정기적인 이메일이 전송됩니다.
프로덕션 모드에서 엔진을 실행하려면 config.open_search_url
config/application.rb에 설정해야 합니다. 이를 설정하는 데 사용되는 환경 변수는 MOJ_PF_ES_URL
입니다. 위의 '구성 가능한 요소'를 참조하세요.
OpenSearch 검색을 로컬로 호출할 때는 localhost:9200
사용하세요.
Kubernetes 환경에서 다음 명령은 개방형 검색 프록시 포드를 호출한 다음 AWS에서 개방형 검색을 호출하여 데이터를 읽거나 업데이트합니다.
opensearch 스택의 상태를 확인하려면 호스트 인스턴스 중 하나에서 다음을 사용할 수 있습니다. wget
정보를 포드에 다운로드하므로 cat
사용하여 파일을 읽을 수 있습니다. 로컬에서는 curl
사용할 수 있습니다.
wget 'aws-es-proxy-service:9200/_cat/health?v'
또는 ES 설정 및 통계 보기:
wget 'aws-es-proxy-service:9200/_cluster/stats/?pretty'
wget 'aws-es-proxy-service:9200/_cat/indices?v'
wget 'aws-es-proxy-service:9200/_cat/nodes?v'
IndexMissingException이 발생하면 Person 모델을 인덱싱해야 합니다.
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
또는 다음과 같이 하세요.
rake peoplefinder:es:index_people
또는 위의 rake 명령이 실패할 경우 콘솔에서 인덱스를 생성할 수 있습니다.
OpenSearch :: Model . client = OpenSearch :: Client . new ( url : Rails . configuration . open_search_url ) . index ( index : Person . index_name , body : { } )
Person . __opensearch__ . create_index! index : Person . index_name , force : true
그리고 그것을 채웁니다:
Person.import
색인을 삭제할 수도 있습니다.
Person.delete_indexes
OpenSearch 없이 사양을 실행하려면 다음 안내를 따르세요.
bundle exec rspec . --tag ~opensearch
쉘이 Zsh인 경우 ~
사용하여 ~
이스케이프해야 합니다.
참고: 불행하게도 현재 ES가 로컬에서 실행되는 것을 피할 수 있는 방법은 없지만 위에서 언급한 대로 Docker 컨테이너를 사용할 수 있습니다.
시장 조작
우리는 MiniMagick을 사용하므로 이미지 조작 및 일부 테스트를 위해 Imagemagick 또는 Graphicsmagick을 설치해야 합니다.
Brew를 사용하는 경우 다음 명령을 사용할 수 있습니다.
brew install imagemagick
저장
로컬 개발 환경의 경우 프로필 이미지가 파일로 저장됩니다. 배포된 환경의 경우 프로필 이미지는 자체 AWS S3 버킷에 저장됩니다. 버킷은 AWS가 아닌 사용자(즉, 비공개 사용자)에게 그룹 권한을 부여하지 않습니다. 이미지에 대한 액세스는 앱에서 생성된 미리 서명되고 시간이 제한된 URL을 통해 이루어집니다.
앱이 버킷에 업로드한 이미지는 초기화 프로그램에서 CarrierWave 구성을 사용하여 "Everyone" AWS 그룹에 대한 읽기를 명시적으로 방지합니다. 이 구성의 기본값은 true/public입니다.
config.fog_public = false # default: true
애플리케이션 레이아웃은 이 엔진의 일부로 설치된 moj_internal_template에 의해 설정됩니다.
래퍼 애플리케이션에서 이 레이아웃을 재정의하고 고유한 파일을 만들 수 있습니다.
app/views/layouts/peoplefinder/peoplefinder.html.haml
보기의 많은 텍스트는 번역 파일에서 구성 가능합니다.
자신만의 파일을 생성하여 래퍼 애플리케이션에서 이를 재정의할 수 있습니다.
config/locales/en.yml
RandomGenerator
는 해당 팀에서 무작위로 생성된 세부 정보를 사용하여 여러 계층의 팀과 사람을 생성할 수 있습니다.
용법:
group = Group . find ( ... )
# initialise the generator with a parent group
generator = RandomGenerator . new ( group )
# clean all subgroups and people within the provided parent group
generator . clear
# generate team structure and people with the given parameters
groups_levels = 2 # number of levels to generate
groups_per_level = 3 # how many teams per each level
people_per_group = 5 # how many people should be in the bottom most teams
domain = 'fake.gov.uk' # which e-mail address should be used for e-mails (has to be whitelisted)
generator . generate ( groups_levels , groups_per_level , people_per_group , domain )
peoplefinder:db:reload
의 일부로 호출되는 peoplefinder:data:demo
레이크 작업을 사용하여 준 무작위 데이터를 생성할 수도 있습니다. peoplefinder:demo:data
반복적으로 실행하면 생성된 예시 그룹에 구성원이 추가됩니다.
rake -T | grep people
최신 목록을 보려면 rake -T | grep people
:
rake peoplefinder:data:demo # create basic demonstration data
rake peoplefinder:data:demo_csv[count,file] # create a valid csv for load testing, [count: number of records=500], [file: path to file=spec/fixtures/]
rake peoplefinder:db:clear # drop all tables
rake peoplefinder:db:reload # drop tables, migrate, seed and populate with demonstration data for development purposes
rake peoplefinder:db:reset_column_information # reset all column information
rake peoplefinder:import:csv_check[path] # Check validity of CSV file before import
rake peoplefinder:import:csv_import[path] # Import valid CSV file
Peoplefinder가 성공하려면 프로필을 채우고 유지 관리해야 합니다.
배포된 환경에서 발생한 모든 예외는 Sentry로 전송됩니다.