Jak uruchomić IronPDF for Java w Google Cloud

This article was translated from English: Does it need improvement?
Translated
View the article in English

Wdrożenie IronPDF dla Java na Google Cloud Functions wymaga niestandardowej konfiguracji, ponieważ IronPDF polega na dołączonym binarnym Chromium do renderowania HTML do PDF. Ten przewodnik obejmuje wszystko, co jest potrzebne do uruchomienia IronPDF w niestandardowym kontenerze Docker w Google Cloud Functions — od prawidłowych zależności pom.xml po uprawnienia uruchomieniowe i ustawienia zasobów.

WażneWsparcie Google Cloud dla IronPDF dla Java jest obecnie eksperymentalne — nie wszystkie konfiguracje zostały zweryfikowane w każdym regionie lub wersji wykonawczej. Sprawdź dokładnie wdrożenia przed publikacją w produkcji.

Nie ma to znaczenia, jeśli już masz doświadczenie z Google Cloud Functions i Docker. Zmiany w konfiguracji są proste: zamień domyślny obraz funkcji na niestandardowy Dockerfile, dodaj zależność silnika Linuksa, dostosuj limity zasobów i ustaw katalog roboczy. Każdy krok jest wyjaśniony poniżej.

Szybki Start: Wdróż IronPDF dla Java na Google Cloud

Minimalna konfiguracja robocza wymaga niestandardowego pliku Dockerfile (ponieważ domyślne obrazy Cloud Function nie zawierają zależności systemowych przeglądarki Chrome), artefaktu ironpdf-engine-linux-x64 w pliku pom.xml oraz katalogu roboczego wskazującego na /tmp/. Kod poniżej pokazuje, jak ustawić katalog roboczy silnika w punkcie wejścia funkcji:

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ustawienies;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
Ustawienies.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ustawienies;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
Ustawienies.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

Po ustawieniu katalogu roboczego, IronPDF może wyodrębniać i wykonywać swój binarny silnik w efemerycznym systemie plików funkcji w chmurze. Katalog /tmp/ jest jedyną ścieżką z prawem do zapisu i wykonywania dostępną w większości środowisk uruchomieniowych Google Cloud Function.

Spis treści

Dlaczego domyślne obrazy Cloud Function nie działają?

Domyślne obrazy wykonawcze Google Cloud Functions są celowo minimalne — zawierają tylko pakiety potrzebne do wykonania kodu funkcji napisanego w popularnych językach. Oparty na Chromium silnik renderujący IronPDF opiera się na szerszym zestawie systemowych bibliotek Linuksa (czcionki, biblioteki grafiki, narzędzia do sandboxingu), które są nieobecne w standardowych obrazach.

Google publikuje pełną listę dostępnych pakietów systemowych dla każdej wykonawki na dokumencie referencyjnym pakiety systemowe Google Cloud Functions. Zależności Chromium nie są włączone w żadnej z standardowych wykonawczych 2. generacji. Próba załadowania silnika IronPDF w domyślnym obrazie skutkuje błędem ładowania natywnej biblioteki przy starcie.

Rozwiązaniem jest zbudowanie niestandardowego obrazu Docker, który jawnie instaluje te pakiety przed dodaniem pliku binarnego funkcji. To podejście jest w pełni wspierane przez Google Cloud Functions i jest tą samą strategią zalecaną dla każdej funkcji, która wymaga natywnych plików binarnych. Odnieś się do przewodnika wdrożenia IronPDF dla Linuksa dla pełnej listy pakietów do uwzględnienia.

Zwróć uwagęWdrożenie Zip nie jest wspierane dla IronPDF na Google Cloud. IronPDF musi wyodrębniać i wykonywać natywne pliki binarne w czasie wykonywania, co wymaga zapisywalnego systemu plików i uprawnień do wykonywania, których model wdrożenia Zip nie zapewnia.

Jak zbudować niestandardowy Dockerfile dla Google Cloud?

Niestandardowy Dockerfile daje pełną kontrolę nad środowiskiem wykonawczym. Rozpocznij od oficjalnego obrazu bazowego Java Google Cloud Functions, a następnie zainstaluj systemowe biblioteki wymagane przez Chromium.

Poniższy Dockerfile demonstruje zalecany schemat. Zastąp wpisy COPY i CMD szczegółami dotyczącymi Twojego projektu funkcji:

//:path=Dockerfile
# Use the official Google Cloud Functions Java 17 base image
FROM gcr.io/google-appengine/java17:latest

# Install Chrome system dependencies required by IronPDF's rendering engine
RUN apt-get update && apt-get install -y \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    libpango-1.0-0 \
    libpangocairo-1.0-0 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

# Grant execute permissions on /tmp so the IronPDF engine can extract there
RUN chmod 777 /tmp/

# Copy the compiled JAR and set the entry point
COPY target/your-function.jar /app/function.jar
CMD ["java", "-jar", "/app/function.jar"]

Linia chmod 777 /tmp/ jest konieczna, ponieważ IronPDF musi zapisać i uruchomić plik binarny silnika podczas inicjalizacji. Bez uprawnienia do wykonywania w katalogu roboczym, silnik nie uruchomi się.

PoradyPrzetestuj obraz Docker lokalnie za pomocą docker build i docker run przed wdrożeniem do Cloud Functions. Lokalne testowanie wychwytuje brakujące zależności wcześnie i unika powolnych cykli budowania w chmurze.

Jak skonfigurować pom.xml dla wdrożenia Google Cloud?

Standardowy artefakt Maven ironpdf zawiera pliki binarne silnika dla wielu platform. Dla Google Cloud Functions (które działają na Linux x86-64), dodaj specyficzny dla platformy artefakt silnika, aby utrzymać obraz wdrożeniowy chudy i zapewnić, że poprawny plik binarny jest zawsze dostępny:

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
XML

Zawsze aktualizuj numer wersji do najnowszego wydania IronPDF dla Java. Artefakt ironpdf-engine-linux-x64 musi dokładnie odpowiadać wersji podstawowego artefaktu ironpdf.

WażneZachowaj spójność obu numerów wersji. Niezgodność między głównym artefaktem a wersją artefaktu silnika spowoduje błąd uruchomienia.

Jak dodać wtyczkę Maven Shade?

Podczas wdrażania w Google Cloud Functions jako plik uber-JAR (fat JAR) maven-shade-plugin zapewnia prawidłowe scalanie plików ładujących usługi ze wszystkich zależności przechodnich. Bez tego, niektóre rejestracje serwisów gRPC mogą zostać cicho pominięte, powodując, że silnik nie zainicjuje się.

Dodaj następującą konfigurację wtyczki do sekcji <build><plugins> w pliku pom.xml:

//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
XML

Kluczowym elementem jest ServicesResourceTransformer. Łączy wpisy META-INF/services/ ze wszystkich plików JAR zależności w jeden połączony plik. gRPC wykorzystuje mechanizm ServiceLoader języka Java, więc połączone pliki usług są wymagane, aby wybór transportu (HTTP/2 vs. zwykły tekst) działał w czasie wykonywania.

Jak dodać opcjonalne zależności gRPC?

W niektórych konfiguracjach wdrożeń — w szczególności przy użyciu osłoniętego JAR z niektórymi wersjami frameworka Google Cloud Functions — konieczne są wyraźne zależności transportu gRPC. Dodaj je, jeśli funkcja nie uruchamia się z błędem transportu gRPC lub kanału:

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
XML

W większości przypadków do produkcji wystarczy uwzględnienie grpc-netty-shaded. Transport grpc-okhttp jest lżejszą alternatywą, przydatną gdy priorytetem jest zminimalizowanie rozmiaru obrazu. Dodaj perfmark-api tylko wtedy, gdy pojawią się ostrzeżenia dotyczące ścieżki klasy (classpath) związane z brakującymi adnotacjami śledzenia.

Zwróć uwagęCheck the gRPC release notes to confirm the latest compatible version for your IronPDF dependency set.

Jak ustawić limity zasobów dla Google Cloud Functions?

IronPDF uruchamia podproces Chromium wewnątrz kontenera Cloud Function podczas pierwszego wywołania. Uruchomienie i początkowe renderowanie Chromium są pamięciochłonne, a funkcja musi być żywa wystarczają dostatecznie długo, aby silnik się zainicjował. Domyślne limity zasobów dla Cloud Functions są zbyt niskie do niezawodnego działania.

Skonfiguruj następujące limity w Google Cloud Console lub za pomocą interfejsu CLI gcloud podczas wdrażania funkcji:

Zalecane ustawienia zasobów Google Cloud Function dla IronPDF Java
Ustawienie Zalecana wartość Powód
Limit czasu 330 sekund Inicjalizacja Chromium przy zimnym starcie może zająć 60-90 sekund. Funkcja nie może się skończyć zanim silnik będzie gotowy.
Pamięć 2 048 MB lub więcej Chromium wymaga znacznej ilości RAM do renderowania skomplikowanych stron HTML. Niewystarczająca pamięć powoduje, że proces zostaje zabity w trakcie renderowania.
Pamięć tymczasowa 1 024 MB lub więcej Plik binarny silnika i tymczasowe pliki PDF są zapisywane w /tmp/. Niskie zasoby pamięci spowodują błędy wyodrębniania lub zapisu.

Te wartości są punktami startowymi. Wysokowydajne lub skomplikowane generowanie PDF może wymagać wyższych przydziałów pamięci. Monitoruj metryki użycia pamięci Cloud Function w Google Cloud Console i zwiększ limity, jeśli zauważysz błędy z brakiem pamięci.

OstrzeżenieNie obniżaj limitu czasu poniżej 180 sekund. Inicjalizacja zimnego startu dla IronPDF na funkcjach Cloud konsystentnie wymaga więcej czasu niż standardowe funkcje Java.

Jak skonfigurować katalog roboczy i uprawnienia do plików?

Silnik IronPDF podczas uruchamiania wyodrębnia swój plik binarny do katalogu roboczego. W Google Cloud Functions jedyną ścieżką, na której można zapisywać i uruchamiać pliki, jest /tmp/. Ustaw katalog roboczy wyraźnie przed wywołaniem jakiegokolwiek API IronPDF i upewnij się, że Dockerfile przyznaje niezbędne uprawnienia na tej ścieżce.

Dodaj to wywołanie konfiguracji na początku punktu wejścia funkcji, przed jakimikolwiek operacjami PDF:

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ustawienies;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        Ustawienies.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ustawienies;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        Ustawienies.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
JAVA

Następnie dodaj odpowiednią komendę uprawnień do swojego Dockerfile:

//:path=Dockerfile
# Ensure the IronPDF engine can extract and run binaries from /tmp/
RUN chmod 777 /tmp/

Użycie bloku inicjalizującego static {} gwarantuje, że katalog roboczy zostanie skonfigurowany, zanim jakakolwiek klasa w funkcji spróbuje załadować silnik IronPDF. Jeśli ustawisz to w metodzie instancji lub obsłudze żądania, istnieje ryzyko, że inny wątek zainicjuje silnik, zanim ścieżka zostanie skonfigurowana.

Jakie są kolejne kroki?

Ten przewodnik obejmuje pełną konfigurację dla uruchamiania IronPDF for Java wewnątrz Google Cloud Function z użyciem niestandardowego kontenera Docker. Kluczowe punkty to: użycie niestandardowego pliku Dockerfile, który instaluje zależności systemowe Chrome, dołączenie artefaktu ironpdf-engine-linux-x64 Maven, skonfigurowanie katalogu roboczego na /tmp/, ustawienie limitu czasu na co najmniej 330 sekund i pamięci na co najmniej 2048 MB oraz dodanie maven-shade-plugin w celu scalania plików ładujących usługi.

Aby dowiedzieć się więcej o możliwościach IronPDF for Java, odwiedź dokumentację IronPDF for Java lub wypróbuj jeden z tych przewodników:

Uzyskaj bezpłatną licencję próbną, aby przetestować IronPDF for Java w swoim środowisku Google Cloud. Klucz licencyjny jest wymagany do wdrożeń produkcyjnych. Kup licencję, gdy jesteś gotowy do produkcji.

Często Zadawane Pytania

Dlaczego IronPDF for Java nie uruchamia się na domyślnym obrazie Google Cloud Function?

Domyślne obrazy środowiska uruchomieniowego funkcji Cloud nie zawierają systemowych bibliotek Linux wymaganych przez Chromium, takich jak libnss3, libatk1.0-0 i powiązane pakiety graficzne. Silnik renderowania IronPDF używa Chromium wewnętrznie, więc konieczny jest niestandardowy Dockerfile, który explicite instaluje te zależności.

Dlaczego model wdrażania Zip nie jest wspierany dla IronPDF na Google Cloud?

IronPDF musi wyodrębnić i uruchomić natywny plik binarny Chromium w czasie wykonania. Model wdrażania Zip nie zapewnia zapisywalnego, wykonalnego systemu plików, więc silnik nie może wyodrębnić ani uruchomić swojego pliku binarnego. Wymagane jest wdrożenie oparte na Docker.

Jaka zależność Maven jest wymagana dla IronPDF na Google Cloud Functions?

Dodaj ironpdf-engine-linux-x64 z grupy com.ironsoftware do pom.xml. Numer wersji musi dokładnie pasować do podstawowego artefaktu ironpdf. Ten artefakt łączy binarną wersję Chromium x86-64 używaną przez IronPDF do renderowania.

Dlaczego IronPDF for Java potrzebuje maven-shade-plugin?

Podczas pakowania jako uber-JAR, maven-shade-plugin z ServicesResourceTransformer scala pliki z META-INF/services/ ze wszystkich zależnych JAR-ów. Bez niego rejestracje usług gRPC mogą być niejawnie pomijane, co powoduje, że silnik IronPDF nie jest w stanie się zainicjować.

Jakie ustawienia limitu czasu i pamięci są wymagane dla Google Cloud Functions uruchamiających IronPDF?

Ustaw limit czasu funkcji na 330 sekund, pamięć co najmniej 2048 MB oraz tymczasowe miejsce co najmniej 1024 MB. Inicjalizacja Chromium przy zimnym starcie może zająć 60 do 90 sekund, a silnik wymaga znacznej ilości pamięci do renderowania złożonych stron HTML.

Dlaczego Settings.setIronPdfEngineWorkingDirectory musi wskazywać na /tmp/ na Google Cloud?

Katalog /tmp/ jest jedyną zapisywalną i wykonalną ścieżką dostępną w większości środowisk uruchomieniowych Google Cloud Function. IronPDF musi wyodrębnić binarną wersję silnika i zapisać pliki tymczasowe w tej lokalizacji. Bez tego ustawienia silnik nie może znaleźć odpowiedniego celu wyodrębniania i nie będzie w stanie się uruchomić.

Dlaczego Dockerfile potrzebuje RUN chmod 777 /tmp/?

Binarny silnik IronPDF musi być zarówno zapisany, jak i wykonany z /tmp/. Domyślne uprawnienia na /tmp/ w niektórych obrazach bazowych nie obejmują uprawnień wykonawczych dla wszystkich użytkowników. Polecenie chmod 777 zapewnia, że użytkownik środowiska uruchomieniowego może wyodrębnić i uruchomić plik binarny.

Kiedy powinno się używać grpc-okhttp zamiast grpc-netty-shaded?

grpc-netty-shaded jest zalecane dla produkcji, ponieważ zapewnia bardziej kompletną implementację HTTP/2. grpc-okhttp jest lżejszą alternatywą użyteczną, gdy priorytetem jest minimalizacja wielkości obrazu Docker. Obydwa transporty działają z IronPDF for Java na Google Cloud Functions.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.