<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ارسلان سفیدگر</title>
        <link>https://virgool.io/feed/@arsalanse</link>
        <description>https://arsalanse.ir</description>
        <language>fa</language>
        <pubDate>2026-04-14 15:31:49</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4458/avatar/0y3kDs.png?height=120&amp;width=120</url>
            <title>ارسلان سفیدگر</title>
            <link>https://virgool.io/@arsalanse</link>
        </image>

                    <item>
                <title>تنظیم پروکسی ترمینال لینوکس</title>
                <link>https://virgool.io/@arsalanse/proxy-on-linux-terminal-and-apt-xdytcb4sfm4n</link>
                <description>اینجا مسیر های بدرد بخوری که موقع نصب لینوکس باید اضافه کنید که از پروکسی استفاده کنه ترمینال یا پکیج منیجر لیست میکنملطفا اگه چیز جذابی هم بلدید که نیست تو کامنت ها اضافه کنیدsudo nano /etc/profile.d/proxy.sh&#x60;&#x60;&#x60;export HTTP_PROXY=socks5h://example.com:443export http_proxy=socks5h://example.com:443export HTTPS_PROXY=socks5h://example.com:443export https_proxy=socks5h://example.com:443export NO_PROXY=&quot;localhost,127.0.0.1,172.10.10.0/24,*.ir&quot;export no_proxy=&quot;localhost,127.0.0.1,172.10.10.0/24,*.ir&quot;&#x60;&#x60;&#x60;sudo nano /etc/apt/apt.conf.d/01proxy&#x60;&#x60;&#x60;Acquire::http::Proxy &quot;socks5h://example.com:443&quot;;Acquire::https::Proxy &quot;socks5h://example.com:443&quot;;&#x60;&#x60;&#x60;sudo nano /etc/gitconfig&#x60;&#x60;&#x60;[http]  proxy = socks5h://example.com:443[https]  proxy = socks5h://example.com:443&#x60;&#x60;&#x60;sudo nano .ssh/config&#x60;&#x60;&#x60;Host server  HostName 127.0.0.1  User root  Port 22  IdentityFile ~/.ssh/key  ProxyCommand nc -X 5 -x 127.0.0.1:2222 %h %p&#x60;&#x60;&#x60;</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Thu, 28 Dec 2023 10:23:05 +0330</pubDate>
            </item>
                    <item>
                <title>چند کوک مهم دیتابیس MySQL</title>
                <link>https://virgool.io/G2Tech/mysql-parameters-to-tune-for-mysql-performance-t3sal7gyoizl</link>
                <description>کوک کردن روندی است که در آن زیر و بمی نت‌هایی که توسط یک ساز موسیقی تولید می‌شود به شکلی تنظیم می‌گردد که فواصل بین نت‌ها مطابق یک نظام مشخص باشد.تجربه دیدن عددی بالای 1000 کوئری در ثانیه تجربه هیجان انگیزه و همزمان وحشتناکیهاما با tune کردن دیتابیس، مناسب با سنارو و منابعی که در دسترس داریم میشه پروفرمنس بهتری رو انتظار داشت.به این بهونه به چند کوکی که پیشنهاد میکنم قبل از روز های بارونی زیرساخت بهش یه نگاه بندازید و سعی کنید با تغییر دادنشون عملکرد mysql رو بالاتر ببرید اشاره میکنمدر یک نگاه:max_connections=151
innodb_buffer_pool_size=134217728
innodb_buffer_pool_instances=1
innodb_log_file_size=50331648
innodb_io_capacity=200
innodb_parallel_read_threads=4
long_query_time=10
slow_query_log=NO
slow_query_log_file=host_name-slow.logمسیری که میتونید به عنوان ولوم اعمال کنید:- ./my.cnf:/etc/my.cnfشماره یک: innodb_buffer_pool_sizeمهم ترین کوک مقدار innodb_buffer_pool_size هست که در داکیومنت به این شکل تعریف شده:The size in bytes of the buffer pool, the memory area where InnoDB caches table and index data.فضایی اصلی که در اختیار سیستم کش دیتابیس قرار میدین که مقدار دیفالتش خیلی کمه و حدود ۱۲۸ مگابایت هست اما مطمعنن شما منابع بیشتری دارین و ازش میتونید خیلی بهتر استفاده کنید پیشنهاد میدم حدود ۷۰-۸۰ درصد رم رو به این مقدار اختصاص بدینشماره دو: innodb_buffer_pool_instancesThe number of regions that the InnoDB buffer pool is divided into.در کنار متغیر بالایی زمانی که مخصوصا بافر بالای ۱ گیگ اختصاص میدینه برای concurrency بهتر این مقدار رو افزایش بدین (پیشنهاد میدم ۸ بذارید)</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sat, 02 Dec 2023 15:07:49 +0330</pubDate>
            </item>
                    <item>
                <title>Linux, Stockfish chess engine as remote service</title>
                <link>https://virgool.io/@arsalanse/linux-stockfish-chess-engine-as-remote-service-oxvedrcrxdj2</link>
                <description>Here is a simple manual how to install and configure Stockfish chess engine as remote service on Linux machine.Install stockfish chess engine (this command is for Ubuntu machine)sudo apt install stockfishYou can also simply download newer chess engine, for example from abrok.eu, or even compile your own version, source code you can download from Stockfish GitHub.Install xinetd service on your Linux machine (this command is for Ubuntu machine)sudo apt install xinetdConfigure stockfish as remote serviceSimply create file /etc/xinetd.d/stockfish, for example use nano editor:sudo nano /etc/xinetd.d/stockfishand insert this configuration:# Stockfish remote engine
service stockfish
{
  disable = no
  server = /home/jerryg/Other/chess/engines/stockfish
  socket_type = stream
  protocol = tcp
  user = jerryg
  wait = no
  port = 3333
# only_from = localhost
}Change the item &quot;server&quot; to path, where is your stockfish engine, and “user” to your username.Now insert into file /etc/services this line:sudo nano /etc/servicesstockfish 3333/tcpRestart xinetd service and check, if stockfish remote service is workingRestart xinetd service:sudo systemctl restart xinetdCheck status of xinetd service:sudo systemctl status xinetdYou should see some output text, and there should not be something like &quot;removing stockfish&quot;, if you see this message then there is some problem.Now simple check, if stockfish remote service is working:telnet localhost 3333</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Fri, 24 Nov 2023 22:41:30 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت ایمج داکر با کانیکو</title>
                <link>https://virgool.io/G2Tech/docker-ci-using-kaniko-kihzknq9rgqq</link>
                <description>پروژه Kaniko توسط گوگل توسعه پیدا کرده و آخرین ورژن اون در زمان نوشتن این متن ۱.۱۵.۰ هستلینک ریپو: https://github.com/GoogleContainerTools/kanikoبخاطر دو ضعف مهم docker in docker منتشر شده:(۱)داکر dind باید در وضعیت privileged قرار بگیره که از نظر امنیتی خوب نیست و (۲) سرعت بیلدر داکرپیش نیاز هاش برای اجرا در GitLab یه ماشین داکر و یا کلاستر کوبرنیتز هست در ادامه نمونه کاربرد کانیکو در CI/CD رو میزارم تا راحت تر درموردش حرف بزنیم:کانیکو برای ساخت ایمیج و آپلود اون ایمیج به ریجستری کاربرد دارهدقت کنید اگه نمیخواید ایمیج اتوماتیک روی ریجستری بره باید فلگ --no-push رو بهش بدینکانیکو در داکیومنتیشن رسمی گیتلب هم منتشر شده و با خیال راحت میتونید از این پروژه استفاده کنید:https://docs.gitlab.com/ee/ci/docker/using_kaniko.htmlسوالی داشتین کامنت کنیدتامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Thu, 05 Oct 2023 18:00:01 +0330</pubDate>
            </item>
                    <item>
                <title>افزایش سرعت CoreDNS کوبرنیتز با یک نقطه (.)!☸️</title>
                <link>https://virgool.io/G2Tech/trailing-dots-in-domain-names-bluza8hwx28i</link>
                <description>اگر با سرویس های AWS مثل Route53 کار کرده باشین شاید براتون سؤال شده باشه که چرا آخر هر DNS URL یه نقطه هم قرار گرفته مثل:ns-xxx.awsdns-yy.co.uk.ns-xxx.awsdns-yy.net.ns-xxx.awsdns-yy.org.ns-xxx.awsdns-yy.com.فقط یه اشتباه نوشتاری یا باگ کوچیک بوده؟جواب اینه که اون نقطه کاملا درسته و دلیل خوبی هم داره!دلیلش RFC 1034 هست که برمیگرده به سال 1987که در لینک زیر هم مفصل در موردش توضیحات داده شده:http://www.dns-sd.org/trailingdotsindomainnames.htmlداخل کوبرنیتز متغیری داریم به اسم ndots که مقدار دیفالتش ۵ هستوقتی شما دامنه ای با تعداد نقطه کمتر از ۵ دارین best practice هست که آخر اون دامنه نقطه قرار بدین (البته باید مطمئن باشین خارج از کلاستر اون دامنه واقعا وجود داره)cat /etc/resolv.confمکانیزم CoreDNS اینطوریه که دامنه ای که fully-qualified نشده اگر به نتیجه نرسه شروع میکنه مقادیر search رو در انتهای اون قراردادن تا به نتیجه برسهو توی محیطی که لود بالایی داره فشار سربار زیادی به CoreDNS وارد میکنه که میتونید با یک نقطه جلوش رو بگیرید!تامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sun, 20 Aug 2023 16:31:27 +0330</pubDate>
            </item>
                    <item>
                <title>یوزر No Login در لینوکس ? (دسترسی امن پورت‌فروارد)</title>
                <link>https://virgool.io/G2Tech/no-login-ssh-user-linux-slwzqrpao8yp</link>
                <description>سناریویی در نظر بگیرید که دولوپر ما میخواد به دیتابیس دسترسی داشته باشه چه راه حلی پیشنهاد میدین؟1.  پورت دیتابیس رو روی هاست باز کنیم(که این راه حل اصلا منطقی نیست و بسیار از نظر امنیتی پر ریسکه حتی اگه پسورد براش ست کنید یا پورت دیفالت رو عوض کنید)2. کلید پابلیک از دولوپر بگیریم و روی روت سرور قرار بدیم(از روش اول خیلی بهتره ولی بازم با دسترسی ssh ممکنه به اشتباه دستوری روی سرور اجرا بشه و سیستمی از کار بیوفته)3. تعریف یوزر No Loginما تو لینوکس فایلی داریم به مسیر:/etc/passwdکه داخلش خط هایی با ساختار زیر نوشته شدهusername:password:UID:GID:GECOS:home_directory:login_shellیه مورد تاریخی که شاید جالب باشه پسورد ها داخل همین فایل قرار میگرفته ولی بعدا به فایل /etc/shadowمنتقل شد و جای خالی اون با x پر میشه!قسمت مهم برای ما login_shell هست که دیفالت شل اون یوزر رو تعیین میکنه مرسوم ترین هاش:/bin/bash/bin/shاما یه دیفالت شل که خیلی هم تکرار شده هست با مسیر:/usr/sbin/nologinاگه manual شو چک کنیم نوشته:$man nologinThe nologin command displays a message that an account is not available and exits non-zero.https://github.com/util-linux/util-linux/blob/master/login-utils/nologin.cپس تا اینجای کار اطلاعات خوبی در مورد نحوه منیج کردن یوزها و چند ساختار داخل لینوکس آشنا به دست آوردیمحالا ببینیم چطور میشه یه یوزر no login تعریف کردsudo useradd -d /home/nologin -s /usr/sbin/nologin -m nologinecho &quot;key&quot; &gt;&gt; /home/nologin/.ssh/authorized_keysبا دستور useradd (در مورد adduser تحقیق کنید) خیلی راحت بدون اضافه کاری میتونید یه یوزر جدید تعریف کنید با فلگ s بهش شل دیفالت رو پاس بدین حواستون باشه مقدار username رو تغییر بدینبا اینکار شما یوزری ساختین که دولوپر میتونه به راحتی از پورت فروارد ssh استفاده کنه ولی دسترسی به شل سرور هم نداشته باشهssh -NL LOCAL_PORT:LOCAL_IP:DESTINATION_PORT USER@SSH_SERVERشما چه راه حلی برای این مسئله داشتین؟تامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Wed, 16 Aug 2023 21:59:54 +0330</pubDate>
            </item>
                    <item>
                <title>ارسال نوتیفیکیشن به تلگرام با پایپلاین گیت لب?</title>
                <link>https://virgool.io/G2Tech/how-to-set-up-gitlab-notifications-in-telegram-gith3gheag81</link>
                <description>در این مقاله، به نحوه پیکربندی استیجی برای ارسال اطلاعات درباره موفقیت‌آمیز بودن و شکست‌ها در طول فرآیند توسعه به تلگرام نگاه خواهیم داشت. این امر به ویژه برای توسعه دهندگان، مهندسان DevOps و مدیران پروژه بسیار مفید است، زیرا به شما اجازه می دهد تا درباره فعالیت های گیت‌لب به روز بمانید و به سرعت به خطاها پاسخ دهید.بیایید با مراحل زیر شروع کنیم:1. ساخت ربات تلگرام با استفاده از BotFather و دریافت توکن API برای آن.2. اضافه کردن ربات به گروه تلگرام و بدست آوردن شناسه گروه تلگرام.3. اضافه کردن متغیرهای مربوط به ربات تلگرام در گیت‌لب.4. راه‌اندازی ارسال پیام ها از طریق Pipeline گیت‌لب.1. ساخت ربات تلگرام با استفاده از BotFather و دریافت توکن API برای آن.ابتدا اپلیکیشن تلگرام را باز کرده و BotFather را جستجو کنید. سپس دستورالعمل ها را برای ایجاد یک ربات جدید و دریافت یک توکن API دنبال کنید. یک ربات بسازید. پس از ایجاد ربات، یک توکن در چت به شما می رسد که با آن می توانید با API کار کنید، مانند: ۱۲۳۲۸۱۲۴۳:AAHdqTcvCH1vGWJxfSeofSAjhs6PALDsaw.2. اضافه کردن ربات به گروه تلگرام و بدست آوردن شناسه گروه تلگرام.بات را به گروه تلگرامی خودتون اضافه کنیدپس از آن، شما باید شناسه گروه تلگرام را بدست آورید. برای این کار، به URL بروید.https://api.telegram.org/bot&lt;YourBOTToken&gt;/getUpdatesجایی که  &lt;YourBOTToken&gt; — توکن API دریافت شده در BotFather است.3. اضافه کردن متغیرهای مربوط به ربات تلگرام در گیت‌لب.در تنظیمات مخزن گیت‌لب مورد نیاز (Settings &gt; CI/CD &gt; Secret variables)، متغیرهای حساس را اضافه کنید:TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID4. راه‌اندازی ارسال پیام ها از طریق Pipeline گیت‌لب.برای ارسال اعلانات، یک اسکریپت به نام notify.sh می سازیم، از طریق ربات ایجاد شده پیامی را به کاربر مناسب ارسال می کنیم:لینک پروژه https://gist.github.com/arsalanses/aae3e2fec4642cc7173aaef12f118c64 وضعیت استقرار باید به عنوان پارامتر اول برای این اسکریپت ارسال شود. همچنین نام پروژه، URL پایپلاین، شاخه و نام کاربری نیز ارسال می شوند.در gitlab-ci.yml ما این اسکریپت را در زمان مناسب با پارامترهای مناسب توصیف می کنیم:notify_error:
stage: notify
script:
- apk add curl
- cp $notify ./notify.sh
- sh notify.sh &amp;quotfail message ❌ or success message ✅&amp;quot
when: on_failureنتیجه گیریایجاد اعلان در تلگرام برای استقرار موفق و شکست در مرحله توسعه، باعث می شود که ردیابی وضعیت های پایپلاین آسانتر شود و به سرعت به مشکلاتی که پیش آمده اند، پاسخ داده شود.</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Wed, 26 Jul 2023 15:42:19 +0330</pubDate>
            </item>
                    <item>
                <title>این یک همه پرسی است، انجمن دوآپس تبریز</title>
                <link>https://virgool.io/@arsalanse/devops-tabriz-mzmftmzelns4</link>
                <description>معرفی انجمن کلاد و دوآپس تبریزلینک تلگرام:https://t.me/devops_tabrizبعد از برگذاری جلسات و کارگاه های مرتبط (خصوصا کارگاه آموزشی داکر)تصمیم به ایجاد انجمن تلگرامی گرفتم که افراد علاقه مند رو دور هم جمع کنیم و با به اشتراک گذاری و آموزش های مرتبط با حوزه دوآپس، community تبریز رو دور هم جمع کنیم و با کمک هم تعداد رویداد های آموزشی رو بیشتر کنیم.برای به اشتراک گذاری و شبکه سازی افراد فعال حوزه دوآپس پیشنهاد میدم کانال و گروه انجمن کلاد و دوآپس تبریز رو دنبال کنید و این لینک رو به اشتراک بذارید تا افراد علاقه مند رو پیدا کنیم.همه پرسی برای پیشنهاد رویداد و یا پیشنهاد افراد علاقه مند به ارایه آموزش آزاد داخل کانال قرار گرفته در صورت تمایل به این حوزه حتما دنبال کنید https://t.me/devops_tabriz#devops #tabriz</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Tue, 30 May 2023 16:34:33 +0330</pubDate>
            </item>
                    <item>
                <title>این ssh دل منو برده! ?</title>
                <link>https://virgool.io/G2Tech/ssh-life-saver-odoadmdq2cdg</link>
                <description>امروز ساعت 8:57 دقیقه صبح نشته بودم و کتاب kubernetes in action رو میخوندم که در کمال ناباوری یه نکته خیلی خیلی بامزه در مورد ssh برخوردم که خود نویسنده این کتاب یعنی marko luksa مهندس ردهت هم نمیدونست!یکجایی از کتاب اشاره شده وقتی کارت شبکه یک نود رو قطع میکنید کانکشن ssh قطع میشه و باید ترمینال رو ببندین!you need to open up another terminal or hard-exit from the ssh session.و چقدر عمر ما دوآپس ایجنیرها سر این ssh باز و بستن هدر رفت :(حالا دفعه بعدی که کانکشن اینترنت خودتون یا سرور قطع شد ترمینال رو نبندین عوضش دستور تیلدا + نقطه به این شکل:.~وارد کنید تا ssh ترمینال رو رها کنه همین!برای دیدن تمام دستورات مربوط به زمان قطع ssh از دستور زیر استفاده کنید~?امیدوارم این مطلب به دردتون خورده باشهتامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Tue, 18 Apr 2023 09:06:04 +0330</pubDate>
            </item>
                    <item>
                <title>لغو قانون تغییر ساعت رسمی، چک کردن tzdata تمام سرور ها با انسیبل</title>
                <link>https://virgool.io/G2Tech/application-timezone-setting-xp9s5mqqfvti</link>
                <description>پکیج tzdata در لینوکسی اطلاعات مربوط به تبدیل تایم‌زون‌ها رو مطابق با قوانین کشورها دارد.بررسی ورژن tzdataبا دستور زیر ورژن پکیج tzdata به شما نمایش داده میشه.dpkg -s tzdata | grep -i versionاولین patch شامل تغییرات جدید در قانون ساعت رسمی کشور در تاریخ 17 آگوست 2022 منتشر شده.برای بررسی پکیج tzdata میتونید از Launchpad استفاده کنید.استفاده از انسیبللینک گیتهاب با تعریف کردن مشخصات سرور خودتون تو فایل hosts دستور بالا رو تو همه سرور ها اجرا میکنه و ورژن هارو داخل ترمینال لیست میکنهامیدوارم با کمک این پلی بوک دیگه مشکلی با ساعت سرور ها براتون پیش نیادلطفا اگه نظری داشتین حتما در بخش نظرات با من درمیون بذارید، حتما میخونم.سال نو هم پیشاپیش مبارک ?تامام./#دوآپس #داکر</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Thu, 16 Mar 2023 12:23:44 +0330</pubDate>
            </item>
                    <item>
                <title>دیپلوی سریع صفحه به زودی با استفاده از داکر و فرمورک svelte</title>
                <link>https://virgool.io/@arsalanse/svelte-maintenance-page-with-docker-lsgcdfbqzne4</link>
                <description>صفحه گیتهاب:https://github.com/G2Tech-co/G2maintenanceریجستری داکرهاب:https://hub.docker.com/r/arsalanses/g2maintenance-pageفرمورک svelte به تازگی کیت فرانت معرفی کرده به اسم sveltekit که الان که زمان نوشتن این مقاله ورژن یک هستبرای اینکه قابلیت های این تکنولوژی جدید رو تست کنیم و یکی از مشکلات دوستان devops رو حل کنیم یه پروژه ای تعریف کردیم برای سناریو هایی که بهمون میگن سریع سایت رو از دسترس خارج کنید و متن مبنی بر به زودی (coming soon) نمایش بدیمبه داکر کامپوز زیر دقت کنید:version: &#039;3&#039;

services:
  app:
    image: arsalanses/g2maintenance-page
    environment:
      - PUBLIC_TITLE=We will be back soon!
      - PUBLIC_MESSAGE=Sorry for the inconvenience. We are performing some maintenance at the moment. - The G2Tech Team
      - PUBLIC_SENDPORTAL=&amp;quothttps://sendportal.test&amp;quot
      - PUBLIC_SENDPORTAL_TAG=1تمام متن هایی که تو صفحه میبینید به راحتی از env داکر قابل تغییر هستو svelte اونا رو از env سیستم عامل میخونه و نمایش میدهپس به راحتی با یه docker compose up میتونید یه صفحه به زودی و کاستومایز شده داشته باشید!ولی همه چیز اینجا تموم نمیشه حتما پیشنهاد میدم سورس کد این پروژه رو بخونید و با قابلیت های جالب svelte آشنا بشید (راستی ci این پروژه svelte هم با github-ci نوشتم که دیدن اون هم خالی از لطف نیست اگه داکرایز کردن براتون جالبه)مباحثی مثل اضافه کردن SendPortal برای عضو گیری خبرنامه ایمیلی اینجا جالب میشه که ما نباید token سیستم SendPortal رو روی مرورگر کاربر expose کنیم و باید سمت سرور رندر بشه و ریکوست ها ارسال بشه این حالت رو svelte پشتیبانی میکنه و میتونید بدون نگرانی از expose شدن توکن و یا نوشتن بک اند جدا برای این صفحه این کار رو انجام بدینداخل منو این صفحه یه قسمتی هم داریم به اسم شعر که از api های گنجور عزیز استفاده کردم تا قابلیت های کال api هم داخل svelte ببینیم خیلی این سناریو ممکنه پیش بیاد که داخل صفحه api کال میکنید که با عوض شدن تب ها دوباره نیاز نیست آپدیت بشه و یبار دیگه کال بشه با امکاناتی که (https://svelte.dev/tutorial/writable-stores) بهمون میده میتونیم راحت مقدار fetch شده رو نگه داریم و با عوض شدن تب ها دوباره اون api رو کال نکنیم (اینجا بکاند کارا دعای خیرم میکنن فکر کنم!)البته ممکنه بگید تمام این امکانات داخل ری اکت و... هم هست ولی سینتکس و هندل کردن اونها توسط svelte به نظرم فوقالعاده استسعی میکنم این مطلب رو کامل تر کنم و شاید بیشتر درموردش بنویسم اگه مورد توجه بودلطفا نظری داشتید زیر همین پست برام بنویسید اگه چیزی از قلمم افتادو حتما بازم پیشنهاد میکنم به گیتهاب این پروژه یه سر بزنید و ستاره یادتون نره ;)تشکرتامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Mon, 09 Jan 2023 19:38:35 +0330</pubDate>
            </item>
                    <item>
                <title>اتوماتیک کردن کانفیگ اولیه سرور cloud-init</title>
                <link>https://virgool.io/G2Tech/cloud-init-config-mbsbzynkokut</link>
                <description>زمان ایجاد یه سرور جدید سرویس دهنده های کلاد بهمون این اجازه رو میدن که اسکریپتی رو زمان روشن شدن سرور اجرا کنیم مثل عکس زیر (مربوط به هتزنر)ابزار هایی که معمولا نیاز داریم که سرور بعد روشن شدن در دسترسمون باشه داکر و گیت لب رانر هست و نصب آخرین نسخه این ابزار ها معمولا نیازمند تعریف کردن یکسری کلید ها و ریپو ها و... هست  حالا ما میتونیم از این امکان استفاده کنیم و اسکریپتی رو آماده کنیم که زمان روشن شدن سرور برای اولین بار این ابزار رو در اختیار ما قرار بدهمثل: https://github.com/G2Tech-co/cloud-init اگه نظری درمورد بهتر شدن این اسکریپت دارین لطفا راحت باشید و تو نظرات پایین پست بنویسید. تشکر.تامام./#دوآپس</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sat, 07 Jan 2023 14:04:50 +0330</pubDate>
            </item>
                    <item>
                <title>چند نکته برای ×۱۰ تجربه برنامه نویسی شما</title>
                <link>https://virgool.io/G2Tech/10x-your-developer-experience-syo9qkm3y4bz</link>
                <description>10x developer:A 10x developer (aka 10x programmer / 10x engineer) is a professional who is 10 times more productive than other developers with an equal level of expertise in the field.یک سری نکات ادیتور VSCode که باعث میشه تجربه بهتری زمان برنامه نویسی داشته باشید و سرعتتون بالاتر بره، بیشتر این تنظیمات با شرت کات ctrl+alt+p در دسترس هستشماره یک: Label Formatزمانی که دوتا فایل هم نام رو باز میکنید به صورت خودکار مسیر اون فایل کنار اسم فایل نمایش داده میشه میتونید تنظیم کنید به صورت خلاصه اسم فولدر رو کنار اسم فایل نشون بده و اینطوری سریع بین تب ها جا به جا بشیدشماره دو: Compact Foldersبا خاموش کردن این ایتم شاخه فولدر های خالی رو بهم نمیچسبونه و عادی نمایش میده که خوانایی خیلی بهتری دارهشماره سه: Tree Indentمیزان تو رفتگی فایل ها زیر هر فولدر رو مشخص میکنه که با تنظیم اون بین ۱۲ تا ۱۶ خیلی راحت میتونید بین فایل ها جا به جا بشیدشماره چهار: ctrl+alt+pجست و جو اسم یه فایل داخل یه پروژه بزرگ رو در نظر بگیرید... با این شرت کات و تایپ چند حرف اسم فایل میتونید راحتتر فایل مورد نظرتون رو پیدا کنید شما از چه روش هایی برای بالا بردن کارایی خودتون داخل ادیتور استفاده میکنید؟تمام./#دوآپس #داکر</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Thu, 22 Dec 2022 10:36:10 +0330</pubDate>
            </item>
                    <item>
                <title>آپدیت اتوماتیک توکن در postman</title>
                <link>https://virgool.io/G2Tech/postman-automate-login-token-set-in-environment-craalvvsuey5</link>
                <description>فرض کنید در حال تست api هستیم و گاه و ناگاه مجبوریم دیتابیس رو دراپ کنیم و فرآیند لاگین و ساخت توکن انجام بشه و بازم داخل postman مقدار توکن جدید رو تعریف کنیم...حالا برای راحتی کار و اتوماتیک کردین این فرآیند امکانی که postman بهمون میده اینه که میتونیم اسکریپت بنویسیم و با قراردادنش تو قسمت تست ریکویٔست های لاگین، ریسپانس رو برداریم و داخل متغییر های کلی کالکشن ست کنیم:const response = pm.response.json();
pm.collectionVariables.set(&#039;TOKEN&#039;, response.data[&#039;access_token&#039;]);
// console.log(pm.collectionVariables.get(&amp;quotTOKEN&amp;quot));خط آخر رو کامنت کردم اگه دوست دارین لاگ بندازه میتونید خط آخر رو از کامنت دربیارینبازم اگه سوالی داشتین تو قسمت کامنت ها حتما باهام به اشتراک بذارینتامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sun, 27 Nov 2022 08:58:33 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت تعداد بالای ریموت سرور</title>
                <link>https://virgool.io/G2Tech/using-the-ssh-config-file-yh90z9pjzzmh</link>
                <description>اگه به عنوان یه مدیر سرور روزانه به تعداد زیادی از سرور ها با ssh متصل میشید یه راهکار خوب برای مدیریت اونها و نگه داشتن کلید هاو پورت ها ساخت فایل config داخل ssh. هستکافیه داخل ~/.ssh اگه ندارید به این شکل:mkdir -p ~/.ssh &amp;&amp; chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/configداخلش به این شکل:Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20

Host martell
    HostName 192.168.10.50

Host *ell
    user oberyn

Host * !martell
    LogLevel INFO

Host *
    User root
    Compression yesسرور هاتون رو ذخیره کنیدآپشن هایی که میتونید داخل اونها استفاده کنید:HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
LogLevel INFO
Compression yesحالا کافیه بزنید ssh &lt;myserver&gt;برای تغییر یکی از متغییر ها:ssh -o &amp;quotUser=root&amp;quot dev
ssh -F /dev/null user@example.comتامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Tue, 22 Nov 2022 17:42:42 +0330</pubDate>
            </item>
                    <item>
                <title>جست و جو یک فیلد خاص در تعداد زیادی فایل json حجیم</title>
                <link>https://virgool.io/G2Tech/json-crawler-dsc7wqtpaixt</link>
                <description>سناریو از این قرار هست که چندین فایل حجیم json بهمون میدن و قراره تک تک این فایل ها رو با ز کنیم، سطر به سطر جدا کنیم (هر سطر یه ابجکت json) و بیایم یه فیلد خاص رو بررسی کنیم که کلمه مورد نظر ما داخلش هست یا نهبرای اینکار اول از همه باید بیام فایل های json رو لیست کنم:import os
PATH = &amp;quot/home/my_jsons&amp;quot
with os.scandir(PATH) as entries: 
    for entry in entries:
        passاین روش مدرنی هست که از پایتون ۳.۵ معرفی شده (PEP 471) برای باز کردن هر فایل و خوندن خط به خط اونها از این روش استفاده کردم:with open(entry, &#039;r&#039;) as read_file:
    for index, line in enumerate(read_file):
        data_dict = json.loads(line)
        fild_1 = data_dict[&amp;quotfild_1&amp;quot]
        if KEY_WORD in link:
            passحالا اینجا یه تابع readrows داریم که اگه استفاده میکردم میخواست تمام سطر هارو همون لحظه به لیست تبدیل کنه و باعث انفجار از ناحیه رم می شدیم!اما اگه بیایم سطر به سطر بررسی رو جلو ببریم باعث میشه این مشکل کمی هندل بشهمرحله آخر ذخیره نتایج هست:with open(&#039;res.csv&#039;, &#039;w&#039;) as result_file:
    writer = csv.writer(result_file)
    writer.writerow([&amp;quotcounter&amp;quot, &amp;quotfild_1&amp;quot, &amp;quotentry.name&amp;quot, &amp;quotindex&amp;quot])
    writer.writerow([counter, fild_1, entry.name, index])نتیجه نهایی روی گیتهاب: https://gist.github.com/arsalanses/805d6e7189e9f1e390a2d2d84c72b9d2 اگه موردی هست که براتون سوال ایجاد کرده خوشحال میشم برام تو نظرات این پست بنویسید ?تامام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sat, 12 Nov 2022 14:38:37 +0330</pubDate>
            </item>
                    <item>
                <title>?  بات تلگرام برای مانیتور و گزارش وضعیت داکر کانتینرها</title>
                <link>https://virgool.io/G2Tech/telegram-bot-for-monitoring-docker-containers-kjdcbgsu4vho</link>
                <description>لینک گیت هاب gistبرای پیاده سازی یه سیستم مانیتورینگ وضعیت داکر کانتینرها کلی ابزار خوب برای محیط پروداکشن داریم (مثال: Grafana) و منم بدنبال ساخت دوباره چرخ نیستم، هدف من فقط یادگیری و شاید یادآوری یک سری ابزارها و مفهوم ها است.قبل از هرکاری باید یه بات تلگرام ساخته باشین تا یه توکن براتون ساخته بشهبرای پیدا کردن ای دی چت خودتون یا یه کانال خاص که میخواید پیام ها ارسال بشه میتونید از api زیر استفاده کنیدhttps://api.telegram.org/bot{BOT_TOKEN}/getUpdatesمن برای دریافت خروجی دستور docker stats خروجی شل این دستور رو با کتابخونه subprocess پایتون گرفتم به این شکل:import subprocess
docker_ps = &amp;quotecho -n &lt;password&gt; | sudo docker ps --format &#039;{{.Status}}&#039; | awk &#039;{print $1}&#039;&amp;quot
docker_ps_output = subprocess.check_output(docker_ps, shell=True)اینجا چند تا مشکل پیش میاد که با خلاقیت خودتون میتونید روش های دیگه ای رو امتحان کنیداول اینکه داکر sudoer نیست به صورت دیفالت، و باید یا به user دسترسی بدین یا پسورد رو پایپ کنید مثل چیزی که بالا نوشته شده به کمک echo تا وقتی ترمینال پسورد خواست بهش پاس داده بشهمشکل دوم اینکه داکر ps خروجی این شکلی داره:CONTAINER ID        IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES 4c01db0b339c        ubuntu:12.04                 bash                   17 seconds ago       Up 16 seconds       3300-3310/tcp       webapp d7886598dbe2        crosbymichael/redis:latest   /redis-server --dir    33 minutes ago       Up 33 minutes       6379/tcp            redis,webapp/dbما فقط به ستون status نیاز داریم، اینجاست که با ابزار awk میایم فقط اون ستون رو جدا میکنیم و داخل یه آرایه می ریزیم (یوتیوب وحید ناینی آموزش مفصل awk نگاه کنید) docker_ps_output = docker_ps_output.decode(&amp;quotutf-8&amp;quot).split(&#039;\n&#039;)
docker_ps_output = docker_ps_output[:-1]حالا یه آرایه داریم که به این شکله: [&quot;Up&quot;,&quot;Up&quot;,&quot;Up&quot;] برای تبدیل این آرایه یه روش پایتونیک باحال داریم:docker_ps_output = [True if item == &amp;quotUp&amp;quot else False for item in docker_ps_output] //[True, True] 
if all(docker_ps_output):
    passخروجی ما میشه یه آرایه به شکل [True, True, True] که با متد all میتونیم چک کنیم آیا همه اعضا مقدار True دارن یا نه...تنها کاری که میمونه اینه که در صورتی که شرط بالا برقرار نشد پیام بدیم که وضعیت کانتینر ها مشکل پیدا کردهاما برای اینکه اطلاعاتی هم همراه با ارسال خطا ارسال کنیم باید خروجی docker stats هم همراهش ارسال کنیمdocker_stats = &amp;quotsudo docker stats --all --no-stream --format &#039;table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}&#039;&amp;quotبه همراه دستور من چندتا فلگ هم قرار دادم که به ترتیب:فلگ --all که نه فقط وضعیت کانتینر های در حال اجرا کانتینر های خاموش شده هم برامون ارسال بشه فلگ --no-stream به صورت پیش فرض وضعت استریم میشه و شل رو پس نمیده، این دستور باعث جلوگیری از این اتفاق میشهفلگ --format با فرمت دهی ستون ها اونهایی که بهشون نیازی نداریم رو به سمت بات نمیفرستیمحالا کافیه api تلگرام رو کال کنیم تا پیام رو برامون ارسال کنه تو پایتون میتونید از requests برای ارسال درخواست استفاده کنیدrequests.get(f&#039;{BASE_URL}System is up and running enjoy!&amp;disable_notification=true&#039;)
requests.get(f&#039;{BASE_URL}{docker_stats_output}&#039;)پیام هایی که وضعیت سالم بودن سیستم رو گذارش میدن میتونید پاک کنید یا از پارامتر &amp;disable_notification=trueاستفاده کنید که نوتیفیکیشن صدادار ارسال نشهدر آخر برنامه ما همچین چیزی باید بشه: https://gist.github.com/arsalanses/aece4b47c88e2c6287244789bfbba1e9 برای بهتر کردن این برنامه میتونید برای پسورد ها فایل env تعریف کنیدیا بجای اجرای دستورات مستقیم روی شل از کتابخونه docker استفاده کنیدحالا برای اجرای این اسکریپت مثلا ساعتی یکبار میتونید داخل crontab -e تعریفش کنید مثلا:0 */1 * * * bash -c &amp;quotcd /home/telegram-bot &amp;&amp; source venv/bin/activate &amp;&amp; echo &lt;password&gt; | sudo -S python3 docker-bot.py &amp;&amp; deactivate&amp;quotلطفا سوالات خودتون رو برام کامنت کنیدلینک گیست گیتهاب رو اینجا قرار میدم تا اگه خواستید بهترش کنید راحت و همین پایین تو کامنت ها به اشتراک بذاریدتامام/.</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sun, 30 Oct 2022 15:31:39 +0330</pubDate>
            </item>
                    <item>
                <title>چطوری با داشتن IP یه سرور اشتراکی سایت خاصی رو باز کنیم</title>
                <link>https://virgool.io/@arsalanse/how-to-access-site-through-ip-address-mk7qrlglrjb4</link>
                <description>چرا؟ مگه این الان IP سرور ویرگول نیست خوب پس چه فرقی داره؟ چرا باز نمیشه وقتی مستقیم IP سرور ویرگول رو داخل مرورگر قرار میدم؟خوب یه احتمال اینه که رو یه سرور که فقط وبسایت ویرگول سرویس نمیشه احتمالا دامین های دیگه هم هستن هم‌زمان و وقتی IP سرور رو میدیم تشخیص نمیده با کدوم یکی کار داریم!راه حل چیست؟ (امروز یک ساعت داشتم جست و جو میکردم درموردش) و قضیه برمیگرده به استاندارد HTTP 1.1 و اینکه ما میتونی داخل هدر ریکوئیست مشخص کنیم با کدوم دامین کار داریم مثل:curl -L --header &#039;Host:virgool.io&#039; http://188.114.96.10اینجا فلگ L- هم باعث میشه ریدایرکت فعال باشه و سرور بتونه مارو منتقل بکنه جایی که سرویس داره ارائه میشهدر مورد خود مرورگر هم افزونه هایی هستن (مثل ModHeader) که میتونید باهاش به هدر ریکوئیست اطلاعاتی که میخواید اضافه کنیدتامام./ </description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Thu, 19 May 2022 21:02:23 +0430</pubDate>
            </item>
                    <item>
                <title>نصب داکر و چندتا ابزار روی لینوکس مینت</title>
                <link>https://virgool.io/@arsalanse/%D9%86%D8%B5%D8%A8-%D8%AF%D8%A7%DA%A9%D8%B1-%D9%88-%DA%86%D9%86%D8%AF%D8%AA%D8%A7-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D8%B1%D9%88%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%85%DB%8C%D9%86%D8%AA-vqkysuvfyiib</link>
                <description>بهتره برای نصب داکر و داکر کامپوز به سایت اصلی خود داکر برید و دستوراتی که برای نصب داکر قرار داده شده رو انجام بدین چون من هرجا خوندم درمورد نصب داکر با apt اصلا توصیه نشده به اینکار احتمالا به دلیل بروز نبودن و...به هرحال دستورها اینا هستن ولی بازم بهتره سایت خود داکر رو چک کنیدsudo apt install docker.iosudo apt install docker-composesudo usermod -aG docker &lt;username&gt;بعد از نصب شدن داکر بهتره login کنید داخل داکر هاب که موقع نصب ایمج ها ارور الکی نگیریدبرای اینکه یه محیط گرافیکی داشته باشید میشه از portainer استفاده کرد... کارو کمی راحت تر میکنه در ادامه...شایدم نه!docker volume create portainer_datadocker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ceحالا روی پورت 9000 میتونید portainer رو ببینیدریپو هایی که به نظرم جالب بیاد اینجا میزارم اگه با نصبشون مشکل داشتین یوتیوب جای خوبیهhttps://github.com/bastienwirtz/homerhttps://hub.docker.com/r/linuxserver/mariadb(https://www.youtube.com/watch?v=zyGhnbyOq90)https://github.com/louislam/uptime-kumahttps://github.com/awesome-selfhosted/awesome-selfhosted</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sat, 13 Nov 2021 13:00:15 +0330</pubDate>
            </item>
                    <item>
                <title>اشتراک پوشه شبکه lan در لینوکس مینت</title>
                <link>https://virgool.io/@arsalanse/%D8%A7%D8%B4%D8%AA%D8%B1%D8%A7%DA%A9-%D9%BE%D9%88%D8%B4%D9%87-%D8%B4%D8%A8%DA%A9%D9%87-lan-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%85%DB%8C%D9%86%D8%AA-gzumlakmjlzs</link>
                <description>من با کمک این پست بلاگ تونستم اینکارو انجام بدمکه با نصب smbd شروع میشهsudo apt-get -y install sambaبعدش یه پوشه میسازیم و بهش دسترسی های لازم رو میدیمmkdir sharesudo chmod 777 shareداخل تنظیمات smbd باید یه پروفایل جدید بسازیم مثل:[Docs] path = /home/sharewritable = yesguest ok = yesguest only = yescreate mode = 0777directory mode = 0777یکبار ریستارت کنید smbd رو حالا دیگه حلهروی this pc راست کلیک کنید و add network location رو انتخاب کنید و آدرسی شبیه به این باید وارد کنید\\192.168.1.100\Publicحالا همیشه در دسترسهتمام./</description>
                <category>ارسلان سفیدگر</category>
                <author>ارسلان سفیدگر</author>
                <pubDate>Sat, 13 Nov 2021 05:26:28 +0330</pubDate>
            </item>
            </channel>
</rss>