Il runtime Java 8 / Jetty 9 fornisce OpenJDK 8 ed Eclipse Jetty 9 con supporto per la specifica Java Servlet 3.1. Per informazioni sulla versione Jetty specifica in questo runtime, visualizza le proprietà Jetty nel progetto GitHub per l'immagine del runtime.
Prerequisiti
Scarica l'ultima versione di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:
gcloud components update
Per eseguire il deployment utilizzando Maven, dovrai aggiungere il plug-in Maven per App Engine a
pom.xml
:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
Altre opzioni per il deployment includono il comando
gcloud app deploy
o il plug-in Gradle di App Engine.
Organizzazione dei file
La struttura di origine dovrebbe avere il seguente aspetto:
MyDir/ [pom.xml] [build.gradle] [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ [Dockerfile] java/ com.example.mycode/ MyCode.java webapp/ [index.html] [jsp.jsp] WEB-INF/ [web.xml]
app.yaml
È richiesto un file app.yaml
. Definisci un file simile al seguente:
L'immagine di runtime gcr.io/google-appengine/jetty
viene selezionata automaticamente quando esegui il deployment di un WAR (file *.war
).
Se vuoi utilizzare questa immagine come base per un runtime personalizzato, puoi specificare runtime: custom
nel file app.yaml
, quindi scrivere il Dockerfile nel seguente modo:
FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
Queste righe aggiungono WAR nella posizione corretta per il container Docker.
Le altre impostazioni app.yaml
sono descritte nella sezione Utilizzo di app.yaml.
pom.xml è per la configurazione di Maven e build.gradle per la configurazione di Gradle.
File facoltativi
Questi file di configurazione sono facoltativi:
Inserisci questi file al livello più alto di MyDir. Se utilizzi questi file, devi eseguirne il deployment separatamente con il comando gcloud app deploy
.
Il file web.xml è facoltativo ed è necessario solo se non utilizzi le annotazioni Servlet 3.x.
Puoi inserire contenuti web statici e le pagine JavaServer nella directory webapp/
.
Jetty 9, che viene utilizzato dall'ambiente flessibile di App Engine come container Servlet, e che utilizza Apache Jasper come implementazione JSP predefinita e include i tag JSTL.
Il file Dockerfile è facoltativo e viene utilizzato per personalizzare il tempo di esecuzione di Java.
Attivazione della compressione gzip
Il gestore gzip
è associato a Jetty, ma non è attivato per impostazione predefinita. Per attivare questo modulo, imposta la variabile di ambiente JETTY_MODULES_ENABLE=gzip
nel file app.yaml
:
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
Utilizzare la Guida rapida
Jetty
può velocizzare
l'ora di inizio dell'applicazione eseguendo una prescansione dei suoi contenuti e generando
file di configurazione.
Se utilizzi un'immagine estesa, puoi attivare la guida rapida eseguendo /scripts/jetty/quickstart.sh
nel Dockerfile dopo aver aggiunto l'applicazione WAR.
FROM launcher.gcr.io/google/jetty
ADD your-application.war $JETTY_BASE/webapps/root.war
# generate quickstart-web.xml
RUN /scripts/jetty/quickstart.sh
Variabili di ambiente
Puoi impostare le seguenti variabili di ambiente facoltative specifiche per il runtime Java 8/Jetty 9. Puoi impostare anche le variabili di ambiente OpenJDK 8.
Per impostare le variabili di ambiente, utilizza la chiave env_variables
nel file app.yaml
.
Env varia | Fornitore Maven | Valore/commento |
---|---|---|
JETTY_PROPERTIES |
Elenco separato da virgole di name=value coppie aggiunte a $JETTY_ARGS |
|
JETTY_MODULES_ENABLE |
Elenco separato da virgole di moduli da abilitare aggiungendo $JETTY_ARGS |
|
JETTY_MODULES_DISABLE |
Elenco separato da virgole di moduli da disattivare rimuovendo da $JETTY_BASE/start.d |
|
JETTY_ARGS |
Argomenti passati al start.jar del molo. Tutti gli argomenti utilizzati per la configurazione del molo personalizzato devono essere passati qui. |
|
JAVA_OPTS |
Argomenti di runtime JVM |
Cloud Logging avanzato (beta)
Durante l'esecuzione nell'ambiente flessibile di App Engine, puoi configurare Java Util
Logging per inviare log a Cloud Logging impostando
la variabile di ambiente JETTY_ARGS
. Ad esempio:
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
Devi fornire un file logging.properties che configuri un LoggingHandler come segue:
handlers=com.google.cloud.logging.LoggingHandler
# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
Test locale
Quando esegui i test nel tuo ambiente locale, puoi utilizzare i servizi Google Cloud emulati, anziché i servizi Google Cloud remoti. Puoi usare i seguenti emulatori:
Usa il comando gcloud
per avviarli prima di eseguire l'app:
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
Aggiungi queste righe al file pom.xml
nav per aggiungere il plug-in Jetty 9 Maven:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
Per eseguire la tua app localmente, utilizza il comando Maven:
mvn jetty:run-exploded
Gradle
Segui le istruzioni sulla creazione di un nuovo progetto Gradle per aggiungere il plug-in Gretty Gradle a build.gradle
e utilizza il comando:
gradle jettyRun
Deployment dell'app
Per inizializzare Google Cloud CLI, esegui:
gcloud init
Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente i file app.yaml
e WAR utilizzando:
gcloud app deploy app.yaml
Se utilizzi uno dei file di configurazione facoltativi (index.yaml
, cron.yaml
e dispatch.yaml
), eseguine il deployment separatamente con il comando gcloud
. Ad esempio:
gcloud app deploy cron.yaml
Maven
Utilizza Maven per eseguire il deployment della tua app:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Sostituisci PROJECT_ID con l'ID del tuo progetto Cloud. Se il file pom.xml
specifica già specifica il tuo ID progetto, non è necessario includere la proprietà -Dapp.deploy.projectId
nel comando che esegui.
Gradle
Utilizza Gradle per eseguire il deployment della tua app:
gradle appengineDeploy
Personalizzazione del runtime Java 8 / Jetty 9
Non è necessario un Dockerfile per eseguire il deployment della tua app nel runtime Java 8/Jetty 9.
Se la tua app richiede una configurazione aggiuntiva, puoi fornire esplicitamente un Dockerfile per personalizzare il runtime di Java. Il Dockerfile deve includere l'immagine di base gcr.io/google-appengine/jetty
. Puoi aggiungere ulteriori istruzioni al Docker per personalizzare il runtime di Java. Consulta la pagina relativa alla creazione di runtime personalizzati.
Il tuo Dockerfile dovrebbe iniziare in questo modo:
FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
# YOUR DOCKER COMMANDS
In questo caso, your-application.war
è il nome del file WAR creato nella directory target/
(maven) o build/staged-app/
(gradle).