งานควรยึดตามและ PRed ไปยังสาขาหลัก เราใช้กระบวนการอนุมัติ GitHub PR ดังนั้นเมื่อ PR ของคุณพร้อมแล้ว คุณจะต้องมีคนอนุมัติ 1 คน และการทดสอบ 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 เวอร์ชันล่าสุดตามที่กำหนดไว้ใน .ruby-version
(ตรวจสอบให้แน่ใจว่าคุณอยู่ในเส้นทาง repo):
$ rbenv install
PostgreSQL
$ 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/ สภาพแวดล้อม .rb หากจำเป็นต้องกำหนดการตั้งค่าตามสภาพแวดล้อม
config.app_title
เช่น 'My New People Finder'
config.default_url_options
เช่น { โฮสต์: mail.peoplefinder.example.com }
config.open_search_url
จำเป็นสำหรับการผลิต (ดูส่วนการค้นหาด้านล่าง)
config.support_email
เช่น '[email protected]'
config.send_reminder_emails
ตั้งค่าเป็นจริงหาก cronjobs ส่งอีเมลเตือนความจำ
ระบบอนุญาตให้เข้าสู่ระบบอีเมลที่มีโดเมนจากไวท์ลิสต์ รายการที่อนุญาตอยู่ในฐานข้อมูล จัดการโดยโมเดล 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>
ไซต์สามารถเข้าถึงได้ในโหมดอ่านอย่างเดียวจากที่อยู่ IP ของ MOJ รายการ IP จะถูกจัดเก็บไว้ในตัวแปรสภาพแวดล้อมที่เรียกว่า IP_ALLOWLIST
ซึ่งเป็นความลับของ Kubernetes รายการ IP เดียวกันนี้ยังใช้เพื่อจำกัดการเข้าถึงส่วนการจัดการสำหรับผู้ใช้ที่เป็นผู้ดูแลระบบอีกด้วย
วิธีการตรวจสอบความถูกต้องของโทเค็นขึ้นอยู่กับผู้ใช้ที่เข้าถึงบัญชีอีเมลของตนเพื่อตรวจสอบสิทธิ์
แต่ละครั้งที่ผู้ใช้ต้องการเริ่มเซสชัน ผู้ใช้จะต้องสร้างโทเค็นการตรวจสอบสิทธิ์ ซึ่งสามารถทำได้โดยการป้อนที่อยู่อีเมล (จากโดเมนที่ได้รับอนุญาต) บนหน้าจอเข้าสู่ระบบ พวกเขาจะได้รับข้อความอีเมลที่มีลิงก์พร้อมโทเค็นแบบสุ่มที่ไม่ซ้ำใคร การคลิกที่ลิงค์จะทำให้พวกเขาสามารถเข้าสู่ระบบได้
สำหรับการทดสอบในพื้นที่ - คุณสามารถรับโทเค็นได้หลายวิธี
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/โทเค็น/
จากนั้นใช้โทเค็นบน 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
ดู 'องค์ประกอบที่กำหนดค่าได้' ด้านบน
ใช้ localhost:9200
เมื่อเรียกการค้นหา OpenSearch ในเครื่อง
คำสั่งต่อไปนี้บนสภาพแวดล้อม 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
หรือคุณสามารถสร้างดัชนีจากคอนโซลได้หากคำสั่งเรคข้างต้นล้มเหลว:
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 ทำงานในเครื่องได้ แต่คุณสามารถใช้คอนเทนเนอร์นักเทียบท่าตามที่กล่าวไว้ข้างต้น
การจัดการ
เราใช้ MiniMagick ดังนั้นจึงจำเป็นต้องติดตั้ง Imagemagick หรือ Graphicsmagick เพื่อจัดการรูปภาพและสำหรับการทดสอบบางอย่าง
หากใช้ Brew คุณสามารถใช้คำสั่งต่อไปนี้:
brew install imagemagick
พื้นที่จัดเก็บ
สำหรับสภาพแวดล้อมการพัฒนาในเครื่อง รูปภาพโปรไฟล์จะถูกจัดเก็บเป็นไฟล์ สำหรับภาพโปรไฟล์สภาพแวดล้อมที่ใช้งานจะถูกจัดเก็บไว้ในบัคเก็ต AWS S3 ของตัวเอง ที่เก็บข้อมูลไม่ให้สิทธิ์กลุ่มแก่ผู้ใช้ที่ไม่ใช่ AWS (เช่น เป็นส่วนตัว) การเข้าถึงรูปภาพทำได้ผ่าน URL ที่กำหนดไว้และจำกัดเวลาที่สร้างโดยแอป
รูปภาพที่แอปอัปโหลดไปยังบัคเก็ตจะป้องกันไม่ให้อ่านไปยังกลุ่ม AWS "ทุกคน" อย่างชัดเจนโดยใช้การกำหนดค่า CarrierWave ในเครื่องมือเริ่มต้น - ค่าเริ่มต้นสำหรับการกำหนดค่านี้เป็น True/public
config.fog_public = false # default: true
โครงร่างแอปพลิเคชันถูกกำหนดโดย moj_internal_template ที่ติดตั้งเป็นส่วนหนึ่งของกลไกนี้
คุณสามารถแทนที่เค้าโครงนี้ในแอปพลิเคชัน wrapper สร้างไฟล์ของคุณเอง:
app/views/layouts/peoplefinder/peoplefinder.html.haml
ข้อความจำนวนมากในมุมมองสามารถกำหนดค่าได้ในไฟล์การแปล
คุณสามารถแทนที่สิ่งเหล่านี้ในแอปพลิเคชัน wrapper ได้โดยสร้างไฟล์ของคุณเอง:
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 )
คุณยังสามารถสร้างข้อมูลกึ่งสุ่มได้โดยใช้งาน rake peoplefinder:data:demo
ซึ่งเรียกว่าเป็นส่วนหนึ่งของ peoplefinder:db:reload
การรัน peoplefinder:demo:data
ซ้ำๆ จะเพิ่มสมาชิกในกลุ่มตัวอย่างที่สร้างขึ้น
วิ่ง 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