<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمدحسن مزروعی</title>
        <link>https://virgool.io/feed/@mhmazrooei</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 12:51:14</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1055/avatar/Sy5CKt.jpeg?height=120&amp;width=120</url>
            <title>محمدحسن مزروعی</title>
            <link>https://virgool.io/@mhmazrooei</link>
        </image>

                    <item>
                <title>بازگردانی دایرکتوری bin و دیگر دایرکتوری های انتقال داده شده در لینوکس</title>
                <link>https://virgool.io/@mhmazrooei/%D8%A8%D8%A7%D8%B2%DA%AF%D8%B1%D8%AF%D8%A7%D9%86%DB%8C-%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C-bin-%D9%88-%D8%AF%DB%8C%DA%AF%D8%B1-%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C-%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%AF%D8%A7%D8%AF%D9%87-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-liqt7frfhlhx</link>
                <description>برای این پست نمیدونستم دقیقا چه عنوانی بذارم. ببینید. ممکنه یه روزی در حال کار با لینوکس باشید و با دستور mv کار میکنید و اشتباهی دایرکتوری های اصلی سیستم مثل root یا bin و ... رو به جای دیگه ای انتقال بدید. البته اگه با یوزر root باشید یا یوزرتون sudoer باشه این اتفاق میفته. خوب من تو سرور شخصی خودم در حال کار بودم و با یوزر root که به اشتباه این دستور رو زدم:~ mv /* /some-directory/خوب این مشخصه که هرچی فایل و دایرکتوری توی / باشه رو به دایرکتوری مورد نظر من انتقال میده به جز یه تعدادی رو. وقتی این اتفاق بیفته خیلی از دستورات پیش فرض لینوکس شما هم از دسترس خارج میشه. برای من هیچ دستوری کار نمیکرد. خوب من واقعا وضعیت بدی داشتم. خلاصه بعد از کلی گشت و گذار تو اینترنت به این لینک رسیدم و تونستم با کمی کار کردن باهاش مشکلم رو رفع کنم. البته توضیحی که داد برای debian i386 و CentOS x86_64 بود. اما سرور من Ubuntu x86_64 بود که با کمی گشت و گذار دستور نهایی رو به دست آوردم و نتیجه شد این:export LD_LIBRARY_PATH=/some-directory/lib:/some-directory/lib/x86_64-linux-gnu
/some-directory/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /some-directory/bin/mv /some-directory/* /بعد از اجرا دوتا دستور بالا مشکل من حل شد و همه چیز سر جاش برگشت.ممکنه براتون سوال پیش بیاد خوب چرا از دستور mv به صورت زیر استفاده نکردم:/some-directory/bin/mv /some-directory/* /دلیلش اینه که دستور mv به دایرکتوری lib نیازمنده و از اونجایی که من lib رو م انتقال دادم این مشکل پیش اومد. در واقع دوتا دستوری که بالا نوشتم داره مسیر دایرکتوری lib رو به سیستم میفهمونه تا بتونه مشکل رو برطرف کنه. خلاصه مشکل من برطرف شد و از یه عالمه گرفتاری نجات پیدا کردم. بعد از اینکه مشکل حل شد و خواستم این رو با شما هم درمیون بذارم. امیدوارم استفاده کنین. در ضمن یه ویدئو هم تو یوتوب گذاشتم که انجام این مراحل رو به شما نشون میده و بهتر متوجه میشین. https://www.youtube.com/watch?v=U8yrYXmhps4 </description>
                <category>محمدحسن مزروعی</category>
                <author>محمدحسن مزروعی</author>
                <pubDate>Sat, 27 Jun 2020 18:25:34 +0430</pubDate>
            </item>
                    <item>
                <title>حل مشکل سرعت نصب پکیج در Composer با Prestissimo</title>
                <link>https://virgool.io/@mhmazrooei/%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D8%B3%D8%B1%D8%B9%D8%AA-%D9%86%D8%B5%D8%A8-%D9%BE%DA%A9%DB%8C%D8%AC-%D8%AF%D8%B1-composer-%D8%A8%D8%A7-prestissimo-scuqwvmew7of</link>
                <description>همونطور که میدونید Composer یک پکیج منیجر برای PHP هست که از طریق اون میتونید پکیج های مختلفی رو نصب کنید.ممکنه خیلی مواقع موقه اجرای دستورات نصب و آپدیت با کندی سرعت مواجه شید. اگر دستور رو با vvv اجرا کنید متوجه میشید که چقدر درخواست ارسال میشه تا بالاخره پکیج ها نصب بشن. برای مثال دستور نصب تاریخ جلالی رو با vvv اجرا کنید تا ببینید چه اتفاقی میفته:composer require morilog/jalali -vvvاین مشکل با نصب پکیج Prestissimo به صورت گلوبال قابل برطرفه. یعنی این پکیج یک پلاگین برای Composer محسوب میشه و باعث میشه پکیج ها و فایل ها به صورت موازی دانلود بشن و سرعت رو فوق العاده بالا میبره. پس دستور زیر رو اجرا کنید:composer global require hirak/prestissimoحالا دوباره پکیج تاریخ جلالی رو نصب کنید و تفاوت سرعت رو احساس کنید.مورد دیگه ای رو که باید توجه کنین اینه که اکستنشن xdebug رو هم غیرفعال کنید. البته اگه فعال باشه خود Composer موقع اجرا به شما اخطار میده و میگه پرفورمنس رو پایین میاره.امیدوارم این مورد هم به شما کمک کنه. اگر سوالی بود بپرسید.</description>
                <category>محمدحسن مزروعی</category>
                <author>محمدحسن مزروعی</author>
                <pubDate>Sun, 17 May 2020 16:19:36 +0430</pubDate>
            </item>
                    <item>
                <title>راه اندازی یک Node ایمن Ethereum در Ubuntu</title>
                <link>https://virgool.io/@mhmazrooei/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%DB%8C%DA%A9-node-%D8%A7%DB%8C%D9%85%D9%86-ethereum-%D8%AF%D8%B1-ubuntu-x1vm3vmoiqzs</link>
                <description>سلام. این اولین پست من تو ویرگوله. میخواستم با یه چیز خوب شروع کنم. البته ساده هست. من حدودا ۳ سالی هست تو حوزه کریپتوکارنسی فعال هستم. البته تو چند ماه اخیر فعالیتم کم شده اما اخبارش رو دنبال میکنم. تو این پست میخوام درباره راه اندازی یک Node ایمن برای ارز Ethereum بنویسم. امیدوارم که کمک کنه به شما.اول یک تعریف کوتاه درباره Ethereum بگم. Ethereum یک بستر اوپن سورس برای اجرای برنامه های غیرمتمرکز (Decenteralized) و البته قراردادهای هوشمنده. شاید تو یک پست مجزا درباره قراردادهای هوشمند بگم.همونطور که با خیلی از برنامه ها و بستر ها کار کردید، خیلیاشون به شما یک API میدن برای کار با اون بستر که Ethereum هم از این قاعده مستثنی نیست. شما میتونید از طریق RPC که شبیه REST API هست با   Ethereum ارتباط برقرار کنین. حالا برای راه اندازیش باید چیکار کنیم ؟راه اندازی و پیکربندی کلاینت Gethراه اندازی و پیکربندی Nginx به عنوان Reverse Proxy راه اندازی و پیکربندی کلاینت Gethبرای دریافت آخرین نسخه رسمی این کلاینت میتونین به آدرس https://geth.ethereum.org/downloads برید و دانلود کنید. زمانی که این آموزش رو مینویسم آخرین نسخه ۱.۹.۱۳ هست.کارهای زیر رو انجام بدین:sudo apt-get update
sudo apt-get upgrade -y
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.9.13-cbc4ac26.tar.gz
tar -xzf geth-linux-amd64-1.9.13-cbc4ac26.tar.gz
cd geth-linux-amd64-1.9.13-cbc4ac26
sudo mv geth /usr/local/bin/geth
sudo chmod +x /usr/local/bin/gethخوب حالا کلاینت Geth شما آماده اجرا هست، اما بهتره اون رو به صورت یک سرویس راه اندازی کنیم. دستور زیر رو اجرا کنین:cat &lt;&lt; &#039;EOF&#039; | sudo tee /etc/systemd/system/geth.service &gt; /dev/null
[Unit]
Description=Geth Client For Ethereum

[Service]
Type=simple
User=username
Restart=always
ExecStart=/usr/local/bin/geth --rpc --syncmode &amp;quotfast&amp;quot --rpcaddr &amp;quot127.0.0.1&amp;quot --rpcport 8545 --rpcapi &amp;quotweb3,personal,eth&amp;quot --cache 4096

[Install]
WantedBy=default.target
EOFدستور بالا سرویسی با نام geth.service ایجاد میکنه. نکته ای که باید توجه کنید username هست که بولدش کردم. اون رو با نام کاربری ای که توی سرورتون هست و غیر از root عوض کنین.حالا دستورات زیر رو اجرا کنین. اولی برای فعال کردن سرویس به صورت خودکار هست. همون startup خودمون و دومی هم سرویس رو راه اندازی میکنه:sudo systemctl enable geth
sudo systemctl start gethحالا که سرویس اجرا شد میتونید دستور curl زیر رو بزنین و وضعیت سینک شدن Node رو ببینین:curl -X POST 127.0.0.1:8545 \
--data &#039;{&amp;quotjsonrpc&amp;quot:&amp;quot2.0&amp;quot,&amp;quotmethod&amp;quot:&amp;quoteth_syncing&amp;quot,&amp;quotparams&amp;quot:[],&amp;quotid&amp;quot:1}&#039; \
-H &#039;Content-Type: application/json&#039;دقت کنید که در حال حاضر فقط میتونید از داخل سرور درخواست بفرستین و با Node ارتباط داشته باشین، چون فقط روی 127.0.0.1 جواب میده. قصد ما اینه که کسی از بیرون نتونه به Node درخواست بده.راه اندازی و پیکربندی Nginx به عنوان Reverse Proxyبرای نصب Nginx این دستورات رو اجرا کنید:sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/nginx
sudo apt update
sudo apt install nginx -yبعد از نصب فایل پیکربندی پیشفرض رو باید ویرایش کنید. من اول خالیش میکنم و بعدش محتوای مورد نظرم رو با ادیتور Nano توش قرار میدم.sudo echo &amp;quot&amp;quot &gt; /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-enabled/defaultمحتوای زیر رو داخل فایل پیکربندی پیش فرض () قرار بدید:server {
    listen 80 default_server;
    
    location / {
        proxy_pass http://127.0.0.1:8545/;
        proxy_set_header Host $host;
    }
}همونطور که تو کد بالا میبینید، تمامی درخواست هایی که به پورت ۸۰ ارسال بشه به وسیله این Reverse Proxy به Node ما تو سرور ارسال میشه.حالا میتونید درخواست های RPC خودتون رو از خارج از سرور ارسال کنید:curl -X POST x.x.x.x:80 \
--data &#039;{&amp;quotjsonrpc&amp;quot:&amp;quot2.0&amp;quot,&amp;quotmethod&amp;quot:&amp;quoteth_syncing&amp;quot,&amp;quotparams&amp;quot:[],&amp;quotid&amp;quot:1}&#039; \
-H &#039;Content-Type: application/json&#039;خوب حالا همه چیز آماده هست اما هنوز Node شما ایمن نیست و هرکسی میتونه به سرور شما درخواست ارسال کنه. من برای این کار از Basic Authentication استفاده کردم تا یک نام کاربری و رمز عبور برای ارسال درخواست نیاز باشه. برای ساختن این نام کاربری و رمز عبور میتونین بسته apache2-utils رو نصب کنید:sudo apt install apache2-utils -yبعد از نصب باید یک فایل که حاوی نام کابری و رمز عبور شما هست ایجاد کنید. به جای username، هر نام کاربری ای که مورد نظرتون هست رو وارد کنید و بعد از شما درخواست رمز عبور میکنه که باید وارد کنید.sudo htpasswd -c /etc/nginx/.ethereum usernameبعد از اجرا و وارد کردن رمز عبور، محتوای فایل بالا چیزی شبیه این میشه:username:$apr1$viklpnqu$xWfZPGPENkctPiPm2nF740حالا باید دستورات مربوط به Authentication رو به Nginx اضافه کنیم. فایل پیکربندی پیشفرض رو باز کنید:sudo nano /etc/nginx/sites-enabled/defaultکدهای بولد شده رو مثل زیر اضافه کنید:server {
    listen 80 default_server;
    
    location / {
        auth_basic &amp;quotProtected Area!&amp;quot
        auth_basic_user_file /etc/nginx/.ethereum;
        proxy_pass http://127.0.0.1:8545/;
        proxy_set_header Host $host;
    }
}بعد از این کار Nginx رو ریلود کنید تا فایل پیکربندی جدید اعمال بشه:sudo systemctl reload nginxحالا دستور Curl زیر رو بزنید و نتیجه رو ببینید:curl -X POST -u username:password x.x.x.x:80 \
--data &#039;{&amp;quotjsonrpc&amp;quot:&amp;quot2.0&amp;quot,&amp;quotmethod&amp;quot:&amp;quoteth_syncing&amp;quot,&amp;quotparams&amp;quot:[],&amp;quotid&amp;quot:1}&#039; \
-H &#039;Content-Type: application/json&#039;خوب حالا Node شما ایمن شده و راحت میتونید برنامه خودتون رو برای ارتباط با این Node بنویسید.نکته مهمی که باید بهش اشاره کنم اینه که حجم فعلی دیتابیس Ethereum تا امروز معادل ۱۳۲ گیگابایته. مورد دیگه ای هم که خیلی مهمه اینه من نوع Sync کردن رو روی Fast گذاشتم. که حجم کمتری میگیره و البته کار شما رو هم راه میندازه.حجم دیتابیس Ethereumخوب اینم از پست اول و آموزش من. امیدوارم که خوب بوده باشه. اگر سوالی بود بپرسید.</description>
                <category>محمدحسن مزروعی</category>
                <author>محمدحسن مزروعی</author>
                <pubDate>Sat, 09 May 2020 17:49:49 +0430</pubDate>
            </item>
            </channel>
</rss>