Pekerjaan harus didasarkan pada, dan diarahkan ke, cabang utama. Kami menggunakan proses persetujuan GitHub PR sehingga setelah PR Anda siap, Anda harus memiliki satu orang yang menyetujuinya, dan tes CI lulus, sebelum dapat digabungkan.
Kloning repositori ini lalu cd
ke direktori baru
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Jika Anda belum menginstal rbenv
, instal sebagai berikut:
$ brew install rbenv ruby-build
$ rbenv init
Ikuti instruksi yang dicetak dari perintah rbenv init
dan perbarui ~/.bash_profile
atau file setara Anda, kemudian mulai terminal baru dan navigasikan ke direktori repo.
Gunakan rbenv
untuk menginstal Ruby versi terbaru seperti yang didefinisikan dalam .ruby-version
(pastikan Anda berada di jalur repo):
$ rbenv install
PostgreSql
$ brew install postgresql
Pencarian terbuka
$ brew install opensearch
Gunakan perintah berikut untuk menginstal permata dan paket javascript lalu membuat database
$ bin/setup
Buat beberapa tim demo
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Untuk menjalankan server web tanpa pekerjaan latar belakang apa pun (biasanya cukup):
$ bin/rails server
Situs ini dapat diakses di http://localhost:3000.
Ini harus ditentukan dalam file config/application.rb atau dalam file .rb lingkungan/ lingkungan jika pengaturan perlu ditentukan berdasarkan per lingkungan.
config.app_title
misalnya 'Pencari Orang Baru Saya'
config.default_url_options
misalnya { host: mail.peoplefinder.example.com }
config.open_search_url
Diperlukan untuk produksi (lihat bagian Pencarian di bawah)
config.support_email
misalnya '[email protected]'
config.send_reminder_emails
Ditetapkan ke true jika email pengingat akan dikirim oleh cronjobs
Sistem mengizinkan masuk untuk email yang memiliki domain dari daftar putih. Daftar putih ada di database, dikelola oleh model PermittedDomain
. Setidaknya satu domain harus masuk daftar putih sebelum siapa pun dapat masuk (ini juga berlaku untuk pengembangan).
Menambahkan domain baru ke database produksi dari bash/zsh dll:
kubectl get pods -n <NAMESPACE>
kubectl exec -it <POD> -n <NAMESPACE> ash
rails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
Situs ini dapat diakses dalam mode readonly dari alamat IP MOJ. Daftar IP disimpan dalam variabel lingkungan bernama IP_ALLOWLIST
yang berada dalam rahasia kubernetes. Daftar IP yang sama juga digunakan untuk membatasi akses ke bagian manajemen bagi pengguna admin.
Metode autentikasi token bergantung pada akses pengguna ke akun email mereka untuk mengautentikasinya.
Setiap kali pengguna ingin memulai sesi, mereka perlu membuat token autentikasi. Hal ini dapat dilakukan dengan memasukkan alamat email mereka (dari domain yang diizinkan) pada layar login. Mereka akan dikirimi pesan email yang berisi tautan dengan token acak unik. Mengklik tautan akan memungkinkan mereka untuk masuk.
Untuk pengujian lokal - Ada beberapa cara untuk mendapatkan token
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
Kemudian gunakan token pada URL ini: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- ganti dengan token Anda.
People Finder mengirimkan beberapa jenis email menggunakan GOV.UK Notify
Dalam produksi, email berkala dikirim ke pengguna yang memiliki:
Untuk menjalankan mesin dalam mode produksi, config.open_search_url
harus diatur, misalnya, config/application.rb. Variabel lingkungan yang digunakan untuk mengaturnya adalah MOJ_PF_ES_URL
Lihat 'Elemen yang dapat dikonfigurasi' di atas.
Gunakan localhost:9200
saat memanggil pencarian OpenSearch secara lokal.
Perintah berikut pada lingkungan kubernetes akan memanggil pod proksi pencarian terbuka, yang kemudian akan memanggil pencarian terbuka di AWS untuk membaca atau memperbarui data.
Untuk memeriksa kesehatan tumpukan opensearch Anda dapat menggunakan yang berikut ini, dari salah satu instance host. wget
akan mengunduh informasi ke dalam pod sehingga Anda dapat membaca file menggunakan cat
. Secara lokal Anda bisa menggunakan curl
.
wget 'aws-es-proxy-service:9200/_cat/health?v'
atau lihat pengaturan dan statistik 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'
Jika Anda mendapatkan IndexMissingException, Anda perlu mengindeks model Person:
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
Atau, sebagai alternatif:
rake peoplefinder:es:index_people
Atau Anda dapat membuat indeks dari konsol jika perintah rake di atas gagal:
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
Dan isi:
Person.import
Anda juga dapat menghapus indeks:
Person.delete_indexes
Untuk menjalankan spesifikasi tanpa OpenSearch:
bundle exec rspec . --tag ~opensearch
Jika shell Anda Zsh, Anda harus melarikan diri ~
dengan menggunakan ~
.
Catatan: Sayangnya, saat ini tidak ada cara untuk menghindari ES berjalan secara lokal, tetapi Anda dapat menggunakan container buruh pelabuhan seperti yang disebutkan di atas.
Manipulasi
Kami menggunakan MiniMagick sehingga Imagemagick atau Graphicsmagick perlu diinstal untuk manipulasi gambar dan untuk beberapa pengujian.
Jika menggunakan brew Anda dapat menggunakan perintah berikut:
brew install imagemagick
Penyimpanan
Untuk lingkungan pengembang lokal, gambar profil disimpan sebagai file. Untuk lingkungan yang diterapkan, gambar profil disimpan di bucket AWS S3 mereka sendiri. Bucket tidak memberikan izin grup apa pun kepada pengguna non-AWS (yaitu bersifat pribadi). Akses ke gambar dicapai melalui url yang telah ditentukan sebelumnya dan dibatasi waktu yang dihasilkan oleh aplikasi.
Gambar yang diunggah ke bucket oleh aplikasi secara eksplisit mencegah pembacaan ke grup AWS "Semua Orang" menggunakan konfigurasi CarrierWave dalam penginisialisasinya - default untuk konfigurasi ini adalah true/publik.
config.fog_public = false # default: true
Tata letak aplikasi diatur oleh moj_internal_template yang diinstal sebagai bagian dari mesin ini.
Anda dapat mengganti tata letak ini di aplikasi wrapper, buat file Anda sendiri:
app/views/layouts/peoplefinder/peoplefinder.html.haml
Banyak teks dalam tampilan dapat dikonfigurasi dalam file terjemahan.
Anda dapat menggantinya dalam aplikasi wrapper dengan membuat file Anda sendiri:
config/locales/en.yml
RandomGenerator
mampu menghasilkan beberapa lapisan tim dan orang-orang dengan detail yang dihasilkan secara acak di tim tersebut.
Penggunaan:
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 )
Anda juga dapat menghasilkan data semi-acak menggunakan tugas rake peoplefinder:data:demo
yang disebut sebagai bagian dari peoplefinder:db:reload
. Menjalankan peoplefinder:demo:data
berulang kali akan menambahkan anggota ke grup contoh yang dibuatnya.
Jalankan rake -T | grep people
untuk daftar terbaru:
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
Agar Peoplefinder berhasil, profil perlu diisi dan dipelihara.
Pengecualian apa pun yang muncul di lingkungan yang diterapkan akan dikirim ke Sentry.