3. Serveri tööle saamine TalTechi masinas¶
Näiteprojektina kasutatud klient & server tutoriali serveri osa.
3.1. Ettevalmistus¶
Ava oma serveri projekt IntelliJ IDEA’ga
Teile antud TalTechi masinates on Eesti piires avatud TCP ja UDP pordid 8080-8090, seega määra serveri kuulatav port (pordid) sinna vahemikku
3.2. Vajalike failide genereerimine¶
Teeme Gradles vajalikud muudatused:
Ava (juurtasandil olev)
build.gradle
Muuda seda nii, et:
plugins
ploki all oleks (ainult)id 'application'
lisa plokk
application
ja sinna sissemainClass
, mille väärtus viitab sinu projekti sisenemispunktile (nt näiteprojekti järgi,ee.server.Main
viitabee.server
pakis olevaleMain
klassile, kust hiljem Java otsibmain()
meetodit)
plugins { id 'application' } application { mainClass = 'ee.server.Main' // asendada enda projekti täispika sisenemispunkti nimega (fully qualified name for project entry point, i.e. where the main method is) } ...
Vali IDEA paremalt ribalt Gradle’i menüü ja “Reload All Gradle Projects”
Kui Gradle ikooni ei näe, vali peamenüüst
View
->Tool Windows
->Gradle
Nüüd vali samast menüüst
Tasks
->distribution
ja tee topelt-klikkdistTar
pealVoilà, nüüd on
build/distributions
kataloogi loodudtar
arhiivifail, kus on kõik vajalikud failid rakenduse käivitamiseks kokkupakituna sees. (Alternatiivina võib kasutada ka GradledistZip
käsku, et luua zip-arhiiv).
Soovituslik: testime, kas server kohalikult üldse töötab:
Loodud tar-arhiiv tuleks individuaalseteks failideks lahti pakkida. Näiteks:
- Käsurealt:
tar -xvf <arhiivinimi>.tar
(näitekstar -xvf server-example-1.0-SNAPSHOT.tar
): -x
(extract) tähistab lahtipakkimist.-v
(verbose) selle valiku kasutamisel näidatakse terminalis kõiki faile, mida käsu käigus töödeldakse.-f
(file) võimaldab määrata käsule, millise failiga töötada. Pärast-f
tuleb alati konkreetne failinimi (näiteksarhiivinimi.tar
).
- Käsurealt:
Windows File Explorer’is arhiivile parem-klikk ja
Extract All...
Kui oled arhiivi lahti pakkinud, jooksuta tekkinud
bin/
kaustas olevat vastavat faili:käsurealt
./bin/<teie-faili-nimi>
(Linux/Mac) või.\bin\<teie-faili-nimi>.bat
(Windows PowerShell) näiteks.\bin\server-example.bat
Windows File Explorer’is topelt-klikk antud
.bat
failile (NB! Nii ei pruugi näha veateateid, kui aken läheb kohe kinni)
Peaksid nägema tuttavat serveri väljundit!
3.3. Faili TalTechi masinasse saamine¶
Soovituslik: testime, kas SSH ühendus üldse töötab:
Ava käsurida, kus lõid võtmepaari
ssh-keygen
’iga (kust avaliku võtme GitLabi kopeerisid)Windows: kas PowerShell, või eraldi paigaldatud WSL või Git Bash
Linux/Mac: Terminal
Jooksuta
ssh ubuntu@IP
, kus IP asenda Moodles olevast tabelist enda tiimi omaga. (P.S., kui tabel on eelmisest aastast vana, anna projekti chatis märku)Kui küsitakse parooli, ei leia ssh-programm üles sinu privaatvõtit; selle saab vajadusel ette anda argumendiga
-i path/to/private_key
Kui OK, siis hetkel võib ühenduse lõpetada (
exit
käsk võiCtrl + D
)
Kopeerime loodud faili üle SSH:
PowerShell/Terminal (enda kohalikus arvutis):
scp source target
, näiteksscp server-example-1.0-SNAPSHOT.tar ubuntu@193.40.255.43:/home/ubuntu
(ikka asendada source ehk tar faili nimi ja IP vastavalt enda projektile)Ka
scp
’le saab vajadusel anda privaatvõtme asukoha-i
’ga ette
3.4. Serveri käivitamine ja töös hoidmine¶
SSH masinasse:
ssh ubuntu@IP
- Peaksid kohe sattuma kasutaja “ubuntu” kodukataloogi (
/home/ubuntu
).Kiire meeldetuletus mõnest Linuxi käsust:pwd
- print working directorycd dir
- change work. dir. into 'dir'ls -la
(Ubuntus aliasla
) - list all (incl. hidden) files in current work. dir.
Pakime tar-i lahti:
tar -xvf <arhiivinimi>.tar
Paneme serveri käima:
./<teie-faili-nimi>/bin/<teie-faili-nimi>
näiteks:./server-example-1.0-SNAPSHOT/bin/server-example
Vajadusel uuenda Java versiooni, nt
sudo apt install openjdk-17-jre-headless
(või 21, …)
Kuidas hoida serverit töös pärast SSH-st väljalogimist? Vaata: https://askubuntu.com/questions/8653/how-to-keep-processes-running-after-ending-ssh-session (nt
tmux
võinohup ... &
variant)
3.5. Alternatiiv serveri jooksutamiseks - fat/uber JAR¶
Teine variant on lisada build.gradle
lõppu järgnevad read, seejärel
jooksutada Gradle’i jar
käsku. builds/libs
kataloogi luuakse üks
rasvane JAR-fail, mida saab samamoodi TalTech-i masinasse scp
’ga
kopeerida ja seda jooksutada: java -jar failinimi.jar
.
jar {
manifest {
attributes(
'Main-Class': 'siia asenda mainClass nagu esimeses variandiski'
)
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Lisainfo:
Gradle "Building Java applications": https://docs.gradle.org/current/userguide/building_java_projects.html#sec:building_java_applications
Gradle "The Application Plugin": https://docs.gradle.org/current/userguide/application_plugin.html#application_plugin
StackOverflow "Creating runnable JAR with Gradle": https://stackoverflow.com/a/21743527
Baeldung "Creating a Fat Jar in Gradle": https://www.baeldung.com/gradle-fat-jar
3.6. Kliendi JAR-faili loomine¶
Ava IDEA’s kliendi projekt ja vali Gradle menüüst desktop
->
Tasks
-> Other
-> dist
. Kataloogi build/libs
luuakse
JAR-fail, mida Javaga käivitada.
Tegelikult kasutatakse sama "fat JAR" meetodit, nagu ülal kirjeldatud (vaata Gradle build faili desktop/build.gradle
sisu).
Kui mingil heal põhjusel kasutada libGDX-i serveri poolel, tuleks samuti seda meetodit kasutada.
Lisainfo:
libGDX "Deploying your application": https://libgdx.com/wiki/deployment/deploying-your-application
3.7. Huvitavat¶
Kõik saab ära teha ka käsurealt (vs. IDEA menüü kaudu, nt
./gradlew distTar
või Windows PowerShellis
.\gradlew.bat distTar
).
Gradle loodud build
kausta võib vabalt kustutada (seda teeb ka
Gradle clean
task).
Ka JAR-fail on zip-fail. Selle sisu saab lahti pakkimata vaadata nt nii:
käsurealt
jar -tf fail.jar
võiunzip -l fail.jar
mistahes graafilise arhiivitööriistaga, nt 7-Zip või WinRAR.