Google Cloud'da Java'da IronPDF'yi Çalıştırma

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

Google Cloud Functions üzerinde IronPDF for Java'yı dağıtmak, varsayılan olmayan bir yapılandırma gerektirir çünkü IronPDF, HTML'yi PDF'ye dönüştürmek için birleştirilmiş bir Chromium ikili dosyasına dayanır. Bu kılavuz, doğru pom.xml bağımlılıklarından çalışma zamanı izinlerine ve kaynak ayarlarına kadar, Google Cloud Functions üzerinde özel bir Docker konteyneri içinde IronPDF'yi çalıştırmak için gereken her şeyi kapsar.

ÖnemliIronPDF for Java için Google Cloud desteği şu anda deneysel — her bölge veya çalışma zamanı sürümünde tüm yapılandırmalar doğrulanmamıştır. Yayınlamadan önce dağıtımları dikkatlice test edin.

Zaten Google Cloud Functions ve Docker ile rahatça çalışıyorsanız bu bir sorun değildir. Yapılandırma değişiklikleri basittir: varsayılan işlev görüntüsünü özel bir Dockerfile ile değiştirin, Linux motor bağımlılığını ekleyin, kaynak sınırlarını ayarlayın ve çalışma dizinini ayarlayın. Her adım aşağıda açıklanmıştır.

Hızlı Başlangıç: IronPDF for Java'yı Google Cloud'a Dağıtın

Minimum çalışma yapılandırması için özel bir Docker dosyası (çünkü varsayılan Cloud Function görüntüleri Chrome'un sistem bağımlılıklarını içermez), ironpdf-engine-linux-x64 dosyanızdaki pom.xml öğesi ve /tmp/ dosyasına işaret eden bir çalışma dizini gereklidir. Aşağıdaki kod, işlev giriş noktasında motor çalışma dizinini nasıl ayarlayacağınızı gösterir:

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

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

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

Çalışma dizinini ayarladıktan sonra, IronPDF motoru, kısa ömürlü dosya sistemi içinde çıkarabilir ve çalıştırabilir. /tmp/ dizini, çoğu Google Cloud Function çalışma zamanında kullanılabilen tek yazılabilir, yürütülebilir yoldur.

İçindekiler

Varsayılan Bulut İşlevi Görüntüleri Neden Çalışmaz?

Varsayılan Google Cloud Function çalışma zamanı görüntüleri, yalnızca yaygın dillerde yazılmış işlev kodunu çalıştırmak için gereken paketleri içerir. IronPDF'in Chromium tabanlı işleme motoru, varsayılan görüntülerde bulunmayan daha geniş bir Linux sistem kütüphaneleri setine (fontlar, grafik kütüphaneleri, sanal alan araçları) bağlıdır.

Google, her çalışma zamanı için kullanılabilir sistem paketlerinin tam bir listesini Google Cloud Functions sistem paketleri referansında yayınlar. Chromium'un bağımlılıkları standart 2. nesil çalışma zamanlarının hiçbirine dahil edilmemiştir. IronPDF motorunu varsayılan görüntüde yüklemeye çalışmak, başlangıçta yerel kütüphane yükleme hatasına neden olur.

Çözüm, fonksiyon ikili dosyası eklenmeden önce bu paketleri açıkça kuran özel bir Docker görüntüsü oluşturmaktır. Bu yaklaşım, Google Cloud Functions tarafından tam olarak desteklenir ve yerel ikili dosyalar gerektiren herhangi bir fonksiyon için önerilen aynı stratejidir. Dahil edilecek paketlerin tam listesi için IronPDF Linux dağıtım kılavuzuna başvurun.

Lütfen dikkate alınZip Deployment, Google Cloud üzerinde IronPDF için desteklenmez. IronPDF, yerel ikili dosyaları çalışma zamanında çıkartmalı ve çalıştırmalıdır, bu da Zip Deployment modelinin sağlamadığı yazılabilir bir dosya sistemi ve yürütme izinleri gerektirir.

Google Cloud için Özel Bir Dockerfile Nasıl Oluşturulur?

Özel bir Dockerfile, çalışma ortamı üzerinde tam kontrol sağlar. Resmi Google Cloud Functions Java tabanlı görüntüsünden başlayın, ardından Chromium'un gerektirdiği sistem kütüphanelerini yükleyin.

Aşağıdaki Dockerfile önerilen deseni gösterir. COPY ve CMD girişlerini, işlev projenizin özellikleriyle değiştirin:

//: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"]

chmod 777 /tmp/ satırı gereklidir, çünkü IronPDF'nin başlatma sırasında motor ikili dosyasını yazması ve çalıştırması gerekir. Çalışma dizininde yürütme izni olmaksızın, motor başlatılamaz.

İpuçlarıCloud Functions'a dağıtmadan önce docker build ve docker run ile Docker görüntüsünü yerel olarak test edin. Yerel test, eksik bağımlılıkları erkenden yakalar ve yavaş bulut oluşturma döngülerinden kaçınır.

Google Cloud Dağıtımı İçin pom.xml Nasıl Yapılandırılır?

Standart ironpdf Maven artefaktı, birden çok platform için motor ikili dosyalarını bir araya getirir. Google Cloud Functions (Linux x86-64 üzerinde çalışır) için, dağıtım görüntüsünü ince tutmak ve her zaman doğru ikili dosyanın kullanılmasını sağlamak için platforma özgü motor öğesini ekleyin:

//: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

Her zaman en son IronPDF for Java sürümüne sürüm numarasını güncelleyin. ironpdf-engine-linux-x64 artefaktı, çekirdek ironpdf artefaktının sürümüyle tam olarak eşleşmelidir.

ÖnemliHer iki sürüm numarasını senkronize tutun. Çekirdek öğe ile motor öğesi sürüm eşleşmezliği, çalışma zamanı başlatma hatasına neden olacaktır.

Maven Shade Eklentisi Nasıl Eklenir?

Google Cloud Functions'a uber-JAR (fat JAR) olarak dağıtım yaparken, maven-shade-plugin tüm geçişli bağımlılıklardan gelen hizmet yükleyici dosyalarının doğru şekilde birleştirilmesini sağlar. Olmadan, bazı gRPC hizmet kayıtları sessizce düşebilir ve motorun başlatılamaz hale gelmesine neden olabilir.

Aşağıdaki eklenti yapılandırmasını <build><plugins> bölümüne ekleyin:

//: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

ServicesResourceTransformer kritik öneme sahip bir parçadır. Her bağımlılık JAR'ındaki META-INF/services/ girişlerini tek bir birleştirilmiş dosyada birleştirir. gRPC, Java'nın ServiceLoader mekanizmasını kullanır, bu nedenle birleştirilmiş hizmet dosyaları, çalışma zamanında aktarım seçiminin (HTTP/2 ve düz metin) çalışması için gereklidir.

İsteğe Bağlı gRPC Bağımlılıkları Nasıl Eklenir?

Bazı dağıtım yapılandırmalarında — özellikle belirli Google Cloud Functions framework sürümleri kullanılırken gölgelendirilmiş bir JAR ile kullanılırken — gRPC taşıma bağımlılıkları gereklidir. Fonksiyon bir gRPC taşıma veya kanal hatası ile başlatılamazsa bunları ekleyin:

//: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

Çoğu durumda, grpc-netty-shaded eklemek üretim için yeterlidir. grpc-okhttp aktarımı, görüntü boyutunu en aza indirmek öncelikli olduğunda kullanışlı olan daha hafif bir alternatiftir. Yalnızca eksik izleme açıklamalarıyla ilgili sınıf yolu uyarılarıyla karşılaşırsanız perfmark-api ekleyin.

Lütfen dikkate alınCheck the gRPC release notes to confirm the latest compatible version for your IronPDF dependency set.

Google Cloud Functions için Kaynak Sınırları Nasıl Ayarlanır?

IronPDF, ilk çağrısı sırasında Cloud Function kapsayıcısı içinde bir Chromium alt sürecini başlatır. Chromium'un başlatılması ve ilk işleme belleği yoğundur ve motorun başlatılması için işlevin yeterince uzun süre canlı kalması gerekir. Cloud Functions için varsayılan kaynak limitleri güvenilir çalışma için çok düşüktür.

İşlevi dağıtırken Google Cloud Console'da veya gcloud CLI aracılığıyla aşağıdaki sınırları yapılandırın:

IronPDF Java için önerilen Google Cloud Function kaynak ayarları
Ayar Önerilen Değer Sebep
Zaman Aşımı 330 saniye Bir soğuk başlangıçta Chromium'un başlatılması 60–90 saniye sürebilir. Motor hazır olmadan önce işlev zaman aşımına uğramamalıdır.
Bellek 2.048 MB veya daha yüksek Chromium, karmaşık HTML sayfalarını işlemek için önemli miktarda RAM gerektirir. Yetersiz bellek, işlemin ortasında öldürülmesine neden olur.
Ephemeral Depolama 1.024 MB veya daha fazla Motor ikili dosyası ve geçici PDF dosyaları /tmp/ üzerinde yazılır. Düşük depolama, çıkartma veya yazma hatalarına neden olur.

Bu değerler başlangıç noktalarıdır. Yüksek hacimli veya karmaşık PDF oluşturma, daha yüksek bellek tahsisleri gerektirebilir. Google Cloud Console'daki Cloud Function bellek kullanım metriklerini izleyin ve bellek hataları gözlemlerseniz sınırları artırın.

UyarıZaman aşımını 180 saniyenin altına düşürmeyin. Cloud Functions üzerinde IronPDF için soğuk başlangıç başlatılması, standart Java fonksiyonlarından tutarlı bir şekilde daha uzun zaman alır.

Çalışma Dizini ve Dosya İzinleri Nasıl Yapılandırılır?

IronPDF motoru, başlangıçta ikili dosyasını bir çalışma dizinine çıkarır. Google Cloud Functions'da, yazılabilir ve çalıştırılabilir tek yol /tmp/'dir. Herhangi bir IronPDF API çağrısından önce çalışma dizinini açıkça ayarlayın ve Dockerfile'ın o yol üzerinde gerekli izinleri verdiğinden emin olun.

İşlev giriş noktanızın üstüne aşağıdaki yapılandırma çağrısını ekleyin, herhangi bir PDF işleminden önce:

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ayars;
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.
        Ayars.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.Ayars;
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.
        Ayars.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
JAVA

Ardından, Dockerfile'ınıza karşılık gelen izin komutunu ekleyin:

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

static {} başlatıcı bloğunu kullanmak, işlevinizdeki herhangi bir sınıf IronPDF motorunu yüklemeye çalışmadan önce çalışma dizininin yapılandırılmasını garanti eder. Bunu bir örnek yönteminde veya istek işleyicisinde ayarlarsanız, yol yapılandırılmadan önce başka bir iş parçacığının motoru başlatma riski vardır.

Bir Sonraki Adımlar Nelerdir?

Bu kılavuz, IronPDF for Java'yı bir Google Cloud Function içinde özel bir Docker konteyneri kullanarak çalıştırma konfigürasyonunun tamamını kapsar. Önemli noktalar şunlardır: Chrome sistem bağımlılıklarını yükleyen özel bir Dockerfile kullanın, ironpdf-engine-linux-x64 Maven artefaktını dahil etmek, çalışma dizinini /tmp/ olarak yapılandırmak, zaman aşımını en az 330 saniyeye ve belleği en az 2.048 MB'ye ayarlamak ve hizmet yükleyici dosyalarını birleştirmek için maven-shade-plugin eklemek.

IronPDF for Java'nın neler yapabileceğini daha fazla keşfetmek için IronPDF for Java belgelerine bakın veya bu kılavuzlardan birini deneyin:

Ücretsiz deneme lisansı alın ve IronPDF for Java'yı Google Cloud ortamınızda test edin. Üretim dağıtımları için bir lisans anahtarı gereklidir. Yayınlamaya hazır olduğunuzda bir lisans satın alın.

Sıkça Sorulan Sorular

Neden varsayılan Google Cloud Function görüntüsü üzerinde IronPDF for Java başlatılamıyor?

Varsayılan Cloud Function çalışma zamanı görüntüleri, Chromium'un gerektirdiği libnss3, libatk1.0-0 ve ilgili grafik paketleri gibi Linux sistem kütüphanelerini içermez. IronPDF'in render motoru Chromium'u dahili olarak kullanır, bu yüzden bu bağımlılıkları açıkça yükleyen özel bir Dockerfile gereklidir.

Neden Google Cloud için IronPDF'de Zip Dağıtımı desteklenmiyor?

IronPDF'in çalışma zamanında yerel bir Chromium ikili dosyasını çıkarması ve çalıştırması gerekir. Zip Dağıtım modeli, yazılabilir, çalıştırılabilir bir dosya sistemi sağlamaz, bu yüzden motor ikili dosyasını çıkaramaz veya başlatamaz. Docker tabanlı bir dağıtım gereklidir.

Google Cloud Functions'da IronPDF için hangi Maven bağımlılığı gereklidir?

com.ironsoftware grubundan ironpdf-engine-linux-x64 öğesini pom.xml dosyanıza ekleyin. Sürüm numarası, çekirdek ironpdf öğesiyle tam olarak eşleşmelidir. Bu öğe, IronPDF'in rendering için kullandığı Linux x86-64 Chromium ikili dosyasını paketler.

Neden IronPDF for Java için maven-shade-plugin'e ihtiyaç var?

Bir uber-JAR olarak paketlenirken, maven-shade-plugin, ServicesResourceTransformer ile tüm bağımlılık JAR'larındaki META-INF/services/ dosyalarını birleştirir. Onsuz, gRPC servis kayıtları sessizce düşebilir ve bu da IronPDF motorunun başlatılamamasına neden olabilir.

IronPDF çalıştırmak için hangi süre aşımı ve bellek ayarları gereklidir?

Fonksiyon zaman aşımını 330 saniyeye, belleği en az 2048 MB'ye ve geçici depolamayı en az 1024 MB'ye ayarlayın. Soğuk açılışta Chromium başlatılması 60 ila 90 saniye sürebilir ve motor, karmaşık HTML sayfalarını render etme için önemli miktarda belleğe ihtiyaç duyar.

Neden Google Cloud'da Settings.setIronPdfEngineWorkingDirectory, /tmp/ öğesine işaret etmelidir?

/tmp/ dizini, birçok Google Cloud Function çalışma zamanında yazılabilir ve çalıştırılabilir tek yoldur. IronPDF, motor ikili dosyasını çıkarmak ve geçici dosyaları bu konumda yazmak zorundadır. Bu ayar olmadan motor, uygun bir çıkarma hedefi bulamaz ve başlatılamaz.

Neden Dockerfile'da RUN chmod 777 /tmp/ gerekli?

IronPDF'in motor ikili dosyası hem yazılmalı hem de /tmp/'den çalıştırılmalıdır. Bazı temel görüntülerde varsayılan /tmp/ izinleri tüm kullanıcılar için çalıştırma izni içermez. chmod 777 komutu, fonksiyon çalışma zamanı kullanıcısının ikili dosyayı çıkartabilmesini ve çalıştırabilmesini sağlar.

grpc-okhttp ne zaman grpc-netty-shaded yerine kullanılmalı?

grpc-netty-shaded, daha eksiksiz bir HTTP/2 uygulaması sunduğu için üretim için önerilir. grpc-okhttp, Docker görüntü boyutunu küçültmek öncelik olduğunda daha hafif bir alternatiftir. Her iki taşıma da Google Cloud Functions üzerinde Java için IronPDF ile çalışır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz?
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.