شبیه ساز ابری خود را بسازید

این مقاله نحوه اجرای AAOS Emulator را به عنوان یک وب سرویس و اجرای آن در یک مرورگر وب برای دسترسی از راه دور برای کاربران شرح می دهد. انجام این کار از طریق موتور محاسبات ابری Google یک مرجع سرتاسر و حداقل قابل دوام را فراهم می کند. با این حال، شما می توانید از این سرویس در هر پلتفرم ابری عمومی یا خصوصی مورد نظر خود استفاده کنید.

هدف

این پیکربندی و راه‌اندازی متمرکز، شبیه‌ساز AAOS را برای کل شرکت، تامین‌کننده و توسعه‌دهندگان کار از خانه در دسترس قرار می‌دهد. انجام این کار مدیریت و ارتقای شبیه‌ساز AAOS را به نسخه‌های جدید کارآمدتر می‌کند و زمان لازم برای راه‌اندازی و مدیریت ماشین‌های محلی را برای تک تک کاربران حذف می‌کند. این راه حل استفاده از منابع سخت افزاری را بهینه می کند و محیط توسعه اپلیکیشن با هزینه کمتر را امکان پذیر می کند. به عنوان مثال، برای اهداف:

  • تحقیق کاربر، بررسی تجربه کاربر، پشتیبانی مشتری و آموزش.
  • نمایش‌های نمایشی برای مشتریان بالقوه و در کانال‌های فروش.
  • برنامه‌ها (از جمله ساخت‌های روزانه OEM HMI) را در مقیاس آزمایش، اعتبارسنجی و حتی اشکال‌زدایی کنید. شبیه ساز را جایگزینی برای میزهای آزمایشی در نظر بگیرید که برای توسعه برنامه ها استفاده می کنند.
  • نمایندگان مرکز تماس مشتریان OEM دارای رابط کاربری HU یکنواخت و با دسترسی آسان هستند.

مزایای استفاده از شبیه ساز AAOS بسیار زیاد است:

  • از یک اسکریپت راه اندازی برای ایجاد یک شبیه ساز AAOS سفارشی و مبتنی بر ابر (شبیه ساز ابر) استفاده کنید.
  • یک تصویر AAOS Cloud Emulator سفارشی برای نمونه های VM بسازید:
    • آماده راه اندازی یک شبیه ساز مبتنی بر ابر.
    • تصاویر عمومی AAOS AVD در دسترس خالق سرویس برای شروع یک AAOS AVD با یک فرمان. به عنوان مثال، تصاویر عمومی OEM AVD به عنوان نمونه هایی برای شرکا برای تطبیق و اعمال.

معماری

معماری مثال شبیه ساز ابری در زیر نشان داده شده است. اولین سرویس حداقل قابل دوام شما با افزودن تصاویر OEM AVD خود کار خواهد کرد.

شکل 1. معماری Cloud AVD

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

مورد هدف
شبیه ساز اندروید نمونه شبیه ساز میزبان تصاویر AVD است
پل ماهی قرمز-webrtc برنامه لینوکس برای برقراری ارتباط بین برنامه react و شبیه ساز AAOS
android-emulator-webrtc برنامه React برای نمایش رابط کاربری Emulator در یک مرورگر وب. React همچنین رویدادهای ورودی کاربر را ضبط می کند و آنها را به سرور ارسال می کند.
اسکریپت های کانتینر شبیه ساز اندروید اسکریپت های پایتون برای مدیریت و ایجاد تصاویر داکر و کانتینرها برای ماژول های نرم افزار فوق.
سرویس JWT (سرویس JSON Web Token) توکن هایی را برای مدیریت مجوزهای دسترسی شبیه ساز تولید می کند.
سرور را روشن کنید یک ارتباط مستقیم WebRTC بین مشتری و سرور برقرار می کند. تبدیل سرور تنها زمانی مورد نیاز است که سرویس شبیه ساز در پشت فایروال ها یا پراکسی ها اجرا شود.
نماینده

یک سرویس پروکسی برای:

  • HTTPS را با استفاده از گواهی امضا شده خود ارائه دهید.
  • ترافیک پورت 80 (http) را به پورت 443 (https) هدایت کنید.
  • به عنوان یک پروکسی gRPC برای شبیه ساز عمل کنید.
  • برای اجازه دسترسی به نقطه پایانی شبیه ساز gRPC، توکن ها را تأیید کنید.
  • سایر درخواست‌ها را به مؤلفه Nginx هدایت کنید که میزبان یک برنامه React است.

شبیه ساز را روی ماشین مجازی ابری راه اندازی کنید

برای ایجاد یک پروژه GCP:

  1. به Google Cloud Console بروید و یک پروژه را انتخاب کنید .
  2. برای تأیید اینکه صورت‌حساب برای پروژه Google Cloud شما فعال است، به فعال کردن، غیرفعال کردن یا تغییر صورت‌حساب برای پروژه مراجعه کنید.
  3. API را فعال کنید .

یک VM لینوکس در GCE ایجاد کنید

1. مجازی سازی تودرتو را فعال کنید

به طور پیش فرض، مجازی سازی تودرتو در سطح پروژه، پوشه یا سازمان مجاز است. مگر اینکه شخصی در سازمان شما مجازی سازی تودرتو را غیرفعال کرده باشد، لازم نیست کاری برای فعال کردن آن انجام دهید.

  1. از ابزار خط فرمان gcloud برای تأیید مجاز بودن مجازی‌سازی تودرتو استفاده کنید:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. یک دیسک قابل بوت Ubuntu-1804-lts ایجاد کنید

  1. به Cloud Console بروید.
  2. پروژه GCP را انتخاب کنید.
  3. به منوی ناوبری > موتور محاسباتی > دیسک ها > ایجاد دیسک بروید.
    1. یک نام دیسک ارائه دهید. به عنوان مثال، ubuntu1804lts
    2. یک منطقه و منطقه را انتخاب کنید. برای پشتیبانی از مجازی سازی تودرتو، مطمئن شوید که منطقه و منطقه ای که انتخاب می کنید از پردازنده های Haswell (یا جدیدتر) پشتیبانی می کند. برای کسب اطلاعات بیشتر، به مناطق و مناطق مراجعه کنید.
    3. تصویر منبع ubuntu-1804-bionic-v20210211
    4. اندازه دیسک مناسب را تنظیم کنید (100 گیگابایت یا بزرگتر توصیه می شود).

شکل 1. دیسک قابل بوت اوبونتو ایجاد کنید

3. یک تصویر سفارشی با کلید مجوز ویژه برای فعال کردن VMX ایجاد کنید

  1. به کنسول Cloud بروید.
  2. یک Cloud Shell را باز کنید و از دستور زیر استفاده کنید:
    gcloud compute images create [IMAGE NAME] --source-disk-zone [DISK ZONE] --source-disk [DISK NAME] \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    
    • نام تصویر را وارد کنید. به عنوان مثال، aaos-emulator-image
    • Disk Zone را روی منطقه ای که دیسک را در آن ایجاد کرده اید، تنظیم کنید.
    • نام دیسک را روی نامی که برای ایجاد دیسک استفاده کردید تنظیم کنید.

    مثلا:

    gcloud compute images create aaos-emulator-image --source-disk-zone us-central1-a \
        --source-disk ubuntu1804lts \
        --licenses \
        "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

برای جزئیات، به Instance مجازی سازی تودرتو VM مراجعه کنید.

4. یک نمونه VM با استفاده از تصویر سفارشی ایجاد کنید

  1. به Cloud Console بروید.
  2. پروژه GCP را انتخاب کنید.
  3. به منوی پیمایش > موتور محاسباتی > نمونه VM بروید.

    شکل 1. یک نمونه VM ایجاد کنید

  4. یک نام نمونه وارد کنید. به عنوان مثال، aaosemulator
  5. خانواده دستگاه مورد نظر را انتخاب کرده و تایپ کنید. مطمئن شوید که دستگاه دارای چهار vCPU و 16 گیگابایت حافظه (یا بیشتر) است.
  6. پلتفرم CPU را به عنوان Intel Cascade Lake (یا جدیدتر) انتخاب کنید.
  7. دیسک بوت را به تصویر ایجاد شده در مرحله قبل تغییر دهید.
  8. فایروال را فعال کنید:
    • ترافیک HTTP مجاز است
    • ترافیک HTTPS مجاز است

5. فایروال را برای باز کردن پورت 80 و 443 پیکربندی کنید

  1. به Cloud Console بروید.
  2. پروژه GCP را انتخاب کنید.
  3. به منوی پیمایش > موتور محاسباتی > نمونه VM > تنظیم قانون فایروال بروید.

نرم افزارهای مورد نیاز را روی ماشین مجازی نصب کنید

  1. Python 3 و Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
    نصب کنید
  2. Android SDK و ADB موجود در مسیر را نصب کنید.
    sudo apt install android-sdk
    

    برای نصب Docker و Docker-compose، به Docker and Docker-compose مراجعه کنید. مطمئن شوید که می‌توانید این موارد را به‌عنوان کاربر غیر ریشه اجرا کنید.

  3. برای تأیید اینکه CPU از مجازی‌سازی سخت‌افزار پشتیبانی می‌کند (فرمان باید به عدد غیر صفر منجر شود):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. ماشین مجازی Kernel (KVM) را نصب کنید. برای نصب KVM،
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
    را اجرا کنید
  5. برای تأیید عملکرد KVM:
    sudo apt install cpu-checker
    kvm-ok
    
    خروجی باید این باشد:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. برای نصب Node.js و Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

کانتینرهای میزبانی شده را راه اندازی کنید

  1. برای تأیید نصب، کانتینرهای شبیه ساز Android میزبانی شده را از مخزن عمومی اجرا کنید. شما می توانید جزئیات مربوط به ظروف را در اینجا بیابید. اکنون می توانید این کانتینرها را بدون ساختن آنها اجرا کنید. به عنوان مثال:
    docker run \
      -e ADBKEY="$(cat ~/.android/adbkey)" \
      --device /dev/kvm \
      --publish 8554:8554/tcp \
      --publish 5555:5555/tcp  \
      us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
    

    این کانتینر را پایین می‌کشد (اگر به صورت محلی در دسترس نباشد) و راه‌اندازی می‌کند.

  2. هنگامی که کانتینر راه اندازی می شود، با پیکربندی ADB به همان روشی که یک AVD در یک میزبان محلی متصل می شود، به دستگاه متصل شوید. به عنوان مثال:
    adb connect localhost:5555
    adb devices
    
    خروجی باید این باشد:
    List of devices attached
    localhost:5555 device
    

سرویس AAOS Emulator را راه اندازی کنید

برای راه اندازی سرویس شبیه ساز:

  1. اسکریپت کانتینر Android Emulator Docker را نصب کنید:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. این یک محیط مجازی را فعال می کند و emu-docker قابل اجرا را در دسترس قرار می دهد. برای دریافت اطلاعات دقیق در مورد استفاده از آن، آن را راه اندازی کنید:
    emu-docker -h
    
  3. برای ایجاد کانتینرهای Docker، موافقت نامه های مجوز را بپذیرید.
  4. کانتینر AAOS Emulator Docker را بسازید.
  5. یک ساخت شبیه ساز را دیرتر از نسخه 7154743 دانلود کنید. به عنوان مثال:
    sdk-repo-linux-emulator-7154743.zip
    
  6. تصویر سیستم شبیه ساز AAOS را دانلود کنید. به عنوان مثال، sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. کانتینرهای وب را ایجاد کنید و نام کاربری و رمز عبور را برای دسترسی از راه دور تنظیم کنید.
    ./create_web_container.sh -p user1,passwd1
    
  8. سرویس وب شبیه ساز AAOS را راه اندازی کنید:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

شما یک سرویس وب شبیه ساز AAOS را با موفقیت راه اندازی کردید! برای دسترسی به آن در مرورگر وب از موارد زیر استفاده کنید:

https://<VM_External__IP>

عیب یابی

اگر خطای اتصال به IP خارجی VM رخ داد، مطمئن شوید که VM طوری تنظیم شده است که ترافیک HTTP و HTTPS را مجاز کند. برای تأیید این موضوع، به اجرای یک وب سرور اصلی Apache مراجعه کنید.

سرور نوبت را راه اندازی کنید

شما همیشه می توانید از سرور نوبتی خود استفاده کنید. در زیر نمونه ای از یک نمونه Google Cloud VM ارائه شده است.

توجه: برای اینکه سرور نوبتی روی یک نمونه Google Cloud VM کار کند، حتماً قانون فایروال VM را پیکربندی کنید تا ترافیک در پورت‌های TCP و UDP 3478 و 3479 مجاز باشد.

  1. سرور coturn را نصب کنید:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. /etc/turnserver.conf با افزودن خطوط زیر تغییر دهید:
    lt-cred-mech
    #set your realm name
    realm=test
    #coturn username and password
    user=test:test123
    # external-ip=<VM-Public-IP>/<VM-Private-IP>
    external-ip=34.193.52.134/10.128.0.2
    
    systemctl start coturn
    
  3. فایل Docker Compose YAML را تغییر دهید تا پیکربندی TURN را در بر گیرد:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. دو خط محیط زیر را در قسمت شبیه ساز اضافه کنید:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. سرویس AAOS Emulator را با پیکربندی نوبت راه اندازی مجدد کنید. مطمئن شوید که IP سرور تبدیل، نام کاربری و اعتبار زیر را با خود جایگزین کنید:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up