Rest API załadowanie na VPS

Rest API załadowanie na VPS
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

Cześć,

Na początku chciałbym przeprosić jeżeli temat nie powinien znajdować się w tym miejscu ale nie miałem pojęcia gdzie powinienem go stworzyć :)
Od jakiegoś czasu zacząłem tworzyć własne API dla mojej aplikacji. Stworzyłem już połączenie z bazą danych, odpalałem ją w na localhoscie i przyszedł czas
na dalsze kroczki tzn. na przerzucenie jej na prawdziwy serwer. Zakupiłem jakiś podstawowy serwer VPS na homecloud, lecz teraz zaczęły się kroki.
Pytałem osób z pomocy w jaki sposób można zaaplikować własne API na serwer to nakierowali mnie na program WinSCP. Wszystko fajnie - pobrałem, zalogowałem na mój serwer ale na tym stanęło. Program pokazuje mi pliki, które są na serwerze i na moim komputerze i jestem w stanie aplikować je w prawo i lewo.
Reasumując... czy powinienem wrzucić po prostu cały plik, w którym znajduje się mój kod do plików serwera i tyle?
Na czym ogólnie to polega? Chce po prostu przykładowo odpalać link z moją domeną w np. Postmanie z odpowiednimi dodatkami tzn. np. funkcje GET
i żebym dostawał dane z mojej bazy danych, która już jest podłączona do stworzonego API. Powtarzam, że ogólnie API podłączone do bazy danych normalnie działa na serwerze lokalnym, gdy odpalam.

Z góry wielkie dzięki za pomoc.
Pozdrawiam, SM.

edytowany 1x, ostatnio: Szymon Markowski
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Skoro wykupiłeś sobie VPSa (w porównaniu np. do statycznego hostingu), powinieneś być w stanie zalogować się na Twój serwer z wykorzystaniem SSH - czy jesteś w stanie to zrobić?


Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

Tak, jestem w stanie. np za pomocą Putty jestem w stanie sie zalogowac.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Oki, czyli na swoim komputerze masz Windowsa?


edytowany 1x, ostatnio: Patryk27
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

Dokładnie.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Zakładając, że znasz podstawy Linuksa:

  • zainstaluj Javę (np. OpenJDK),
  • wrzuć aplikację na serwer (np. z wykorzystaniem rsync / WinSCP),
  • uruchom aplikację (np. java -jar /home/costam.jar).

Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

czy aplikacja musi być jakoś konkretnie zapakowana ? czy po prostu gołe pliki takie jakie sa w folderze wrzucam ?

Edit: nie doczytałem rozszerzenia. Pakuje w formacie .jar, tak ?
Edit2: wrzucam pliki costam.zip za pomoca WinSCP do /home
czyli /home/costam.zip.
Jak juz tam są to w puTTY odpalam po zalogowaniu się do serwer'a za pomocą "np. java -jar /home/costam.jar" ??? bo próbowałem i niestety dostaje informacje: "-bash: java: command not found", wiec zakladam, ze to nie o to chodzi, racja?

edytowany 2x, ostatnio: Szymon Markowski
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Postów:1876
0

”Engineering is easy. People are hard.” Bill Coughran
NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
0

Wrzucasz spakowany jar na serwer do jakiegoś katalogu.
Następnie odpalasz. Po zamknięciu SSH, proces aplikacji zostanie ubity. Użyć do tego np. nohup na początek do testów. A jeśli chcesz zrobić to porządnie to zapoznaj się z Unit file w systemd.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

wiec zakladam, ze to nie o to chodzi, racja?

Powoli, kowboju; jak brzmi pierwszy krok, który wymieniłem na liście?


edytowany 1x, ostatnio: Patryk27
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0
Patryk27 napisał(a):

wiec zakladam, ze to nie o to chodzi, racja?

Powoli, kowboju; jak brzmi pierwszy krok, który wymieniłem na liście?

To już mam gotowe :D

Rzeczy, które już zrobiłem:

  • Java zainstalowana (pracowałem na niej już wcześniej więc chcąc lub nie musiałem to zrobić),
  • zapakowałem projekt do .jar i wrzuciłem za pomoca WinSCP do plików VPS.

Jakieś bardziej rozwinięte następne kroki ? Bo z tego co napisałeś to nie bardzo wiem co powinienem zrobić.

edytowany 1x, ostatnio: Szymon Markowski
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

W jaki sposób zainstalowałeś JVM?


NS
Mam wrażenie, że kolega ma na swoim desktopie ją, bo nie załapał, że musi ją mieć na serwerze.
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0
Patryk27 napisał(a):

W jaki sposób zainstalowałeś JVM?

Mówimy o czymś takim jak na poniższym obrazku:

?

NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
0

@Szymon Markowski: wiesz jak działa JVM choć ogólnie?
Żeby uruchomić archiwum .jar na zdalnej maszynie, musisz mieć na niej zainstalowany JRE w wersji kompatybilnej z twoim kodem (sprawdź target w pom.xml albo w build.gradle)

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Java zainstalowana (pracowałem na niej już wcześniej więc chcąc lub nie musiałem to zrobić),

Skoro chcesz uruchomić aplikację napisaną w Javie na serwerze, wypadałoby zainstalować Javę na serwerze ;-]


edytowany 1x, ostatnio: Patryk27
Pangeon
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Łódź
  • Postów:163
0

Niedawno udało mi się zintegrować BitBucket'a z Heroku. Zaciąga mi aplikacje w Springu i wrzuca na chmurę i to fajnie działa. Użyłem pipeline'a. Wyczytałem z dokumentacji:

Deploy to Heroku

Korzystam z bazy danych na zwykłym hostingu webd.pl. Jak skonfigurowałem to tylko dodaje kolejne commity a reszta sama się robi. To rozwiązanie chyba opiera o dobroci Docker'a :)
To chyba nietrudne skoro mi się udało a nie siedzę w DevOps

Polecam.


Sukces jest progresywną realizacją wartościowej idei w ramach cierpliwego wymiaru czasu.
edytowany 3x, ostatnio: Pangeon
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0
Pangeon napisał(a):

Niedawno udało mi się zintegrować BitBucket'a z Heroku. Zaciąga mi aplikacje w Springu i wrzuca na chmurę i to fajnie działa. Użyłem pipeline'a. Wyczytałem z dokumentacji:

Deploy to Heroku

Korzystam z bazy danych na zwykłym hostingu webd.pl. Jak skonfigurowałem to tylko dodaje kolejne commity a reszta sama się robi. To rozwiązanie chyba opiera o dobroci Docker'a :)
To chyba nietrudne skoro mi się udało a nie siedzę w DevOps

Polecam.

Na heroku też juz testowalem i działa. Chciałem spróbować zrobić coś na własnym hoscie :)

Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

Jeżeli chodzi o instalacje JVM to rozumiem, że chodzi o to, ŻE...

  1. ściągam JVM z "https://www.java.com/pl/download/"
  2. wrzucam plik za pomocą WinSCP
  3. przez PuTTY zainstalowalem JVM komendą :sudo yum install java i wszystko ładnie zainstalowało. Sprawdzajac wersje w kliencie SSH wersje javy dostaje informacje:
    [root@mojSerwer ~]# java -version
    openjdk version "1.8.0_232"
    OpenJDK Runtime Environment (build 1.8.0_232-b09)
    OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
  4. Teraz próbując uruchomic aplikacje rest.jar przez komende "java -jar /home/rest.jar" to dostaje informacje:
    Error: Unable to access jarfile home/rest.jar

Czy jestem na dobrej drodze :D? Czy coś jest nie tak

edytowany 1x, ostatnio: Szymon Markowski
NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:455
0

po prostu nie masz takiej ścieżki, albo brak uprawnień.

  1. Sprawdź i nadaj uprawnienia .jarowi
  2. Podaj poprawną ścieżkę. To home/ mi się nie podoba. Przejdź do katalogu gdzie się jar znajduje i odpal: $ java -jar rest.jar

Jeśli się nie powiedzie, to daj IP i dodaj mój klucz publiczny do ~/.ssh/known_hosts :D

edytowany 1x, ostatnio: NeutrinoSpinZero
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0
NeutrinoSpinZero napisał(a):

po prostu nie masz takiej ścieżki, albo brak uprawnień.

  1. Sprawdź i nadaj uprawnienia .jarowi
  2. Podaj poprawną ścieżkę. To home/ mi się nie podoba. Przejdź do katalogu gdzie się jar znajduje i odpal: $ java -jar rest.jar

Jeśli się nie powiedzie, to daj IP i dodaj mój klucz publiczny do ~/.ssh/known_hosts :D

Ad. 1 W jaki sposób mogę to zrobić ?
Ad. 2 Wrzuciłem plik do głównego folderu i teraz po próbie odpalenia dostaje info:

**[root@mojSerwer ~]# java -jar restApi.jar
no main manifest attribute, in restApi.jar
**

Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0

Udało mi się odpalic aplikacje za pomocą komendy:
** java -cp api.jar com.myOwnApi.restApi.RestApiApplication**

Początkowo aplikacja się wczytuje tak jak robiła to w Intellj ale później wyskakuje błąd, którego nie mogę rozwiązać "D

22:10:18.965 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
at org.springframework.util.Assert.notEmpty(Assert.java:464)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:173)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:116)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:396)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports(ConfigurationClassParser.java:877)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:803)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:773)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:325)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:242)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:746)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:396)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1225)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214)
at com.myOwnApi.restApi.RestApiApplication.main(RestApiApplication.java:10)

G4iner
  • Rejestracja:ponad 5 lat
  • Ostatnio:7 miesięcy
  • Postów:6
0
Szymon Markowski napisał(a):

Ad. 1 W jaki sposób mogę to zrobić ?
Ad. 2 Wrzuciłem plik do głównego folderu i teraz po próbie odpalenia dostaje info:

**[root@mojSerwer ~]# java -jar restApi.jar
no main manifest attribute, in restApi.jar
**

Ad 1. Z użyciem narzędzia chmod nadajesz uprawnienia, jednak widać plik się odpala, patrz punkt 2.
Ad 2. To w jaki sposób "zapakowałeś" (jak to sam określiłeś) swój program do .jar? Plik manifest możesz utworzyć ręcznie i wskazać go w swoim IDE przy tworzeniu artefaktu np. https://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/
Bardziej uniwersalnie deklarując w pliku .pom Mavena https://mkyong.com/maven/how-to-create-a-manifest-file-with-maven/ (lub jak już było podane wcześniej - utworzenie fat jar)

EDIT: To teraz się wyjaśniło że robisz appkę w Springu, nadal pewnie w zły sposób kompilujesz, przejrzyj i popraw swojego poma

edytowany 1x, ostatnio: G4iner
Szymon Markowski
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:26
0
G4iner napisał(a):
Szymon Markowski napisał(a):

Ad. 1 W jaki sposób mogę to zrobić ?
Ad. 2 Wrzuciłem plik do głównego folderu i teraz po próbie odpalenia dostaje info:

**[root@mojSerwer ~]# java -jar restApi.jar
no main manifest attribute, in restApi.jar
**

Ad 1. Z użyciem narzędzia chmod nadajesz uprawnienia, jednak widać plik się odpala, patrz punkt 2.
Ad 2. To w jaki sposób "zapakowałeś" (jak to sam określiłeś) swój program do .jar? Plik manifest możesz utworzyć ręcznie i wskazać go w swoim IDE przy tworzeniu artefaktu np. https://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/
Bardziej uniwersalnie deklarując w pliku .pom Mavena https://mkyong.com/maven/how-to-create-a-manifest-file-with-maven/ (lub jak już było podane wcześniej - utworzenie fat jar)

Już utworzyłem plik .jar. Następnie dodałem go do plików serwerowych a gdy próbuję go odpalić dostaje:

[root@mojSerwer ~]# java -cp api.jar com.myOwnApi.restApi.RestApiApplication
22:18:26.925 [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Activating profiles []

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v0.0.20131108.vaadin1)

22:18:27.224 [main] INFO com.myOwnApi.restApi.RestApiApplication - Starting RestApiApplication v0.0.20131108.vaadin1 on mojSerwer.smarkowski.pl with PID 6183 (/root/api.jar started by root in /root)
22:18:27.228 [main] DEBUG com.myOwnApi.restApi.RestApiApplication - Running with Spring Boot v0.0.20131108.vaadin1, Spring v0.0.20131108.vaadin1
22:18:27.230 [main] INFO com.myOwnApi.restApi.RestApiApplication - No active profile set, falling back to default profiles: default
22:18:27.233 [main] DEBUG org.springframework.boot.SpringApplication - Loading source class com.myOwnApi.restApi.RestApiApplication
22:18:27.413 [main] DEBUG org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@27a8c74e
22:18:27.434 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
22:18:27.664 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: URL [jar:file:/root/api.jar!/com/myOwnApi/restApi/api/OsobaAPI.class]
22:18:27.705 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Ignored because not a concrete top-level class: URL [jar:file:/root/api.jar!/com/myOwnApi/restApi/dao/OsobaRepo.class]
22:18:27.722 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: URL [jar:file:/root/api.jar!/com/myOwnApi/restApi/manager/OsobaManager.class]
22:18:27.813 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
at org.springframework.util.Assert.notEmpty(Assert.java:464)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:173)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:116)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:396)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports(ConfigurationClassParser.java:877)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:803)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:773)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:325)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:242)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:746)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:396)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1225)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214)
at com.myOwnApi.restApi.RestApiApplication.main(RestApiApplication.java:10)
22:18:27.830 [main] DEBUG org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@27a8c74e, started on Tue Jan 28 22:18:27 GMT+01:00 2020
[root@mojSerwer ~]#

G4iner
"If you are using a custom packaging, make sure that file is correct." - masz dodane <packaging>jar</packaging>? A jak widzę że używasz Vaadina to może i "war" ma być jeśli masz tam pliki .html
KamilAdam
war tylko jeśli miało by to trafić do wnętrza Tomcata lub czegoś podobnego. Jeśli aplikacja jest ta Boot Springu to zapewne jest użyty Embedded Tomcat lub Jetty i jar jest jak najbardziej poprawny
G4iner
Być może zawsze robiłem to źle, ale przy generowaniu jar przez maven package nie wrzucało mi folderu WEB-INF. Przy war wszystko grało, a uruchomienie też jest na Embedded Tomcat zwykłą komendą java -jar - tak to robiłem na małe potrzeby
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
Szymon Markowski napisał(a):

22:18:27.813 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
at org.springframework.util.Assert.notEmpty(Assert.java:464)

Ktoś na SO ma dokładnie ten sam problem co Ty


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.