<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهرداد</title>
        <link>https://virgool.io/feed/@mehrdad_mohtady</link>
        <description>DevOps &amp; SRE</description>
        <language>fa</language>
        <pubDate>2026-06-16 17:44:46</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>مهرداد</title>
            <link>https://virgool.io/@mehrdad_mohtady</link>
        </image>

                    <item>
                <title>کرک GitLab نسخه 16.7.7 به بالا</title>
                <link>https://virgool.io/@mehrdad_mohtady/%DA%A9%D8%B1%DA%A9-gitlab-%D9%86%D8%B3%D8%AE%D9%87-1681-%D8%A8%D9%87-%D8%A8%D8%A7%D9%84%D8%A7-rjazdcg5ci2b</link>
                <description>ممکن است نیازمند ویژگی هایی از Gitlab باشیم که با نسخه free در دسترس نباشد، پس باید به نسخه Enterprise مهاجرت کنیم. برای این کار ابتدا نیازمند آن هستیم که Ruby را نصب کنیم یا می‌تونیم کمی آسانتر پیش رفته و از Docker image روبی استفاده کنیم:docker run -it --rm ruby /bin/bashسپس باید پکیج gitlab-license را نصب کرده:gem install gitlab-licenseیک فایل با نام License.rb ایجاد و محتوای Script زیر را داخل آن قرار می‌دهیم:License.rbبرای استفاده از Script بالا کافیه که دستور زیر را اجرا کنیم:ruby license.rbاگر همه چیز خوب پیش برود، 3 عدد فایل ایجاد می شود با نام‌های:GitLabBV.gitlab-license, License_key, License_key.pubبه مسیر زیر در سرور خود رفته:/opt/gitlab/embedded/service/gitlab-rails/سپس از محتوای فایل .license_encryption_key.pub محض احتیاط در مسیری متفاوت پشتیبانی گرفته و با کمک یک texteditor تمام محتوای داخل آن را پاک و با محتوای فایل License_key.pub که با Script، قبلا ایجاد شد جایگزین کنید.از نسخه 14.9.5 و نسخه های قبل تر این سرویس همین مراحل برای کرک کردن Gitlab کافی بود، ولی از نسخه 15.11.0 به بعد نیازمند یک کار اضافه تر هستیم. فایل license.rb رامشابه مسیر زیر ویرایش می‌کنیم:vi /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb خط زیر را پیدا کرده و سپس حذف:limited_attr(:plan).presence || STARTER_PLANو مقدار زیر را جایگزین میکنیم:limited_attr(:plan).presence || ULTIMATE_PLANدر انتهای کار با مرورگر خود به آدرس زیر رفته:https://git.Youraddress.ir/admin/application_settings/general و محتویات فایل GitLabBV.gitlab-license را درج می‌کنیم.و تمام 🎉 سرویس Gitlab با تمام ویژگی ها برای مدت زمانی طولانی در دسترس شماست.</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Mon, 11 Mar 2024 11:45:40 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از S3 با کمک Boto3 - بخش دوم</title>
                <link>https://virgool.io/MobinTadbirSharif/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-s3-%D8%A8%D8%A7-%DA%A9%D9%85%DA%A9-boto3-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-yawmwuqlnxnz</link>
                <description>در بخش‌اول توضیجات لازم در خصوص S3 چی هست ؟ Boto3 چه کاربردی داره ؟ ...توضیح دادیم، حالا بریم که یکم بیشتر باهاش سر و کله بزنیم.Objects: listing, downloading, uploading, copy &amp; deletingبرای لیست کردن و دیدن Object های داخل یک Bucket از فانکشن s3.list_objects استفاده می‌کنیم، آرگومان MaxKeys حداکثر تعداد Objectهایی که می‌خوایم لیست بشه رو تعیین می کند. یک آرگومان کاربردیه دیگه که این function داره Prefix است، میتونیم فقط Object هایی رو list کنیم که نامشان با یک پیشوند خاص شروع شده.# List objects present in a bucket

response = s3.list_objects(
                    Bucket=?,
                    MaxKeys=10
                    Prefix=&amp;quotonly_files_starting_with_this_string&amp;quot 
                    )می تونیم از ()upload_file برای آپلود فایلی به نام ?، در Bucket مدنظرمون با نام ? ذخیره کنیم.به طور مشابه، ()download_file فایلی به نام ? را در Bucket مدنظرمون به صورت محلی با نام ? ذخیره می کند.# Uploading and downloading files

s3.upload_file&#40;Filename=?, Bucket=?, Key=?&#41;
s3.download_file&#40;Filename=?, Bucket=?, Key=?&#41;کپی یک ?Object از یک Bucket به Bucketای دیگر با نامی? متفاوت :# Copy Object&#039;s

copy_source = {
    &#039;Bucket&#039;: &#039;mybucket?&#039;,
    &#039;Key&#039;: &#039;mykey?&#039;
 }
s3.meta.client.copy(copy_source?, &#039;otherbucket?&#039;, &#039;otherkey?&#039;)حذف Object هم مشابه حذف Bucket است، فقط باید نام Bucket و نام Object مدنظرُ به delete_object پاس بدیم.# Delete object
s3.delete_object(Bucket=?, Key=?)چگونه سایز کلی Bucket را محاسبه کنیم برای محاسبه Total size یک Bucket دو راه داریم (البته تا جایی که من کند و کاو کردم ?)راه اول استفاده از boto3 ای هست که ما انقدر راجبش حرف زدیم، که من برای Cephای که داشتم استفاده کردم :ceph_my_bucket = s3.Bucket(&amp;quotvoho&amp;quot)
for my_bucket_object in ceph_my_bucket.objects.all():
      ceph_total_size += my_bucket_object.size
ceph_totalsize_gb = ceph_total_size/1000/1024/1024
print(ceph_totalsize_gb)راه دوم استفاده از کتابخانه rgwadmin است :from rgwadmin import RGWAdmin

rgw = RGWAdmin(
           access_key=&#039;MY_ACCESS_KEY&#039;,
           secret_key=&#039;MY_SECRET_KEY&#039;,
           server=&#039;example.com&#039;
            )

bucket = rgw.get_bucket(bucket=&#039;voho&#039;)
size = bucket.get(&#039;usage&#039;, {}).get(&#039;rgw.main&#039;, {}).get(&#039;size_kb&#039;, 0)
print (size)خروجی rgw یک JSON است که از تعداد Object ها تا سایز به KB و bucket_quota و ... در اختیار ما می‌زاره. </description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Thu, 28 Jul 2022 12:53:13 +0430</pubDate>
            </item>
                    <item>
                <title>استفاده از S3 با کمک Boto3 - بخش اول</title>
                <link>https://virgool.io/MobinTadbirSharif/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-s3-%D8%A8%D8%A7-%DA%A9%D9%85%DA%A9-boto3-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-fuunoau9qgm3</link>
                <description>شاید با شنیدن S3 به یاد سرویس ObjectStorage آمازون که یک سرویس ذخیره سازی ابری است بیفتید که تا بخشیش درسته ولی تنها این نیست، S3 یک HTTP REST API هم هست که درخواست های های HTTP پاسخگو هست مثل: Read, Write, Delete, Upgrade و حتی Copy.این نکته هم داشته باشیم که S3 و سرویس‌های دیگری همچون DynamoDB, RDS آمازون به دلیل Stateless بودن، (چون REST API هستند) هیچ state را Server، در مورد client sessions در سمت خود ذخیره نمی‌کند.یعنی چی ؟زمانی که بین Client و Server یک ارتباط از جنسِ HTTP برقرار می‌شود، در سمتِ Server هرگز وضعیت یا Status یا بهتر بگم اطلاعاتی از Client ذخیره نمی‌شود بلکه روش کار به این صورت است که Client یک Request حاوی کلیهٔ جزئیاتی که Server برای اجرای تَسک مذکور نیاز داره برای Server ارسال می‌کنه و Server هم بدون اینکه دغدغهٔ این را داشته باشد که Client چیست و کجا است، Response مرتبط را در اختیارش می‌گذارد و در نهایت هم این ارتباط به پایان می‌رسد.هنگام کار با نوت بوک AWS Sagemaker یا یک نوت بوک معمولی jupyter در پایتون ممکن است لازم باشد داده یا فایل را با S3 آپلود کنید. با استفاده از Boto3 می توانید یک فایل یا folder با S3 بنویسید، Boto3 نام Python SDK مختص AWS است.این نکته هم بگم که AWS CLI و Boto3 هر دو بر روی botocore ساخته شدن، که یک Python library سطح پایین که هر چیزی که برای ارسال درخواست API به AWS… و دریافت پاسخ لازم است فراهم می‌کند.? — a bucket’s name, e.g. “mybucket”
? — an object’s key, e.g. &amp;quotmyfile_s3_name.csv&amp;quot
? — a file&#039;s name on your computer, e.g. &amp;quotmyfile_local_name.csv&amp;quotهم ? و هم ? می‌توانند اسمی که قبلاً در ObjectStorage داشتند یا اسمی که می‌خواهیم به یک bucket یا object جدید ایجاد شده بدیم، نشان دهند. ? نشان‌دهنده file است که ما داریم یا می‌خواهیم در ماشین local خود یا روی یک ObjectStorage دیگر خود داشته باشیم مثلا روی MinIO.همچنین Boto3 به شما اجازه می دهد تا مستقیماً از طریق Scriptهای Pythonای خودمون با ObjectStorage هایی نظیر Ceph و MinIO ارتباط برقرار کرده و داخل bucketها فایل بریزیم و Object هارو delete و rename و حتی از bucket A به bucket B میتوانید Object هاتون انتقال دهید.import Boto3
? = &amp;quotmybucket&amp;quot
? = &amp;quotmyfile_s3_name.csv&amp;quot
? = &amp;quotmyfile_local_name.csv&amp;quotSetting up a clientبرای دسترسی به هر سرویس AWS  , Ceph و MinIO با Boto3، باید با یک Client به آن متصل شویم. در اینجا، ما یک S3 Client ایجاد می کنیم. همچنین باید access key و secret access key را که می توانیم در کنسول AWS یا هر ObjectStorage دیگری ایجاد کنیم، تعریف کنیم:s3 = Boto3.client( &amp;quots3&amp;quot,
                     endpoint_url=url,
                     aws_access_key_id=AWS_KEY_ID,
                     aws_secret_access_key=AWS_SECRET
                      )Buckets: listing, creating &amp; deletingبرای List کردن Bucketهای موجود در ObjectStorageمون، Delete یا Create آن می‌توانیم از functions های، () list_buckets و () create_bucket و () delete_bucket به ترتیب استفاده می‌کنیم.# List buckets
bucket_response = s3.list_buckets()
buckets = bucket_response[&amp;quotBuckets&amp;quot]

# Create and delete buckets
bucket = s3.create_bucket(Bucket=?)
response = s3.delete_bucket(Bucket=?)</description>
                <category>مهرداد</category>
                <author>مهرداد</author>
                <pubDate>Mon, 04 Jul 2022 13:44:38 +0430</pubDate>
            </item>
            </channel>
</rss>