3. Serveri tööle saamine TalTechi masinas

Näiteprojektina kasutatud klient & server tutoriali serveri osa.

3.1. Ettevalmistus

  1. Ava oma serveri projekt IntelliJ IDEA’ga

  2. 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

  1. Teeme Gradles vajalikud muudatused:

    1. Ava (juurtasandil olev) build.gradle

    2. Muuda seda nii, et:

      1. plugins ploki all oleks (ainult) id 'application'

      2. lisa plokk application ja sinna sisse mainClass, mille väärtus viitab sinu projekti sisenemispunktile (nt näiteprojekti järgi, ee.server.Main viitab ee.server pakis olevale Main klassile, kust hiljem Java otsib main() 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)
    }
    
    ...
    
    1. Vali IDEA paremalt ribalt Gradle’i menüü ja “Reload All Gradle Projects” img_1.png

      • Kui Gradle ikooni ei näe, vali peamenüüst View -> Tool Windows -> Gradle

    2. Nüüd vali samast menüüst Tasks -> distribution ja tee topelt-klikk distTar peal img.png

    3. Voilà, nüüd on build/distributions kataloogi loodud tar arhiivifail, kus on kõik vajalikud failid rakenduse käivitamiseks kokkupakituna sees. (Alternatiivina võib kasutada ka Gradle distZip käsku, et luua zip-arhiiv). img_2.png

  2. Soovituslik: testime, kas server kohalikult üldse töötab:

    1. Loodud tar-arhiiv tuleks individuaalseteks failideks lahti pakkida. Näiteks:

      • Käsurealt: tar -xvf <arhiivinimi>.tar (näiteks tar -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äiteks arhiivinimi.tar).

      • Windows File Explorer’is arhiivile parem-klikk ja Extract All...

    2. 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)

    3. Peaksid nägema tuttavat serveri väljundit!

3.3. Faili TalTechi masinasse saamine

  1. Soovituslik: testime, kas SSH ühendus üldse töötab:

    1. 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

    2. 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

    3. Kui OK, siis hetkel võib ühenduse lõpetada (exit käsk või Ctrl + D)

  2. Kopeerime loodud faili üle SSH:

    1. PowerShell/Terminal (enda kohalikus arvutis): scp source target, näiteks scp 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

  1. SSH masinasse:

    1. ssh ubuntu@IP

    2. Peaksid kohe sattuma kasutaja “ubuntu” kodukataloogi (/home/ubuntu).
      Kiire meeldetuletus mõnest Linuxi käsust:
      • pwd - print working directory

      • cd dir - change work. dir. into 'dir'

      • ls -la (Ubuntus alias la) - list all (incl. hidden) files in current work. dir.

  2. Pakime tar-i lahti: tar -xvf <arhiivinimi>.tar

  3. 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, …)

  4. 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õi nohup ... & 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:

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:


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õi unzip -l fail.jar

  • mistahes graafilise arhiivitööriistaga, nt 7-Zip või WinRAR.