خارج از کار، سرویس های شخصی مثل Vaultwarden، سرویس ایمیل، سرویس های دامنه، هوش مصنوعی محلی و دسترسی خصوصی بین دستگاه ها را اجرا می کنم. Arch سیستم عامل روزانه من است و با Ubuntu، Arch و Alpine هم تجربه دارم. Docker، Docker Compose، پورت ها، فایروال، دامنه، دسترسی امن و WireGuard برای من موضوعات انتزاعی نیستند؛ بخشی از تمرین روزانه من هستند.
استکی که واقعا اجرا می کنم
زیرساخت شخصی من عمدا ساده است. یک VPS با Docker Compose، پشت Nginx و TLS از Let's Encrypt. نه Kubernetes، نه service mesh و نه orchestration layerی که خودش نیاز به مراقبت دائمی داشته باشد.
- Vaultwarden: مدیریت رمز عبور برای همه دستگاه ها
- Mail server: ایمیل دامنه شخصی با Postfix و Dovecot
- DNS: مدیریت دامنه های شخصی و پروژه ای
- WireGuard: دسترسی خصوصی بین دستگاه ها
- Nginx: reverse proxy برای همه سرویس ها با یک ورودی مشخص
هر سرویس فقط وقتی اضافه شد که نیازش واقعی بود و هزینه نگهداری اش فهمیده شده بود. این discipline سخت تر از چیزی است که به نظر می رسد.
چرا اول Vaultwarden
مدیریت رمز عبور یکی از شخصی ترین تصمیم های زیرساختی است. با self-host کردن Vaultwarden، credentialها روی سخت افزاری می مانند که کنترلش با من است. طرف سوم secretهایم را نگه نمی دارد و breach در یک vendor مدیریت رمز، مستقیم incident من نمی شود.
هزینه اش مسئولیت عملیاتی است. اگر سرویس down شود، تا بالا نیاید نمی توانم وارد خیلی چیزها شوم. این محدودیت صادقانه است و یادآوری می کند مالک stack بودن یعنی مالک failure caseها هم بودن.
WireGuard به عنوان چسب زیرساخت
WireGuard ستون اصلی است. لپ تاپ، موبایل و سرور را به یک شبکه خصوصی وصل می کند. سرویس هایی که نباید عمومی باشند، مثل پورت دیتابیس، admin interface و داشبورد داخلی، فقط از طریق WireGuard قابل دسترسی هستند.
- هیچ پورت exposed به جز 80 و 443 روی VPS
- بدون VPN server وابسته به provider خارجی
- بدون تفاوت جدی بین local و remote؛ شبکه فقط کار می کند
هوش مصنوعی محلی به عنوان ابزار عملی
اجرای LM Studio و Ollama به صورت محلی نگاه من را به ابزارهای AI تغییر داد. وقتی inference روی سخت افزار خودم انجام می شود، API key، rate limit و خروج داده از شبکه وجود ندارد. مدل ها از گزینه های cloud کوچک تر و کندترند، اما همیشه در دسترس هستند و هزینه query ندارند.
AI محلی برای خلاصه سازی، draft و code review مفید است. جایگزین مدل های cloud برای کارهای پیچیده نیست. اما داشتن هر دو گزینه یعنی می توانم بر اساس نیاز واقعی task انتخاب کنم، نه فقط چیزی که ساده تر integrate می شود.
تمرین مالک بودن stack
Self-hosting برای نمایش دادن نیست. برای نزدیک نگه داشتن feedback loop است. وقتی چیزی می شکند، من باید fix کنم. وقتی configuration مبهم است، من باید مستندش کنم. هر سرویس که اجرا می کنم چیزی درباره سرویس هایی که در کار می سازم یادم می دهد. stackی که مالک آن هستم، همان stackی است که بهتر می فهمم.