<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های sshahrani761</title>
        <link>https://virgool.io/feed/@sshahrani761</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-25 16:40:48</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>sshahrani761</title>
            <link>https://virgool.io/@sshahrani761</link>
        </image>

                    <item>
                <title>نحوه توسعه برنامه ها در Kubernetes با Okteto</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%AD%D9%88%D9%87-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-kubernetes-%D8%A8%D8%A7-okteto-i7ijejjjaevl</link>
                <description>Okteto CLI یک پروژه منبع باز است که تجربه توسعه محلی را برای برنامه های در حال اجرا در Kubernetes فراهم می کند. با استفاده از آن می توانید کد خود را بر روی IDE محلی خود بنویسید و به محض ذخیره یک فایل ، تغییرات را می توان به خوشه Kubernetes خود وارد کرد و برنامه شما فوراً بروزرسانی خواهد شد. کل این فرآیند بدون نیاز به ساخت تصاویر Docker یا اعمال مانیفست های Kubernetes اتفاق می افتد ، که می تواند زمان قابل توجهی طول بکشد.در این آموزش ، شما از Okteto برای بهبود بهره وری در هنگام تهیه یک برنامه بومی Kubernetes استفاده خواهید کرد. ابتدا ، یک خوشه Kubernetes ایجاد می کنید و از آن برای اجرای یک برنامه استاندارد “Hello World” استفاده می کنید. سپس از Okteto برای توسعه و به روز کردن خودکار برنامه خود بدون نیاز به نصب محلی استفاده خواهید کرد.پیش نیازهاقبل از شروع این آموزش ، موارد زیر را نیاز خواهید داشت:⦁ خوشه Kubernetes 1.12+ . در این آموزش ، از یک خوشه vpsgol Kubernetes با سه گره استفاده می شود ، اما شما می توانید با استفاده از یک روش دیگر ، خوشه ایجاد کنید.⦁ kubectl و doctl برای برقراری ارتباط با خوشه شما نصب و تنظیم شده باشند.⦁ یک حساب کاربری Docker Hub⦁ Docker در حال اجرا بر روی دستگاه محلی شما.مرحله 1 – ایجاد برنامه Hello Worldبرنامه “hello world” یک سنت قدیمی در توسعه وب است. در این حالت ، یک سرویس وب ساده است که به هر درخواست با ” hello world” پاسخ می دهد. اکنون که خوشه Kubernetes خود را ایجاد کرده اید ، اجازه دهید یک برنامه “Hello World” را در Golang و مانیفیستی که برای استقرار آن در Kubernetes استفاده خواهید کرد ، ایجاد کنیم.اولین به دایرکتوری هوم خود سوییچ کنید:⦁ $ cd ~⦁اکنون یک دایرکتوری جدید به نام hello_world تهیه کرده و به داخل آن بروید:⦁ $ mkdir hello_world⦁⦁ $ cd hello_worldبا IDE یا ویرایشگر متن مورد علاقه خود ، فایل جدیدی را با نام main.go ایجاد و باز کنید:⦁ $ nano main.go⦁main.go یک وب سرور مجازی Golang خواهد بود که پیام hello world را به شما باز می گرداند !. بنابراین ، اجازه دهید از کد زیر استفاده کنیم:main.gopackage mainimport (“fmt”“net/http”)func main() {fmt.Println(“Starting hello-world server…”)http.HandleFunc(“/”, helloServer)if err := http.ListenAndServe(“:8080”, nil); err != nil {panic(err)}}func helloServer(w http.ResponseWriter, r *http.Request) {fmt.Fprint(w, “Hello world!”)}کد main.go موارد زیر را انجام می دهد:⦁ اولین عبارت در یک فایل منبع Go باید نام بسته باشد. دستورات اجرایی همیشه باید از package main استفاده کنند.⦁ بخش ورودی نشان می دهد کد بسته به چه مواردی بستگی دارد. در این حالت از fmt برای دستکاری رشته و net / http برای سرور مجازی HTTP استفاده می کند.⦁ تابع main نقطه ورود به باینری شماست. از روش http.HandleFunc برای پیکربندی سرور مجازی جهت فراخوانی helloServer در هنگام دریافت درخواست به مسیر / استفاده می شود. http.ListenAndServe یک سرور مجازی HTTP را شروع می کند که در تمام رابط های شبکه به پورت 8080 گوش می دهد.⦁ عملکرد helloServer شامل منطق کنترل کننده درخواست شما است. در این حالت ، hello world! را به عنوان پاسخ به درخواست خواهد نوشت.شما باید یک تصویر Docker ایجاد کرده و آن را به سمت رجیستری Docker خود هدایت کنید تا Kubernetes بتواند آن را دریافت و سپس برنامه را اجرا کند.یک فایل جدید با نام Dockerfile را با IDE یا ویرایشگر متن مورد علاقه خود باز کنید:⦁ $ nano Dockerfile⦁Dockerfile شامل دستورات لازم برای ساخت کانتینر Docker برنامه شما می باشد. اجازه دهید از کد زیر استفاده کنیم:DockerfileFROM golang:alpine as builderRUN apk –update –no-cache add bashWORKDIR /appADD . .RUN go build -o appFROM alpine as prodWORKDIR /appCOPY –from=builder /app/app /app/appEXPOSE 8080CMD [“./app”]CopyDockerfile شامل دو مرحله است builder و  prod:• مرحله builder  شامل ابزارهای ساخت Go است. که مسئول کپی کردن فایل ها و ساخت باینری Go است.• مرحله prod تصویر نهایی است. فقط شامل یک سیستم تهی و باینری برنامه خواهد بود.این یک تمرین خوب میباشد. کانتینر تولید شما را کوچکتر و ایمن تر می کند زیرا تنها شامل برنامه شما و دقیقاً آنچه برای اجرای آن لازم است می باشد.تصویر کانتینر را بسازید (نام_DockerHub_usus را با نام کاربری داکر هاب خود جایگزین کنید):⦁ $ docker build -t your_DockerHub_username/hello-world:latest⦁اکنون آن را به Docker Hub وارد کنید:⦁ $ docker push your_DockerHub_username/hello-world:latest⦁سپس ، یک پوشه جدید برای مانیفست Kubernetes ایجاد کنید:⦁ $ mkdir k8s⦁وقتی از مانیفست Kubernetes استفاده می کنید ، به Kubernetes می گویید که چگونه برنامه شما اجرا می شود. این بار ، یک شیء استقرار ایجاد می کنید. بنابراین ، یک فایل جدید deployment.yaml را با IDE یا ویرایشگر متن مورد علاقه خود ایجاد کنید:⦁ $ nano k8s/deployment.yaml⦁مطالب زیر یک شیء استقرار Kubernetes را شرح می دهد که تصویر داکر okteto/hello-world:latest را اجرا میکند. این محتوا را به فایل جدید خود اضافه کنید ، اما در مورد شما okteto ذکر شده بعد از برچسب image را با your_DockerHub_username جایگزین کنید:~/hello_world/k8s/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: hello-worldspec:selector:matchLabels:app: hello-worldreplicas: 1template:metadata:labels:app: hello-worldspec:containers:– name: hello-worldimage: your_DockerHub_username/hello-world:latestports:– containerPort: 8080مانیفست استقرار دارای سه بخش اصلی است:⦁ metadata  نام استقرار شما را مشخص می کند.⦁ replicas  مشخص می کند که چند نسخه از آن را می خواهید اجرا کنید.⦁ template  به Kubernetes می گوید که چه چیزی را مستقر کند و چه برچسب هایی را اضافه نماید. در این حالت ، یک کانتینر واحد ، با تصویر okteto/hello-world:latest ، که به پورت 8080 گوش میدهد، و با برچسب app: hello-world همراه است. توجه داشته باشید که این برچسب همان مورد استفاده در بخش selector  است.اکنون به راهی برای دسترسی به برنامه خود نیاز دارید. می توانید با ایجاد یک شیء سرویس ، برنامه ای را در Kubernetes قرار دهید. بیایید با استفاده از مانیفست این کار را انجام دهیم. با IDE یا ویرایشگر متن مورد علاقه خود فایل جدیدی به نام service.yaml ایجاد کنید:⦁ nano k8s/service.yaml⦁محتوای زیر سرویس هایی را نشان می دهد که شیء استقرار hello world را در معرض دید شما قرار می دهد:k8s/service.yamlapiVersion: v1kind: Servicemetadata:name: hello-worldspec:type: LoadBalancerports:– protocol: TCPport: 80targetPort: 8080name: httpselector:app: hello-worldمانیفست سرویس چهار بخش اصلی دارد:⦁ metadata  به Kubernetes می گوید كه چگونه سرویس خود را نامگذاری كنند.⦁ type  به Kubernetes می گوید چگونه می خواهید سرویس خود را در معرض دید قرار دهید.⦁ برچسب ports  به Kubernetes می گوید كه كدام پورت را می خواهید در معرض دید قرار دهید ، و چگونه می توانید آنها را برای استقرار خود نگاشت كنید. در این حالت ، پورت 80 را به صورت خارجی در معرض دید قرار می دهید و آن را به پورت 8080 در محل استقرار خود هدایت می کنید.⦁ selector  به Kubernetes می گوید که چگونه ترافیک را هدایت کند. در این حالت ، هر پوسته با برچسب app: hello-world ترافیک دریافت می کند.اکنون شما همه چیز را برای استقرار برنامه “hello world” خود در Kubernetes دارید. در ادامه کار استقرار را انجام خواهیم داد.مرحله 2 – استفاده از برنامه Hello World شمادر این مرحله برنامه “Hello World” خود را در Kubernetes مستقر می کنید ، سپس تأیید می کنید که درست کار می کند.با استقرار برنامه خود در Kubernetes کار را شروع کنید:⦁ $ kubectl apply -f k8s⦁خروجی زیر را مشاهده خواهید کرد:Outputdeployment.apps “hello-world” createdservice “hello-world” createdبعد از گذشت حدود یک دقیقه یا بیشتر ، می توانید IP برنامه خود را بازیابی کنید. برای بررسی سرویس خود از این دستور kubectl استفاده کنید:⦁ $ kubectl get service hello-world⦁خروجی مانند این را مشاهده خواهید کرد که اشیاء سرویس Kubernetes را لیست میکند. به IP برنامه خود در ستون EXTERNAL-IP توجه کنید:OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhello-world ClusterIP your_cluster_ip your_external_ip 8080/TCP 37sمرورگر خود را باز کنید و به برنامه your_external_ip که برای برنامه “Hello World” ذکر شده است بروید. قبل از ادامه مرحله بعدی تأیید کنید که برنامه شما در حال اجرا است.تا این لحظه ، شما یک مسیر نسبتاً سنتی را برای توسعه برنامه ها با Kubernetes دنبال کرده اید. در ادامه ، هر زمان که می خواهید کد را در برنامه خود تغییر دهید ، باید یک تصویر جدید Docker بسازید و وارد کنید و سپس آن تصویر را از Kubernetes بیرون بکشید. این روند می تواند مدتی طول بکشد. Okteto برای ساده تر ساختن این حلقه درونی طراحی شده است. بیایید به Okteto CLI نگاهی بیندازیم و ببینیم چگونه می تواند کمک کند.مرحله 3 – نصب Okteto CLIاکنون با نصب Okteto CLI ، بهره وری توسعه Kubernetes را بهبود می بخشید. رابط خط فرمان Okteto یک پروژه منبع باز است که به شما امکان می دهد تغییرات کد برنامه را با برنامه های Kubernetes همزمان کنید. شما می توانید با استفاده از IDE ، اشکال زداگر یا کامپایلرهای مورد علاقه خود استفاده کنید بدون اینکه برای تست برنامه خود مجبور به تعهد ، ساخت ، ارائه یا استقرار مجدد کانتینرها باشید – همانطور که در مراحل قبلی انجام دادید.برای نصب Okteto CLI در دستگاه macOS یا Linux ، دستور زیر را اجرا کنید:⦁ $ curl https://get.okteto.com -sSfL | sh⦁بیایید نگاهی دقیق تر به این دستور بیاندازیم:⦁ از دستور curl برای انتقال داده به سرور مجازی استفاده می شود.⦁ پرچم -s هر خروجی را سرکوب می کند.⦁ پرچم -S خطاها را نشان می دهد.⦁ پرچم -f باعث عدم موفقیت درخواست در HTTP می شود.⦁ پرچم -L باعث می شود درخواست از تغییر مسیر پیروی کند.⦁ عملگر | این خروجی را به دستور sh پایپ می کند ، که آخرین باینری okteto را در دستگاه محلی شما دانلود و نصب می کند.اگر ویندوز را اجرا می کنید ، می توانید فایل را بطور متناوب از طریق مرورگر وب خود دانلود کرده و به صورت دستی آن را به PATH $ خود اضافه کنید.پس از نصب Okteto CLI ، آماده هستید تا برنامه “hello world” را در حالت توسعه قرار دهید.مرحله 4 – قرار دادن برنامه Hello world در حالت توسعهOkteto CLI به منظور جابجایی برنامه در حال اجرا بر روی خوشه Kubernetes با کد موجود در دستگاه شما طراحی شده است. برای این کار ، Okteto از اطلاعات ارائه شده از یک فایل مانیفست Okteto استفاده می کند. این فایل شیء استقرار Kubernetes را که با کد محلی شما تعویض می شود ، اعلام می کند.با IDE یا ویرایشگر متن مورد علاقه خود فایل جدیدی به نام okteto.yaml ایجاد کنید:⦁ $ nano okteto.yaml⦁بیایید یک مانیفست پایه بنویسیم که در آن می توانید نام شیء استقرار ، تصویر پایه Docker برای استفاده و یک پوسته را تعریف کنید. بعداً به این اطلاعات برمی گردیم. از فایل محتوای نمونه زیر استفاده کنید:okteto.yamlname: hello-worldimage: okteto/golang:1workdir: /appcommand: [“bash”]با اجرای دستور زیر آماده شوید تا برنامه خود را در حالت توسعه قرار دهید:⦁ $ okteto up⦁Output✓ Development environment activated✓ Files synchronizedNamespace: defaultName: hello-worldWelcome to your development environment. Happy coding!default:hello-world /app&gt;دستور okteto up برنامه “hello world” را در یک محیط توسعه عوض می کند ، این بدان معنی است که:⦁ کانتینر برنامه Hello World با تصویرداکر okteto/golang:1 به روز می شود. این تصویر شامل ابزارهای لازم برای ساخت ، آزمایش ، اشکال زدایی و اجرای برنامه “Hello World” است.⦁ یک سرویس همگام سازی فایل ایجاد شده است تا تغییرات شما بین سیستم فایل محلی و غلاف برنامه تان را به روز نگه دارد.⦁ یک پوسته از راه دور در محیط توسعه شما شروع می شود. اکنون می توانید برنامه خود را بگونه ای که در دستگاه محلی خود هستید ، بسازید ، آزمایش و اجرا کنید.⦁ هر پردازشی که در پوسته از راه دور اجرا می کنید ، همان ترافیک ورودی ، همان متغیرهای محیط ، والیوم یا رمزها را به عنوان غلافهای اصلی برنامه “Hello World” دریافت خواهد کرد. این به نوبه خود ، یک محیط توسعه کاملاً واقع بینانه و شبیه تولید را به شما می دهد.در همان کنسول ، اکنون برنامه را طبق معمول اجرا کنید (بدون ساختن و ارائه تصویر Docker) ، مانند این:⦁ Okteto&gt; go run main.go⦁OutputStarting hello-world server…اولین باری که برنامه را اجرا می کنید ، Go متعلقات شما را دانلود و برنامه را کامپایل می کند. صبر کنید تا این فرآیند کامل شود و با باز کردن مرورگر و ریفرش صفحه برنامه خود ، دقیقاً مانند گذشته ، برنامه خود را تست کنید.اکنون آماده هستید تا توسعه را مستقیماً روی Kubernetes شروع کنید.مرحله 5 – توسعه مستقیم روی Kubernetesبیایید شروع به ایجاد تغییراتی در برنامه “hello world” کنیم و سپس ببینیم که چگونه در Kubernetes بازتاب می یابند.فایل main.go را با IDE یا ویرایشگر متن مورد علاقه خود باز کنید. به عنوان مثال ، یک کنسول جداگانه باز کنید و دستور زیر را اجرا کنید:⦁ $ nano main.go⦁سپس ، پیام پاسخ خود را به Hello world from vpsgol! تغییر دهید!:main.gopackage mainimport (“fmt”“net/http”)func main() {fmt.Println(“Starting hello-world server…”)http.HandleFunc(“/”, helloServer)if err := http.ListenAndServe(“:8080”, nil); err != nil {panic(err)}}func helloServer(w http.ResponseWriter, r *http.Request) {fmt.Fprint(w, “Hello world from vpsgol!”)}اینجاست که گردش کار شما تغییر می کند. Okteto به جای ساختن تصاویر و استفاده مجدد از کانتینر برای به روزرسانی برنامه “hello world” ، تغییرات شما را در محیط توسعه خود در Kubernetes همگام سازی می کند.از کنسولی که فرمان okteto up را اجرا کردید ، با فشار دادن CTRL + C، اجرای go run main.go را لغو کنید. اکنون برنامه را دوباره اجرا کنید:⦁ Okteto&gt; default:hello-world /app&gt; go run main.go⦁OutputStarting hello-world server…به مرورگر برگردید و صفحه برنامه “Hello World” خود را مجدد لود کنید.تغییرات کد شما بلافاصله و همه بدون نیاز به تعهد ، ایجاد یا ارائه در Kubernetes اعمال شد .نتیجهOkteto با کلیک روی یک دکمه ، خوشه Kubernetes را به یک پلت فرم توسعه کاملاً برجسته تبدیل می کند. در این آموزش شما Okteto CLI را نصب و پیکربندی کرده اید تا کدهای خود را مستقیماً بر روی Kubernetes تغییر دهید تا بتوانید کد را سریعاً تایپ کنید. اکنون می توانید به مخزن نمونه Okteto بروید تا نحوه استفاده از Okteto با زبان های مختلف برنامه نویسی و اشکال زدایی را ببینید.همچنین ، اگر یک خوشه Kubernetes را با تیم خود به اشتراک می گذارید ، میتوانید به هر یک از اعضا یک فضای نام Kubernetes ارائه دهید که به گونه ای پیکربندی شده که از سایر توسعه دهندگان که بر روی همان خوشه کار میکنند، جدا باشد. این قابلیت عالی توسط اپلیکیشن Okteto در بازار Kubernetes vpsgol نیز ارائه شده است.برچسب‌ها:Golang, Kubernetes, Okteto CLI</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:10:55 +0430</pubDate>
            </item>
                    <item>
                <title>نصب و پیکربندی Nextcloud در اوبونتو 20.04</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%B5%D8%A8-%D9%88-%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C-nextcloud-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-2004-jiyj3bk2plhi</link>
                <description>یک انشعاب از ownCloud ، یک سرور مجازی اشتراک فایل است که به شما امکان می دهد محتوای شخصی خود را مانند اسناد و تصاویر را، بسیار شبیه به Dropbox ، در یک مکان متمرکز ذخیره کنید. تفاوتش با Nextcloud در این است که تمام ویژگی های آن منبع باز هستند. همچنین کنترل و امنیت داده های حساس شما را به شما باز می گرداند ، بنابراین استفاده از سرویس میزبانی ابری شخص ثالث را از بین می برد.در این آموزش ، یک نمونه Nextcloud را روی یک سرور مجازی Ubuntu 20.04 نصب و پیکربندی خواهیم کرد.پیش نیازهابرای انجام مراحل در این راهنما به موارد زیر نیاز دارید:⦁ کاربر غیر ریشه ** sudo و فایروال که روی سرور مجازی شما تنظیم شده باشند: می توانید با دنبال کردن راهنمای اولیه سرور مجازی اوبونتو 20.04 یک کاربر با امتیازات sudo ایجاد کرده و یک فایروال اساسی را تنظیم کنید.⦁ (اختیاری) یک نام دامنه که به سرور مجازی شما اشاره کند: ما با TLS / SSL اتصالات را برای نصب Nextcloud ایمن می کنیم. اگر سرور مجازی شما دارای نام دامنه باشد ، Nextcloud می تواند گواهی SSL رایگان و قابل اعتماد را از  ⦁ Let’s Encrypt رمزگذاری و مدیریت کند. در غیر این صورت ، Nextcloud می تواند گواهی SSL خود امضا شده را تنظیم کند که بتواند اتصالات را رمزگذاری کند ، اما به طور پیش فرض در مرورگرهای وب قابل اعتماد نخواهد بود.پس از اتمام مراحل فوق ، به ادامه نحوه یادگیری راه اندازی Nextcloud در سرور مجازی خود بپردازید.مرحله 1 – نصب Nextcloudما با استفاده از سیستم بسته بندی snap، Nextcloud را نصب خواهیم کرد. این سیستم بسته بندی ، که به طور پیش فرض در Ubuntu 20.04 موجود است ، به سازمان ها امکان می دهد تا نرم افزار را به همراه کلیه متعلقات و پیکربندی های مربوطه ، به یک واحد خودشمول با به روز رسانی های خودکار منتقل کنند. این بدان معنی است که به جای نصب و پیکربندی یک سرور مجازی وب و پایگاه داده و سپس پیکربندی برنامه Nextcloud برای اجرای آن ، می توانیم بسته snap را که به طور خودکار سیستم های زیرین را کنترل می کند نصب کنیم.برای دانلود پکیج snap Nextcloud و نصب آن بر روی سیستم ، تایپ کنید:⦁ $ sudo snap install nextcloud⦁بسته Nextcloud روی سرور مجازی شما دانلود و نصب می شود. شما می توانید با لیست کردن تغییراتی که مربوط به snap است ، تایید کنید که مراحل نصب موفقیت آمیز بوده است:⦁ $ snap changes nextcloud⦁OutputID Status Spawn Ready Summary4 Done today at 16:12 UTC today at 16:12 UTC Install “nextcloud” snapوضعیت و خلاصه نشان می دهد که نصب بدون هیچ مشکلی انجام شده است.دریافت اطلاعات اضافی درباره Snap Nextcloudاگر اطلاعات بیشتری درباره nextcloud snap می خواهید ، چند دستور وجود دارد که می توانند مفید باشند.دستور snap info می تواند توضیحات ، دستورات مدیریت Nextcloud موجود و همچنین نسخه نصب شده و کانال snap در حال پیگیری را به شما نشان دهد:⦁ $ snap info nextcloud⦁snap ​​می تواند اتصالاتی را که پشتیبانی می کنند تعریف کند ، که از یک سوراخ و دو شاخه تشکیل شده است که در صورت اتصال به یکدیگر ، دسترسی سریع به قابلیت های خاص یا سطح دسترسی را به شما می دهد. به عنوان مثال ، snap هایی که باید به عنوان کلاینت شبکه عمل کنند باید اتصال به شبکه را داشته باشند. برای دیدن اینکه snap کدام اتصالات را تعریف می کند ، تایپ کنید:⦁ $ snap connections nextcloud⦁OutputInterface Plug Slot Notesnetwork nextcloud:network :network –network-bind nextcloud:network-bind :network-bind –removable-media nextcloud:removable-media – –برای اطلاع از کلیه سرویس ها و برنامه های خاصی که این snap ارائه می دهد ، می توانید با تایپ کردن دستور زیر به فایل تعریف snap نگاهی بیندازید:⦁ $ cat /snap/nextcloud/current/meta/snap.yaml⦁در صورت نیاز به کمک به اشکال زدایی ، این امکان را به شما می دهد تا مؤلفه های جداگانه موجود در آن را ببینید.مرحله 2 – پیکربندی یک حساب کاربریچند روش مختلف برای تنظیم پیکربندی Snap Nextcloud وجود دارد. در این راهنما ، به جای ایجاد یک کاربر اداری از طریق رابط وب ، یک کاربر را در خط فرمان ایجاد خواهیم کرد تا از یک پنجره کوچک جلوگیری کنیم که در آن صفحه ثبت نام ادمین برای هر کسی که از آدرس IP سرور مجازی یا نام دامنه شما بازدید کند ، قابل دسترسی باشد.برای پیکربندی پیوند Nextcloud با یک حساب ادمین جدید ، از دستور nextcloud.manual-install استفاده کنید. به عنوان آرگومان باید نام کاربری و رمزعبور را وارد کنید:⦁ $ sudo nextcloud.manual-install sammy password⦁پیام زیر نشان می دهد که Nextcloud به درستی پیکربندی شده است:OutputNextcloud was successfully installedاکنون که Nextcloud نصب شده است ، باید دامنه های مورد اعتماد را تنظیم کنیم تا Nextcloud با استفاده از نام دامنه یا آدرس IP سرور مجازی به درخواست ها پاسخ دهد.مرحله 3 – تنظیم دامنه های قابل اعتمادهنگام نصب از خط فرمان ، Nextcloud نام های میزبان را محدود می کند که نمونه به آن پاسخ می دهد. به طور پیش فرض ، این سرویس فقط به درخواست های ارسال شده به نام میزبان “localhost” پاسخ می دهد. ما از طریق نام دامنه سرور مجازی یا آدرس IP سرور مجازی به Nextcloud دسترسی خواهیم داشت ، بنابراین برای پذیرش این نوع درخواست ها ، باید این تنظیم را مشخص کنیم.می توانید تنظیمات فعلی را با جستجوی مقدار آرایه trusted_domains مشاهده کنید:⦁ $ sudo nextcloud.occ config:system:get trusted_domains⦁Outputlocalhostدر حال حاضر ، فقط localhost به عنوان اولین مقدار در آرایه موجود است. می توانیم با تایپ کردن دستور زیر، ورودی برای نام دامنه یا آدرس IP سرور مجازی خود را اضافه کنیم:⦁ $ sudo nextcloud.occ config:system:set trusted_domains 1 –value=example.com⦁OutputSystem config value trusted_domains =&gt; 1 set to string example.comاگر مجدداً دامنه های مورد اعتماد را جستجو کنیم ، خواهیم دید که اکنون دو ورودی داریم:⦁ $ sudo nextcloud.occ config:system:get trusted_domains⦁Outputlocalhostexample.comاگر می خواهید یک روش دیگر برای دستیابی به مثال Nextcloud اضافه کنید ، می توانید با اجرای مجدد دستور config:system:set با یک شماره ایندکس افزایشی (“1” در دستور اول) و تنظیم –value دامنه ها یا آدرس های دیگری را اضافه کنید .مرحله 4 – ایمن سازی رابط وب Nextcloud با SSLقبل از شروع استفاده از Nextcloud ، باید رابط وب را ایمن کنیم.اگر یک نام دامنه در ارتباط با سرور مجازی Nextcloud خود دارید ، nextcloud snap می تواند به شما در دستیابی و پیکربندی یک گواهینامه SSL قابل اعتماد از Let’s Encrypt کمک کند. اگر سرور مجازی Nextcloud شما نام دامنه نداشته باشد ، Nextcloud می تواند گواهی خود امضا شده را تنظیم کند که ترافیک وب شما را رمزگذاری می کند اما به طور خودکار توسط مرورگر وب شما قابل اعتماد نخواهد بود.با این حساب ، بخش زیر را که با سناریوی شما مطابقت دارد ، دنبال کنید.گزینه 1: تنظیم SSL با Let’s Encryptاگر یک نام دامنه در ارتباط با سرور مجازی Nextcloud خود دارید ، بهترین گزینه برای تأمین امنیت رابط وب شما ، دریافت گواهی Let’s Encrypt SSL است.با باز کردن پورتها در فایروال شروع کنید که Let’s Encryptبرای تأیید مالکیت دامنه استفاده می کند. این باعث می شود صفحه ورود Nextcloud به صورت عمومی قابل دسترسی باشد ، اما از آنجا که ما قبلاً یک حساب ادمین تنظیم کرده ایم ، هیچ کس نمی تواند نصب را بدزدد:⦁ $ sudo ufw allow 80,443/tcp⦁در مرحله بعد با تایپ دستور ز یک گواهی Let’s Encrypt درخواست کنید:⦁ $ sudo nextcloud.enable-https lets-encrypt⦁ابتدا از شما سؤال خواهد شد که آیا سرور مجازی شما شرایط لازم را برای درخواست گواهینامه از سرویس Let’s Encrypt را دارد:OutputIn order for Let’s Encrypt to verify that you actually own thedomain(s) for which you’re requesting a certificate, there are anumber of requirements of which you need to be aware:1. In order to register with the Let’s Encrypt ACME server, you mustagree to the currently-in-effect Subscriber Agreement locatedhere:https://letsencrypt.org/repository/By continuing to use this tool you agree to these terms. Pleasecancel now if otherwise.2. You must have the domain name(s) for which you want certificatespointing at the external IP address of this machine.3. Both ports 80 and 443 on the external IP address of this machinemust point to this machine (e.g. port forwarding might need to besetup on your router).Have you met these requirements? (y/n)برای ادامه y را تایپ کنید.در مرحله بعد ، از شما خواسته می شود تا یک آدرس ایمیل برای استفاده در عملیات بازیابی ارائه دهید:OutputPlease enter an email address (for urgent notices or key recovery):برای ادامه ایمیل خود را وارد کرده و Enter را فشار دهید.در آخر ، نام دامنه مرتبط با سرور مجازی Nextcloud خود را وارد کنید:OutputPlease enter your domain name(s) (space-separated): example.comاز گواهی Let’s Encrypt شما درخواست می شود و به شرط آنکه همه چیز خوب پیش برود ، نمونه داخلی Apache دوباره راه اندازی می شود تا بلافاصله SSL را پیاده سازی کنید:OutputAttempting to obtain certificates… doneRestarting apache… doneاکنون می توانید به مرحله بعد پیش بروید تا برای اولین بار وارد Nextcloud شوید.گزینه 2: تنظیم SSL با گواهی خود امضا شدهاگر سرور مجازی Nextcloud شما نام دامنه ندارد ، می توانید با ایجاد یک گواهی SSL خود امضا شده رابط وب را ایمن کنید. این گواهینامه امکان دسترسی به رابط وب از طریق اتصال رمزگذاری شده را می دهد ، اما نمی تواند هویت سرور مجازی شما را تأیید کند ، بنابراین مرورگر شما به احتمال زیاد یک هشدار را نمایش می دهد.برای تولید یک گواهی خود امضا شده و پیکربندی Nextcloud برای استفاده از آن ، این دستور تایپ کنید:⦁ $ sudo nextcloud.enable-https self-signed⦁OutputGenerating key and self-signed certificate… doneRestarting apache… doneخروجی فوق نشان می دهد که Nextcloud یک گواهی خود امضا شده تولید و فعال کرده است.اکنون که رابط ایمن است ، پورت های وب را در فایروال باز کنید تا به رابط وب دسترسی پیدا کنید:⦁ $ sudo ufw allow 80,443/tcp⦁اکنون برای اولین بار آماده ورود به Nextcloud هستید.مرحله 5 – ورود به رابط وب Nextcloudاکنون که Nextcloud پیکربندی شد ، از نام دامنه یا آدرس IP سرور مجازی خود در مرورگر وب خود بازدید کنید:https://example.comتوجه: اگر یک گواهی SSL خود امضا شده تنظیم کرده اید ، مرورگر شما می تواند هشداری را در مورد عدم امنیت اتصال نشان دهد زیرا گواهی سرور مجازی توسط یک مجوز معتبر شناخته شده امضا نشده است. این برای گواهی های خود امضا شده پیش بینی می شود ، بنابراین برای رفتن به سایت ، بر روی هشدار کلیک کنید.از آنجا که قبلاً یک حساب ادمین را از خط فرمان پیکربندی کرده اید ، به صفحه ورود Nextcloud منتقل می شوید. اعتباراتی را که برای کاربر ادمین ایجاد کرده اید وارد کنید:برای ورود به رابط وب Nextcloud روی دکمه Log in کلیک کنید.اولین باری که وارد می شوید ، پنجره ای با متن معرفی و پیوندهایی با کلاینت های مختلف Nextcloud نمایش داده می شود که می توانند برای دسترسی به نمونه Nextcloud شما استفاده کنند:برای دانلود هر کلاینتی که به آن علاقه دارید ، روی دانلود کلیک کنید یا با کلیک بر روی X در گوشه بالا سمت راست ، از پنجره خارج شوید. به رابط اصلی Nextcloud منتقل خواهید شد ، جایی که می توانید شروع به آپلود و مدیریت فایل ها کنید:اکنون نصب شما کامل و ایمن است. برای آشنایی بیشتر با ویژگی ها و کارایی سیستم جدید خود ، می توانید در رابط کاربری خود به راحتی جستجو کنید.نتیجهNextcloud می تواند قابلیت های سرویس های محبوب ذخیره سازی ابری شخص ثالث را کپی کند. محتوا می تواند بین کاربران یا به صورت خارجی با URL های عمومی به اشتراک گذاشته شود. مزیت Nextcloud این است که اطلاعات در مکانی که شما کنترل می کنید بصورت ایمن ذخیره می شوند.برای عملکردهای بیشتر ، به Nextcloud’s app store مراجعه کنید ، جایی که می توانید افزونه هایی را برای گسترش قابلیت های سرویس نصب کنید.برچسب‌ها:Dropbox, Nextcloud, ownCloud</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:10:00 +0430</pubDate>
            </item>
                    <item>
                <title>نصب Jitsi Meet در Debian 10</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%B5%D8%A8-jitsi-meet-%D8%AF%D8%B1-debian-10-fm3gswoszinx</link>
                <description>Jitsi Meet یک برنامه کنفرانس ویدئویی منبع باز مبتنی بر WebRTC است. سرور مجازی Jitsi Meet اتاقهای کنفرانس ویدئویی چند نفره را در اختیار شما قرار می دهد که می توانید با استفاده از تنها یک مرورگر به آنها دسترسی داشته باشید و عملکرد قابل مقایسه ای را با یک گفتگوی کنفرانسی مثل zoom یا skype ارائه دهید. مزیت جیتسی کنفرانس این است که تمام داده های شما فقط از طریق سرور مجازی شما عبور می کند ، و رمزگذاری TLS به صورت end-to-end تضمین می کند که هیچ کس نمی تواند تماس را شنود کند. با وجود Jitsi می توانید مطمئن باشید که اطلاعات خصوصی شما به همان صورت باقی می مانند.در این آموزش ، سرور مجازی Jitsi Meet را روی Debian 10 نصب و پیکربندی خواهید کرد. پیکربندی پیش فرض به هر کسی امکان ایجاد یک اتاق کنفرانس جدید را می دهد. اما برای سرور مجازی که در اینترنت در دسترس عموم باشد ایده آل نیست بنابراین شما Jitsi Meet را نیز به گونه ای پیکربندی میکنید تا فقط کاربران ثبت نام شده بتوانند اتاق های کنفرانس جدید ایجاد کنند. بعد از ایجاد اتاق کنفرانس ، هر کاربر می تواند عضویت داشته باشد ، مادامی که آدرس منحصر به فرد و رمز اختیاری را داشته باشد.پیش نیازهاقبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:• یک سرور مجازی Debian 10 که با دنبال کردن راهنمای ستاپ اولیه سرور مجازی Debian 10 راه اندازی شده باشد، و شامل کاربر غیر ریشه فعال با sudo باشد. اندازه سرور مجازی مورد نیاز شما بیشتر به پهنای باند موجود و تعداد شرکت کننده ای که انتظار دارید از سرور مجازی استفاده کنند بستگی دارد. جدول زیر ایده های لازم را به شما ارائه می دهد.• نام دامنه پیکربندی شده برای ارجاع به سرور مجازی تان. در سراسر این راهنما ، از نام دامنه jitsi.your-domain استفاده می شود.هنگامی که شما یک سرور مجازی را برای اجرای نمونه Jitsi Meet انتخاب می کنید ، باید منابع مورد نیاز سیستم برای میزبانی اتاق های کنفرانس را در نظر بگیرید. اطلاعات معیار زیر از یک ماشین مجازی تک هسته ای با استفاده از تنظیمات ویدیویی با کیفیت بالا جمع آوری شده است:CPU پهنای باند سرور مجازی2 شرکت کننده 3% 30Kbps Up, 100Kbps Down3 شرکت کننده 15% 7Mbps Up, 6.5Mbps Downپرش در استفاده از منابع بین دو تا سه شرکت کننده به این دلیل است که Jitsi داده های تماس را مستقیماً بین کلاینت ها در صورت وجود دو نفر، هدایت می کند. هنگامی که بیش از دو کلاینت وجود دارند ، داده های تماس از طریق سرور مجازی Jitsi Meet هدایت می شوند.مرحله 1 – تنظیم نام هاست سیستمدر این مرحله ، نام هاست سیستم را تغییر میدهید تا با نام دامنه ای که قصد دارید برای مثال Jitsi Meet خود استفاده کنید مطابقت داشته باشد و آن نام هاست را به IP localhost ، 127.0.0.1 تغییر می دهید. Jitsi Meet هنگام نصب و تولید فایل های پیکربندی خود از هر دو تنظیمات استفاده می کند.ابتدا نام هاست سیستم را روی نام دامنه ای که برای نمونه Jitsi خود استفاده خواهید کرد تنظیم کنید. دستور زیر نام هاست فعلی را تنظیم کرده و /etc/hostname را تغییر میدهد که نام هاست سیستم را در بین ریبوت ها نگه میدارد:⦁ $ sudo hostnamectl set-hostname jitsi.your-domain⦁فرمانی که اجرا کردید به شرح زیر است:⦁ hostnamectl ابزاری است از مجموعه ابزارهای systemd برای مدیریت نام هاست سیستم استفاده میکند.⦁ set-hostname نام هاست سیستم را تنظیم می کند.با اجرای دستور زیر بررسی کنید که این کار موفقیت آمیز بوده است:⦁ $ hostname⦁با این کار نام هاست شما با دستور hostnamectl برمی گردد:Outputjitsi.your-domainدر مرحله بعد ، نگاشت محلی از نام هاست سرور مجازی را بر روی حلقه بازگشت آدرس IP ، 127.0.0.1 تنظیم خواهید کرد. این کار را با باز کردن فایل / etc / hosts با ویرایشگر متن انجام دهید:⦁ $ sudo nano /etc/hosts⦁سپس خط زیر را اضافه کنید:/etc/hosts127.0.0.1 jitsi.your-domainنگاشت نام دامنه سرور مجازی Jitsi Meet روی 127.0.0.1 به سرور مجازی Jitsi Meet شما اجازه می دهد تا از چندین فرآیند شبکه ای استفاده کند که اتصالات محلی را از یکدیگر در آدرس IP 127.0.0.1 قبول می کنند. این اتصالات با گواهی TLS که در نام دامنه شما ثبت شده است ، تأیید و رمزگذاری می شوند. نگاشت محلی نام دامنه روی 127.0.0.1 امکان استفاده از گواهینامه TLS برای این اتصالات شبکه محلی را فراهم می آورد.فایل خود را ذخیره کنید و از آن خارج شوید.اکنون سرور مجازی شما دارای نام هاست است که Jitsi برای نصب به آن نیاز دارد. در مرحله بعد ، پورت های فایروال مورد نیاز Jitsi و نصب کننده گواهینامه TLS را باز خواهید کرد.مرحله 2 – پیکربندی فایروالهنگامی که راهنمای راه اندازی اولیه سرور مجازی با Debian 10 را دنبال کردید ، فایروال UFW را فعال کرده و پورت SSH را باز نموده اید. سرور مجازی Jitsi به برخی از پورت های باز شده نیاز دارد تا بتواند با کلاینت ها ارتباط برقرار کند. همچنین ، فرایند نصب TLS نیاز به پورت باز دارد تا بتواند درخواست مجوز را تأیید کند.پورت هایی که باز خواهید کرد به شرح زیر است:⦁ 80 / tcp که در درخواست گواهینامه TLS مورد استفاده قرار میگیرد.⦁ 443 / TCP برای صفحه وب ایجاد اتاق کنفرانس استفاده میشود.⦁ 4443 / tcp ، 10000 / udp که برای انتقال و دریافت ترافیک تماس رمزگذاری شده استفاده می شود.دستورات ufw زیر را برای باز کردن این پورت ها اجرا کنید:⦁ $ sudo ufw allow 80/tcp⦁⦁ $ sudo ufw allow 443/tcp⦁⦁ $ sudo ufw allow 4443/tcp⦁⦁ $ sudo ufw allow 10000/udpبررسی کنید که همه آنها با دستور ufw status اضافه شده باشند:⦁ $ sudo ufw status⦁در صورت باز بودن این پورت ها ، خروجی زیر را مشاهده خواهید کرد:OutputStatus: activeTo Action From— —— —-OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW Anywhere4443/tcp ALLOW Anywhere10000/udp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443/tcp (v6) ALLOW Anywhere (v6)4443/tcp (v6) ALLOW Anywhere (v6)10000/udp (v6) ALLOW Anywhere (v6)اکنون سرور مجازی آماده نصب Jitsi است که در مرحله بعدی آن را کامل خواهید کرد.مرحله 3 – نصب Jitsi Meetدر این مرحله مخزن پایدار Jitsi را به سرور مجازی خود اضافه می کنید و سپس بسته Jitsi Meet را ز آن مخزن نصب می کنید. با این کار اطمینان حاصل می شود که همیشه آخرین بسته پایدار Jitsi Meet را اجرا می کنید.ابتدا بسته gnupg را نصب کنید که سیستم را قدر میسازد کلیدهای کریپتوگرافیک GPG را مدیریت کند:⦁ $ sudo apt install gnupg⦁سپس با ابزار دانلود wget کلید Jitsi GPG را دانلود میکنیم⦁ $ wget https://download.jitsi.org/jitsi-key.gpg.keyمدیر بسته apt از این کلید GPG برای اعتبارسنجی بسته هایی که از مخزن Jitsi دانلود می کنید ، استفاده خواهد کرد.اکنون ، کلید GPG را که با استفاده از ابزار key-apt روی رینگ apt دانلود کرده اید، اضافه نمایید:⦁ $ sudo apt-key add jitsi-key.gpg.key⦁اکنون می توانید فایل کلید GPG را حذف کنید زیرا دیگر نیازی به آن نیست:⦁ $ rm jitsi-key.gpg.key⦁اکنون با ایجاد یک فایل منبع جدید که حاوی مخزن Jitsi است ، مخزن Jitsi را به سرور مجازی خود اضافه می کنید. با ویرایشگر خود فایل جدید را باز و ایجاد کنید:⦁ $ sudo nano /etc/apt/sources.list.d/jitsi-stable.list⦁این خط را به فایل مخزن Jitsi اضافه کنید:/etc/apt/sources.list.d/jitsi-stable.listdeb https://download.jitsi.org stable/ویرایشگر خود را ذخیره کرده و از آن خارج شوید.سرانجام برای جمع آوری لیست بسته ها از مخزن Jitsi یک به روزرسانی سیستم انجام دهید و سپس بسته jitsi-meet را نصب کنید:⦁ $ sudo apt update⦁⦁ $ sudo apt install jitsi-meetدر حین نصب jitsi-meet از شما خواسته می شود نام دامنه (مثلاً jitsi.your-domain) را که می خواهید برای نمونه Jitsi Meet خود استفاده کنید وارد کنید.توجه: شما مکان نما را از قسمت نام هاست حرکت می دهید تا دکمه &lt;OK&gt; را با کلید TAB هایلایت کنید. هنگامی که &lt;OK&gt; هایلایت شد برای ارسال نام هاست ، ENTER را فشار دهید.سپس کادر جعبه گفتگوی جدیدی به شما نشان داده می شود که میپرسد آیا می خواهید Jitsi یک گواهی TLS امضا شده را استفاده کند یا از یک گواهی موجود که خودتان در اختیار دارید استفاده نماید:اگر گواهی TLS برای دامنه Jitsi ندارید ، اولین مورد یعنی Generate a new self-signed certificate را انتخاب کنید.نمونه Jitsi Meet شما اکنون با استفاده از گواهی TLS خود امضا شده نصب شده است. این باعث اخطار مرورگر می شود ، بنابراین در مرحله بعدی یک گواهی TLS امضا شده دریافت خواهید کرد.مرحله 4 – اخذ گواهینامه TLS امضا شدهJitsi Meet از گواهینامه های TLS برای رمزگذاری ترافیک تماس استفاده می کند تا هیچ کس نتواند هنگام استفاده از اینترنت به تماس شما گوش کند. گواهینامه های TLS همان گواهینامه هایی هستند که توسط وب سایت ها برای فعال کردن آدرس های HTTPS استفاده می شوند.Jitsi Meet برنامه ای را برای دانلود خودکار گواهی TLS برای نام دامنه شما تهیه می نماند که از ابزار Certbot استفاده می کند. قبل از اجرای اسکریپت نصب گواهی ، باید این برنامه را نصب کنید.ابتدا ، بسته ی certbot را با دستور زیر نصب کنید:⦁ $ sudo apt install certbot⦁اکنون سرور مجازی شما آماده اجرای برنامه نصب گواهینامه TLS تهیه شده توسط Jitsi Meet است:⦁ $ sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh⦁هنگامی که اسکریپت را اجرا می کنید ، اعلان زیر برای آدرس ایمیل نشان داده می شود:Output————————————————————————-This script will:– Need a working DNS record pointing to this machine(for domain jitsi.example.com)– Download certbot-auto from https://dl.eff.org to /usr/local/sbin– Install additional dependencies in order to request Let’s Encrypt certificate– If running with jetty serving web content, will stop Jitsi Videobridge– Configure and reload nginx or apache2, whichever is used– Configure the coturn server to use Let’s Encrypt certificate and add required deploy hooks– Add command in weekly cron job to renew certificates regularlyYou need to agree to the ACME server’s Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf)by providing an email address for important account notificationsEnter your email and press [ENTER]:این آدرس ایمیل به صادرکننده گواهینامه https://letsencrypt.org ارسال می شود و برای اطلاع دادن به شما درباره امنیت و سایر موارد مرتبط با گواهینامه TLS استفاده می شود. برای ادامه نصب باید یک آدرس ایمیل را وارد کنید. پس از آن نصب بدون هیچ گونه اعلان دیگری انجام می شود.پس از اتمام ، نمونه Jitsi Meet شما پیکربندی می شود تا از یک گواهی TLS امضا شده برای نام دامنه خود استفاده کنید. تمدید گواهینامه به طور خودکار اتفاق می افتد زیرا نصب کننده، یک اسکریپت تجدید را در /etc/cron.weekly/letsencrypt-renew قرار داده است که هر هفته اجرا می شود.سرور مجازی Jitsi Meet شما اکنون آماده و در حال اجرا است و برای آزمایش در دسترس میباشد. یک مرورگر باز کرده و نام دامنه خود را به آن معرفی کنید. قادر خواهید بود یک اتاق کنفرانس جدید ایجاد کنید و دیگران را نیز دعوت کنید تا به شما بپیوندند.تنظیمات پیش فرض برای Jitsi Meet این گونه است که هرکسی که صفحه اصلی سرور مجازی Jitsi Meet شما را مشاهده می کند می تواند یک اتاق کنفرانس جدید ایجاد کند. با این کار از منابع سیستم سرور مجازی شما برای اجرای اتاق کنفرانس استفاده می شود و به خاطر استفاده کاربران غیرمجاز مطلوب نیست. در مرحله بعد ، شما نمونه Jitsi Meet را به گونه ای پیکربندی می کنید که فقط کاربران عضو شده قادر به ایجاد اتاق کنفرانس باشند.مرحله 5 – ایجاد قفل کنفرانسدر این مرحله ، شما سرور مجازی Jitsi Meet را به گونه ای پیکربندی می کنید تا فقط کاربران ثبت نام شده بتوانند اتاق کنفرانس ایجاد کنند. فایل هایی که ویرایش می کنید توسط نصب کننده ایجاد شده اند و با نام دامنه شما پیکربندی میشوند.متغیر your_domain به جای نام دامنه در مثالهای زیر استفاده خواهد شد.ابتدا ، sudo nano /etc/prosody/conf.avail/your_domain.cfg.lua را با یک ویرایشگر متن باز کنید:⦁ $ sudo nano /etc/prosody/conf.avail/your_domain.cfg.lua⦁این خط را ویرایش کنید:/etc/prosody/conf.avail/your_domain.cfg.lua…authentication = “anonymous”…به صورت زیر:/etc/prosody/conf.avail/your_domain.cfg.lua…authentication = “internal_plain”…این پیکربندی به Jitsi Meet می گوید تا قبل از اجازه ایجاد اتاق کنفرانس توسط یک بازدید کننده جدید ، مجبور به تأیید اعتبار نام کاربری و رمز عبور شود.سپس در همان فایل قسمت زیر را به انتهای فایل اضافه کنید:/etc/prosody/conf.avail/your_domain.cfg.lua…VirtualHost “guest.your_domain”authentication = “anonymous”c2s_require_encryption = falseاین پیکربندی به کاربران ناشناس اجازه می دهد تا به اتاق های کنفرانس که توسط یک کاربر معتبر ایجاد شده اند بپیوندند. با این حال ، میهمان باید یک آدرس منحصر به فرد و رمز عبور اختیاری برای ورود به اتاق داشته باشد.در اینجا ، شما guest. را به جلوی نام دامنه خود اضافه کردید به عنوان مثال ، برای jitsi.your-domain، guest.jitsi.your-domain را قرار دهید. نام هاست guest. فقط به صورت داخل توسط Jitsi Meet استفاده می شود. شما هرگز آن را وارد مرورگر نخواهید کرد و یا نیازی به ایجاد رکورد DNS برای آن ندارید.فایل پیکربندی دیگری را در /etc/jitsi/meet/your_domain-config.js با یک ویرایشگر متن باز کنید:⦁ $ sudo nano /etc/jitsi/meet/your_domain-config.js⦁این خط را ویرایش کنید:/etc/jitsi/meet/your_domain-config.js…// anonymousdomain: ‘guest.example.com’,…تا به این صورت درآید:/etc/jitsi/meet/your_domain-config.js…anonymousdomain: ‘guest.your_domain’,…مجدداً ، با استفاده از نام هاست guest.your_domain که قبلاً از این پیکربندی استفاده کرده اید ، به Jitsi می گوید چه نام هاست داخلی را برای مهمانان تأیید نشده استفاده کند.سپس ، /etc/jitsi/jicofo/sip-communicator.properties را باز کنید:⦁ $ sudo nano /etc/jitsi/jicofo/sip-communicator.properties⦁و خط زیر را برای تکمیل تغییرات پیکربندی اضافه کنید:/etc/jitsi/jicofo/sip-communicator.propertiesorg.jitsi.jicofo.auth.URL=XMPP:your_domainاین پیکربندی یکی از فرایندهای Jitsi Meet را به سرور مجازی محلی نشان می دهد که تأیید اعتبار کاربر را که اکنون لازم است انجام می دهد.نمونه Jitsi Meet شما اکنون پیکربندی شده است و فقط کاربران ثبت نام شده می توانند اتاق کنفرانس ایجاد کنند. بعد از ایجاد یک اتاق کنفرانس ، هر کسی می تواند بدون نیاز به کاربر ثبت نام شده به آن بپیوندد. تنها آنچه نیاز دارند آدرس اتاق کنفرانس منحصر به فرد و رمزعبور اختیاری است که توسط فردی که اتاق را ایجاد کرده تنظیم شده است.اکنون که Jitsi Meet پیکربندی شده است و برای ایجاد اتاق نیاز به کاربران معتبر دارد ، باید این کاربران و رمزهای عبور خود را ثبت کنید. برای این کار از ابزار prosodyctl استفاده خواهید کرد.دستور زیر را برای افزودن کاربر به سرور مجازی خود اجرا کنید:⦁ $ sudo prosodyctl register user your_domain password⦁کاربری که شما در اینجا اضافه می کنید کاربر سیستم نیست. آنها فقط قادر به ایجاد یک اتاق کنفرانس هستند و از طریق SSH قادر به ورود به سرور مجازی شما نیستند.در آخر ، مراحل Jitsi Meet را ریستارت کنید تا پیکربندی جدید لود شود:⦁ $ sudo systemctl restart prosody.service⦁⦁ $ sudo systemctl restart jicofo.service⦁⦁ $ sudo systemctl restart jitsi-videobridge2.service⦁⦁ $ sudo systemctl restart nginx⦁اکنون Jitsi Meet نمونه هنگام ایجاد یک اتاق کنفرانس ، نام کاربری و رمزعبور را با جعبه گفتگو درخواست می کند.سرور مجازی Jitsi Meet شما اکنون تنظیم و ایمن شده است.نتیجهدر این مقاله ، شما سرور مجازی Jitsi Meet را مستقر کرده اید که می توانید از آنها برای میزبانی اتاق های کنفرانس ویدیویی ایمن و خصوصی استفاده کنید. می توانید نمونه Jitsi Meet خود را با دستورالعمل Jitsi Meet Wiki گسترش دهید.برچسب‌ها:etc, hostnamectl, Jitsi Meet, skype</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:09:06 +0430</pubDate>
            </item>
                    <item>
                <title>نصب و پیکربندی Ansible در اوبونتو 20.04</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%B5%D8%A8-%D9%88-%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C-ansible-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-2004-otwvjkhasm1x</link>
                <description>سیستم های مدیریت پیکربندی به منظور ساده سازی فرایند کنترل تعداد زیادی سرور مجازی ، برای مدیران و تیم های عملیاتی طراحی شده اند. آنها به شما اجازه می دهند بسیاری از سیستم های مختلف را به صورت خودکار از یک مکان مرکزی کنترل کنید.در حالی که بسیاری از ابزارهای مدیریت پیکربندی محبوب برای سیستمهای لینوکس مانند Chef و Puppet در دسترس هستند ، اینها معمولاً پیچیده تر از چیزی هستند که افراد می خواهند یا نیاز دارند. Ansible یک گزینه عالی برای این منظور است زیرا معماری ساده ای را ارائه می دهد که نیازی به نصب نرم افزار ویژه روی nodes ندارد ، از SSH برای انجام کارهای اتوماسیون و فایل های YAML برای تعریف جزئیات تهیه استفاده می کند.در این راهنما ، به چگونگی نصب Ansible در سرور مجازی Ubuntu 20.04 میپردازیم و در مورد اصول استفاده از این نرم افزار به صورت جزیی میپردازیم. برای دریافت اطلاعات سطح بالاتر به مقاله مقدمه ای بر مدیریت پیکربندی با Ansible مراجعه کنیدپیش نیازهابرای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:یک node کنترل Ansible: node کنترل Ansible ماشینی است که ما برای اتصال و کنترل هاست های Ansible روی SSH از آن استفاده خواهیم کرد. node کنترل Ansible شما یا می تواند دستگاه محلی شما باشد یا یک سرور مجازی اختصاص داده شده برای اجرای Ansible ، اگرچه این راهنما فرض می کند که node کنترل شما یک سیستم اوبونتو 20.04 است. اطمینان حاصل کنید که node کنترل دارای موارد زیر است:o یک کاربر غیر ریشه با امتیازات sudo. برای تنظیم این گزینه ، می توانید مراحل 2 و 3 راهنمای اولیه راه اندازی سرور مجازی ما برای اوبونتو 20.04 را دنبال کنید. با این وجود ، لطفاً توجه داشته باشید که اگر از سرور مجازی راه دور به عنوان node کنترل Ansible خود استفاده می کنید ، باید هر مرحله از این راهنما را دنبال کنید. با این کار فایروال روی سرور مجازی با ufw پیکربندی شده و دسترسی خارجی به پروفایل کاربر غیر ریشه شما امکان پذیر خواهد شد ، که هر دو به حفظ امنیت سرور مجازی از راه دور کمک می کنند.o صفحه کلید SSH مرتبط با این کاربر. برای انجام این کار ، می توانید مرحله 1 راهنمای ما درباره نحوه تنظیم کلیدهای SSH در اوبونتو 20.04 را دنبال کنید.یک یا چند هاست Ansible: هاست Ansible هر دستگاهی است که node کنترل Ansible شما برای خودکار سازی آن تنظیم شده باشد. این راهنما فرض می کند که هاست های Ansible شما سرور مجازی های Ubuntu 20.04 از راه دور هستند. اطمینان حاصل کنید که هر هاست Ansible دارای موارد زیر است:o کلید عمومی SSH node کنترل Ansible به authorized_keys کاربر سیستم اضافه شده باشد. این کاربر می تواند یا کاربر ریشه یا یک کاربر معمولی با امتیازات sudo باشد. برای تنظیم این گزینه ، می توانید مرحله 2 نحوه تنظیم کلیدهای SSH را در اوبونتو 20.04 دنبال کنید.مرحله 1 – نصب Ansibleبرای شروع استفاده از Ansible به عنوان ابزاری برای مدیریت زیرساخت های سرور مجازی خود ، باید نرم افزار Ansible را روی دستگاه نصب کنید که به عنوان node کنترل Ansible عمل خواهد کرد. برای آن از مخازن پیش فرض Ubuntu استفاده خواهیم کرد.ابتدا ایندکس بسته سیستم خود را ریفرش کنید :$ sudo apt updateپس از این بروزرسانی ، می توانید نرم افزار Ansible را با دستور زیر نصب کنید:$ sudo apt install ansiblenode کنترلی Ansible شما اکنون تمامی نرم افزارهای مورد نیاز برای مدیریت هاست شما را دارد. در مرحله بعد ، به نحوه اضافه کردن هاست ها به فایل موجودی node کنترل خواهیم پرداخت تا بتواند آنها را کنترل کند.مرحله 2 – تنظیم فایل موجودیفایل موجودی (Inventory) شامل اطلاعات مربوط به هاست هایی است که با Ansible آنها را مدیریت خواهید کرد. شما می توانید از یک تا چند صد سرور مجازی در فایل موجودی خود داشته باشید و هاست ها را می توانید در گروه ها و زیر گروه ها سازماندهی کنید. فایل موجودی نیز اغلب برای تنظیم متغیرهایی مورد استفاده قرار می گیرد که فقط برای هاست یا گروه های خاص معتبر باشند ، تا در playbookها و قالب ها مورد استفاده قرار گیرند. برخی از متغیرها همچنین می توانند بر نحوه اجرای یک playbook اثر بگذارند ، مانند متغیر ansible_python_interpreter که به زودی مشاهده خواهیم کرد.برای ویرایش محتوای موجودی پیش فرض Ansible ، فایل / etc / ansible / hosts را با استفاده از ویرایشگر متن مورد نظر خود، در node کنترل Ansible باز کنید:$ sudo nano /etc/ansible/hostsتوجه: برخی از نصب های Ansible فایل موجودی پیش فرض را ایجاد نمی کنند. اگر این فایل در سیستم شما وجود ندارد ، می توانید یک فایل جدید را در / etc / ansible / hosts ایجاد کنید یا یک مسیر موجودی سفارشی را با استفاده از پارامتر -i هنگام اجرای دستورات و playbooks تهیه کنید.فایل موجودی پیش فرض موجود توسط نصب Ansible شامل تعدادی مثال است که می توانید از آنها به عنوان مرجع برای تنظیم موجودی خود استفاده کنید. مثال زیر گروهی را به نام [servers] با سه سرور مجازی مختلف در آن تعریف می کند که هر یک توسط یک نام مستعار مشخص شده اند: server1 ،server2 و server3. حتما IP های هایلایت شده را با آدرس های IP هاست های Ansible جایگزین کنید./etc/ansible/hosts[servers]server1 ansible_host=203.0.113.111server2 ansible_host=203.0.113.112server3 ansible_host=203.0.113.113[all:vars]ansible_python_interpreter=/usr/bin/python3زیر گروهall: vars پارامتر هاست ansible_python_interpreter را تعیین می کند که برای همه هاست های موجود در این موجودی معتبر خواهد بود. این پارامتر اطمینان حاصل می کند که سرور راه دور به جای / usr / bin / python (Python 2.7) از / usr / bin / python3 (Python 3) قابل اجرا استفاده می کند که در نسخه های اخیر اوبونتو وجود ندارد.پس از اتمام ، فایل را با فشار دادن CTRL + X سپس Y و ENTER ذخیره کرده و آن را ببندید تا تغییرات خود را تأیید کنید.هر زمان که می خواهید موجودی خود را بررسی کنید ، می توانید این دستور را اجرا کنید:$ ansible-inventory –list -yخروجی شبیه به این را خواهید دید ، اما زیرساخت سرور مجازی خود را مطابق با فایل موجودی خود تعریف می کنید:Outputall:children:servers:hosts:server1:ansible_host: 203.0.113.111ansible_python_interpreter: /usr/bin/python3server2:ansible_host: 203.0.113.112ansible_python_interpreter: /usr/bin/python3server3:ansible_host: 203.0.113.113ansible_python_interpreter: /usr/bin/python3ungrouped: {}اکنون که فایل موجودی خود را پیکربندی کرده اید ، همه موارد لازم برای آزمایش اتصال به هاست های Ansible خود را دارید.مرحله 3 – آزمایش اتصالپس از تنظیم فایل موجودی برای شامل شدن سرور مجازی های خود، وقت آن است که بررسی کنیم آیا Ansible قادر به اتصال به این سرور مجازی ها و اجرای دستورات از طریق SSH است یا خیر.برای این راهنما ، ما از حساب ریشه Ubuntu استفاده خواهیم کرد زیرا این تنها حساب موجود به طور پیش فرض در سرور مجازی های تازه ایجاد شده است. اگر هاست های Ansible شما قبلاً یک کاربر sudo معمولی ایجاد کرده اند ، به شما توصیه می شود که به جای ریشه از آن حساب استفاده کنید.برای مشخص کردن کاربر سیستم از راه دور می توانید از آرگومان -u استفاده کنید. در صورت عدم ارائه ، Ansible سعی خواهد کرد که به عنوان کاربر فعلی سیستم شما در node کنترل متصل شود.از دستگاه محلی یا node کنترل Ansible خود این دستور را اجرا کنید:$ ansible all -m ping -u rootاین دستورالعمل از ماژول ping داخلی Ansible برای انجام یک تست اتصال در همه nodes از موجودی پیش فرض شما ، به عنوان root استفاده می کند. ماژول ping موارد زیر را تست خواهد کرد:آیا هاست ها در دسترس هستند.آیا اعتبار SSH معتبری دارید؛آیا هاست ها قادرند ماژول های Ansible را با استفاده از پایتون اجرا کنند.باید خروجی مشابه این دریافت کنید:Outputserver1 | SUCCESS =&gt; {“changed”: false,“ping”: “pong”}server2 | SUCCESS =&gt; {“changed”: false,“ping”: “pong”}server3 | SUCCESS =&gt; {“changed”: false,“ping”: “pong”}اگر این اولین بار است که از طریق SSH به این سرور مجازی ها وصل می شوید ، از شما خواسته می شود که صحت هاست هایی را که از طریق Ansible به آنها وصل می شوید ، تأیید کنید. وقتی از شما خواسته شد ، yes را تایپ کنید و سپس برای تأیید ENTER را بزنید.هنگامی که پاسخ “pong” را از هاست دریافت کردید ، به این معنی است که شما آماده اجرای دستورات و playbookهای Ansible در آن سرور مجازی هستید.توجه: اگر نمی توانید پاسخ موفقی از سرور مجازی های خود دریافت کنید ، برای اطلاعات بیشتر در مورد نحوه اجرای دستورات Ansible با گزینه های مختلف اتصال ، راهنمای برگه تقلب Ansible ما را بررسی کنید.مرحله 4 – اجرای دستورات Ad-Hoc (اختیاری)پس از تأیید اینکه node کنترل Ansible شما قادر به برقراری ارتباط با هاست شماست ، می توانید دستورات ad-hoc و playbooks را روی سرور مجازی های خود اجرا کنید.هر دستوری که معمولاً بر روی SSH از سرور مجازی راه دور اجرا می کنید می تواند با Ansible در سرور مجازی های مشخص شده در فایل موجودی شما اجرا شود. به عنوان نمونه ، می توانید میزان استفاده از دیسک را در همه سرور مجازی ها با دستور زیر بررسی کنید:$ ansible all -a “df -h” -u rootOutputserver1 | CHANGED | rc=0 &gt;&gt;Filesystem Size Used Avail Use% Mounted onudev 3.9G 0 3.9G 0% /devtmpfs 798M 624K 798M 1% /run/dev/vda1 155G 2.3G 153G 2% /tmpfs 3.9G 0 3.9G 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup/dev/vda15 105M 3.6M 101M 4% /boot/efitmpfs 798M 0 798M 0% /run/user/0server2 | CHANGED | rc=0 &gt;&gt;Filesystem Size Used Avail Use% Mounted onudev 2.0G 0 2.0G 0% /devtmpfs 395M 608K 394M 1% /run/dev/vda1 78G 2.2G 76G 3% /tmpfs 2.0G 0 2.0G 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup/dev/vda15 105M 3.6M 101M 4% /boot/efitmpfs 395M 0 395M 0% /run/user/0…فرمان هایلایت شده df -h را می توان با هر دستوری که دوست دارید جایگزین کنید.همچنین می توانید ماژول های Ansible را از طریق دستورات ad-hoc ، مشابه آنچه قبلاً با ماژول ping برای آزمایش اتصال انجام داده ایم ، اجرا کنید. به عنوان مثال ، در اینجا چگونگی استفاده از ماژول apt برای نصب جدیدترین نسخه vim بر روی همه سرور مجازی های موجود در موجودی شما آورده شده است:$ ansible all -m apt -a “name=vim state=latest” -u rootهمچنین هنگام اجرای دستورات Ansible می توانید هاست های فردی و همچنین گروه ها و زیر گروه ها را هدف قرار دهید. به عنوان مثال ، به این ترتیب شما می توانید uptime هر هاست در گروه سرور مجازی ها را بررسی کنید:$ ansible servers -a “uptime” -u rootما می توانیم هاست های مختلفی را با جدا کردن آنها با دو نقطه مشخص کنیم:$ ansible server1:server2 -m ping -u rootبرای کسب اطلاعات بیشتر در مورد نحوه استفاده از Ansible ، از جمله نحوه اجرای playbooks برای اتوماسیون تنظیم سرور مجازی ، می توانید راهنمای مرجع Ansible ما را بررسی کنید.نتیجهدر این راهنما ، شما Ansible را نصب کردید و یک فایل موجودی را برای اجرای دستورات ad-hoc از یک node کنترل Ansible اجرا کردید.هنگامی که تأیید کردید که قادر هستید زیرساختهای خود را از یک دستگاه کنترلر مرکزی Ansible متصل کرده و کنترل کنید ، می توانید هر دستور یا palybook مورد نظر را در مورد آن هاست اجرا کنید.برای کسب اطلاعات بیشتر در مورد نحوه استفاده از Ansible ، راهنمای کمکی در صفحه ما را ببینید.برچسب‌ها:Ansible, playbook, Puppet</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:07:50 +0430</pubDate>
            </item>
                    <item>
                <title>پیکربندی Apache HTTP با رویداد MPM و PHP-FPM در اوبونتو</title>
                <link>https://virgool.io/@sshahrani761/%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C-apache-http-%D8%A8%D8%A7-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-mpm-%D9%88-php-fpm-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-tioa0z1d8bae</link>
                <description>وب سرور مجازی Apache HTTP طی سالها پیشرفت کرده و در محیط های مختلف کار می کند و نیازهای مختلف را برطرف می کند. یکی از مشکلات مهم Apache HTTP که مانند هر سرور مجازی وب باید حل شود ، نحوه مدیریت فرآیندهای مختلف برای ارائه یک درخواست پروتکل http است. این فرآیند شامل باز کردن سوکت ، پردازش درخواست ، باز نگه داشتن اتصال برای مدت معین ، رسیدگی به رویدادهای جدید در این ارتباط و بازگشت به محتوای تولید شده توسط برنامه ساخته شده به یک زبان خاص (مانند PHP ، Perl یا Python) است . این کارها توسط یک ماژول چند پردازشی (MPM) انجام و کنترل می شود.Apache HTTP با سه MPM متفاوت ارائه می شود:⦁ Pre-fork: یک فرآیند جدید برای هر اتصال ورودی به سرور مجازی ایجاد می شود. هر فرآیند از سایرین جدا شده است ، بنابراین هیچ حافظه ای بین آنها به اشتراک گذاشته نمی شود ، حتی اگر آنها در یک نقطه از اجرای خود تماس های یکسان را انجام دهند. این یک روش ایمن برای اجرای برنامه های مرتبط با کتابخانه هایی است که از رشته سازی پشتیبانی نمی کنند – به طور معمول برنامه ها یا کتابخانه های قدیمی تر.⦁ Worker: یک فرآیند parent (والد) وظیفه راه اندازی مجموعه ای از فرآیندهای child (فرزند) را بر عهده دارد ، که برخی از آنها در حال گوش دادن به اتصالات جدید ورودی هستند ، و برخی دیگر در حال ارائه محتوای درخواستی هستند. هر فرآیند تبدیل به رشته شده است (یک رشته واحد می تواند یک اتصال را کنترل کند) بنابراین یک فرآیند می تواند همزمان چندین درخواست را انجام دهد. این روش کار با اتصالات ، باعث استفاده بهتر از منابع میشود ، در حالی که همچنان ثبات را حفظ می کند. این نتیجه ای از مجموعه فرآیندهای موجود است که غالباً رشته های در دسترس را برای ارائه اتصالات جدید فوری به صورت رایگان ارائه می دهد.⦁ Event: بر اساس Worker ، این MPM با بهینه سازی چگونگی برنامه ریزی فرآیند والد وظایف را به فرآیندهای فرزند و رشته های مرتبط با آن ها یک قدم فراتر می گذارد. اتصال بصورت پیش فرض 5 ثانیه باز می ماند و در صورت عدم وقوع اتفاق جدید ، بسته می شود. این مقدار پیش فرض دستورالعمل keep-alive است، که رشته مربوط به آن را حفظ می کند. Event MPM فرایند را قادر می سازد تا رشته ها را مدیریت کند به گونه ای که برخی از رشته ها آزاد هستند که بتوانند اتصالات جدید ورودی را کنترل کنند در حالی که برخی دیگر به اتصالات زنده متصل هستند. اجازه توزیع مجدد وظایف اختصاص یافته به رشته ها باعث می شود تا استفاده و عملکرد بهینه منابع بیشتر شود.ماژول MPM Event یک ماژول چند پردازشی سریع است که در وب سرور مجازی Apache HTTP موجود است.PHP-FPM مدیر فرآیند FastCGI برای PHP است. پروتکل FastCGI بر پایه رابط مشترک گیت (CGI) ساخته شده است ، پروتکلی که بین برنامه ها و سرور مجازی های وب مانند Apache HTTP قرار دارد. این ویژگی اجازه می دهد تا توسعه دهندگان برنامه ها را جداگانه از رفتار سرور مجازی های وب بنویسند. برنامه ها فرآیندهای خود را بطور مستقل اجرا می کنند و محصول خود را از طریق این پروتکل به سرور مجازی وب منتقل می کنند. هر اتصال جدیدی که نیاز به پردازش توسط یک برنامه داشته باشد فرآیند جدیدی را ایجاد می کند.با ترکیبی از رویداد MPM در Apache HTTP با PHP FastCGI مدیر فرآیند (PHP-FPM) ، وب سایت می تواند سریعتر لود شده و ضمن استفاده از منابع کمتر ، اتصالات همزمان بیشتری را مدیریت کند.در این آموزش عملکرد پشته LAMP را با تغییر ماژول پیش فرض چند پردازشی از pre-fork به event و با استفاده از مدیر فرآیند PHP-FPM برای مدیریت کد PHP به جای mod_php کلاسیک در Apache HTTP بهبود می بخشید.پیش نیازهاقبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:• یک سرور مجازی Ubuntu 18.04 که طبق راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 تنظیم ، و شامل یک کاربر sudo غیر ریشه و فایروال راه اندازی باشد.• پشته LAMP که طبق آموزش نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP stack) در اوبونتو 18.04 روی سرور مجازی شما نصب شده باشد.مرحله 1 – تغییر ماژول چند پردازشیاوبونتو برای فعال یا غیرفعال کردن ماژول های Apache HTTP از توزیع والد خود ، یعنی دبیان ، اسکریپت هایی را به ارث می برد. برای غیرفعال کردن ماژول Pre fork و فعال کردن ماژول Event از این مجموعه ابزار در این مرحله استفاده خواهید کرد.در این مرحله شما Apache HTTP را متوقف خواهید کرد ، ماژول PHP 7.2 را که به ماژول Pre-fork وصل شده است ، غیرفعال میکنید و سپس Pre-fork را غیرفعال میکنید تا بلافاصله ماژول Event فعال شود.ابتدا سرویس Apache HTTP را متوقف می کنید:⦁ $ sudo systemctl stop apache2⦁اکنون می توانید ماژول PHP 7.2 را که مربوط به ماژول Pre-fork است غیرفعال کنید:⦁ $ sudo a2dismod php7.2⦁سپس ماژول MPM Pre-fork MPM را غیرفعال کنید:⦁ $ sudo a2dismod mpm_prefork⦁اکنون ماژول Event MPM را فعال کنید:⦁ $ sudo a2enmod mpm_event⦁شما MPM را از Pre-fork به Event تغییر داده اید و اتصال ماژول PHP 7.2 را بین PHP و Apache HTTP حذف کرده اید. در مرحله بعدی ماژول php-fpm و همچنین کتابخانه ها و ماژول های پروکسی را نصب خواهید کرد. Apache HTTP را پیکربندی خواهید کرد تا بتواند با PHP نیز ارتباط برقرار کند.مرحله 2 – پیکربندی Apache HTTP برای استفاده از مدیر فرآیند FastCGIتا این جا روش پردازش اتصالات توسط Apache HTTP را با انتقال از MPM Pre-fork به Event تغییر داده اید. اما در طول راه ماژول PHP را که Apache HTTP را با هر برنامه اجرا شده در PHP وصل کرده است غیرفعال کرده اید.در این مرحله پردازنده PHP-FPM را نصب خواهید کرد تا Apache HTTP بتواند مجدداً برنامه های PHP را پردازش کند. و همچنین می توانید کتابخانه های متعلقات را نصب کنید و ماژول ها را فعال کنید تا هر دو بتوانند هموارتر و سریعتر از گذشته همکاری کنند.ابتدا php-fpm را نصب کنید. دستور زیر بسته PHP-FPM را نصب می کند و سرویس php7.2-fpm بصورت خودکار را که با systemd یکپارچه شده است فعال می کند ، بنابراین این سرویس در زمان بوت شروع می شود:⦁ sudo apt install php-fpm⦁برای برقراری ارتباط ، Apache HTTP و PHP به یک کتابخانه نیاز دارند که بتواند آن ظرفیت را داشته باشد. اکنون libapache2-mod-fcgid را نصب خواهید کرد ، که می تواند به عنوان واسط بین برنامه ها با سرور مجازی های وب سرویس دهی کند ، و مخصوص Apache HTTP است. این ارتباط از طریق سوکت یونیکس اتفاق می افتد.این کتابخانه را نصب کنید:⦁ $ sudo apt install libapache2-mod-fcgid⦁php-fpm و libapache2-mod-fcgid را نصب کرده اید ، اما هنوز هیچ کدان فعال نشده اند.ابتدا ماژول php-fpm را با دستور زیر فعال کنید:⦁ $ sudo a2enconf php7.2-fpm⦁سپس ماژول پروکسی HTTP Apacheرا فعال کنید.⦁ $ sudo a2enmod proxy⦁بعد از آن ماژول پروکسی FastCGI را در Apache HTTP فعال کنید:⦁ $ sudo a2enmod proxy_fcgi⦁توجه: می توانید پیکربندی این تعامل بین برنامه های PHP و Apache HTTP را از طریق سوکت UNIX با دستور زیر بخوانید:⦁ $ cat /etc/apache2/conf-enabled/php7.2-fpm.conf⦁همه چیز در حال حاضر آماده است بنابراین می توانید Apache HTTP را شروع کنید. ابتدا یک پیکربندی انجام می دهید:⦁ $ sudo apachectl configtest⦁OutputSyntax OKپس از آن می توانید Apache HTTP را رستارت کنید ، تا هنگام نصب کتابخانه FastCGI libapache2-mod-fcgid به طور خودکار شروع شود:⦁ $ sudo systemctl restart apache2⦁اکنون ماژول php-fpm را نصب ،و Apache HTTP را پیکربندی کرده اید تا با آن کار کند ، ماژول های لازم را برای کار با پروتکل FastCGI فعال کرده و خدمات مربوطه را شروع نموده اید.اکنون که Apache ماژول Event MPM را فعال کرده است و PHP-FPM در آن حضور دارد و در حال اجرا است ، زمان آن رسیده است که همه چیز بررسی شود تا مطمئن شویم طبق پیش بینی عمل میکند.مرحله 3 – پیکربندی خود را بررسی کنیدبه منظور بررسی اینکه تغییرات پیکربندی اعمال شده اند ، برخی از آزمایشات را اجرا خواهید کرد. اولین تست بررسی میکند که ماژول چند پردازشی Apache HTTP استفاده می شود. تست دوم تأیید می کند که PHP از مدیر FPM استفاده می کند.با اجرای دستور زیر سرور مجازی Apache HTTP را بررسی کنید:⦁ $ sudo apachectl -M | grep ‘mpm’⦁خروجی شما به شرح زیر خواهد بود:Outputmpm_event_module (shared)می توانید همین کار را برای ماژول پروکسی و FastCGI تکرار کنید:⦁ $ sudo apachectl -M | grep ‘proxy’⦁خروجی نشان داده شده اینگونه است:Outputproxy_module (shared)proxy_fcgi_module (shared)اگر دوست دارید کل لیست ماژول ها را ببینید ، می توانید قسمت دوم دستور را بعد از -M حذف کنید.اکنون زمان آن رسیده است که بررسی کنیم PHP از مدیر پردازشگر FastCGI استفاده می کند یا خیر. برای این کار یک اسکریپت کوچک PHP بنویسید که تمام اطلاعات مربوط به PHP را به شما نشان می دهد.دستور زیر را برای نوشتن فایلی به نام زیر اجرا کنید:⦁ $ sudo nano /var/www/your_domain/info.php⦁محتوای زیر را در فایل info.php اضافه کنید:info.php&lt;?php phpinfo(); ?&gt;اکنون به آدرس URL سرور مجازی خود مراجعه کرده و در انتها info.php را اضافه کنید. به این شکل:http://your_domain/info.phpورودی API سرور مجازی FPM / FastCGI خواهد بود.بعد از این بررسی فایل info.php را حذف کنید تا هیچ گونه اطلاعاتی در مورد سرور مجازی به صورت عمومی فاش نشود:⦁ $ sudo rm /var/www/yourdomain.com/info.php⦁در حال حاضر وضعیت کار ماژول MPM ، ماژول های مدیریت FastCGI و نحوه استفاده از کد PHP را بررسی کرده اید.نتیجهشما پشته LAMP اصلی خود را بهینه کرده اید ، بنابراین تعداد اتصالات برای ایجاد فرآیندهای جدید Apache HTTP افزایش یافته است ، PHP-FPM با کد PHP کارآمدتر عمل می کند ، و استفاده کلی از منابع بهبود یافته است.برای اطلاعات بیشتر در مورد ماژول های مختلف و پروژه های مرتبط ، به مطالب پروژه سرور مجازی Apache HTTP مراجعه کنید.برچسب‌ها:Apache HTTP, CGI, FastCGI, HTTP, keep-alive, MPM, Python, Worker</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:07:11 +0430</pubDate>
            </item>
                    <item>
                <title>نحوه تنظیم Jupyter Notebook با پایتون در Ubuntu 20.04</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%AD%D9%88%D9%87-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-jupyter-notebook-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-ubuntu-2004-tszuqaiztljq</link>
                <description>Jupyter Notebook یک برنامه وب منبع باز است که به شما امکان می دهد کد تعاملی ، تجسم سازی ها و سایر موارد را ایجاد و به اشتراک بگذارید. از این ابزار می توان همراه با چندین زبان برنامه نویسی از جمله Python ، Julia ، R ، Haskell و Ruby استفاده کرد. این اغلب برای کار با داده ها ، مدل سازی آماری و یادگیری ماشین مورد استفاده قرار می گیرد.Jupyter notebooks (یا فقط ” notebooks “) اسنادی هستند که توسط برنامه Jupyter notebook تهیه شده اند و شامل کد رایانه و عناصر متن غنی (پاراگراف ، معادلات ، ارقام ، لینک ها و …) هستند که به ارائه و به اشتراک گذاری تحقیقات قابل چاپ کمک می کنند. بنابراین می توانند ابزاری عالی برای ارائه های برگرفته از داده ها یا برنامه های مبتنی بر برنامه نویسی یا به عنوان ابزاری آموزشی باشند.این آموزش شما را با راه اندازی Jupyter notebook برای اجرا از یک سرور مجازی Ubuntu 20.04 و همچنین نحوه اتصال و استفاده از notebook از یک دستگاه محلی از طریق تونل زنی را نشان می دهد. با پایان این راهنما ، شما قادر خواهید بود با استفاده از Jupyter notebook که روی یک سرور مجازی از راه دور اجرا می شود ، کد Python 3 را اجرا کنید.پیش نیازهابرای تکمیل این راهنما ، باید یک نمونه سرور مجازی جدید اوبونتو 20.04 با یک فایروال اساسی و یک کاربر غیر ریشه با امتیازات sudo پیکربندی شده داشته باشید. می توانید یاد بگیرید که چگونه این برنامه را با اجرای آموزش اولیه راه اندازی سرور مجازی ما تنظیم کنید.مرحله 1 – تنظیم پایتونبرای شروع فرآیند ، متعلقات مورد نیاز محیط برنامه نویسی پایتون را از مخازن اوبونتو نصب خواهیم کرد. اوبونتو 20.04 با پایتون 3 از پیش نصب شده است. ما بعداً از pip مدیر بسته Python برای نصب قسمت های اضافی استفاده خواهیم کرد.ابتدا باید شاخص بسته محلی apt را به روز کنیم و سپس بسته ها را دانلود و نصب کنیم:⦁ $ sudo apt update⦁در مرحله بعد ، فایلهای هدر و پایتون را که توسط برخی از متعلقات Jupyter استفاده می شود ، نصب کنید:⦁ $ sudo apt install python3-pip python3-dev⦁اکنون می توانیم به تنظیم محیط مجازی Python بپردازیم که در آن Jupyter را نصب خواهیم کرد.مرحله 2 – یک محیط مجازی Python را برای Jupyter ایجاد کنیداکنون که پایتون 3 را داریم ، فایل های هدر آن و pip آماده هستند ، می توانیم یک محیط مجازی پایتون ایجاد کنیم تا پروژه های خود را مدیریت کنیم. ما Jupyter را در این محیط مجازی نصب خواهیم کرد.برای این کار ابتدا به دستور virtualenv نیاز داریم که می توانیم با pip نصب کنیم.pip را به روز کنید و بسته را با تایپ کردن دستور زیر نصب کنید:⦁ $ sudo -H pip3 install –upgrade pip⦁⦁ $ sudo -H pip3 install virtualenvپرچم -H تضمین می کند که رویکرد امنیتی ، محیط هوم را روی دیرکتوری هوم کاربر هدف تنظیم می کند.با نصب virtualenv ، می توانیم محیط خود را شکل دهیم. یک دایرکتوری ایجاد کنید که در آن بتوانیم فایل های پروژه خود را نگه داریم. ما این را my_project_dir می نامیم ، اما شما باید از اسمی استفاده کنید که برای تان معنی دارد و روی آن کار می کنید.در داخل دیرکتوری پروژه ، یک محیط مجازی پایتون ایجاد خواهیم کرد. به منظور استفاده از این آموزش ، آن را my_project_env خواهیم نامید اما شما باید آن را به گونه ای نامگذاری کنید که مربوط به پروژه شما باشد.⦁ $ mkdir ~/my_project_dir⦁⦁ $ cd ~/my_project_dirبا این کار دایرکتوری به نام my_project_env در دایرکتوری my_project_dir شما ایجاد می شود. در داخل ، یک نسخه محلی Python و یک نسخه محلی از pip را نصب می کند. ما می توانیم از این روش برای نصب و پیکربندی یک محیط جدا شده Python برای Jupyter استفاده کنیم.قبل از نصب Jupyter ، باید محیط مجازی را فعال کنیم. می توانید این کار را با تایپ کردن دستور زیر انجام دهید:⦁ $ source my_project_env/bin/activate⦁اعلان شما باید تغییر کند تا نشان دهد که اکنون در یک محیط مجازی پایتون فعالیت می کنید. خط فرمان شما اکنون چیزی شبیه به این را خواهد بود: (my_project_env)user@host:~/my_project_dir$در این مرحله ، شما آماده نصب Jupyter در این محیط مجازی هستید.مرحله 3 – نصب Jupyterبا فعال بودن محیط مجازی ، Jupyter را با نمونه محلی pip نصب کنید.توجه: هنگامی که محیط مجازی فعال می شود (هنگامی که اعلان شما پیش از خودmy_project_env را دارد ، به جای pip3 از pip استفاده کنید ، حتی اگر از پایتون 3 استفاده می کنید. کپی محیط مجازی ابزار همیشه بدون در نظر گرفتن نسخه پایتون ، pip نامگذاری میشود.⦁ (my_project_env)Sammy@your_server:~/my_project_dir$ pip install jupyterدر این مرحله ، شما با موفقیت همه نرم افزارهای مورد نیاز برای اجرای Jupyter را نصب کرده اید. اکنون می توانیم سرور مجازی notebook را شروع کنیم.مرحله 4 – Jupyter notebook را اجرا کنیداکنون همه موارد لازم برای اجرای Jupyter notebook را دارید! برای اجرای آن ، دستور زیر را اجرا کنید:⦁ (my_project_env)Sammy@your_server:~/my_project_dir$ jupyter notebook⦁یک گزارش از فعالیتهای Jupyter notebook به ترمینال چاپ می شود. هنگامی که Jupyter notebook را اجرا می کنید ، روی یک شماره پورت خاص اجرا می شود. اولین notebook که اجرا می کنید از پورت 8888 استفاده می کند. برای بررسی شماره پورت خاصی که Jupyter Notebook روی آن در حال اجرا است ، به خروجی فرمان مورد استفاده برای شروع آن مراجعه کنید:Output[I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret[I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir[I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at:[I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72[I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).[W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser.[C 21:23:21.361 NotebookApp]Copy/paste this URL into your browser when you connect for the first time,to login with a token:http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72اگر Jupyter notebook را روی یک رایانه محلی اجرا می کنید (نه بر روی سرور مجازی) ، می توانید به URL نمایش داده شده بروید تا به Jupyter Notebook بروید. اگر Jupyter notebook را بر روی یک سرور مجازی اجرا می کنید ، باید همانطور که در بخش بعدی بیان شده است ، با استفاده از تونل سازی SSH به سرور مجازی وصل شوید.در این مرحله ، می توانید اتصال SSH را باز نگه دارید و Jupyter notebook را در حال اجرا نگه دارید یا می توانید پس از تنظیم تونل سازی SSH ، از برنامه خارج شوید و مجدداً آن را اجرا کنید. بیایید فرآیند Jupyter notebook را متوقف کنیم. بعد از تنظیم تونل سازی SSH دوباره آن را اجرا خواهیم کرد. برای متوقف کردن فرآیند Jupyter Notebook ، CTRL + C را فشار دهید ، Y را تایپ کنید و سپس ENTER را بزنید. خروجی زیر نمایش داده می شود:Output[C 21:28:28.512 NotebookApp] Shutdown confirmed[I 21:28:28.512 NotebookApp] Shutting down 0 kernelsاکنون تونل SSH را تنظیم خواهیم کرد تا بتوانیم به notebook دسترسی پیدا کنیم.مرحله 5 – با استفاده از تنظیم SSH به سرور مجازی متصل شویددر این بخش نحوه اتصال به رابط وب Jupyter notebook با استفاده از تونل زنی SSH را نشان خواهیم داد. از آنجا که Jupyter notebook روی پورت خاصی روی سرور مجازی اجرا می شود (مانند: 8888 ،: 8889 و غیره) ، تونل سازی SSH شما را قادر می سازد به صورت ایمن به پورت سرور مجازی وصل شوید.دو بخش زیر نحوه ایجاد یک تونل SSH از 1) مک یا لینوکس یا 2) ویندوز را شرح می دهد. لطفاً برای رایانه محلی خود به بخش فرعی مربوطه مراجعه کنید.تنظیم SSH با Mac یا Linuxاگر از کامپیوتر محلی Mac یا Linux استفاده می کنید ، مراحل ایجاد یک تونل SSH مشابه استفاده از SSH برای ورود به سرور مجازی راه دور است ، به جز اینکه در فرمان ssh پارامترهای دیگری وجود دارد. در این زیر مجموعه پارامترهای اضافی مورد نیاز در فرمان ssh برای تونل زنی موفقیت آمیز ارائه خواهد شد.تونل زنی SSH با اجرای دستور SSH زیر در یک پنجره ترمینال محلی جدید قابل انجام است:⦁ $ ssh -L 8888:localhost:8888 your_server_username@your_server_ip⦁دستور ssh اتصال SSH را باز می کند ، اما -L مشخص می کند که پورت داده شده در هاست محلی (کلاینت) باید به میزبان و پورت داده شده در سمت از راه دور (سرور مجازی) ارسال شود. این بدان معنی است که هر آنچه در شماره پورت دوم (به عنوان مثال 8888) روی سرور مجازی اجرا می شود ، در اولین شماره پورت (به عنوان مثال 8888) در رایانه محلی شما ظاهر می شود.به صورت اختیاری پورت 8888 را به یکی از انتخاب های خود تغییر دهید تا از استفاده از پورتی که قبلاً توسط یک فرآیند دیگر استفاده شده است خودداری کنید.server_username نام کاربری شما (به عنوان مثال Sammy) در سرور مجازی ی است که شما ایجاد کرده اید و your_server_ip آدرس IP سرور مجازی شماست.به عنوان مثال ، برای نام کاربری sammy و آدرس سرور مجازی 203.0.113.0 ، این دستور عبارت است از:⦁ $ ssh -L 8888:localhost:8888 sammy@203.0.113.0⦁اگر بعد از اجرای دستور ssh-L خطایی ظاهر نشد ، می توانید به محیط برنامه نویسی خود بروید و Jupyter notebook را اجرا کنید:(my_project_env)Sammy@your_server:~/my_project_dir$ notebookخروجی را با URL دریافت خواهید کرد. از یک مرورگر وب در دستگاه محلی خود ، رابط وب Jupyter Notebook را با URL که با http: // localhost: 8888 شروع می شود ، باز کنید. اطمینان حاصل کنید که شماره توکن (token) درج شده است ، یا وقتی در http: // localhost: 8888 از شما خواسته شد رشته شماره توکن را وارد کنید.تونل زنی SSH با ویندوز و Puttyاگر از ویندوز استفاده می کنید ، می توانید با استفاده از Putty یک تونل SSH ایجاد کنید.همانطور که نشان داده شده است ابتدا آدرس سرور مجازی یا آدرس IP را به عنوان نام میزبان وارد کنید:سپس ، برای بازکردن منو ، روی SSH در پایین صفحه سمت چپ کلیک کرده و سپس روی Tunnels کلیک کنید. برای دسترسی به Jupyter در دستگاه محلی خود ، شماره پورت محلی را که می خواهید استفاده کنید وارد کنید. 8000 یا بیشتر را انتخاب کنید تا از پورت های استفاده شده توسط سایر سرویس ها استفاده نکنید ، و مقصد را localhost:8888 تعیین کنید که 8888 تعداد پورتی است که Jupyter notebook در آن کار می کند.اکنون روی دکمه Add کلیک کنید و پورت ها باید در لیست Forwarded ports ظاهر شوند:در آخر ، بر روی دکمه Open کلیک کنید تا از طریق SSH به سرور مجازی وصل شوید و پورت های مورد نظر را تونل بزنید. برای اتصال به Jupyter notebook که روی سرور مجازی اجرا می شود ، به http: // localhost: 8000 (یا هر پورتی که انتخاب کردید) در یک مرورگر وب بروید. اطمینان حاصل کنید که شماره توکن درج شده است ، یا وقتی در http: // localhost: 8000 از شما خواسته شده است رشته شماره توکن را وارد کنید.مرحله 6 – استفاده از Jupyter notebookدر این بخش به اصول استفاده از Jupyter notebook می پردازیم. اگر در حال حاضر Jupyter notebook را اجرا نمی کنید ، آن را با دستور Jupyter notebook شروع کنید.اکنون باید با استفاده از یک مرورگر وب به آن متصل شوید. Jupyter notebook ابزاری بسیار قدرتمند با ویژگی های بسیار است. در این بخش چند ویژگی اساسی برای تشریح شما در استفاده از notebook ارائه شده است. Jupyter notebook تمام فایل ها و پوشه های موجود در دایرکتوری را که از آن استفاده می شود نشان می دهد ، بنابراین وقتی در حال کار روی یک پروژه هستید ، حتماً آن را از دیرکتوری پروژه شروع کنید.برای ایجاد یک فایل notebook جدید ، از منوی کشویی بالا سمت راست New &gt; Python 3 را انتخاب کنید:یک notebook را باز می کند. اکنون می توانیم کد پایتون را در سلول اجرا کنیم یا سلول را به نشانه گذاری تغییر دهیم. به عنوان مثال ، با کلیک کردن بر روی Cell&gt; Cell Type&gt; Markdown از نوار پیمایش بالا ، اولین سلول را برای پذیرش Markdown تغییر دهید. اکنون می توانیم با استفاده از Markdown یادداشت هایی بنویسیم و حتی معادلات را با قرار دادن آنها بین نمادهای $ $ در LaTeX بگنجانیم. به عنوان مثال ، پس از تغییر آن به نشانه گذاری ، موارد زیر را در سلول تایپ کنید:# First EquationLet us now implement the following equation:$$ y = x^2$$where $x = 2$برای تبدیل علامت گذاری به متن غنی ، کلیدهای CTRL و ENTER را فشار دهید. باید خروجی مشابه زیر دریافت کنید:می توانید از سلول های علامت گذاری به عنوان یادداشت استفاده کرده و کد خود را مستند کنید. بیایید آن معادله را اجرا کنیم و نتیجه را چاپ کنیم. روی سلول بالا کلیک کنید ، سپس کلیدهای ALT و ENTER را با هم فشار دهید تا یک سلول در زیر آن اضافه شود. کد زیر را در سلول جدید وارد کنید.x = 2y = x**2print(y)برای اجرای کد ، CTRL + ENTER را فشار دهید. نتایج زیر را دریافت خواهید کرد:اکنون توانایی وارد کردن ماژول ها و استفاده از notebook را همانطور که می خواهید با هر محیط توسعه Python دیگر خواهید داشت!نتیجهاکنون می توانید با استفاده از Jupyter notebook کد پایتون و یادداشت های قابل تکرار را در Markdown بنویسید. برای بازدید سریع از Jupyter Notebooاز داخل رابط ، و کسب اطلاعات بیشتر Help &gt; User Interface Tour را از منوی پیمایش بالا انتخاب کنید.از اینجا ، می توانید با خواندن مقاله تجزیه و تحلیل داده ها و تجسم سازی با pandas و Jupyter notebook در پایتون 3 ، شروع به تجزیه و تحلیل داده ها و تجسم سازی کنید.برچسب‌ها:Haskell, Julia, Jupyter notebook, notebook</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 14:05:09 +0430</pubDate>
            </item>
                    <item>
                <title>نحوه ایجاد نماها (Views) برای توسعه وب Django</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%AD%D9%88%D9%87-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%86%D9%85%D8%A7%D9%87%D8%A7-views-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D9%88%D8%A8-django-lvdvpytcbhny</link>
                <description>اگر مجموعه توسعه ما Django را دنبال کرده باشید ، با موفقیت یک برنامه Django ایجاد کرده اید که به کاربران دارای امتیازات ادمین اجازه می دهد تا از طریق داشبورد UI ادمین Django ، نظرات و پست های خود را اضافه کنند. همچنین با اهرم کردن MySQL و مدل های راه حل نگاشت مربوط به آبجکت، تداوم داده ها را تنظیم کرده اید.در این آموزش ، نماهای Django را ایجاد خواهیم کرد که برنامه وب ما را قادر می سازد به درستی درخواست های وب را انجام داده و پاسخ های وب مورد نیاز را برگرداند. همانطور که در مطالب Django تعریف شده است ، یک پاسخ وب می تواند محتوای HTML یک صفحه وب ، یک تغییر مسیر یا یک خطای HTTP باشد (به عنوان مثال 404). کد توابع view تا زمانی که در مسیر Python شما باشد از لحاظ فنی می تواند در هر نقطه از پروژه شما قرار بگیرد. با این حال ، برخی از کنوانسیون های معروف برای نامگذاری و قرار دادن فایل وجود دارند که این توابع view در آنها موجودند ، و ما این روشها را دنبال خواهیم کرد.پس از اتمام مراحل این آموزش ، وبلاگ Django شما یک پست جدید را به آدرس اینترنتی IP-یا-domain / post شما وارد می کند.پیش نیازهااین آموزش بخشی از مجموعه توسعه Django است و ادامه آن سری میباشد.اگر این مجموعه را دنبال نکرده اید ، فرضیات زیر را مطرح می کنیم:• باید نسخه 3 یا بالاتر Django را نصب کرده باشید.• برنامه Django خود را به یک پایگاه داده وصل کرده اید. ما از MySQL استفاده می کنیم ، و می توانید با دنبال کردن قسمت دوم مقاله Django ،تحت عنوان “نحوه ایجاد یک برنامه Django و اتصال آن به یک بانک اطلاعاتی” ، به این اتصال دست یابید.• شما با یک سیستم عامل مستقر در یونیکس کار می کنید ، ترجیحاً با سرور مجازی ابری اوبونتو 20.04 زیرا این سیستمی است که ما روی آن آزمایش کرده ایم. اگر می خواهید Django را در محیطی مشابه تنظیم کنید ، لطفاً به آموزش “نحوه نصب Django و ایجاد یک محیط توسعه در اوبونتو 20.04” مراجعه کنید.• رابط کاربری ادمین Django خود را تنظیم کرده اید. شما می توانید این کار را با پیروی از آموزش ادمین Django انجام دهید.از آنجا که این راهنما در وهله اول با نماهای Django سروکار دارد ، حتی اگر ستاپ کمی متفاوتی دارید، می توانید آن را دنبال کنید.مرحله 1 – ایجاد توابع viewدر درون ترمینال خود ، ابتدا باید وارد دایرکتوری مربوطه شوید و محیط مجازی Python خود را فعال کنید. اگر همراه این مجموعه بوده باشید ، می توانید دستورات زیر را وارد کنید. مهم است که همیشه در هنگام تهیه برنامه خود از یک محیط برنامه نویسی پایتون استفاده کنید تا اطمینان حاصل شود که کد شما درج شده است و شما با ستاپ درست کار می کنید.⦁ $ cd ~/my_blog_app⦁⦁ $ . env/bin/activateاکنون که محیط مجازی شما فعال شده است ، بیایید به دیرکتوری blogsite  برویم و در آنجا یک فایل پایتون را باز خواهیم کرد و اولین تابع view خود را ایجاد می کنیم.⦁ (env) Sammy@ubuntu:$ cd ~/my_blog_app/blog/blogsite⦁برای مشاهده ویرایش ، با استفاده از nano یا ویرایشگر متن مورد نظر خود ، فایل views.py را باز کنید.⦁ (env) Sammy@ubuntu:$ nano views.py⦁با باز کردن فایل ، باید کدی مشابه با این را پر کنید:/my_blog_app/blog/blogsite/views.pyfrom django.shortcuts import render# Create your views here.عبارت ورود را که تابع render () را از کتابخانه django.shortcuts وارد می کند، نگه خواهیم داشت. تابع  render()به ما امکان می دهد تا یک الگو و یک متن را با هم ترکیب کنیم تا بتوانیم آبجکت HttpResponse مناسب را برگردانیم. این را به خاطر بسپارید زیرا با هر نمایی که می نویسیم ، مسئولیت نمونه سازی ، پر کردن و بازگرداندن HttpResponse را بر عهده داریم.در مرحله اول ما اولین نمای خود را اضافه خواهیم کرد که از کاربران با صفحه ایندکس استقبال می کند. تابع HttpResponse () را از کتابخانه http  در Django وارد میکنیم. با استفاده از آن تابع ، متن را ارسال می کنیم تا هنگام درخواست صفحه وب نمایش داده شود.~/my_blog_app/blog/blogsite/views.pyfrom django.shortcuts import renderfrom django.http import HttpResponsedef index(request):return HttpResponse(‘Hello, welcome to the index page.’)پس از آن ، یک تابع دیگر اضافه خواهیم کرد که پست شخصی را که می خواهیم بعداً در آموزش ایجاد کنیم ، نمایش می دهد.~/my_blog_app/blog/blogsite/views.py…def individual_post(request):return HttpResponse(‘Hi, this is where an individual post will be.’)فایل نهایی views.py اکنون به شرح زیر خواهد بود.~/my_blog_app/blog/blogsite/views.pyfrom django.http import HttpResponsefrom django.shortcuts import renderdef index(request):return HttpResponse(‘Hello, welcome to the index page.’)def individual_post(request):return HttpResponse(‘Hi, this is where an individual post will be.’)پس از پایان ویرایش فایل ، حتما آن را ذخیره کنید و خارج شوید. در nano ، می توانید CTRL و X ، سپسY ، و ENTER را فشار دهید.در حال حاضر ، هیچ URL مشخص شده ای که این توابع به آن اشاره کند وجود ندارد ، بنابراین باید آن را به فایل urlpatterns خود در فایل پیکربندی URL اضافه کنیم. با افزودن نماها، اجازه خواهیم داد که از طریق این فایل پیکربندی به نگاشت URLها به آنها بپردازیم تا بتوانیم صفحاتی را که ایجاد کرده ایم مشاهده کنیم.مرحله 2 – URL را به نماها نگاشت کنیدبا Django ، می توانیم URL های خود را طراحی کنیم تا با برنامه خود استفاده کنیم. این کار در پایتون خالص با استفاده از فایلی که معمولاً به URLconf  یا فایل “پیکربندی URL” شناخته می شود انجام می گردد.برای نمایش صفحه وب ، Django ابتدا باید ماژول URLconf را برای استفاده تعیین کند ، سپس به دنبال urlpatterns ، یک ساختار داده لیستی است که شامل همه الگوهای URL میباشد. سپس Django از هر الگوی URL عبور می کند تا اینکه اولین موردی را پیدا کند که مطابقت داشته باشد. پس از یافتن یک انطباق ، Django نمای مرتبط را پیدا می کند ، و آن تابع نما داده های مربوط به الگوی URL و یک آبجکت HttpRequest را دریافت می کند. اگر در هر مرحله در طول این فرآیند خرابی وجود داشته باشد ، به جای آن ، یک نمای خطا نشان داده می شود.در این بخش ، ما با دو فایل urls.py مختلف در دو دیرکتوری مختلف برنامه خود کار خواهیم کرد.در حالی که در دیرکتوری ~ / my_blog_app / blog / blogsite هستید، فایل urls.py – که به عنوان فایل URLconf شما نیز شناخته شده است – را برای ویرایش باز کنید. ما در اینجا از nano برای ویرایش فایل استفاده خواهیم کرد.⦁ (env) Sammy@ubuntu:$ nano urls.py⦁با لیست urlpatterns فایل را به گونه ای تغییر دهید که مشابه فایل زیر باشد.~/my_blog_app/blog/blogsite/urls.pyfrom django.urls import pathfrom . import viewsurlpatterns = [path(”, views.index, name=’index’),path(‘post/’, views.individual_post, name=’individual_post’)]پس از اتمام خطوط بالا را اضافه کنید، فایل را ذخیره کرده و ببندید.پس از به روزرسانی فایل URLconf دیرکتوری blogsite ، آن را در URLconf دیرکتوری blog قرار خواهیم داد وگرنه قابل تشخصی نیست. ما باید این کار را انجام دهیم زیرا در فایل تنظیمات ما به عنوان ROOT_URLCONF تنظیم شده است. این بدان معناست که Django در حال جستجوی urlpatterns در آدرس URL دیرکتوری blog است.برای درج blogsite URLconf در blog URLconf ، باید به آن دیرکتوری برویم.⦁ (env) Sammy@ubuntu:$ cd ~/my_blog_app/blog/blog⦁پس از رفتن به آنجا ، می توانید فایل URLconf را با nano یا ویرایشگر متن دیگر مورد نظر خود باز کنید.⦁ (env) Sammy@ubuntu:$ nano urls.py⦁در این فایل خطوط زیر را اضافه خواهیم کرد تا فایل /blogsite/urls.py را که با آنها کار کرده ایم درج شود ، که در خط دوم نشان داده شده است.~/my_blog_app/blog/blog/urls.pyfrom django.contrib import adminfrom django.urls import include, pathurlpatterns = [path(‘admin/’, admin.site.urls),path(”, include(‘blogsite.urls’))]فایل را ذخیره کنید و ببندید.اکنون برای رفتن به URL هایی که ایجاد کرده ایم می خواهیم مرورگر وب را باز کنیم و تأیید کنیم که آنها متنی را که ما به نماها اضافه کرده ایم را نمایش می دهند. برای دسترسی به فایل manage.py که برنامه Django را ارائه میدهد ، باید به پوشه والد برویم.⦁ (env) Sammy@ubuntu:$ cd ..⦁دستور زیر را صادر کنید. در زیر می توانید 0.0.0.0 را با آدرس IP خود جایگزین کنید.⦁ (env) Sammy@ubuntu:$ python manage.py runserver 0.0.0.0:8000⦁در مرورگر وب خود ، به آدرس IP خود ، پورت 8000 بروید:your-server-ip:8000یک صفحه وب مشابه زیر دریافت خواهید کرد:در مرحله بعد ، به URL زیر بروید:your-server-ip:8000/post/از اینجا باید صفحه وب زیر نمایش داده شود:اکنون تأیید کردیم که دو فایل urls.py کار می کنند و داده ها دقیقاً آنچه را که انتظار داریم را نشان می دهد. اکنون بیایید برخی از داده های واقعی را وارد وبلاگ خود کنیم.مرحله 3 – ایجاد یک پست وبلاگاکنون که اصول کارکرد الگوها و نماهای URL را میدانید ، بیایید یک پست وبلاگ اضافه کنیم و به جای متنی که در فایل های پایتون رمزگذاری کرده ایم ، در صفحه وب نمایش داده شود.پست را از طریق صفحه ادمینی که قبلاً تنظیم کرده ایم ایجاد خواهیم کرد. با استفاده از سرور مجازی خود در برنامه Django ، از یک مرورگر وب استفاده کنید تا به صفحه وبلاگ نویسی ادمین به آدرس زیر بروید:your-server-ip:8000/admin/blogsite/در آنجا ، روی پیوند + Add واقع در ردیف Posts کلیک کنید تا پر کردن دیتابیس با یک پست وبلاگ نمونه را شروع کنیدبا کلیک روی لینک ، فرم ورودی مانند این را دریافت خواهید کرد:هر گاه می خواهید پستی اضافه کنید ، برای این کار به این صفحه می روید. از طرف دیگر ، می توانید پست ها را با لینک تغییر ویرایش کنید.در فرم موجود ، می توانید قسمتهای زیر را ویرایش کنید:فیلد محتواعنوان عنوان پست مورد نظر را اینجا اضافه کنید. به عنوان مثال My First Blog Postکد شماره صفحه به قسمتی از URL اشاره دارد که المان آدرس وب معتبر را با کلیدواژه های قابل خواندن معرفی میکند. عموما از عنوان صفحه گرفته میشود. بنابراین در این حالت میتوانیم از my-first-blog-post استفاده کنیممحتوا بدنه پست وبلاگ شماست. برای مثال ما فقط Hello, World! را اضافه میکنیم، اما شما میتوانید هر متن طولانی وارد کنید.نویسنده در این فیلد نام و نام کاربری مربوطه را اضافه کنید. ما از sammy استفاده میکنیمفرم پست وبلاگ را همانطور که می بینید برای اهداف تست خود پر کنید.هنگامی که داده های مثال را به صفحه اضافه کردید ، روی دکمه SAVE کلیک کنید. صفحه تأیید زیر را دریافت خواهید کرد:تبریک می گویم! شما اولین پست وبلاگ خود را ایجاد کرده اید!در مرحله بعد ، بررسی می کنیم که آیا یک ردیف به پایگاه داده MySQL اضافه کرده است و شامل داده هایی که تازه وارد رابط کاربری سرور مجازی کرده ایم میباشد.مرحله 4 – نمایش داده های بانک اطلاعاتیدر این مرحله ، باید به MySQL برویم ، بنابراین فرآیند فعلی سرور مجازی را از طریق ترمینال با تایپ کردن CTRL + C متوقف کنید ، سپس مفسر MySQL خود را باز کنید. کاربر ما برای پایگاه داده برنامه Django ، djangouser میباشد ، اما حتما از کاربر مناسب برای پروژه خود استفاده کنید.⦁ (env) sammy@ubuntu:$ mysql -u djangouser⦁وقتی وارد MySQL شدید ، به پایگاه داده blog_data (یا پایگاه داده ای که برای پروژه شما صحیح است) بروید:⦁ Mysql&gt; use blog_data;⦁سپس محتوای جدول blogsite_post را نمایش دهید.⦁ Mysql&gt; select * from blogsite_post;⦁خروجی مشابه زیر را دریافت خواهید کرد که باید اطلاعات اضافه شده شما به رابط کاربری ادمین را نشان دهد.Output+—-+——————–+——————–+—————+—————————-+——–+| id | title | slug | content | created_on | author |+—-+——————–+——————–+—————+—————————-+——–+| 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2020-05-14 00:30:03.186564 | Sammy |+—-+——————–+——————–+—————+—————————-+——–+1 row in set (0.00 sec)همانطور که در خروجی نشان داده شده است ، یک ردیف داده برای پستی که اضافه کرده ایم وجود دارد. اکنون بیایید این داده ها را به تابع view برای پست ها ارجاع دهیم. برای خروج از مفسر MySQL از CTRL + D استفاده کنید.به برنامه فایل views.py در داخل برنامه blogsite  خود بروید.⦁ (env) sammy@ubuntu:$ cd ~/my_blog_app/blog/blogsite⦁اکنون فایل را باز کنید تا بتوانیم داده های جدید خود را وارد کنیم.⦁ (env) sammy@ubuntu:$ nano views.py⦁فایل را ویرایش کنید تا همانند فایل زیر باشد.~/my_blog_app/blog/blogsitefrom django.shortcuts import renderfrom django.http import HttpResponsefrom .models import Postdef index(request):return HttpResponse(‘Hello, welcome to the index page.’)def individual_post(request):recent_post = Post.objects.get(id__exact=1)return HttpResponse(recent_post.title + ‘: ‘ + recent_post.content)در کد بالا ، عبارت ورودی دیگری را برای پست اضافه کردیم. رشته نقل قول شده را نیز از HttpResponse حذف کردیم و آن را با داده های پست وبلاگ خود جایگزین کردیم. برای ارجاع داده ها برای یک آبجکت خاص ، از شناسه پست وبلاگ در ارتباط با آبجکت مورد نظر که میخواهیم نمایش دهیم استفاده می کنیم و آن شناسه را در متغیری به نام recent_post ذخیره می کنیم. سپس می توانیم با اضافه کردن فیلد با جداکننده دوره ، فیلد های خاصی از آن آبجکت را بدست آوریم.پس از ذخیره کردن و بستن فایل ، برای اجرای برنامه Django به مکان فایل management.py بروید.⦁ (env) sammy@ubuntu:$ cd ~/my_blog_app/blog⦁⦁ (env) sammy@ubuntu:$ python manage.py runserver 0.0.0.0:8000از یک مرورگر وب ، به آدرس زیر بروید:your-server-ip:8000/post/در اینجا ، ما تغییراتی را که ایجاد کرده ایم خواهیم دید. صفحه مشابه این خواهد بود ، متنی را که به پست اضافه کردید نشان داده می شود.پس از پایان یافتن صفحه ، CTRL + C را در ترمینال فشار دهید تا روند کار متوقف شود.برای غیرفعال کردن محیط برنامه نویسی خود ، می توانید دستور deactivate را تایپ کرده و سپس از سرور مجازی خارج شوید.نتیجهدر این آموزش نماها را ایجاد کردیم، الگوهای URL را نگاشت کردیم ، و متن را در صفحه وب از پایگاه داده پست وبلاگ خود نمایش دادیم.آموزش بعدی نحوه استفاده از HTML برای ایجاد قالب های Django و نحوه زیباسازی را پوشش میدهد. تاکنون این مجموعه مدلهای Django و نماهای Django را پوشش داده است. قالب ها آخرین قسمت مهم و بنیادی برای پایه و اساس برنامه Django شما هستند.برچسب‌ها:Django</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 13:48:26 +0430</pubDate>
            </item>
                    <item>
                <title>نصب Mount NFS در اوبونتو 20.04</title>
                <link>https://virgool.io/@sshahrani761/%D9%86%D8%B5%D8%A8-mount-nfs-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-2004-e0w5td5fcws0</link>
                <description>NFS یا Network File System یک پروتکل سیستم فایل توزیع شده است که به شما امکان می دهد دایرکتوری های از راه دور را روی سرور مجازی خود سوار کنید. همچنین این امکان را به شما می دهد فضای ذخیره سازی را در یک مکان دیگر مدیریت کنید و از طرف چندین کلاینت روی آن فضا بنویسید. NFS روشی نسبتاً استاندارد و کارآمد برای دسترسی به سیستمهای از راه دور از طریق شبکه را فراهم می کند و در شرایطی کار می کند که به طور منظم به منابع مشترک دسترسی پیدا کند.در این راهنما ، چگونگی نصب نرم افزار مورد نیاز برای عملکرد NFS را در اوبونتو 20.04 ، پیکربندی دو مانیتور NFS روی یک سرور مجازی و کلاینت ، بررسی خواهیم کرد و به اشتراک گذاری از راه دور می پردازیم.پیش نیازهاما در این آموزش از دو سرور مجازی استفاده خواهیم کرد که یک قسمت از سیستم فایل آن را با دیگری به اشتراک می گذارد. برای دنبال کردن این راهنما، به موارد زیر نیاز خواهید داشت:• دو سرور مجازی Ubuntu 20.04. هر یک از آنها باید یک کاربر غیر ریشه با امتیازات sudo ، فایروال تنظیم شده با UFW و شبکه های خصوصی داشته باشد.o برای کمک به راه اندازی کاربر غیر ریشه با امتیازات sudo و فایروال ، راه اندازی سرور مجازی اولیه ما را با راهنمای اوبونتو 20.04 دنبال کنید.در طول این آموزش ، ما به سرور مجازی هایی که دایرکتوری های آن را به عنوان هاست و سرور مجازی که این دایرکتوری ها را به عنوان کلاینت سوار می کند ، اشاره می کنیم. برای هر دو باید آدرس IP را بدانید. در صورت وجود حتما از آدرس شبکه خصوصی استفاده کنید.در طول این آموزش به آدرسهای IP توسط متغیرهایی host_ip و client_ip ارجاع خواهیم داد. لطفاً در صورت لزوم جایگزین کنید.مرحله 1 – دانلود و نصب مولفه هابا نصب مولفه های لازم در هر سرور مجازی شروع خواهیم کرد.روی هاستروی سرور مجازی میزبان ، بسته nfs-kernel-server را نصب کنید ، که به شما امکان می دهد دایرکتوری های خود را به اشتراک بگذارید. از آنجایی که این اولین عملی است که در این بخش با apt انجام می دهید ، قبل از نصب ، دیرکتوری بسته محلی خود را ریفرش کنید:Host:$ sudo apt updateHost:$ sudo apt install nfs-kernel-serverپس از نصب این بسته ها ، به سرور مجازی کلاینت بروید.روی کلاینتدر سرور مجازی کلاینت ، باید پکیجی به نام nfs-common نصب کنیم ، که عملکرد NFS را بدون در اختیار گذاشتن اجزای سرور مجازی فراهم می کند. قبل از نصب ، دوباره دیرکتوری بسته محلی را ریفرش کنید تا اطمینان حاصل کنید که اطلاعات به روز دارید:Client:$ sudo apt updateClient:$ sudo apt install nfs-commonاکنون که هر دو سرور مجازی بسته های لازم را دارند ، می توانیم پیکربندی آنها را شروع کنیم.مرحله 2 – ایجاد دایرکتوری Share روی هاستمی خواهیم دو دایرکتوری جداگانه را با تنظیمات مختلف پیکربندی به اشتراک بگذاریم ، تا دو روش اصلی که NFS mounts میتواند با توجه به دسترسی ابرکاربر پیکربندی شود را نشان دهیم .ابرکاربرها می توانند در هر مکانی در سیستم خود فعال باشند. با این حال ، دایرکتوری های نصب شده NFS جزئی از سیستمی نیستند که روی آن نصب شده اند ، بنابراین به طور پیش فرض ، سرور مجازی NFS از انجام عملیاتی که نیاز به امتیازات فوق کاربری دارند امتناع می ورزد. این محدودیت پیش فرض بدین معنی است که ابرکاربرها روی کلاینت نمی توانند به عنوان ریشه فایل هایی را بنویسند ، مالکیت را واگذار کنند یا سایر وظایف فوق کاربری را در قسمت NFS انجام دهند.با این وجود ، گاهی اوقات ، کاربران قابل اعتماد در سیستم کلاینت وجود دارند که باید این اقدامات را در سیستم فایل نصب شده انجام دهند اما نیازی به دسترسی ابرکاربر به هاست ندارند. شما می توانید سرور مجازی NFS را تنظیم کنید تا این کار را انجام دهد ، اگرچه این یک عنصر خطر را ایجاد می کند ، زیرا چنین کاربری می تواند دسترسی ریشه ای به کل سیستم هاست را بدست آورد.مثال 1: صادر کردن یک MOUNT با هدف عمومیدر مثال اول ، یک NFS mount عمومی ایجاد خواهیم کرد که از رفتار پیش فرض NFS استفاده کند تا ارتباط با هاست را برای کاربری با امتیازات اصلی در دستگاه کلاینت که از این امتیازات ابرکاربری کلاینت استفاده میکند، مشکل نماید. ممکن است از چیزی شبیه به این برای ذخیره فایلهایی که با استفاده از یک سیستم مدیریت محتوا بارگذاری شده اند و یا برای ایجاد فضایی برای کاربران که به راحتی فایل های پروزه را به اشتراک بگذارند ، استفاده کنید.ابتدا دیرکتوری اشتراک را تهیه کنید:Host:$ sudo mkdir /var/nfs/general -pاز آنجا که ما آن را با sudo ایجاد می کنیم ، این دیرکتوری متعلق به کاربر ریشه میزبان است:Host:$ ls -la /var/nfs/generalOutputdrwxr-xr-x 2 root root 4096 May 14 18:36 .NFS هر عملیات ریشه ای بر روی کلاینت را به عنوان یک اقدام امنیتی به اعتبارات nobody:nogroup  ترجمه میکند. بنابراین ، ما باید مطابق با آن اعتبارات، مالکیت دایرکتوری را تغییر دهیم.Host:$ sudo chown nobody:nogroup /var/nfs/generalاکنون آماده صادر کردن این دیرکتوری هستید.مثال 2: صادر کردن دیرکتوری هومدر مثال دوم ، هدف این است که دایرکتوری های هوم کاربر ذخیره شده روی هاست در سرور مجازی های کلاینت در دسترس باشد ، در حالی که به ادمین های معتبر آن سرور مجازی های کلاینت امکان دسترسی برای مدیریت راحت کاربران را بدهد.برای انجام این کار ، دایرکتوری /home را صادر خواهیم کرد. از آنجا که در حال حاضر وجود دارد ، نیازی به ایجاد آن نداریم. مجوزها را نیز تغییر نمی دهیم. اگر این کار را انجام دادیم ، می تواند برای هر کسی که دارای دیرکتوری هوم در دستگاه میزبان است ، منجر به طیف وسیعی از مشکلات شود.مرحله 3 – پیکربندی NFS Exports در سرور مجازی میزباندر مرحله بعدی ، برای تنظیم اشتراک گذاری این منابع ، وارد فایل پیکربندی NFS خواهیم شد.در دستگاه میزبان ، فایل / etc / eksport را در ویرایشگر متن خود با امتیازات اصلی باز کنید:Host:$ sudo nano /etc/exportsفایل حاوی کامنت هایی است که ساختار کلی هر خط پیکربندی را نشان میدهد. ترکیب آن به شرح زیر است:/etc/exportsdirectory_to_share client(share_option1,…,share_optionN)ما باید برای هر دایرکتوری که قصد داریم به اشتراک بگذاریم خطی ایجاد کنیم. حتما مکان نگهدارنده client_ip که در اینجا نشان داده شده است را به آدرس IP واقعی خود تغییر دهید:/etc/exports/var/nfs/general client_ip(rw,sync,no_subtree_check)/home client_ip(rw,sync,no_root_squash,no_subtree_check)در اینجا ، ما به جز no_root_squash از گزینه های تنظیمات مشابه برای هر دو دیرکتوری استفاده می کنیم. بیایید نگاهی بیندازیم که معنی هر یک از این گزینه ها چیست:rw: این گزینه به رایانه کلاینت امکان دسترسی و خواندن volume را می دهد.sync: این گزینه NFS را مجبور به نوشتن تغییراتی در دیسک قبل از پاسخ دادن می کند. منجر به محیط پایدارتر و مداوم تر میشود زیرا پاسخ ، بیانگر وضعیت واقعی والیوم از راه دور است. اما سرعت عملكردهای فایل را نیز كاهش می دهد.no_subtree_check: این گزینه مانع از بررسی زیرشاخه می شود ، که فرآیندی است که در آن میزبان باید بررسی کند که آیا فایل برای هر درخواست همچنان در درخت صادر شده موجود است یا خیر. با تغییر نام فایل هنگام تغییر کلاینت ، این مسئله می تواند مشکلات بسیاری ایجاد کند. تقریباً در همه موارد ، بهتر است چک کردن زیرشاخه را غیرفعال کنید.no_root_squash: به طور پیش فرض ، NFS درخواست های یک کاربر ریشه از راه دور را به یک کاربر بدون امتیاز در سرور مجازی ترجمه می کند. این به عنوان ویژگی امنیتی در نظر گرفته شده بود تا از دسترسی یک حساب کاربری ریشه روی کلاینت برای استفاده از سیستم فایل میزبان به عنوان ریشه جلوگیری کند. no_root_squash این رفتار را برای برخی از اشتراکات غیرفعال می کند.پس از اتمام انجام تغییرات ، فایل را ذخیره کنید و ببندید. سپس ، برای اینکه اشتراکات را در اختیار کلاینتانی که پیکربندی کرده اید قرار دهید ، سرور مجازی NFS را با دستور زیر مجدداً راه اندازی کنید:host:$ sudo systemctl restart nfs-kernel-serverبا این حال ، قبل از استفاده واقعی از اشتراکات جدید ، باید اطمینان داشته باشید که طبق قوانین فایروال ترافیک به سمت فایل اشتراکی مجاز باشد.مرحله 4 – تنظیم فایروال روی هاستابتدا ، اجازه دهید وضعیت فایروال را بررسی کنیم تا ببینیم آیا فعال شده است یا خیر ، و اگر چنین است ، ببینیم چه چیزی در حال حاضر مجاز است:host:$ sudo ufw statusOutputStatus: activeTo Action From— —— —-OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)روی سیستم ما فقط ترافیک SSH مجاز است ، بنابراین برای ترافیک NFS باید قاعده ای اضافه کنیم.در بسیاری از برنامه ها ، می توانید از sudo ufw app listاستفاده کرده و آنها را با نام فعال کنید ، اما nfs یکی از این موارد نیست. با این حال ، از آنجا که ufw همچنین /etc/servicesرا برای پورت و پروتکل یک سرویس بررسی می کند ، ما هنوز می توانیم dNFS را با نام اضافه کنیم. بهترین روش فعال کردن محدود کننده ترین قانون است که هنوز ترافیکی را که می خواهید مجاز کنید را ممکن میسازد ، بنابراین به جای اینکه ترافیک را از هر کجا امکان پذیر کنید ، به صورت خاص عمل خواهیم کرد.برای باز کردن پورت 2049 روی هاست از دستور زیر استفاده کنید ، حتماً آدرس IP کلاینت خود را جایگزین کنید:host:$ sudo ufw allow from client_ip to any port nfsمی توانید تغییر را با تایپ دستور زیر تأیید کنید:host:$ sudo ufw statusباید ترافیک مجاز از پورت 2049 در خروجی را مشاهده کنید:OutputStatus: activeTo Action From— —— —-OpenSSH ALLOW Anywhere2049 ALLOW 203.0.113.24OpenSSH (v6) ALLOW Anywhere (v6)این خروجی تأیید می کند که UFW فقط امکان عبور NFS در پورت 2049 از دستگاه کلاینت ما را فراهم می کند.مرحله 5 – ایجاد Mount Points و نصب دیرکتوری ها بر روی کلاینتاکنون که سرور مجازی هاست پیکربندی شده است و اشتراکات خود را ارائه می دهد ، کلاینت خود را آماده خواهیم کرد.برای اینکه اشتراک گذاری ها از راه دور در دسترس کلاینت قرار گیرد ، باید دایرکتوری ها را روی میزبان نصب کنیم که می خواهیم آنها را به اشتراک بگذاریم تا دایرکتوری های خالی روی کلاینت قرار بگیرد.توجه: اگر فایلها و دایرکتوری هایی در قسمت استقرار شما وجود داشته باشند ، به محض سوار کردن اشتراک NFS ، مخفی می شوند. برای جلوگیری از از بین رفتن فایل های مهم ، اطمینان حاصل کنید که اگر در پوشه ای که از قبل وجود دارد مستقر میکنید ، دایرکتوری خالی باشد.ما دو دیرکتوری برای سوار کردن فایل های خود ایجاد خواهیم کرد:Client:$ sudo mkdir -p /nfs/generalClient:$ sudo mkdir -p /nfs/homeاکنون که یک مکان برای قرار دادن اشتراک گذاری ها از راه دور داریم و فایروال را باز کرده ایم ، می توانیم با استفاده از آدرس IP سرور مجازی میزبان خود ، اشتراکات را سوار کنیم:Client:$ sudo mount host_ip:/var/nfs/general /nfs/generalClient:$ sudo mount host_ip:/home /nfs/homeاین دستورات اشتراک گذاری ها را از رایانه میزبان روی دستگاه کلاینت نصب می کنند. می توانید چند بار بررسی کنید که آنها با موفقیت نصب شده اند. می توانید این کار را با یک فرمان mount یا findmnt بررسی کنید ، اما df -h خروجی خواناتری را ارائه می دهد:Client:$ df -hOutputFilesystem Size Used Avail Use% Mounted onudev 474M 0 474M 0% /devtmpfs 99M 936K 98M 1% /run/dev/vda1 25G 1.8G 23G 8% /tmpfs 491M 0 491M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 491M 0 491M 0% /sys/fs/cgroup/dev/vda15 105M 3.9M 101M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/100010.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general10.132.212.247:/home 25G 1.8G 23G 8% /nfs/homeهر دو اشتراک گذاری که مستقر کردیم در پایین ظاهر می شود. از آنجا که از همان سیستم فایل سوار شده اند ، همان استفاده از دیسک را نشان می دهند. برای دیدن میزان فضای استفاده شده تحت هر نقطه نصب ، از دستور میزان استفاده دیسک یعنی du  و مسیر سوار کردن استفاده کنید. پرچم -s به جای نمایش استفاده برای هر فایل ، خلاصه ای از استفاده را ارائه می دهد. –h خروجی خواناتری را برای انسان چاپ می کند.مثلا:Client:$ du -sh /nfs/homeOutput36K /nfs/homeاین به ما نشان می دهد که محتویات کل دایرکتوری هوم فقط از 36k فضای موجود استفاده می کند.مرحله 6 – آزمایش دسترسی NFSدر مرحله بعد ، اجازه دهید با نوشتن چیزی برای هرکدام از آنها ، دسترسی به اشتراکات را آزمایش کنیم.مثال 1: اشتراک گذاری هدف کلیابتدا یک فایل آزمایشی را در قسمت / var / nfs / general بنویسید:Client:$ sudo touch /nfs/general/general.testسپس ، مالکیت آن را بررسی کنید:Client:$ ls -l /nfs/general/general.testOutput-rw-r–r– 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.testاز آنجا که ما این والیوم را بدون تغییر رفتار پیش فرض NFS نصب کردیم و فایل را به عنوان کاربر اصلی کلاینت از طریق دستور sudo ایجاد کردیم، مالکیت فایل به طور پیش فرض برای nobody:nogroupمیباشد. ابرکاربرهای کلاینت قادر به انجام اقدامات ادمین معمولی مانند تغییر صاحب یک فایل یا ایجاد یک دیرکتوری جدید برای گروهی از کاربران ، در این اشتراک NFS نخواهند بود.مثال 2: اشتراک دیرکتوری هومبرای مقایسه مجوزهای اشتراک با هدف کلی با اشتراک دیرکتوری هوم ، یک فایل را در / nfs / home به همین روش ایجاد کنید:Client:$ sudo touch /nfs/home/home.testسپس به مالکیت فایل نگاه کنید:Client:$ ls -l /nfs/home/home.testOutput-rw-r–r– 1 root root 0 Aug 1 13:32 /nfs/home/home.testما با استفاده از دستور sudo ، home.test را به عنوان root ساختیم ، دقیقاً به همان روشی که فایل general.test را ایجاد کردیم. اما ، در این حالت متعلق به root است زیرا وقتی گزینه no_root_squash را در این نصب مشخص کردیم ، از رفتار پیش فرض استفاده می کنیم. این امر اجازه می دهد تا کاربران اصلی ما در دستگاه کلاینت به عنوان ریشه عمل کنند و اجرای حساب های کاربری را بسیار راحت تر می کند. در عین حال ، این بدان معنی است که ما نباید به این کاربران دسترسی اصلی را به هاست بدهیم.مرحله 7 – نصب دیرکتوری های از راه دور NFS در بوتما می توانیم اشتراک گذاری های NFS راه دور را با اضافه کردن آنها به فایل / etc / fstab روی کلاینت بطور خودکار در بوت نصب کنیم.این فایل را با امتیازات ریشه در ویرایشگر متن خود باز کنید:Client:$ sudo nano /etc/fstabدر پایین فایل ، برای هر یک از اشتراکات یک خط اضافه کنید. مانند این ظاهر خواهند شد:/etc/fstab. . .host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0توجه: می توانید اطلاعات بیشتری در مورد گزینه هایی که در اینجا مشخص می کنیم در صفحه Man NFS پیدا کنید. با اجرای دستور زیر می توانید به آن دسترسی پیدا کنید:$ man nfsکلاینت به طور خودکار پارتیشن های از راه دور را در بوت سوار می کند ، اگرچه ممکن است برای برقراری اتصال و در دسترس بودن اشتراک گذاری ، مدتی طول بکشد.مرحله 8 – Unmount (پیاده) کردن اشتراک گذاری از راه دور NFSاگر دیگر نمی خواهید که دایرکتوری از راه دور روی سیستم شما نصب باشد ، می توانید با بیرون رفتن از ساختار دیرکتوری اشتراک گذاری و پیاده کردن آن ، آن را Unmount کنید:Client:$ cd ~Client:$ sudo umount /nfs/homeClient:$ sudo umount /nfs/generalتوجه داشته باشید که این فرمان همانطور که انتظار دارید umount  است و نه unmount .با این کار اشتراک گذاری از راه دور حذف می شود و فقط فضای محلی شما قابل دسترسی خواهد بود:Client:$ df -hOutputFilesystem Size Used Avail Use% Mounted onudev 474M 0 474M 0% /devtmpfs 99M 936K 98M 1% /run/dev/vda1 25G 1.8G 23G 8% /tmpfs 491M 0 491M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 491M 0 491M 0% /sys/fs/cgroup/dev/vda15 105M 3.9M 101M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000اگر همچنین می خواهید از استقرار مجدد آنها در ریبوت بعدی جلوگیری کنید ، / etc / fstab را ویرایش کرده و با قرار دادن یک کاراکتر # در ابتدای خط ، خط را حذف کرده یا آن را باطل کنید. همچنین می توانید با از بین بردن گزینه auto  مانع نصب خودکار شوید ، که به شما امکان می دهد هچنان آن را به صورت دستی سوار کنید.نتیجهدر این آموزش ، ما یک میزبان NFS ایجاد کردیم و با ایجاد دو نصب مختلف NFS ، که با یک کلاینت NFS به اشتراک گذاشتیم ، برخی رفتارهای کلیدی NFS را نشان دادیم.اگر به دنبال اجرای NFS در تولید هستید ، مهم است که توجه داشته باشید که این پروتکل رمزگذاری نشده است. در مواردی که از طریق شبکه خصوصی به اشتراک می گذارید ، ممکن است مشکلی نداشته باشد. اما در موارد دیگر ، یک VPN یا نوع دیگری از تونل رمزگذاری شده برای محافظت از اطلاعات شما ضروری خواهد بود.برچسب‌ها:Network File System, NFS</description>
                <category>sshahrani761</category>
                <author>sshahrani761</author>
                <pubDate>Sun, 31 May 2020 13:43:31 +0430</pubDate>
            </item>
            </channel>
</rss>