<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Amir Fatemi</title><link>https://virgool.ir/feed/@amir.fatemi</link><description>DevOps Engineer</description><language>fa</language><pubDate>2026-11-11 22:45:02</pubDate><image><url>https://files.virgool.ir/upload/users/16647/avatar/pxzh3z.png</url><title>Amir Fatemi</title><link>https://virgool.ir/@amir.fatemi</link></image><item><title>Install Spinnaker with Halyard on Kubernetes ( update 22 Aug 2020)</title><link>https://virgool.ir/@amir.fatemi/install-spinnaker-with-halyard-on-kubernetes-vz72efnjqovw</link><description>اسپیناکر ابزاری اپن‌سورس جهت پیاده‌سازی Continuous Delivery است که توسط کمپانی Netflix طراحی شده و به تیم‌های توسعه‌ٔ نرم‌افزار این امکان را می‌دهد تا اقدام به دیپلوی نسخه‌های جدید نرم‌افزارهای خود در محیط کلود نمایند (Continuous Delivery یا به اختصار CD به فرآیندی گفته می‌شود که طی آن دولوپرها می‌توانند نسخه‌های جدید اپلیکیشن را به شکلی سریع، ایمن و مطمئن جهت دیپلوی روی سرورهای اصلی آماده نمایند.)اگر با ابزار اسپیناکر آشنا نیستید ابتدا این مطلب رو بخونیدنیازمندی های قبل از نصب:Docker 18.x with proxies configuredA Kubernetes cluster Helm3مرحله اول:برای نصب و مدیریت اسپیناکر اول باید ابزار Halyard را نصب کنیم. که خود سایت رسمی اینطوری تعریفش کرده :Halyard is a command-line administration tool that manages the lifecycle of your Spinnaker deployment, including writing &amp; validating your deployment’s configuration, deploying each of Spinnaker’s microservices, and updating the deployment.برای نصب دوتا راه حل کلی دارید . اول اینکه مستقیم روی سیستم عاملتون نصب کنید که فعلا سیستم های زیر رو فقط ساپورت میکنه :Ubuntu 14.04, 16.04 or 18.04 (Ubuntu 16.04 requires Spinnaker 1.6.0 or later)Debian 8 or 9macOS (tested on 10.13 High Sierra only)یا اینکه از داکرش استفاده کنید  اینطوری هم مستقل از سیستم عامل کار میکنیم و کار باهاش خیلی راحت تره. در این اموزش ما از نسخه داکرش استفاده می کنیم.یک فایل docker-compose.yaml بسازید که محتوای داخلش مانند زیر باشد :version: &#34;3.3&#34;&#xA;  services:&#xA;      halyard:&#xA;        container_name: halyard&#xA;        restart: always&#xA;        image: gcr.io/spinnaker-marketplace/halyard:stable&#xA;        volumes:&#xA;           - ./k8s:/home/spinnaker/k8s/&#xA;           - ./halyard:/home/spinnaker/.hal&#xA;       environment:&#xA;           KUBECONFIG: /home/spinnaker/k8s/config/kubeconfig.conf&#xA;      ports:&#xA;         - 8084:8084&#xA;         - 9000:9000داکر کامپوز بالا فقط دوتا نکته مهم داره که حتما باید رعایت کنید . اول اینکه حتما kubeconfig.conf  رو برای اتصال به کوبر داخل پوشه k8s/config قرار دهید. دوم اینکه پوشه کانفیگ halyard رو به بیرون mount  کردیم که آن را از دست ندهیم. ساختار پوشه های ما در هاست بصورت زیر خواهد بود:├── docker-compose.yml├── halyard└── k8s    └── config        └──kubeconfig.confدر اخر فایل داکر کامپوز خودمون رو اجرا می کنیم:docker-compose up -d &#xA;docker exec -it halyard bash&#xA;source &lt;(hal --print-bash-completion)فقط خط سوم نیاز به توضیح داره که اونم بخاطر اینکه فعال شدن command completion هستقبل از رفتن به مرحله بعدی یک namespace به نام spinnaker توی کوبرتون بسازیدمرحله دوم  انتخاب Cloud Providersاسپیناکر از Cloud Providers های زیر پشتیبانی میکنه :Amazon Web ServicesAzureCloud FoundryDC/OSGoogle Compute EngineKubernetesOracleکه ما در این آموزش از Kubernetes استفاده می کنیم. پس اگر انتخاب شما بغیر از Kubernetes هست ادامه اموزش براتون مفید نیست.برای انتخاب Cloud Providers از کامند زیر استفاده کنید:hal config provider kubernetes enableدر مرحله بعد یک کاربر برای اسپیناکر می سازیم:hal config provider kubernetes account add &lt;my_account&gt; \&#xA;    --provider-version v2 \&#xA;    --context $(kubectl config current-context)در قسمت &lt;my_account&gt; یک نام کاربری دلخواه قرار دهید . و برای استفاده های بعدی در environment variable با نام ACCOUNT درست کنید . مانند زیرexport ACCOUNT=safaابزار Halyard از انواع  Spinnaker deployment پشتیبانی میکنه برای فعال کردن حالت distributed deployment از گامند زیر استفاده کنید :hal config deploy edit --type distributed --account-name $ACCOUNTمرحله سوم انتخاب Persistent Storage :اسپیناکر به persistent store نیاز داره برای ذخیره continuous delivery pipelines و بقیه کانفیگ هاش. برای انتخاب میتونید از multiple storage providers های زیر انتخاب کنید    Azure Storage    Google Cloud Storage    Minio    Redis (warning: Unsupported and not recommended for production environments)    S3    Oracle Object Storageبرای اینکار ما از minio استفاده میکنیم. پس برای ادامه کار موقت از کانتینر خارج بشید و برید داخل مستر Kubernetes تا با استفاده از helm  ابزار minio رو نصب کنیم . فرض ما اینکه شما helm  رو نصب کردید ( اگر از ورژن 3 استفاده کنید دیگه نیازی به tiller  ندارید ). خب برای ساخت از کامند زیر استفاده می کنیمhelm install minio --namespace spinnaker   bitnami/minio --set persistence.enabled=false,persistence.size=5Gi,persistence.existingClaim=spinnaker-pvcنکته اول : شما باید در Namespace فعلی یک PersistentVolumeClaim داشته باشید . من برای نمونه از spinnaker-pvc که از قبل ساخته بودم استفاده کردم. برای ساختن PVCs  میتونید از NFS استفاده کنیدنکته دوم : بعد از اجرا شدن کامل helm باید MINIO_ACCESS_KEY و MINIO_SECRET_KEY استخراج و داخل export هامون قرار بدیم . برای این کار از دو دستور زیر استفاده نماییدexport MINIO_ACCESS_KEY=$(kubectl get secret --namespace spinnaker minio -o jsonpath=&#34;{.data.access-key}&#34; | base64 --decode) &#xA;export MINIO_SECRET_KEY=$(kubectl get secret --namespace spinnaker minio -o jsonpath=&#34;{.data.secret-key}&#34; | base64 --decode) حال به کانتینر خودمون بر میگردیم و کامند زیرو رو اجرا می کنیم تا این اتصال بر قرار بشهecho $MINIO_SECRET_KEY | \&#xA;     hal config storage s3 edit --endpoint http://minio.spinnaker.svc:9000 \&#xA;         --access-key-id $MINIO_ACCESS_KEY \&#xA;         --secret-access-keyنکته : حتما با فایل کانفیگ Hal رفته و در قسمت persistentStorage حتما پارمتر pathStyleAccess برابر true قرار بدید در غیر این صورت pod front50 مدام کرش خواهد کردسپس برای فعال کردن s3 storage provider از کامند زیر استفاده کنید :hal config storage edit --type s3مرحله چهارم Set versionاگر دقت کرده باشید در تمامی مراحل قبل موقع تنظیم در اخر لاگ ها یک پیغام به شما نمایش میده با این مفهوم که شما ورژن اسپناکر رو هنوز انتخاب نکردید. برای این کار ابتدا کامند زیر رو بزنید : hal version listخروجی دستور بالا مانند زیر هست  - 1.18.10 (Longmire):&#xA;Changelog: https://gist.github.com/spinnaker-release/306d7e241272980642e918f64ed91fe3&#xA; Published: Tue May 05 13:46:19 GMT 2020&#xA;(Requires Halyard &gt;= 1.29&#xA; - 1.19.7 (Gilmore Girls A Year in the Life):&#xA;Changelog: https://gist.github.com/spinnaker-release/cc4410d674679c5765246a40f28e3cad&#xA; Published: Tue May 05 11:52:54 GMT 2020&#xA; (Requires Halyard &gt;= 1.32)&#xA; - 1.20.0 (Drive to Survive):&#xA;Changelog: https://gist.github.com/spinnaker-release/75d50c7b931f1089e710a0e9d1acf8c4&#xA;Published: Mon May 04 17:58:56 GMT 2020&#xA;(Requires Halyard &gt;= 1.32)هر نسخه ایی که میخواید رو انتخاب و با کامند زیر مشخص کنیدhal config version edit --version &lt;version&gt;مرحله پنجم Deploy Spinnakerاین اخرین مرحله از نصب هست . قبل از نصب Spinnaker حتما یک بار فایل کانفیگ زیرو بررسی کنید که ادرس فایل kubeconfig  در اون درست تنظیم شده باشه و اگر مشکل داشته یا شما ادرس فایل رو از پیش فرض تغییر داید حتما ویرایش کنید . ادرس این فایل در vi /home/spinnaker/.hal/configو مقدار پارمترkubeconfigFile می باشد. سپس کامند زیر رو اجرا کنید تا اسپناکر بر روی کوبر شما نصب بشهhal deploy applyاگر برای اولین بار هست که نصب می کنید بخاطر دانلود ایمیج های مربوطه ممکنه کمی طولانی بشه. پس صبور باشید ( ایمیح ها تا حدود ۱ گیگ هستند )نکته : اگر در نصب بر روی کوبر به مشکل خوردید  deploy apply رو در مود دیباگ اجرا کنید :Hal deploy apply --debug -l  مرحله ششم Spinnaker reachableبرای دستیابی به پنل گرافیکی اسپناکر اگر از روش غیر داکر استفاده کردید از کامند زیر استفاده کنید :hal deploy connectسپس از طریق ادرس localhost:9000. میتونید به پنل گرافیکی دسترسی داشته باشیدولی اگر از روش داکر استفاده کردید برید سراغ مستر Kubernetes و مقدایر سرویس های زیر رو از ClusterIP به NodePort تغییر دهیدkubectl edit svc spin-deck -n spinnakerنمونه تغییر مشابه کد زیر میتونه باشه البته پورت خروجی رو میتونید به دلخواه تغییر بدید...&#xA;spec:&#xA;  type: NodePort&#xA;  ports:&#xA;  - port: 9000&#xA;    protocol: TCP&#xA;    targetPort: 9000&#xA;    nodePort: 30900&#xA;  selector:&#xA;    app: spin&#xA;    cluster: spin-deck&#xA;  sessionAffinity: None  &#xA;status:&#xA;...و همچنین سرویس زیر روkubectl edit svc spin-gate -n spinnakerخب حالا برمیگردیم سراغ کانتینر و اخرین تغییرات رو اعمال می کنیم. برای این کار ابتدا مقدار environment variable مرود نیاز رو با نام متغییر SPIN_HOST که ادرس دسترسی به کلاستر کوبر هست رو قرار بدید و سپس کامند های زیرhal config security ui edit \&#xA;    --override-base-url &#34;http://$SPIN_HOST:30900&#34;&#xA;hal config security api edit \&#xA;    --override-base-url &#34;http://$SPIN_HOST:30800&#34;&#xA;hal deploy applyخب بالاخره مراحل نصب به اتمام رسید و از طریق ادرس http://$SPIN_HOST:30900 می تونید به محیط گرافیکی اسپناکر متصل شوید.و در اخر هر زمان خواستید اسپیناکر رو از روی کوبر پاک کنید از کامند زیر استفاده کنیدhal deploy cleanدر اخر اگر همه چیز درست بود از فایل کانفیگتون حتما بک اپ بگیرد:hal backup createدر قسمت های بعدی سعی میکنم آموزش کار با اسپیناکر رو قرار بدم. با ارزوی موفقیت برای همه :)</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Mon, 11 May 2020 18:10:31 +0430</pubDate></item><item><title>آموزش ویدویی فارسی hyperledger fabric - قسمت دوم</title><link>https://virgool.ir/@amir.fatemi/آموزش-ویدویی-فارسی-hyperledger-fabric-قسمت-دوم-u6ai8sdt3vd7</link><description>در این قسمت ابتدا یک peer به basic network اضافه می کنیم و در ادامه برای اشنایی با کامند ها بصورت درسی یک channel ساخته و هر دو peer را عضو آن می کنیم. پس از ان یک chaincode نصب کرده و با کامند های invoke و query آشنا می شویم.برای دیدن این ویدیو به کانال یوتیوب مراجعه نمایید : https://youtu.be/OoArzAgtZsUدستوراتی که در این قسمت از آن ها استفاده شده است :step1: create channel&#xA;peer channel create -o orderer.example.com:7050 -c safa -f  /etc/hyperledger/configtx/channel.tx&#xA;step2: join channel&#xA; peer channel join -b safa.block -o orderer.example.com:7050&#xA; peer channel update -o orderer.example.com:7050 -c safa -f /etc/hyperledger/configtx/Org1MSPanchors.tx&#xA;step3: Install the chaincode on peer&#xA; peer chaincode install -n mychain  -p github.com/sacc -v 1.0&#xA;step4: Instantiate the chaincode on the channel&#xA;peer chaincode instantiate -n mychain -v 1.0 -o orderer.example.com:7050 -C mychannel -c &#39;{&#34;Args&#34;:[&#34;name&#34;,&#34;amir&#34;]}&#39;&#xA;step5 : &#xA;peer chaincode query -C safa -n mychain -c &#39;{&#34;Args&#34;:[&#34;query&#34;,&#34;name&#34;]}&#39;   &#xA;step6:&#xA; peer chaincode invoke -C safa -n mychain  -c &#39;{&#34;Args&#34;:[&#34;set&#34;,&#34;family&#34;,&#34;fatemi&#34;]}&#39;</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Thu, 16 Apr 2020 20:32:31 +0430</pubDate></item><item><title>بازی با داکر قسمت دوم - Better Docker Images</title><link>https://virgool.ir/web-how/بازی-با-داکر-قسمت-دوم-better-docker-images-ezcdcofcnprm</link><description>در این سری آموزش ها سعی داریم داکر ایمیج ها با استاندارد بالاتری بسازیم که بتونیم در محیط عملیات ازشون استفاده کنیم. در این قسمت به مباحث مقدماتی می پردازیم راهکار اول : Docker build cacheهمینطور که میدانید داکر ایمیج از لایه های مختلف تشکیل شده و برنامه ما لایه هایی رو به لایه های ایمیج اولیه اضافه میکنه . حالا اگر لازم باشه بارها و بارها  build بگیرم چه بهتر که لایه هایی که تغییر میکنن کمتر باشن و این باعث میشه زمان build کوتاه تر و برای pull یا push فقط لایه های که تغییر کردن رو انتقال بدیم. وقتی میخوایم از Dockerfile استفاده کنیم داکر اول سراغ کش ها میره که نخواد کل build رو از اول بسازه و لایه هایی که تغییر نکرده رو ازشون استفاده میکنه که این کار build سرعت بیشتری بگیره. وقتی از کامند COPY استفاده میکنیم داکر با استفاده از checksum چک میکنه که اگر تغییر کرده باشه مجدد اون لایه رو می سازهپیشنهاد  : قسمت هایی که تو برنامتون کمتر تغییر میکنه رو از بخش هایی که بیشتر تغییر میکنه جدا کنید و سعی کنید اول داکر ایمیج بزارید ( درصورتی که بشه )  مثال : اگر شما در مرحله step1 تغییر زیاد دارید ولی در step 2  و  step 3 تغییری ندارید step1 رو بعد از دو step بعدی اجرا کنید . این موضوع کمک میکنه که داکر بتونه از کشی که برای step 2  و  step 3  ساخته استفاده کنه.راه حل پیشنهادی : فرض کنیم که یک برنامه nodejs داریم . حالت بدش اینکه مثل زیر عمل کنیم. یعنی همه کدها رو منتقل کنیم و بعد بریم سراغ build گرفتن. FROM node:10&#xA;WORKDIR /usr/src/app&#xA;COPY . ./&#xA;RUN npm install حالا برای بهینه کردن داکر فایل بالا از روش زیر استفاده میکنیم FROM node:10&#xA;WORKDIR /usr/src/app&#xA;COPY package*.json ./&#xA;RUN npm install&#xA;COPY . .&#xA;EXPOSE 8080&#xA;CMD [ &#34;node&#34;, &#34;server.js&#34; ]اتفاق خوبی که افتاد اینکه ما قبل از انتقال کد package*.json منتقل و در خط بعد نصبش میکنیم چون احتمال تغییرش نسبت به تغییر کد خیلی کمتره و باعث استفاده از کش داکر ایمیج زمان build میشه. راهکار دوم : ADD or COPYاین دو کامند شباهت خیلی زیادی بهم دارن و خیلی جاها میشه بجای هم استفادشون کرد اما یک فرق کوچیک دارند . کامند ADD علاوه بر کارهایی که کامند COPY انجام میده دو تا کار مهم دیگه هم انجام میده : ادرس اینترنتی رو بعنوان سورس قبول میکنه قابلیت extraction فایل های tar رو دارهاما سایت داکر رسما اعلام میکنه که خیلی بهتر از کامند COPY استفاده بشه و حجم داکر ایمیج شما کمتر میشه. سوالی که پیش میاد اگر بخوایم از اون دو قابلیت دیگه کامند ADD استفاده کنیم باید چیکار کنیم:مثال : بجای دستور های زیرADD http://example.com/big.tar.xz /usr/src/things/ &#xA;RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things&#xA;RUN make -C /usr/src/things allاز دستورات زیر استفاده کنیم : RUN mkdir -p /usr/src/things \   &#xA; &amp;&amp; curl -SL http://example.com/big.tar.xz \     &#xA;| tar -xJC /usr/src/things \     &#xA;&amp;&amp; make -C /usr/src/things allدو بخش بالا دقیقا یک کار رو انجام میده ولی کد نمونه دوم خیلی بهینه تره و پیشنهاد میشه همیشه از این روش استفاده بشه . منبعراهکار سوم :  NPM --production اگر پروژه شما Nodejs هست حتما در زمان build گرفتن بشدت حجم داکر ایمیل رو کاهش میده. علتش هم اینکه در زمان اجرای دستور علاوه بر نصب تمامی نیازمندی ها پکیج های devDependencies رو هم نصب میکنه و وقتی از تگ production استفاده میکنید الزام میکنید که دقیقا پکیج هایی که توی package.json رو فقط نصب کنهnpm install --productionراهکار چهارم : Exclude unneeded filesفایل هایی که لازم ندارید داخل داکر ایمیج قرارش بدید حتما با استفاده از فایل dockerignore مشخص کنید که زمانی که دارید فایل ها رو به داخل داکر انتقال میدید اون ها کپی نشن و حجم داکر ایمیج کمتر بشه.راهکار پنجم : Clean up layersوقتی میخواین یک پکیج نصب کنید قبلش از کامند apt-get update استفاده میکنیم. خب نکته اینجاش که این کامند بعد اجرا کلی کش ذخیره می کنده که تو بارهای بعدی سریع تر باشه ولی ما بهش نیاز نداریم و این کش رو با اضافه کردن خط اخر پاکش میکنیمRUN apt-get update \&#xA;  &amp;&amp; apt-get install ... \&#xA;  &amp;&amp; rm -rf /var/lib/apt/lists/*راهکار ششم : Install lessبا توجه به محیطی که کار میکنید حتما حواستون باشه فقط فقط پکیج های مورد نیازمون نصب بشه . مثلا اگر داریم از Debian یا Ubuntu استفاده میکنیم در زمان apt-get install حتما از تگ no-install-recommended استفاده کنید.و برای مثال apt-get install ... --no-install-recommendedیا اگر از Python pip استفاده میکنید حتما تگ no-cache-dir استفاده کنید pip install pycurl --compile --no-cache-dirمنبعراهکار هفتم : Minimize the layersچون هر خط دستور ما توی داکرفایل یک لایه حساب میشه پس هرچی بتونیم این لایه ها رو کمتر کنیم حجم داکرایمیج ما هم کمتر میشه .RUN command&#xA;RUN command2بجای دستورات بالا از دستور زیر استفاده کنیمRUN command &amp;&amp; \&#xA;         command2حالا اگر بخوایم این سبک نوشتن رو توی مثال واقعی ببینیم به عکس زیر دقت کنیددر قسمت بعدی ۷ راهکار دیگه برای ساخت داکر ایمیج های بهتر بیان میشود . تا قمست بعدی ...</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Sat, 04 Apr 2020 23:12:13 +0430</pubDate></item><item><title>بازی با داکر قسمت اول How to analyze disk usage of a Docker container</title><link>https://virgool.ir/web-how/httpsvirgoolioamirfatemiaminhow-to-analyze-disk-usage-of-a-docker-container-euzrgwtdqmrh-euzrgwtdqmrh</link><description>در این آموزش قراره بررسی کنیم که یک داکر کانتینر چقدر دیسک استفاده میکند ؟ در حل این سوال ما ابزار مانیتور کردن کانتینر نداریم و با استفاده از خود کامند های متداول داکر برای پاسخ به این موضوع استفاده میکنیم . با استفاده از کامند زیر می توانید اندازه استفاده شده توسط هر کانتینر را مشاهده کنید : docker ps -s (--size , -sDisplay total file sizes)خروجی دستور بالا به شکل زیر میباشد : مثال شماره ۱در بخش سايز ما دو عدد   2B و virtual 183MB  مشاهده می کنیم .       قسمت 2B لایه قابل نوشتن در هر کانتینر را نمایش میدهد (used for the writable layer of each container) قمست virtual مجموع لایه قابل نوشتن و لایه غیرقابل نوشتن را نمایش میدهد. (total amount of disk-space used for the read-only image data used by the container and the writable layer)لایه غیر قابل تغییر چیه؟این لایه را داکر امیج پایه این کانتینر تشکیل میده که قابل تغیر نیست . مثلا اگر داکر ایمیج شما 183MB باشد یک بار این فضا در زمان اجرای اولین کانتینر استفاده میشود و این به این معناست که اگر با ده تا کانتینر nginx داشته باشیم که از یک داکر ایمیج مشابه استفاده میکند تنها یک بار 183MB استفاده میشود و برای همه کانتینر ها استفاده میشود .مثال شماره ۱ : در عکس بالا مشاهده می کنید که ما دوتا کانتینر nginx داریم بنابرین حجم استفاده شده این دو کانتینر برابر است با 183MB + 5B + 2Bفضاهای مورد استفاده کانتینر که در این کامند شامل نمی شود:volumesswappingcheckpointsdisk space used for log-files generated by containerاگر اطلاعات کامل تری نسبت به کامند قبل نیاز دارید از کامند زیر استفاده کنیدdocker system df --verboseاطلاعاتی که این دستور به شما می دهد : Images space usageContainers space usageLocal Volumes space usageBuild cache usageیک bash script کوچک هم براتون قرار دادم که کارتون رو ساده میکنه و میاد هر کانتینر رو مجزا بررسی می کنه و حجم کانتینر رو حجم volumes استفاده شده و ادرس اون رو هم بهتون میده که امیدوارم بدرتون بخورهfor d in `docker ps | awk &#39;{print $1}&#39; | tail -n +2`; do&#xA; d_name=`docker inspect -f {{.Name}} $d`&#xA;    echo &#34;=========================================================&#34;&#xA;    echo &#34;$d_name ($d) container size:&#34;&#xA;   sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f &#34;{{.Id}}&#34; $d`&#xA;   echo &#34;$d_name ($d) volumes:&#34;&#xA;   for mount in `docker inspect -f &#34;{{range .Mounts}} {{.Source}}:{{.Destination}}                                                                                                                                                      &#xA;   {{end}}&#34; $d`; do&#xA;       size=`echo $mount | cut -d&#39;:&#39; -f1 | sudo xargs du -d 0 -h`&#xA;        mnt=`echo $mount | cut -d&#39;:&#39; -f2`&#xA;        echo &#34;$size mounted on $mnt&#34;&#xA;    done&#xA;doneخروجی دستور زیر اینگونه است : /safa_php (9c234f4aabaa) container size:113M&#xA;/safa_php (9c234f4aabaa) volumes:&#xA;112M    /home/safa/demo/code mounted on /var/www/html</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Thu, 02 Apr 2020 15:08:21 +0430</pubDate></item><item><title>آموزش ویدویی فارسی hyperledger fabric - قسمت اول</title><link>https://virgool.ir/@amir.fatemi/آموزش-ویدویی-فارسی-hyperledger-fabric-ma5lhqbdnwbz</link><description>مجموعه آموزش فارسی هایپرلجرفبریکقسمت اول : نصب هایپرلجرفبریک ورژن ۱.۴.۶ و آشنایی با basic networkلینک آموزش در آپارات با کیفیت ۳۶۰ : https://www.aparat.com/v/YXkKl لینک آموزش با کیفیت Full HD در کانال یوتیوب: https://youtu.be/RnzpwgI0poA https://youtu.be/RnzpwgI0poAهایپرلجر فبریک یک بستر ماژولار برای ساخت بلاکچین خصوصی برای ما فراهم میکند که میتوان اجزای مختلف شبکه را با توجه به نیازمان شخصی سازی کنیم. این یک شبکه بلاکچین مجوزدار است یعنی افرادی که میخواهند در شبکه مشارکت داشته باشند ، باید هویتشان تایید شود که این امر از طریق سازمان عضویت یا MSP ( Membership Service Provider-MSP  ) انجام می‌گیرد. تمامی افراد شبکه باید برای مشارکت در شبکه یک مجوز دیجتال ( certificate ) داشته باشند که در حال حاضر فبریک از استاندارد x.509 برای مجوز های دیجیتال خود اسفاده میکند.اجزای شبکهشبکه ی فبریک از مجموعه ای از المان ها و اجزا تشکیل شده که در ارتباط با هم شبکه ی بلاکچین ما را تشکیل میدهند. مهترین اجزای تشکیل دهنده ی شبکه ی فبریک عبارت است از :نودهای شبکه – Peerسازنده ی بلاک ها –  Ordererقرارداد هوشمند – Chaincodeدفتر کل –  Ledger</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Mon, 30 Mar 2020 14:10:35 +0430</pubDate></item><item><title>آموزش نصب چین کد در هایپرلجر فابریک |  Installing, instantiating chaincode on Hyperledger Fabric 1.4.6</title><link>https://virgool.ir/@amir.fatemi/آموزش-نصب-چین-کد-در-هایپرلجر-فابریک-installing-instantiating-chaincode-on-hyperledger-fabric-143-vt9sticc6ydx</link><description>در قسمت سوم میخواهیم نصب  چین کد در هایپرلجر و آشنایی با مفاهیم   را آموزش دهیم.مرحله اول:قبل از شروع حتما چک کنید که شبکه بالا هست و کانتینرهای مورد نیاز up باشند و همچنین تمامی ایمیج های هایپرلجر را داشته باشید چرا که در زمان نصب چین کد سیستم به صورت خودکار از دیگر ایمج ها استفاده کرده و آن ها را اجرا می کند.برای اطمینان از این موضوع ابتدا کامند زیر را بزنید و خروجی آن باید مانند عکس باشد.docker ps -a در اخر کامند از آپشن -a  استفاده شده است چرا که اگر کانتینری به دلیلی exit شده باشد و در دسترس نباشد مطلع شوید . docker ps خروجی دستور  مرحله دوم : برای اجرای تمامی دستور های کانفیگ شبکه باید وارد کانتینر cli شویم . ابتدا چنل مورد نظر را در تمامی پیر های مورد نظر اضافه کرده باشید . دقت کنید که با توجه به سناریو نیازی نیست چین کد روی تمامی پیر ها نصب شود و با توجه به نقش های پیر این موضوع متفاوت است . برای وارد شدن به کانتینر clidocker exec -it cli bashدر این آموزش با این فرض که پیر ها را به چنل اضافه کردیم( در آموزش ها بعدی اضافه کردن چند چنل به چند پیر و سازمان را آموزش خواهیم داد. ). بنابراین با دستور زیر اطمینان پیدا می کنیم که پیر اول ما که اطلاعات آن بصورت پیش فرض قرار گرفته است به چنل مورد نظر اضافه شده است.peer channel listدر خروجی این دستور باید نام چنل خود را ببینید. همچنین برای چک کردن مقادیر پیش فرض دستور زیر را وارد کنید exportسه پرامتر اصلی زیر را چک کنید:1.CORE_PEER_MSPCONFIGPATH2. CORE_PEER_LOCALMSPID3.CORE_PEER_ADDRESSمرحله سوم : فرآیند استقرار چین کد دو مرحله اصلی داریم :1. installدر این مرحله چین کد در تمامی پیرهای مورد نظر نصب می شود2. Instantiateدر این مرحله چین کد بر روی چنل نصب میشود و فقط یکبار انجام می شودبرای install کردن چین کد از دستور زیر استفاده می کنیم : peer chaincode install -n mychain  -p github.com/sacc -v 1.0با اپشن n  ما نام چین کد را می دهیم و با v ورژن چین کد و با p ادرس چین کد را می دهیم. توجه شود که ورژن بسیار مهم می باشد زیرا در زمان ابدیت کردن چین کد تنها نیاز است که ورژن را افزایش دهید.توجه شود که دستور بالا ساده ترین اپشن ها را دارد و برای امکانات بیشتر همچون endorsement policy  در قسمت های بعد صحبت خواهیم کرد. با اجرا دستور بالا در صورت موفقیت آمیزبودن پیغام زیر را مشاهده می کنید : Your Response:​ ​ Installed remotely response:&lt;status:200 payload:&#34;OK&#34; &gt;دقت شود در زمان نصب چین کد بدلیل تحریم ها از فیلتر شکن استفاده کنید یا از دی ان اس ها شکن .برای اینکه مطمن شویم چین کد ما بدرستی نصب شده از دستور زیر استفاده کنید : peer chaincode list --installedدر خروجی این دستور یک جدول به شما نمایش می هد که نام چین کد نصب شده روی این پیر مورد نظر را نمایش می دهدحال با تغییر دادن export به بقیه پیر ها این چین کد را روی تمامی پیرهای مورد نیاز نصب می کنیم.در آخرین مرحله با دستور زیر این چین کد را روی چنل Instantiate می کنیمpeer chaincode instantiate -n mychain -v 1.0 -o orderer.example.com:7050 -C mychannel -c &#39;{&#34;Args&#34;:[&#34;Mach&#34;,&#34;50&#34;]}&#39;پارمترهای دستور بالا : -n​ name of our chaincode-v​ version of the chaincode we want to install, more on this in later labs-C​ the channel name (This is what we created in a previous lab)-c​ The arguments we need to send through to initialize the constructor function of ourبرای مطمن شدن از دستور بالا و نصب صحیح دستور زیر را وارد کنیدpeer chaincode list --instantiated -C mychannelدر خروجی باید نام چین کد خود را مشاهده کنید . چین کد ما با موفقیت بر روی شبکه هاپیرلجرفابریک نصب شده است . در قمست های بعدی به جزئیات بیشتر و عملیات ها روی چین کد خواهیم پرداخت.این سومین قسمت از 100 قسمت آموزش هایپرلجر فابریک می باشد.موفق باشید :)</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Sat, 21 Sep 2019 18:28:10 +0430</pubDate></item><item><title>آشنایی با basic network در hyperledger fabric - قسمت اول</title><link>https://virgool.ir/@amir.fatemi/آشنایی-با-basic-network-در-hyperledger-fabric-قسمت-اول-nc7nob5l8lnd</link><description>در دومین سری از آموزش هایپرلجر فابریک  سراغ basic network می رویم تا کم کم با مفاهیم آن آشنا شویم . در قسمت اول به  آموزش نصب  هایپرلجر فابریک پرداختیم . بعد از نصب  دو پروژه سمپل در اختیار ما قرار دارد : basic networkfirst network (BYFN)اولین موضوع تفاوت این دو پورژه سمپل هست . در بیسیک نتورک ما یک organizations داریم که تنها یک peer nodes دارد و در فرست نتورک ما دو organizations داریم که هر کدام دو peer nodes دارند . علاوه بر این تفاوت اصلی در فرست نتورک جزیات بیشتری از شبکه وجود دارد که در آموزش های بعدی به آن می پردازیم . در این سری آموزش ها بعد از معرفی کامل بیسیک نتورک و فرست نتورک خودمان بصورت مستقل و از پایه اقدام به ساخت شبکه خواهیم کرد. ابتدا به معرفی ساختار فولدر های این پروژه می رویم :فولدر config : در این پوشه فایل هایی مانند کانفیگ چنل و جنسیس بلاک و .. قرار میگیرد . نام این فولدر دلخواه هست و اگر تغییر دادید حتما در زمان معرفی این فایل کانفیگ ها به شبکه هایپرلجر باید نام جدید رو بهش بدید. فایل configtx.yaml : در این فایل کانفیگ های شبکه هاپیرلجر قرار می گیرد .( در آموزش های بعدی بطور کامل در باره این فایل صحبت می کنیم)فایل crypto-config.yaml : در این فایل تعداد organizations و peer های آن مشخص می شود سپس با توجه به این کانفیگ کلید های عمومی و خصوصی مورد نیاز ساخته می شود که خروجی این دستور در پوشه crypto-config قرار می گیرد.فایل docker-compose.yaml : این فایل محتوای اصلی پیکربندی شبکه هایپرلجر قرار دارد که در ان پیاده سازی شبکه مانند تعداد organizations و... انجام می شود.فایل generate.sh : این فایل فقط یک بار و برای اولین بار اجرا میشود. این فایل برای شما از روی کانفیگ های بالا چنل و جنسیس بلاک را درست می کند و در پوشه config قرار می دهد.فایل start.sh و stop.sh : همینطور که از اسمش مشخصه برای روشن و خاموش کردن شبکه هایپرلجر از این دو فایل اجرای استفاده می کنیم. در بخش بعدی به فایل های کانفیگ وارد میشویم و پارمتر های آن را معرفی خواهیم کرد.این دومین قسمت از ۱۰۰ قسمت آموزش هایپرلجرفابریک می باشد.به امید دیدار...</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Wed, 11 Sep 2019 11:15:01 +0430</pubDate></item><item><title>آموزش نصب هایپرلجر فابریک   |  Install hyperledger fabric 1.4.6</title><link>https://virgool.ir/@amir.fatemi/آموزش-نصب-هایپرلجر-فابریک-hyperledger-fabric-142-dzb37sr98izj</link><description>مقدمهمرحله اول - نصب مقدماتمرحله دوم - نصب آخرین ورژن هایپرلجر فابریکمرحله سوم - ایجاد اولین شبکه بلاکچین بر روی هایپرلجر فابریکمقدمهمحتوا : آموزش نصب آخرین ورژن از هایپرلجر فابریک هدف : ایجاد یک شبکه آزمایشگاهی برای آشنایی با پرژه هایپرلجر فابریک مخاطبین : کسانیی که با مفاهیم بلاکچین آشنا هستن و میخواهند یک پروژه بلاکچین را بصورت عملی پیاده سازی کنند . پیش نیاز :  آشنایی با مفاهیم بلاکچینآشنایی با پروژه هایپرلجرحداقل دانش در سطح LPIC1آشنایی با داکرمرحله اول - نصب مقدماتدر اولین قدم می بایست وابستگی  های این پروژه را نصب کرده و آن را اماده سازی کنیم.توجه : حتما به ورژن نرم افزار که باید نصب شود دقت کنید و حتما همان ورژن را نصب کنیدتوجه : در زمان نصب از دستور sudo استفاده نکنید. در صورت لزوم درخواست پسورد داده میشود.Prerequisites:OS Installation : Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12cURL — latest versionDocker — version 17.06.2-ce or greaterDocker Compose — version 1.14.0 or greaterGolang — version 1.11.xNodejs — version 8.x (other versions are not in support yet)NPM — version 5.xPython 2.7برای جزئیات بیشتر مراجعه فرمایید : داکیومنت رسمی برای راحتری کار می توانید از دستور زیر استفاده نمایید . این دستور تمامی نیازمندی های مورد نظر را بصورت اتومات نصب می کنید و نیازی نیست تک تک نیازمندی ها را بصورت دستی نصب کنید.curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh&#xA;chmod u+x prereqs-ubuntu.sh&#xA;./prereqs-ubuntu.shتوجه : در تمامی مراحل پیشنهاد می شود از کاربرroot استفاده نشود و از کاربر عادی استفاده کنید.توجه : اگر در زمان نصب داکر به مشکل خوردید( به علت تحریم ها امکان استفاده مستقیم از داکر فراهم نمی باشد ) از DNS ها شکن استفاده کنید .در پایان نصب شما با خروجی زیر مواجه میشودتوجه : بعد از اتمام این مرحله نصب حتما یک بار logout و سپس login کنید.همان طور که مشاهده می کنید تمامی نیازمندی های ما بجز زبان go توسط این اسکریپت نصب شده است . حال در اخرین مرحله زبان go را نصب می کنیم.cd /tmp&#xA;wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz&#xA;sudo tar -xvf go1.11.linux-amd64.tar.gz&#xA;sudo mv go /usr/local&#xA;export GOROOT=/usr/local/go&#xA;export GOPATH=$HOME/go&#xA;export PATH=$GOPATH/bin:$GOROOT/bin:$PATH&#xA;source ~/.profileبرای اطمینان از نصب شدن درست کامند زیر را وارد و از نسخه نصب شده اطمینان حاصل می کنیم.مرحله دوم - نصب آخرین ورژن هایپرلجر فابریکبرای این کار کافیست دستور زیر را وارد کنید curl -sSL http://bit.ly/2ysbOFE | bash -sفرایند نصب ممکن است کمی طول بکشد چون تمامی ایمیج های مورد نظر علاوه بر دونمونه شبکه برای شما دانلود میشود . پس از پایان کار برای اطمنان از دانلود شدن تمامی ایمیج ها دستور زیر را وارد کنید. docker imagesخروجی باید مانند زیر باشد : لیست تمامی ایمیج هایی که در سیستم ما موجود است.همچین یک فولدر با نام fabric-samples ایجاد شده است که داخل آن دو نمونه پروژه آزمایشی برای آموزش موجود می باشد. که ما در این اموزش سراغ basic-network خواهیم رفت.در اموزش های بعدی بطور مفصل به تمامی بخش های و فولدرها و کارایی آن ها خواهیم پرداخت.مرحله سوم - ایجاد اولین شبکه بلاکچین بر روی هایپرلجر فابریکابتدا وارد فولدر basic-network می شویمcd  fabric-samples/basic-network/این یک پروژه کوچک برای یادگیری و آشنایی با هایپرلجر فابریک می باشد. که دارای ساختار زیر است : در این پروژه ما یک Peer در یک organization خواهیم داشت .به همراه یک کانال و یک ordererشبکه ایجاد شده  اولین قدم اجرا کردن فایل generate.sh برای ساخت کلید های عمومی و خصوصی مورد نیاز می باشد ../generate.sh پس از آن با استفاده از کامند زیر نام کلید خصوصی سازمان را به داکر کامپوز می دهیم.ls crypto-config/peerOrganizations/org1.example.com/ca/خروجی دستور بصورت زیر است :تنها کافی است نام این کلید خصوصی را در فایل docker-compose.yml جایگذاری می کنیم. و در پایان با اجرای اسکریپت  start.sh  شبکه بلاکچین ما اجرا خواهد شد.اگر خروجی دستور شما هم مانند بالا باید یعنی شبکه بصورت کامل بالا امده است. اگر دقت کنید کانال و همچین جنسیس بلاک ساخته شده است. با دستور docker ps می توانید کانتینر هایی که ساخته شده را مانند زیر مشاهده کنید. در پایان کافی است با اجرای اسکریپت stop.sh شبکه را پایان دهیم و برای اجرای بعدی اماده شود.این قسمت اول از مجموعه ۱۰۰ قسمتی اموزش کامل هایپرلجر فابریک می باشد.به امید دیدار :)</description><category>Amir Fatemi</category><author>Amir Fatemi</author><pubDate>Sat, 03 Aug 2019 16:25:17 +0430</pubDate></item></channel></rss>