Inilah Tabula, sistem administrasi mahasiswa Universitas Warwick yang mencakup sejumlah modul. Ini memiliki proyek JIRA internal.
Saat ini modul-modul yang ada di Tabula adalah:
Kami menyediakan pengaturan Docker yang dapat digunakan dengan docker-compose
untuk membangun dan menerapkan Tabula secara lokal.
Anda seharusnya dapat mengakses sumber dan binari dari mvn.elab.warwick.ac.uk saat Anda menyelesaikan dependensi. Jika Anda menggunakan IDE (kami merekomendasikan IntelliJ IDEA) ini berarti Anda akan mendapatkan penyelesaian kode dan sumber dependensi asli yang belum sepenuhnya bersumber terbuka.
Pembungkus gradle sekarang seharusnya dapat membuat perang, jika Anda menjalankan ./gradlew war
dari direktori root, ia harus membangun api/build/libs/api.war
dan web/build/libs/ROOT.war
.
catatan macOS : head
standar pada macOS mungkin tidak kompatibel dengan docker/init.sh
, Anda mungkin ingin mendapatkan ghead
dari Homebrew dan mengganti instance dalam skrip sebelum menjalankannya.
Pertama, jalankan docker/init.sh
(yaitu menjalankannya dari root proyek, daripada melakukan cd
ke direktori docker). Ini akan menanyakan tiga pertanyaan kepada Anda:
urn:localdev.warwick.ac.uk:tabula:service
- Anda akan mendapatkannya saat mendaftar ID penyedia SSO dengan Tim Web ITS). Ini menghasilkan file properti yang diperlukan untuk menjalankan Tabula di docker/data
. Anda tidak perlu menjalankan docker/init.sh
lagi kecuali jika ada perubahan pada properti yang diperlukan; jika Anda hanya mengubah file properti, Anda dapat mengubah file ini secara langsung tanpa membuatnya ulang.
Anda sekarang dapat memulai container Docker dengan sudo docker-compose up --build
(sekali lagi, Anda hanya memerlukan --build
ketika perubahan konfigurasi telah dilakukan). Ini akan membuat semuanya berjalan dan Anda akan mendapatkan 404 untuk https://localdev.warwick.ac.uk/ (dan prompt autentikasi dasar 401 untuk http://localdev.warwick.ac.uk:8080/manager).
Sekarang, Anda dapat menerapkan aplikasi dengan ./gradlew cargoDeployRemote
yang akan terhubung ke aplikasi Manajer di Tomcat dan menerapkan aplikasi di sana. Jika Anda membuat perubahan dan ingin menerapkan ulang tanpa memulai dari awal, Anda dapat menjalankan ./gradlew cargoRedeployRemote
; jika Anda menggunakan JRebel dan Anda telah mengaturnya dengan server jarak jauh dengan benar, Anda seharusnya dapat membuat perubahan secara langsung tanpa penerapan ulang.
Setelah aplikasi Anda berjalan, itu akan memunculkan beberapa kesalahan yang mungkin terjadi ketika tidak ada data apa pun di database atau Elasticsearch. Anda harus mengunjungi https://localdev.warwick.ac.uk/sysadmin (catatan, ini mengharuskan pengguna yang masuk adalah anggota WebGroup in-tabula-local-dev-sysadmins
, Anda dapat mengedit docker/data/tomcat/lib/tabula.properties
yang dihasilkan untuk menggunakan grup yang berbeda).
Grup Web dapat dibuat dalam sistem Grup Web oleh staf, atau Anda dapat menggunakan grup yang sudah ada seperti all-staff
untuk mengizinkan anggota staf mana pun di Universitas (misalnya).
Klik di 3 kotak untuk "Bangun kembali indeks peristiwa audit dari", "Bangun kembali indeks profil dari" dan "Bangun kembali indeks aliran pemberitahuan dari" sehingga diisi dengan tanggal, dan klik "Indeks". Ini akan segera selesai karena tidak ada data yang akan diindeks, tetapi ini akan membuat struktur indeks di Elasticsearch.
Selanjutnya, mulai Impor di kanan atas:
Seperti yang ditentukan tabula.properties
, ini adalah contoh kotak pasir, ini akan selesai dengan cepat dan dengan data yang sepenuhnya palsu.
Anda kemudian dapat pergi ke "Daftar departemen dalam sistem", klik departemen dan "Lihat admin departemen" untuk memberikan izin, mengaktifkan mode Tuhan akan memungkinkan pengguna Anda melewati pemeriksaan izin dan menambahkan izin biasa.
Instal Tomcat 8.5 terbaru dari sini: http://tomcat.apache.org/download-80.cgi - di Unix, masuk akal untuk mengekstrak Tomcat ke /opt
dan kemudian menghubungkannya ke /usr/local/tomcat-8
atau dimanapun yang nyaman. Anda kemudian dapat memutakhirkan Tomcat tanpa merusak konfigurasi apa pun hanya dengan mengubah symlink tersebut.
Buat direktori dasar baru untuk konfigurasi dan penerapan Tabula, misalnya /var/tomcat/instances/tabula
. Struktur dan isi direktori ini harus sebagai berikut:
tabula/
├── bin/
│ └── setenv.sh
├── conf/
│ ├── context.xml
│ ├── fim-ds.xml
│ ├── server.xml
│ ├── sits-ds.xml
│ ├── tabula-ds.xml
│ └── web.xml
├── lib/
│ ├── jtds-1.3.1.jar
│ ├── logback.xml
│ ├── ojdbc8.jar
│ ├── postgresql-42.2.5.jar
│ ├── tabula.properties
│ ├── tabula-sso-config.xml
│ └── warwick-logging-1.1-all.jar
├── logs/
├── temp/
├── webapps/
└── work/
Anda mungkin merasa berguna untuk menghubungkan /usr/local/tomcat-8/instances
ke /var/tomcat/instances
jika Anda merasa nyaman dengan tata letak gaya Jboss.
Isi dari file-file tersebut adalah sebagai berikut:
bin/setenv.sh
Ini adalah skrip yang dijalankan untuk mengatur variabel lingkungan untuk instance yang sedang berjalan. Anda mungkin ingin menggunakannya untuk mengatur manajemen memori, JRebel, debugging, dll.
Contoh file dapat ditemukan di config/servers/augustus/bin
conf/context.xml
Ini berisi sumber daya yang akan disertakan dalam server - dalam hal ini, hanya Sumber Data JNDI. Anda dapat menggunakan entitas XML yang disertakan untuk memilikinya dalam file terpisah.
Ada contoh context.xml
dan beberapa contoh sumber data di config/servers/augustus/conf
conf/server.xml
Petunjuk tentang cara menjalankan server, termasuk port mana yang harus diikat. Ini cukup standar.
Ada contoh server.xml
di config/servers/augustus/conf
conf/web.xml
Ini baru saja disalin dari direktori conf
di instalasi Tomcat 8. Saya tidak bisa menjalankan Tomcat tanpa menyalinnya, dan itu agak menyebalkan.
lib/warwick-logging-1.1.jar
Anda bisa mendapatkannya dari https://pkg.elab.warwick.ac.uk/ch.qos.logback/warwick-logging-1.1-all.jar
Perhatikan bahwa ketergantungan ini menggantikan ketergantungan sebelumnya pada logback, logstash-logback-encoder, jackson dan slf4j-api
lib/jtds-1.3.1.jar
Anda bisa mendapatkannya dari https://pkg.elab.warwick.ac.uk/net.sourceforge.jtds/jtds-1.3.1.jar
lib/ojdbc8.jar
Anda bisa mendapatkannya dari https://pkg.elab.warwick.ac.uk/Oracle.com/ojdbc8.jar
lib/postgresql-42.2.5.jar
Anda bisa mendapatkannya dari http://central.maven.org/maven2/org/postgresql/postgresql/42.2.5/postgresql-42.2.5.jar
lib/logback.xml
Konfigurasi masuk kembali. Alternatifnya adalah mengemasnya dengan WAR, tetapi itu tidak memungkinkan kami mengubah konfigurasi per server.
lib/tabula.properties
Properti diteruskan ke aplikasi. Anda bisa mendapatkan salah satunya dari tabula-test dan kemudian mempersonalisasikannya.
Jangan hanya menggunakan kunci dari tabula-test atau instance lainnya, buat kunci baru untuk instance lokal Anda dengan menjalankan ./gradlew generateEncryptionKey
dan gunakan itu untuk objectstore.encryptionKey
, turnitin.tca.signingSecret
dan tabula.database.encryptionKey
.
lib/tabula-sso-config.xml
Konfigurasi SSO yang biasa. Anda perlu menambahkan konfigurasi ini ke Web Sign-on agar SSO dapat berfungsi. Pastikan itu menyertakan bagian <trustedapps />
atau Anda akan melihat NPE dari salah satu perpustakaan kripto bouncycastle. Selain itu, pastikan sumber data kluster cocok dengan sampel - konfigurasi lama mungkin tidak cocok, yang akan menyebabkan pengecualian sumber data tidak ditemukan .
Sayangnya, satu-satunya cara agar ini berfungsi di Tomcat adalah dengan menginstal ActiveMQ secara lokal.
Instal ActiveMQ dari repo paket dan tambahkan konfigurasi baru dengan nama broker Tabula.
Paket ActiveMQ di repo utopis rusak total, jadi kami akan menggunakan repo eksternal untuk mendapatkan versi terbaru.
sudo apt-add-repository 'deb http://dl.bintray.com/jmkgreen/deb /'
sudo apt-get update
sudo apt-get install activemq
Abaikan peringatan tentang paket yang tidak diautentikasi. Setelah selesai, edit /etc/activemq/activemq.xml
dan cari di tempat yang tertulis brokerName="localhost"
- ubah menjadi brokerName="tabula"
. Mulai ulang ActiveMQ dengan sudo service activemq restart
.
Tetapkan yang berikut ini di tabula.properties
Anda:
activemq.broker=tcp://localhost:61616
Untuk menjalankannya secara lokal, Anda memiliki beberapa opsi:
Untuk Ubuntu:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
sudo apt-get update && sudo apt-get install elasticsearch -y
Anda harus mengedit /etc/elasticsearch/elasticsearch.yml
untuk menyetel cluster.name: tabula
(atau menyetel elasticsearch.cluster.name=elasticsearch
di tabula.properties
.
Ketika saya menjalankannya secara lokal, itu tidak akan mulai saat boot secara default, tetapi saya bisa memulainya dengan sudo systemctl start elasticsearch
. Jalankan sudo systemctl enable elasticsearch
agar dapat berjalan saat boot.
Tetapkan properti berikut di tabula.properties
Anda :
elasticsearch.cluster.nodes=amoru.lnx.warwick.ac.uk:9200,amogu.lnx.warwick.ac.uk:9200,amomu.lnx.warwick.ac.uk:9200
elasticsearch.cluster.name=tabula-dev
elasticsearch.index.prefix=your-name-goes-here
Harap pastikan Anda mengubah elasticsearch.index.prefix
atau Anda mungkin akan menimpa indeks orang lain. Jika Anda mengalami masalah firewall, teriakkan #devops
Catatan: Di Ubuntu, setidaknya, Anda mungkin perlu melakukan boot ulang untuk membersihkan lingkungan Anda setelah berpindah JDK. Ini menyebalkan, kalau ada yang bisa memperbaikinya, itu bagus.
Tambahkan PPA webupd8team jika Anda belum melakukannya:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
Tetapkan Java 8 sebagai JDK default: sudo apt-get install oracle-java8-set-default
Anda harus menyetel dua variabel lingkungan, CATALINA_HOME
dan CATALINA_BASE
saat memulai Tomcat. CATALINA_HOME
adalah direktori tempat Tomcat diinstal, dan CATALINA_BASE
adalah direktori tempat file konfigurasi Anda di atas berada.
Anda kemudian dapat menggunakan $CATALINA_HOME/bin/catalina.sh
untuk memulai server di latar depan, atau startup.sh
untuk memulainya di latar belakang.
Contoh skrip startup untuk Tabula mungkin:
#!/bin/bash
# Clear out work and temp because I'm a massive pessimist
cd /var/tomcat/instances/tabula
rm -rf work/* temp/*
export CATALINA_HOME=/usr/local/tomcat-8
export CATALINA_BASE=/var/tomcat/instances/tabula
echo "Starting Tomcat server"
${CATALINA_HOME}/bin/catalina.sh run $@
Siapkan vhost Apache yang mereferensikan file yang disertakan di config/servers/common/vhosts
- gunakan rewrites.inc
untuk pengembangan Tabula penuh.
Anda memerlukan vhost HTTPS untuk SSO, jadi jika Anda hanya ingin menyiapkan satu vhost, vhost tersebut harus yang HTTPS. File yang disertakan mereferensikan peta agar port dapat digunakan, jadi Anda mungkin perlu mendefinisikan port Anda dengan tiga baris seperti
RewriteMap api txt:/etc/apache2/tabulaport.txt
RewriteMap proxy txt:/etc/apache2/tabulaport.txt
RewriteMap scheduler txt:/etc/apache2/tabulaport.txt
Baris di atas harus menunjuk ke file yang berisi baris ini (dengan asumsi port Tomcat default 8080):
port 8080
Salin gradle-local-example.properties
sebagai gradle-local.properties
dan edit properti di sana agar sesuai dengan sistem Anda. gradle-local.properties
akan diabaikan oleh Git.
Jika memperbarui dari Tabula versi lama, ingatlah untuk menerapkan migrasi database terkini dari config/scripts/schema
. Jika Anda mendapatkan IllegalStateException
dari Lucene, itu berarti salah satu indeks Anda sudah kedaluwarsa. Temukan lokasinya (lihat di tabula.properties
untuk base.data.dir
dan lihat ke dalam direktori index
di dalamnya). Hapus indeks yang relevan (mis. rm -fr BASE_DATA_DIR/index/notifications
), dan buat ulang dari /sysadmin di dalam aplikasi.
Jalankan ./gradlew deployToTomcat
untuk membangun aplikasi dan menyalin WAR yang meledak ke lokasi yang Anda tentukan di file properti Anda.
Gradle akan menginisialisasi server zinc untuk melakukan kompilasi tambahan, namun hal ini hanya berlangsung selama daemon Gradle berjalan - hal ini membuatnya tidak efisien untuk melakukan banyak kompilasi (untungnya, kecepatan kompilasi cukup bagus, bahkan untuk Scala).
Hasil pengujian unit Gradle dimasukkan ke dalam file HTML yang cukup bagus, jadi Anda mungkin tidak ingin menghabiskan waktu terlalu lama untuk mencoba membuat keluaran konsol lebih bertele-tele.
Jika Anda menjalankan npm run watch
dari dalam folder web
di sebuah tab, itu akan terus membangun aset dan JRebel kemudian akan menyinkronkannya ke perang, bersama dengan konten WEB-INF seperti tampilan Freemarker.
Beberapa perintah Gradle berguna lainnya:
./gradlew test deployToTomcat
- juga menjalankan pengujian selama penerapan (tidak ada pengujian yang dijalankan secara default)./gradlew web:deployToTomcat
- terapkan satu modul, tetapi buat dependensi modul seperti biasa (Ingat Tomcat akan tetap menerapkan perang lama kecuali Anda menghapusnya!)./gradlew test
- menjalankan pengujian, menunjukkan tumpukan jejak kegagalan di konsol dan keluaran yang tepat ke file HTML./gradlew web:test --tests *.ApplicationTest
- menjalankan pengujian tertentu./gradlew -PintegrationTest test -Dtoplevel.url=https://yourhost.warwick.ac.uk
- menjalankan tes fungsional (mulai instance Tomcat terlebih dahulu)./gradlew -PintegrationTest test -Dtoplevel.url=https://yourhost.warwick.ac.uk --tests *.CourseworkModuleManagerTest
- menjalankan tes fungsional tertentu./gradlew cucumber
- jalankan tes Mentimun (terhadap tabula-test.warwick.ac.uk)./gradlew cucumber -Dserver.environment=production
- menjalankan pengujian Mentimun terhadap produksi./gradlew cucumber -Dfeature.name=gzip
- menjalankan skenario Mentimun untuk satu fitur./gradlew --continuous
- terus kompilasi sumber saat disimpan di IDE Anda./gradlew test --continuous
- terus mengkompilasi sumber dan menjalankan pengujian saat sumber tersebut disimpan di IDE Anda (pengujian hanya dijalankan jika lolos)./gradlew web:test --tests *.ApplicationTest --continuous
- terus mengkompilasi dan menjalankan satu pengujian./gradlew generateEncryptionKey
- mencetak kunci enkripsi berkode Base64 untuk digunakan di tabula.properties
untuk penyimpanan objek atau database Modul web
berisi panggilan ke npm run build
untuk membangun aset dengan Webpack sebagai bagian dari penerapan. Anda dapat menjalankan ini secara manual untuk membuat konten statis baru ke dalam build/rootContent
(yang dipantau oleh JRebel untuk perubahan).
Jika Anda tidak ingin mengacaukan webpack sama sekali, Anda dapat menghubungi ./gradlew webpack
untuk membangun kembali aset.
Perintah npm
berguna lainnya:
npm run build
- bangun semua aset produksi dan keluarnpm run dev
- membangun aset untuk pengembangan dan keluarnpm run watch
- perhatikan perubahan pada file dan bangun kembali aset pengembangan Saat ini, kami masih memiliki banyak perpustakaan JS di src/main/assets/static/libs/
- perpustakaan ini harus diganti secara bertahap dengan manajemen ketergantungan yang tepat di package.json
(kami sudah melakukan ini untuk ID7). Jika Anda perlu memperbarui ID7, ubah nomor versi di package.json
dan jalankan npm install
(build akan melakukannya secara otomatis).
config
servers
common
- hal yang digunakan sebagian besar server untuk konfigurasi Apache, dll.scripts
schema
- skrip migrasi SQL untuk setiap perubahan skema database.api|common|web
- Modul tabulasrc
main
scala
- File sumber Scalajava
- File sumber Javaresources
- file non-kode yang akan tersedia di jalur kelas aplikasiassets
- File JS/CSS dll. untuk diproses aset oleh webpack sebelum ditambahkan ke WARwebapp
- file non-kode lain yang membentuk WAR.artwork
- grafik sumber tidak termasuk dalam aplikasi, tetapi digunakan untuk menghasilkan gambar statis. Biasanya SVG/Inkscape.test
console
Dalam sebuah modul, Gradle akan menghamparkan sumber daya dari common
saat membuat WAR. Dalam overlay, file yang ada tidak ditimpa, sehingga Anda dapat menentukan file dengan nama yang sama untuk mengesampingkan perilaku yang akan ditentukan dalam overlay.
common/.../WEB-INF
-> WEB-INF
- default applicationContext.xml
dan beberapa penyertaan yang dapat digantiweb/.../WEB-INF/spring-component-scan-context.xml
-> WEB-INF/spring-component-scan-context.xml
- mengganti yang kosong default dari yang umum Tersedia di sini: Dokumentasi pengembang