افتیپی
FTP
آپلود، دانلود و مدیریت فایل روی سرورهای FTP و SFTP به صورت خودکار
نمای کلی
نود FTP/SFTP ابزاری قدرتمند برای انتقال فایل بین سرورها و سیستمهای مختلف است.
تفاوت پروتکلها:
FTP (File Transfer Protocol)
- پورت پیشفرض: 21
- بدون رمزنگاری (ناامن)
- سرعت بالا ولی دادهها به صورت متن ساده ارسال میشوند
- فقط برای شبکههای داخلی توصیه میشود
FTPS (FTP over SSL/TLS)
- پورت پیشفرض: 990 (Implicit) یا 21 (Explicit)
- رمزنگاری SSL/TLS
- سازگار با FTP ولی امنتر
- نیاز به تنظیم Certificate
SFTP (SSH File Transfer Protocol) - توصیه شده
- پورت پیشفرض: 22
- رمزنگاری کامل با SSH
- پشتیبانی از احراز هویت با کلید خصوصی
- امنترین روش انتقال فایل
- پشتیبانی از تغییر دسترسی فایل (chmod)
قابلیتهای کلیدی:
- آپلود و دانلود فایل
- لیست فایلها و پوشهها
- ایجاد و حذف پوشه
- تغییر نام و جابجایی فایل
- بررسی وجود فایل
- تغییر دسترسی (chmod) - فقط SFTP
- دریافت اطلاعات فایل (سایز، تاریخ)
- پشتیبانی از حالت Passive و Active
چه زمانی از کدام استفاده کنیم:
- SFTP: همیشه اولویت اول (امن و مطمئن)
- FTPS: وقتی سرور فقط FTPS دارد
- FTP: فقط در شبکه داخلی و بدون داده حساس
احراز هویت
تنظیم احراز هویت FTP/SFTP
اتصال FTP ساده
Host: ftp.example.com
Port: 21
Username: ftpuser
Password: yourpassword#### تنظیم در n8n:
- 1Credentials > FTP
- 2Host: آدرس سرور FTP
- 3Port: 21 (پیشفرض)
- 4Username و Password وارد کنید
اتصال SFTP با رمز عبور
Host: sftp.example.com
Port: 22
Username: sftpuser
Password: yourpassword#### تنظیم در n8n:
- 1Credentials > SFTP
- 2Host: آدرس سرور
- 3Port: 22 (پیشفرض)
- 4Username و Password وارد کنید
اتصال SFTP با کلید خصوصی (توصیه شده)
Host: sftp.example.com
Port: 22
Username: sftpuser
Private Key: محتوای فایل id_rsa
Passphrase: (اگر کلید رمز دارد)#### ساخت کلید SSH:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_n8n
# کلید عمومی را روی سرور کپی کنید:
ssh-copy-id -i ~/.ssh/id_rsa_n8n.pub user@serverاتصال FTPS (FTP over SSL)
Host: ftps.example.com
Port: 990 (Implicit) یا 21 (Explicit)
Username: ftpsuser
Password: yourpassword
Secure: trueدسترسی FTP در cPanel
- 1وارد cPanel شوید
- 2Files > FTP Accounts
- 3یک اکانت FTP بسازید
- 4Host: دامنه یا IP سرور
- 5Port: 21 (FTP) یا همان پورت SSH (SFTP)
دسترسی FTP در DirectAdmin
- 1وارد DirectAdmin شوید
- 2FTP Management
- 3اکانت FTP ایجاد کنید
- 4مسیر Home Directory مشخص کنید
نکات امنیتی:
- همیشه از SFTP به جای FTP استفاده کنید
- از کلید خصوصی به جای رمز عبور استفاده کنید
- دسترسی FTP را به دایرکتوری خاص محدود کنید (chroot)
- پورتهای پیشفرض را تغییر دهید
- رمز عبور قوی انتخاب کنید
عملیاتهای موجود
upload
آپلود فایل به سرور FTP/SFTP
download
دانلود فایل از سرور FTP/SFTP
delete
حذف فایل از سرور FTP/SFTP
list
لیست فایلها و پوشههای یک دایرکتوری
rename
تغییر نام یا جابجایی فایل روی سرور
mkdir
ایجاد دایرکتوری جدید روی سرور
rmdir
حذف دایرکتوری از سرور
exists
بررسی اینکه آیا فایل یا پوشه روی سرور وجود دارد
chmod
تغییر سطح دسترسی فایل (فقط SFTP)
stat
دریافت اطلاعات فایل شامل سایز، تاریخ تغییر و دسترسیها
copy
کپی فایل از یک مسیر به مسیر دیگر روی سرور
move
انتقال فایل از یک مسیر به مسیر دیگر روی سرور
کاربردهای متداول
1. استقرار وبسایت (Website Deployment)
آپلود خودکار فایلهای وبسایت به هاست:
GitHub Trigger (Push to main)
→ Code (لیست فایلهای تغییر یافته)
→ Loop
→ HTTP Request (دانلود فایل از GitHub)
→ FTP Upload
- Path: /public_html/{{$json.filePath}}
→ Telegram (اعلام استقرار موفق)2. بکآپ خودکار به سرور
پشتیبانگیری روزانه دیتابیس و فایلها:
Schedule (هر شب ساعت 3)
→ MySQL (Export database)
→ Code (تبدیل به SQL dump)
→ SFTP Upload
- Path: /backups/db/backup_{{$now.toFormat('yyyy-MM-dd')}}.sql
→ SFTP (حذف بکآپهای قدیمیتر از 30 روز)
→ Telegram (گزارش بکآپ)3. جمعآوری لاگها از سرورها
دریافت خودکار فایلهای لاگ:
Schedule (هر ساعت)
→ SFTP Download
- Path: /var/log/nginx/access.log
→ Code (Parse و تحلیل لاگ)
→ MySQL (ذخیره آمار)
→ IF (خطای بحرانی)
→ Telegram (هشدار فوری)4. آپلود تصاویر و مدیا
آپلود فایلهای رسانهای به CDN یا سرور:
Webhook (فرم آپلود)
→ Code (بررسی نوع و سایز فایل)
→ SFTP Upload
- Path: /cdn/images/{{$now.toFormat('yyyy/MM')}}/{{$json.fileName}}
→ SFTP chmod
- Mode: 644
→ Respond to Webhook (لینک فایل)5. ارسال فاکتور به مشتری
ارسال خودکار فاکتور PDF:
Webhook (پرداخت تأیید شده)
→ HTTP Request (تولید PDF فاکتور)
→ SFTP Upload
- Path: /invoices/{{$json.customerId}}/INV-{{$json.invoiceId}}.pdf
→ Email Send (ارسال فاکتور)6. توزیع گزارشها
آپلود گزارشها به سرور اشتراکی:
Schedule (اول هر ماه)
→ MySQL (آمار فروش ماهانه)
→ Code (تولید CSV و PDF)
→ SFTP Upload
- Path: /reports/monthly/{{$now.toFormat('yyyy-MM')}}_sales.csv
→ SFTP Upload
- Path: /reports/monthly/{{$now.toFormat('yyyy-MM')}}_sales.pdf
→ Email Send (ارسال به مدیران)7. تبادل فایل با بانکها و سازمانها
ارسال و دریافت فایلهای مالی:
Schedule (هر روز ساعت 8 صبح)
→ MySQL (تراکنشهای روز قبل)
→ Code (تبدیل به فرمت بانکی)
→ SFTP Upload
- Path: /exchange/outgoing/transactions_{{$now.toFormat('yyyyMMdd')}}.txt
→ SFTP List
- Path: /exchange/incoming/
→ Loop (فایلهای جدید)
→ SFTP Download
→ Code (پردازش فایل بانکی)
→ MySQL (ثبت نتایج)8. مدیریت فایل در cPanel
مدیریت خودکار فایلهای هاست:
Webhook (درخواست تغییر)
→ FTP List
- Path: /public_html/
→ FTP Upload (فایل جدید)
→ FTP Delete (فایل قدیمی)
→ FTP Rename (تغییر نام)9. همگامسازی خودکار فایلها
Sync فایلها بین دو سرور:
Schedule (هر 30 دقیقه)
→ SFTP List (سرور مبدأ)
- Path: /data/new/
→ Loop
→ SFTP Download (از سرور مبدأ)
→ SFTP Upload (به سرور مقصد)
→ SFTP Rename (انتقال به /data/processed/)
→ Telegram (گزارش همگامسازی)10. اتصال به اسکنر و پرینتر شبکه
دریافت خودکار فایلهای اسکن شده:
Schedule (هر 5 دقیقه)
→ FTP List
- Path: /scanner/output/
→ IF (فایل جدید وجود دارد)
→ Loop
→ FTP Download
→ Google Drive (آپلود)
→ FTP Delete (حذف از اسکنر)
→ Telegram (اعلام فایل جدید)نکات حرفهای
نکات حرفهای
- 1همیشه SFTP به جای FTP: SFTP تمام دادهها (شامل رمز عبور) را رمزنگاری میکند. FTP دادهها را به صورت متن ساده ارسال میکند و قابل شنود است. هرگز از FTP برای دادههای حساس استفاده نکنید.
- 1Passive Mode برای FTP: اگر پشت فایروال یا NAT هستید، حتماً Passive Mode فعال کنید. در حالت Active، سرور به کلاینت متصل میشود که معمولاً توسط فایروال مسدود میشود.
- 1Binary vs ASCII: برای فایلهای غیرمتنی (تصاویر، PDF، فایلهای فشرده) حتماً از حالت Binary استفاده کنید. حالت ASCII فقط برای فایلهای متنی مناسب است و میتواند فایلهای باینری را خراب کند.
- 1ساختار دایرکتوری منظم: مسیرها را بر اساس تاریخ یا دستهبندی سازماندهی کنید:
/backups/
├── database/
│ ├── 2024-01/
│ └── 2024-02/
├── files/
└── logs/- 1Retry on Failure: اتصالات FTP/SFTP ممکن است گاهی قطع شوند. همیشه Retry on Fail با 3 تلاش و فاصله 5 ثانیه تنظیم کنید:
Retry on Fail: ON
Max Tries: 3
Wait Between Tries: 5000ms- 1File Locking: قبل از خواندن فایلی که ممکن است در حال نوشتن باشد، وجود فایل lock. را بررسی کنید. برنامههایی که فایل مینویسند معمولاً یک فایل قفل ایجاد میکنند.
- 1فایل موقت و سپس تغییر نام: برای جلوگیری از خواندن فایل ناقص، ابتدا با پسوند .tmp آپلود کنید و بعد تغییر نام دهید:
SFTP Upload → /data/report.csv.tmp
SFTP Rename → /data/report.csv.tmp → /data/report.csv- 1Connection Pooling: در حلقهها، n8n از یک اتصال مجدد استفاده میکند. ولی اگر عملیات زیاد دارید، بین هر 50 عملیات یک Wait کوتاه بگذارید تا اتصال پایدار بماند.
- 1مدیریت فایلهای بزرگ: برای فایلهای بزرگتر از 100MB:
- Timeout را افزایش دهید (حداقل 300000ms)
- Memory سرور n8n کافی باشد
- از Streaming mode استفاده کنید
- شبکه پایدار اطمینان حاصل کنید
- 1مشکل نام فایل فارسی: سرورهای FTP قدیمی ممکن است با نام فایل فارسی (UTF-8) مشکل داشته باشند. توصیهها:
- از نام فایل انگلیسی استفاده کنید
- Encoding سرور را UTF-8 تنظیم کنید
- SFTP معمولاً با UTF-8 مشکلی ندارد
- نام فایل:
report_1403-05-15.pdfبه جایگزارش_مرداد.pdf
- 1مدیریت پهنای باند: برای جلوگیری از اشغال کامل پهنای باند:
- بین آپلودها Wait بگذارید
- انتقال فایلهای بزرگ را در ساعات کمترافیک انجام دهید
- از Split In Batches استفاده کنید
- 1احراز هویت SFTP با کلید: امنترین روش اتصال SFTP:
# ساخت کلید
ssh-keygen -t ed25519 -f ~/.ssh/n8n_key
# کپی به سرور
ssh-copy-id -i ~/.ssh/n8n_key.pub user@server
# در n8n: محتوای n8n_key را در Private Key وارد کنید- 1مانیتورینگ انتقال فایل: بعد از هر آپلود، سایز فایل روی سرور را با فایل اصلی مقایسه کنید:
SFTP Upload → SFTP Stat → IF (size == originalSize)
→ True: موفق
→ False: آپلود مجدد- 1پاکسازی فایلهای قدیمی: بکآپها و فایلهای موقت را مرتب پاک کنید:
Schedule (هر هفته)
→ SFTP List (/backups/)
→ Code (فیلتر فایلهای قدیمیتر از 30 روز)
→ Loop
→ SFTP Delete
→ Telegram (گزارش پاکسازی)- 1ادغام با cPanel/DirectAdmin: برای مدیریت هاست:
// cPanel FTP
Host: yourdomain.com
Port: 21
User: cpanelusername@yourdomain.com
Path: /public_html/
// DirectAdmin SFTP
Host: yourdomain.com
Port: 22
User: dauser
Path: /home/dauser/domains/yourdomain.com/public_html/رفع مشکلات
خطاهای رایج
1. خطای ECONNREFUSED (اتصال رد شد)
علت: سرور FTP/SFTP در دسترس نیست یا پورت بسته است
راهحل
- آدرس Host و Port را بررسی کنید
- FTP: پورت 21 / SFTP: پورت 22
- فایروال سرور را چک کنید (iptables/ufw)
- سرویس FTP/SSH فعال باشد:
systemctl status vsftpd یا systemctl status sshd
- از telnet تست کنید:
telnet host 21
2. خطای ETIMEDOUT (وقفه زمانی)
علت: سرور پاسخ نمیدهد یا مسیر شبکه مسدود است
راهحل
- اتصال اینترنت سرور n8n را بررسی کنید
- DNS سرور مقصد صحیح باشد
- Timeout را افزایش دهید
- از IP به جای دامنه تست کنید
- Passive Mode فعال کنید (برای FTP)
3. خطای Authentication Failed
علت: نام کاربری یا رمز عبور اشتباه
راهحل
- Username و Password را دوباره بررسی کنید
- حساسیت به حروف بزرگ و کوچک
- کاربر FTP فعال باشد (غیر از Disabled)
- با ابزار FileZilla تست کنید
- دسترسی Shell برای SFTP فعال باشد
4. مشکلات Passive Mode در FTP
علت: فایروال یا NAT جلوی پورتهای Passive را میگیرد
راهحل
- Passive Mode را فعال کنید
- رنج پورتهای Passive را در فایروال باز کنید (معمولاً 30000-31000)
- در vsftpd.conf:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000- یا از SFTP استفاده کنید (نیاز به Passive ندارد)
5. خطای SFTP Key Rejected
علت: کلید خصوصی SSH معتبر نیست یا روی سرور تنظیم نشده
راهحل
- کلید عمومی در
~/.ssh/authorized_keysسرور باشد - دسترسی فایل:
chmod 600 ~/.ssh/authorized_keys - دسترسی پوشه:
chmod 700 ~/.ssh - فرمت کلید صحیح باشد (OpenSSH یا PEM)
- Passphrase کلید درست وارد شده باشد
6. خطای File Not Found (فایل یافت نشد)
علت: مسیر فایل اشتباه یا فایل وجود ندارد
راهحل
- مسیر فایل را با لیست کردن دایرکتوری بررسی کنید
- مسیر مطلق استفاده کنید (شروع با /)
- حساسیت به حروف بزرگ و کوچک (Linux)
- از عملیات List قبل از Download استفاده کنید
7. خطای Permission Denied (عدم دسترسی)
علت: کاربر FTP/SFTP اجازه خواندن/نوشتن ندارد
راهحل
- دسترسی کاربر FTP به دایرکتوری مورد نظر
- مالکیت فایل:
chown ftpuser:ftpuser /path - دسترسی دایرکتوری:
chmod 755 /path - تنظیمات chroot در vsftpd یا sshd_config
- SELinux/AppArmor غیرفعال یا تنظیم شود
8. خطای Transfer Incomplete (انتقال ناقص)
علت: اتصال در حین انتقال قطع شده
راهحل
- Retry on Fail فعال کنید
- فایلهای بزرگ را تکهتکه ارسال کنید
- اتصال شبکه را بررسی کنید
- Timeout را افزایش دهید
- از حالت Binary (نه ASCII) استفاده کنید
- بعد از آپلود، سایز فایل را مقایسه کنید
