<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ساعی سعادت</title>
        <link>https://virgool.io/feed/@saee_saadat</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 10:08:59</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1893338/avatar/CQq6VA.jpg?height=120&amp;width=120</url>
            <title>ساعی سعادت</title>
            <link>https://virgool.io/@saee_saadat</link>
        </image>

                    <item>
                <title>پایگاه داده PostgreSQL با استفاده از Docker</title>
                <link>https://virgool.io/@saee_saadat/%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-postgresql-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-docker-tdtm0rfmbdcp</link>
                <description>سلام! توی این پست می‌خوام برای کسایی که تازه می‌خوان کار با PostgreSQL کار کنن، یه راهکار تقققریبا ساده بنویسم. توی این راهکار نیازی نیست که خود postgres رو مستقیما روی دستگاهتون نصب کنید و با مشکلات ویندوز/لینوکس/مک دست و پنجه نرم کنید. + کار کردن با postgres ای که روی داکره مزایای خودش رو داره مخصوصا وقتی که صرفا تستیه و خیلی نگران persistence داده‌هاتون نیستید!علاوه بر خود postgres، برنامه‌ی pgadmin رو هم توی این پست بالا میاریم برای مدیریت کردن دیتابیسمون.در مرحله‌ی اول باید Docker رو نصب کنید. طریقه‌ی نصب داکر رو توی همین ویرگول می‌تونید پیدا کنید ولی من یه لینک به صفحه‌ی مستندات خود داکر می‌ذارم براتون: https://docs.docker.com/engine/install/ خوب، با فرض این که الان داکر نصبه و در حال اجراس (این مهمه ها! اگر در حال اجرا نباشه سر daemon و اینا ارور میده خلاصه حواستون باشه)حالا باید image هایی که می‌خوایم باهاشون کار کنیم رو pull کنیم. پس ترمینال/کامند لاین رو بگشایید:docker pull postgres:latest
docker pull dpage/pgadmin4این جا، جا داره یاداوری کنم که اگر توی ایران هستید، dockerhub تحریممون کرده و احتمالا خطای pull rate limit رو خواهید خورد که یه جور 403 هست. برای رفع این مشکل می‌تونید از shecan استفاده کنید. طریقه‌ی استفاده‌اش توی shecan.ir هست ولی خوب منم برای mac و linux یه پست دیگه گذاشتم که با ترمینال فعالش کنید: https://virgool.io/@saee_saadat/تنظیم-shecan-در-ترمینال-برای-مک-و-لینوکس-sk6qtmmrplzv برای داکر می‌تونید از رجیستری‌های mirror هم استفاده کنید که یکم بگردید باز تو همین ویرگول روشش هست ولی خوب همون شکن کارتون رو راه می‌اندازه.حالا که ۲ تا ایمیجمون با موفقیت دانلود شدن، وقتشه که راه بندازیمشون.در مرحله‌ی اول، یه network درست کنیم برای این که pgadmin و postgres با هم بتونن ارتباط بگیرن:docker network create pgverseالبته این مرحله‌هم الزامی نیست و می‌تونید بدون نتورک هم این کار رو انجام بدید، ولی با نتورک یکم تمیز تره. بعد یه اینستنس از پوستگرس رو اجرا می‌کنیم:docker run --name pgdocker --network=&amp;quotpgverse&amp;quot -p 5432:5432 -e POSTGRES_PASSWORD=3cure -e POSTGRES_USERNAME=postgres -d postgresاسم کانتینرمون رو با --name گذاشتیم pgdocker و وصلش کردیم به نتورکمون، بعد پورت ۵۴۳۲ کانتینر که روش دیتابیس داره گوش میده رو وصل می‌کنیم به پورت ۵۴۳۲ خودمون که بتونیم بهش وصل شیم. بعد برای یوزر دیفالت یه یوزرنیم پسورد میدیم که یوزرش به صورت دیفالت همین postgres عه و پسوردش رو گذاشتیم 3cure که خیلی سکیوره.الان یه دیتابیس خوشگل روی پورت ۵۴۳۲ مون داریم که آماده‌ی استفادس! حالا می‌خوایم وارد کانتینر شیم و با psql یکم باهاش ور بریم. برای این کار از دستور زیر استفاده کنید:docker exec -it pgdocker shحالا که وارد کانتینرمون شدیم، با اجرای این دستور وارد shell برای psql میشیم:psql -U postgres -Wوقتی این دستور رو بزنین، ازتون پسورد می‌خواد (چون -W رو زدیم) که باید همون پسوردی که موقع ساخت بهش دادیم رو بدیم که 3cure بود. برای ورود به psql یه سری آرگومان دیگه هم هستند که این‌جا خیلی خلاصه اصلی‌ها رو استفاده می‌کنم:psql -d {database name (like mydatabase)} -h {host name (like localhost)} -p {port (like 5432)} -U {username (like postgres)} -W
psql -d postgres -h localhost -p 5432 -U postgres -Wحالا وارد shell شدیم و می‌تونیم دستورات sql رو توش اجرا کنیم! مثلا توی کد زیر، یه user جدید می‌سازیم، تبدیلش می‌کنیم به superuser (راجع به انواع اکسس‌ها بعدا بخونید)، بعد یه دیتابیس جدید می‌سازیم، به یوزر جدیدمون همه‌ی دسترسی‌ها رو روی دیتابیس جدید می‌دیم و از شل خارج میشیم.create user unicorn with encrypted password &#039;amniat&#039;;
alter user unicorn with superuser;
create database mydatabase;
grant all privileges on database mydatabase to unicorn;حالا چند تا دستور کوچولو غیر sql ای می‌زنیم که ببینیم چه خبره، این دستورا همه با \ شروع می‌شن. \du
\l
\dt
\?اولی لیست یوزر‌ها (یا role ها)، دومی لیست دیتابیس‌ها، سومی لیست جدول‌ها (که الان خالیه احتمالا) و آخری هم لیست تمام دستورات \ ای عه.حالا یه بار از psql خارج می‌شیم.exit; و دوباره وارد میشیم.psql -U unicorn -d mydatabase -W
password: amniatبا یوزر جدیدمون، وارد دیتابیس جدیدمون شدیم. حالا می‌تونیم دستورات sql ای اجرا کنیم. مثلا یه تیبل کوچولو بسازیم و یه چیزی توش درج کنیم:create table unicorns (id serial primary key, name varchar(20), is_pink bool);
\dt
insert into unicorns (name, is_pink) values (&#039;shoolati&#039;, true);
select * from unicorns;کلا تمام دستورات sql ای که بلدید رو داخل همین کنسول psql می‌تونید اجرا کنید.حالا وقتشه که pgadmin رو بیاریم بالا!برای این کار، باید یه کانتینر جدید اجرا کنیم (همون اول پست ایمیجش رو دانلود کردید)docker run --name pgadmin --network=&amp;quotpgverse&amp;quot -e &#039;PGADMIN_DEFAULT_EMAIL=admin@pgadmin.ir&#039; -e &#039;PGADMIN_DEFAULT_PASSWORD=admin&#039; -e &#039;PGADMIN_LISTEN_PORT=80&#039;-e &#039;PGADMIN_LISTEN_ADDRESS=0.0.0.0&#039; -p 8080:80 -d dpage/pgadmin4توی این دستور، اسم کانتینرمون رو گذاشتیم pgadmin و وصلش کردیم به همون نتورک pgverse که بتونه postgres مون رو ببینه، بعد هم یه یوزر دیفالت بهش دادیم که از طریقش قراره لاگین کنیم و پورت ۸۰ اش رو وصل کردیم به پورت ۸۰۸۰ خودمون. نکته‌ی ریز برای ویندوزیا: ممکنه سر اسم ایمیج dpage/pgadmin4 به ارور بخورید که اسم کانتینر فقط می‌تونه lowercase باشه، اگر این‌جوری شد دستور docker images رو اجرا کنید، ایمیج dpage/pgadmin4 رو توی خروجی پیدا کنید، یه id داره که ترکیب عدد و حروفه. اون رو کپی کنید و آخر دستور به جای dpage/pgadmin4، اون آیدی رو بذارید تا اجرا شه.حالا براوزرتون رو باز کنید و آدرس localhost:8080 رو بزنید تا pgadmin با تمام شکوه و جبروتش ازتون اطلاعات لاگین بخواد. ایمیل و پسوردی که خودمون تو دستور اجرا کانتینر بهش دادیم رو وارد کنید و وارد پنل مدیریتش بشید.همونطور که می‌بینید، هیچی توش نیست! چون هنوز به سرور دیتابیسی وصلش نکردید. برای این کار از پنل سمت چپ، روی servers کلیک راست کنید و register و بعد روی server  بزنید. حالا باید اطلاعات اتصال به دیتابیس رو بهش بدید. توی تب اول صرفا یه اسم براش بذارید. بعد برید توی تب connection و توی قسمت host، آیپی کانتینر رو بهش بدید (برای پیدا کردن آیپی کانتینر دستور زیر رو بزنید و همون آخرای خروجی، آیپی نوشته شده جلوی IPAddress رو کپی کنید.)docker inspect pgdockerاگر هم همون اول network نساختید، می‌تونید به جای آدرس آیپی، آدرس خود host رو بدید که توی ویندوز و مک host.docker.internal هست و توی لینوکس همون localhost جواب میده. ولی پیشنهاد می‌کنم از همون روش  آیپی استفاده کنید.یوزرنیم، پسورد و اسم دیتابیس (مثلا اینجا mydatabase ولی در کل خیلی مهم نیست همه‌ی دیتابیس‌ها رو میبینید) رو وارد کنید و save رو بزنید. دیتابیستون به پنل سمت چپ اضافه میشه و می‌تونید بازش کنید و همه‌چیشو ببینید. دیگه اکتشاف کردن توی pgadmin رو به خودتون می‌سپارم شایدم تو پست دیگه‌ای کاورش کنم.بای بای ✌? </description>
                <category>ساعی سعادت</category>
                <author>ساعی سعادت</author>
                <pubDate>Tue, 02 May 2023 20:18:02 +0330</pubDate>
            </item>
                    <item>
                <title>تنظیم shecan در ترمینال برای مک و لینوکس</title>
                <link>https://virgool.io/@saee_saadat/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-shecan-%D8%AF%D8%B1-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%DA%A9-%D9%88-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-sk6qtmmrplzv</link>
                <description>اگر نمیدونی شکن چیه، واقعا بهت حسودیم میشه چون یا با سایت‌های تحریم شده سر و کار نداری و راحتی، یا قراره با یه چیزی آشنا بشی تو این پست که زندگیتو شاید یذره آسون‌تر می‌کنه :))شکن یک سرویس DNS برای دور زدن تحریم‌ها (نه فیلتر‌ها!!! تحریم‌ها) بر ضد کاربرای ایرانیه. این که چطوری کار می‌کنه رو می‌تونید از توی سایت خودشون یاد بگیرید. https://shecan.ir/ اما توی این پست برای کاربرای مک و لینوکس، یه اسکریپت دارم که از طریق ترمینال بتونید راحت شکن رو فعال و غیر فعال کنید چون مخصوصا اگر با داکر زیاد سر و کار دارید، مدام توی تنظیمات اضافه و حذف کردن DNS فعالیت جذابی نیست.کلیت ماجرا اینه که یه فایل shecan درست می‌کنیم و توش یه فانکشن می‌نویسیم و می‌شناسونیمش به ترمینالمون و مثل فانکشن‌های دیگه‌ی ترمینال صداش می‌کنیم.اول از همه، فایل رو بسازیم.من خودم تمام اسکریپت‌های این مدلیم رو توی فولدری به اسم .myscripts داخل home directory نگه می‌دارم ولی شما هر جایی دوست داشتید میتونید نگهش دارید. آدرس جایی که ذخیره‌اش کردید رو LOCATION/~ فرض می‌کنیم.برای مک:لطف بفرمایید فایل shecan یا shecan.sh رو توی همون‌جایی که دوست دارید که اسمشو LOCATION گذاشتیم با محتویات زیر بسازید.#!/bin/zshfunction shecan {    if [[ &amp;quot$1&amp;quot = &amp;quotremove&amp;quot ]]; then        networksetup -setdnsservers Wi-Fi &amp;quotempty&amp;quot    else        networksetup -setdnsservers Wi-Fi 178.22.122.100 185.51.200.2    fi}و برای لینوکس (ubuntu و دوستان):اول پکیج resolvconf رو از طریق کامند زیر نصب کنید:sudo apt update
sudo apt install resolvconfبعد هم این فایل shecan یا shecan.sh رو توی LOCATION ایجاد کنید:#!/bin/sh
LOC=&amp;quot/etc/resolvconf/resolv.conf.d/head&amp;quot​function shecan {    if [[ $1 = &amp;quotremove&amp;quot ]]; then        echo | sudo tee $LOC    else        echo &amp;quotnameserver 178.22.122.100&amp;quot | sudo tee $LOC
        echo &amp;quotnameserver 185.51.200.2&amp;quot | sudo tee -a $LOC    fi    sudo resolvconf -u}macحالا تنها کاری که مونده اینه که به ترمینالمون بگیم هر وقت استارت زدی، این فایل رو source کن. برای این کار بستگی داره که ترمینالتون از bash استفاده می‌کنه یا zsh، برای این که بفهمید این کامند رو اجرا کنید:echo $SHELLحالا اگر zsh بود، با یه تکست ادیتور (مثلا nano) فایل zshrc. رو باز کنید:nano ~/.zshrcو اگر bash بود (شاید لازم باشه بسازیدش! نترسید اگر وجود نداشت):nano ~/.bashrcحالا یه جاییش (مثلا آخرش) این خط رو بنویسید:for f in ~/LOCATION/*; do source $f; done*  یاداوری: LOCATION پوشه‌ایه که توش این فایل shecan رو گذاشتید. با این اسکریپت از این به بعد هر فایل این مدلی‌ای بذارید تو LOCATION مثل shecan به ترمینال شناسونده میشه و میتونید صداش کنید.حالا این ترمینالی که باز کرده بودید رو ببندید و یه جدیدشو باز کنید.تبریک میگم! شما از این به بعد می‌تونید توی ترمینالتون با این کامند:shecanشکن رو روشن کنید و با:shecan removeشکن رو خاموش کنید. به همین سادگی به همین خوشمزگی :)</description>
                <category>ساعی سعادت</category>
                <author>ساعی سعادت</author>
                <pubDate>Fri, 18 Nov 2022 11:25:25 +0330</pubDate>
            </item>
            </channel>
</rss>