بعد از انتشار مقاله قبلی من در مورد انتخاب jfrog container registry درخواستهای زیادی داشتم که پیاده سازی رو هم توضیح بدم و این شد که این مقاله رو نوشتم. اینبار پیاده سازی سرویس آرتیفکتوری JCR رو به صورت عملی و کامل براتون تو این مقاله توضیح دادم.
فکر میکنم که نیازی نیست بیشتر از توضیحات ارائه شده توی مقاله ی قبلی از خوبی های سرویس jfrog براتون بگم. این سرویس بسیار قوی، دارای باگهای حداقلی و بهروزرسانیهای منظم هست. تجربه عملی من در ازکی هم نشون داده که این سرویس میتونه نیازمندیهای تکنیکال پیچیدهی یک سازمان بزرگ رو پاسخگو باشه. ما چند سالی هست که این سرویس رو در ازکی پیادهسازی کردیم و ازش استفاده میکنیم.
بریم سراغ پیاده سازی تا شما هم بتونید از این سرویس استفاده کنید.
برای پیاده سازی سرویس jcr راههای متفاوتی مثل استفاده از داکر، استفاده از هلم چارت و یا استفاده از باینریهای پکیج شده هست. من برای راحتی و همچنین سادهسازی پیادهسازی دیتابیس، راهکار استفاده از docker compose رو توضیح میدم.
برای شروع باید برید داخل صفحه دانلود jcr که احتمالا به راحتی نمیتونید اون رو داخل سایتش پیدا کنید. زمانی که روی لینک docker compose کلیک کنید براتون یک فایل با پسوند tar.gz دانلود میشه. فایل دانلود شده رو هر جایی که راحت هستید از حالت فشرده خارج کنید. دستور زیر برای خارج کردن آخرین نسخه از حالت فشرده در زمان نوشتن این مقاله هست:
tar -xvf jfrog-artifactory-jcr-7.90.7-compose.tar.gz
وارد پوشهای که ایجاد شده بشید، حالا احتمالا اولین چیزی که خواهید دید یک اسکریپت برای راهاندازی به اسم config.sh هست.
دومین چیزی که باید بهش توجه کنید، یک پوشه به اسم templates هست که داخلش یک سری فایل compose هست که با استفاده از ساختاری که دوست دارید سرویستون رو راه اندازی کنید، میتونید از هر کدوم استفاده کنید.
برای شروع پیادهسازی ابتدا فایل .env رو باز کنید و مقدار مسیر ذخیرهسازی دیتا هاتون رو ست کنید. برای مثال من این مقدار رو وارد کردم. دقت کنید این مسیر برای ذخیره تمام دیتاهای شما استفاده میشه.
ROOT_DATA_DIR=/home/erfan/Downloads/jfrog/artifactory-jcr-7.90.7/artifactory
حالا میتونید از اسکریپتی که در موردش صحبت کردیم، استفاده کنید و یک سری مقادیر اولیه ست کنید. یادتون باشه که دستور زیر رو با دسترسی root اجرا کنید.
bash config.sh [host 127.0.1.1] enter [additional node to an existing product cluster] n [install PostgreSQL] y [database password] mypassword [confirm database password] mypassword
بعد از این مرحله، برای شما دستورات compose پیشنهادی برای راه اندازی چاپ میشه، اما باید یه سری تغییرات داخلش بدید که راحتتر بتونید پیش برید. یکی از کارهایی که باید کنید این هست که دو فایل دیتابیس و آرتیفکتوری رو ادغام کنید:
tail -n +3 docker-compose-postgres.yaml >> docker-compose.yaml
توی همین فایل ایجاد شد، مقدار پسورد postgres هم میتونید ست کنید تا بعدا یادتون نره. البته الزامی به انجام این کار نیست چون دیتابیس از قبل استارت زده شده.
حالا کانتینر قبلی دیتابیس رو استاپ کنید و با استفاده از docker compose مجددا استارتش کنید:
docker stop postgresql && docker rm postgresql && docker compose -p rt up -d postgres
حالا برای ایجاد ارتباط درست سرویس آرتیفکتوری با دیتابیس، نیاز هست توی یکی از فایل های کانفیگ، تغییر لازم رو انجام بدید. با این تغییر مسیر دسترسی به دیتابیس از توی نتورک داکر ایجاد میشه:
vim artifactory/var/etc/system.yaml === before: url: jdbc:postgresql://127.0.1.1:5432/artifactory === after: url: jdbc:postgresql://postgres:5432/artifactory
بعد از این قسمت باید سرویس آرتیفکتوری رو هم استارت کنید:
docker compose -p rt up -d
خب الان سرویس شما آماده هست و میتونید توی آدرس زیر وارد داشبورد آرتیفکتوری بشید و تنظیمات اولیهی لازم مثل دامنه و ریپو های مورد نیاز رو انجام بدید.
url: http://localhost:8082/ user: admin password: password
پیشنهاد میکنم که وب سرور خودتون رو جلوی سرویس بزارید (برای ssl حتما پیشنهاد میکنم)، نمونه فایل کانفیگ nginx رو هم براتون به اشتراک میذارم:
upstream jcr { zone upstreams 64K; server 127.0.0.1:8082; keepalive 2; } server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/docker.erfantkerfan.ir/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/docker.erfantkerfan.ir/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; http2 on; server_name docker.erfantkerfan.ir; client_max_body_size 0; chunked_transfer_encoding on; location / { proxy_pass http://jcr/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_request_buffering off; } }
من عرفان قلی زاده staff engineer ازکی، سعی کردم در دو قسمت سرویس آرتیفکتوری (جیفراگ) رو براتون توضیح بدم. در قسمت اول این مقاله نسبت به بررسی سرویسهای مشابه جیفراگ و معرفی خود جیفراگ پرداختم و در قسمت دوم، که همین مقاله حال حاضر هست، پیادهسازی آرتیفکتوری جیفراگ رو توضیح دادم. بخش قابل توجهی از این تجربهها در زمان راهاندازی این سرویس در زیرساخت ازکی به دست اومده و امروز داره در ازکی به خوبی کار میکنه.
من توی این مقاله، مواردی رو اشاره کردم که در داکیومنت خود این سرویس به خوبی وجود نداره و فقط شما زمانی که به صورت واقعی این سرویس رو پیادهسازی کنید باهاش مواجه میشید و من سعی کردم فوت کوزهگری این پیادهسازی رو در اختیارتون بزارم. مثل همیشه شنوای نظرات ارزشمند شما هستم و خوشحال میشم موارد آموزشی که دوست دارید در موردش اطلاعات درستی به درست بیارید بهم اطلاع بدید تا در مورد اونها بلاگهای آموزشی جدیدی آماده بکنم.