چگونه تصویر Docker Aspose.CAD را در Azure Function اجرا کنیم

پیش‌نیازها

  • Docker باید بر روی سیستم شما نصب شده باشد. برای اطلاعات در مورد چگونگی نصب Docker بر روی ویندوز یا مک، به لینک‌های بخش “همچنین ببینید” مراجعه کنید.
  • IntelliJ IDEA.
  • Azure Toolkit برای IntelliJ.
  • Postman.

Azure Function

در این مثال، شما یک تابع ساده تبدیل ایجاد می‌کنید که یک فایل CAD را تبدیل کرده و آن را به عنوان یک تصویر ذخیره می‌کند. سپس می‌توان برنامه را در Docker ساخت و در Azure Function اجرا کرد.

ایجاد Azure Function

برای ایجاد برنامه Azure Function، مراحل زیر را دنبال کنید:

  1. پس از نصب Docker، اطمینان حاصل کنید که از کانتینرهای لینوکسی استفاده می‌کند (به طور پیش‌فرض). در صورت لزوم، گزینه Switch to Linux containers را از منوی Docker Desktop انتخاب کنید.

  2. پروژه Azure Function را در IntelliJ IDEA ایجاد کنید.
    Create azure function project
    Create azure function project-final

  3. Tools->Azure->Sing In و انتخاب احراز هویت OAuth 2.0.
    Azure sign In

  4. در مرورگر ثبت‌نام کنید.

  5. نام اشتراک را انتخاب کنید.

  6. پشتیبانی Docker را اضافه کنید.
    Azure sign In

  7. DockerFile را طبق بخش پیکربندی Dockerfile ویرایش کنید.

  8. بلوک‌هایی برای مخزن aspose.cad در pom.xml اضافه کنید.

    <repositories>
        <repository>
    		<id>AsposeJavaAPI</id>
            <name>API جاوا Aspose</name>
            <url>https://releases.aspose.com/java/repo/</url>
        </repository>
    </repositories>
    
    
    <dependencies>
     <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-cad</artifactId>
        <version>22.3</version>
        <scope>compile</scope>
      </dependency>
    </dependencies>

  9. وقتی تمام وابستگی‌های مورد نیاز اضافه شد، یک برنامه ساده بنویسید که یک بیضی ایجاد کرده و آن را به عنوان تصویر ذخیره کند:

    public class HttpTriggerFunction {
        /**
         * این تابع در endpoint "/api/HttpExample" گوش می‌دهد. دو راه برای فراخوانی آن وجود دارد با استفاده از دستور "curl" در bash:
         * 1. curl -d "HTTP Body" {your host}/api/HttpExample
         * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
         */
        @FunctionName("HttpExample")
        public HttpResponseMessage run(
                @HttpTrigger(
                    name = "req",
                    methods = {HttpMethod.GET, HttpMethod.POST},
                    authLevel = AuthorizationLevel.ANONYMOUS)
                    HttpRequestMessage<Optional<String>> request,
                final ExecutionContext context) throws FileNotFoundException {
            context.getLogger().info("Java HTTP trigger processed a request.");
    
            try{
                String body = request.getBody().get();
                InputStream targetStream = new ByteArrayInputStream(body.getBytes());
    
                CadImage image = (CadImage)Image.load(targetStream);
                {
                    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
                    rasterizationOptions.setPageWidth(1200);
                    rasterizationOptions.setPageHeight(1200);
    
                    ImageOptionsBase options = new PngOptions();
                    options.setVectorRasterizationOptions(rasterizationOptions);
    
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
    
                    image.save(out, options);
    
                    return request.createResponseBuilder(HttpStatus.OK)
                            .header("Content-type", "image/png")
                            .header("Content-Disposition", "attachment;filename=filename.png")
                            .body(out.toByteArray()).build();
                }
            }
            catch (Exception e)
    		{
                return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body(e.getMessage()).build();
            }
        }
    }

پیکربندی Dockerfile

مرحله بعدی ایجاد و پیکربندی Dockerfile در پوشه اصلی پروژه است.

  1. در Dockerfile، مشخص کنید:
    FROM mcr.microsoft.com/azure-functions/java:3.0-java8-build AS installer-env
    
    COPY . /src/java-function-app
    RUN cd /src/java-function-app && \
        mkdir -p /home/site/wwwroot && \
        mvn clean package && \
        cd ./target/azure-functions/ && \
        cd $(ls -d */|head -n 1) && \
        cp -a . /home/site/wwwroot
    
    FROM mcr.microsoft.com/azure-functions/java:3.0-java8-appservice
    
    ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
        AzureFunctionsJobHost__Logging__Console__IsEnabled=true
    
    COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]

بالای این یک Dockerfile ساده است که شامل دستورالعمل‌های زیر می‌باشد:

  • تصویر SDK که باید استفاده شود. Docker آن را هنگام اجرای ساخت دانلود می‌کند. نسخه SDK به عنوان تگ مشخص شده است.
  • دایرکتوری کاری که در خط بعد مشخص شده است.
  • دستور برای کپی همه چیز به کانتینر، انتشار برنامه و مشخص کردن نقطه ورودی.

Docker Hub

  1. وارد Docker Hub شوید
  2. مخزن عمومی ایجاد کنید

ساخت و اجرای برنامه در Docker

حالا برنامه می‌تواند در Docker ساخته و اجرا شود. ترمینال مورد علاقه خود را باز کنید، دایرکتوری را به پوشه‌ای که برنامه قرار دارد (پوشه‌ای که فایل راه‌حل و Dockerfile قرار دارد) تغییر دهید و دستور زیر را اجرا کنید:

  1. فرمان ساخت Dockerfile در کنسول

    //مثال
    docker build -t <user name>/<repository name> .
    
    docker build -t user/asposefunction .

  2. دفعه اول که این دستور را اجرا می‌کنید ممکن است زمان بیشتری ببرد زیرا Docker باید تصاویر لازم را دانلود کند. پس از اتمام دستور قبلی، دستور زیر را برای ارسال تصویر به Docker Hub اجرا کنید.

    //مثال
    docker push <user name>/<repository name>:tagname
    
    docker push user/aspose-cad-java:latest

  3. Dockerfile را در IDE اجرا کرده و پس از آن به Docker Hub ارسال کنید.
    Run docker in ide

  4. نام تصویر را وارد کنید، مانند نام موجود در مخزن Docker Hub.
    Run docker in ide-next

  5. منتظر اتمام کار باشید.

Azure

  1. وارد Azure شوید.
  2. خدمات Azure را انتخاب کنید.
  3. برنامه عملکرد را انتخاب کرده و یک تابع ایجاد کنید.
    Azure create function button
  4. تنظیمات اولیه را مانند تصویر زیر تکرار کنید.
    Azure create function settings
  5. روی ‘بررسی + ایجاد’ -> ایجاد کلیک کنید.
  6. منتظر اتمام استقرار باشید.
  7. روی دکمه ‘به منبع بروید’ کلیک کنید.
    Resource button
  8. عملکرد aspose-cad-docker-example را متوقف کنید.
    Stop conteiner
  9. به منوی مرکز استقرار بروید و تنظیمات مناسب را انجام دهید.
    Deployment center
  10. تنظیمات را ذخیره کنید.
  11. URL Webhook را از تنظیمات مرکز استقرار کپی کنید.
    Webhook url
  12. به Docker Hub بروید، مخزن خود را انتخاب کرده و وب‌هوک‌ها را انتخاب کنید.
  13. ‘Webhook url’ را از Azure در URL webhook Docker Hub قرار دهید و نام را تنظیم کنید.
    Webhook settings in docker
  14. روی دکمه ایجاد کلیک کنید.
  15. به نمای کلی عملکرد Azure برگردید و کانتینر را شروع کنید.
    Overview menu

مثال اجرای

  1. تنظیمات Postman.
    Overview menu
  2. یک فایل DXF، DWG، DGN، DWF، DWFX، IFC، STL، DWT، IGES، PLT، CF2، OBJ، HPGL، IGS، PCL، FBX، PDF، SVG را انتخاب کنید.
  3. روی دکمه ارسال کلیک کنید.
  4. نتیجه را ذخیره کنید Save responce

نمونه‌های بیشتر

برای نمونه‌های بیشتر از اینکه چگونه می‌توانید از Aspose.CAD در Docker استفاده کنید، به نمونه‌ها مراجعه کنید.

همچنین ببینید