فصل دوم: آماده‌سازی میدان نبرد: راه‌اندازی محیط توسعه Nextcloud

هدف فصل: شروع یک ماجراجویی برنامه‌نویسی

تصور کنید که می‌خواهید یک فضای ابری قدرتمند و سفارشی بسازید که قلب پروژه شما خواهد بود! در این فصل، شما را با راه‌اندازی محیط توسعه برای Nextcloud ۳۲.۰.۰ (آخرین نسخه پایدار تا اکتبر ۲۰۲۵) همراهی می‌کنیم. از کلون کردن ریپازیتوری‌های کلیدی تا تنظیم سرور محلی و آماده‌سازی ابزارها، این بخش شما را برای سفری هیجان‌انگیز در دنیای توسعه Nextcloud آماده می‌کند. هدف؟ یک محیط توسعه سریع، پایدار و آماده برای فارسی‌سازی و جلالی‌سازی پروژه!


۲.۱ کلون کردن پروژه‌ها: جمع‌آوری ابزارهای اصلی

اولین قدم در ساخت فضای ابری سفارشی، جمع‌آوری کدهای منبع است. ما هسته Nextcloud، اپلیکیشن‌های Calendar و Talk (که با نام Spreed شناخته می‌شود)، و کلاینت دسکتاپ را کلون می‌کنیم. با این کار، تمام قطعات پازل پروژه در دسترس شما قرار می‌گیرد.

۲.۱.۱ سرور و اپلیکیشن‌ها: قلب پروژه

بیایید ریپازیتوری‌های اصلی را با سرعت و دقت کلون کنیم. از گزینه --depth 1 استفاده می‌کنیم تا فقط آخرین نسخه‌ها را بکشیم و فضای دیسک را بهینه کنیم.

# هسته Nextcloud: مغز متفکر پروژه
git clone --depth 1 -b v32.0.0 https://github.com/nextcloud/server.git
cd server
make composer-install  # نصب وابستگی‌های PHP با Composer
cd ..

# اپلیکیشن Calendar: تقویم هوشمند پروژه
git clone --depth 1 https://github.com/nextcloud/calendar.git
cd calendar
git checkout stable-4.8  # نسخه سازگار با سرور ۳۲.۰.۰
cd ..

# اپلیکیشن Talk (Spreed): پیام‌رسان ابری
git clone --depth 1 https://github.com/nextcloud/spreed.git
cd spreed
git checkout stable-19.0  # نسخه پایدار برای ارتباط بی‌درنگ
cd ..

# کلاینت دسکتاپ: پل ارتباطی با کاربران
git clone --depth 1 -b v3.17.3 https://github.com/nextcloud/desktop.git

نکته حرفه‌ای: اگر با خطای "Repository not found" مواجه شدید، مطمئن شوید که URL درست است (مثلاً spreed به جای talk). برای دسترسی امن‌تر، از SSH یا Personal Access Token استفاده کنید.

۲.۱.۲ انتقال اپلیکیشن‌ها: مرتب‌سازی قطعات پازل

اپلیکیشن‌ها باید در پوشه apps/ سرور قرار گیرند تا Nextcloud آن‌ها را شناسایی کند:

mv calendar server/apps/
mv spreed server/apps/

چک سریع: مطمئن شوید پوشه‌های calendar و spreed حالا در server/apps/ هستند:

ls server/apps/
# خروجی: calendar  spreed

۲.۲ راه‌اندازی محیط محلی: روشن کردن موتور پروژه

حالا که کدهای منبع را داریم، وقت آن است که سرور را راه‌اندازی کنیم. دو مسیر پیش رو داریم: Docker برای سرعت و سادگی، یا نصب دستی برای کنترل کامل. هر دو روش را با جزئیات توضیح می‌دهیم.

۲.۲.۱ استفاده از Docker: سریع و بدون دردسر

Docker مانند یک جعبه جادویی است که همه چیز را آماده می‌کند. با یک فایل تنظیمات ساده، سرور و دیتابیس شما در چند دقیقه آماده است.

  1. فایل docker-compose.yml را در ریشه پروژه بسازید:
   version: '3'
   services:
     app:
       image: nextcloud:32
       ports:
         - "8080:80"  # دسترسی از localhost:8080
       volumes:
         - ./server:/var/www/html  # اتصال کدهای محلی
       environment:
         - MYSQL_HOST=db
         - MYSQL_DATABASE=nextcloud
         - MYSQL_USER=nextcloud
         - MYSQL_PASSWORD=secret
       depends_on:
         - db
     db:
       image: mariadb:latest
       environment:
         - MYSQL_ROOT_PASSWORD=secret
         - MYSQL_DATABASE=nextcloud
         - MYSQL_USER=nextcloud
         - MYSQL_PASSWORD=secret
       volumes:
         - db_data:/var/lib/mysql
   volumes:
     db_data:
  1. اجرا کنید:
   docker-compose up -d
  1. نصب اولیه Nextcloud:
  2. به http://localhost:8080 بروید.
  3. با نام کاربری admin و رمز admin123 لاگین کنید.
  4. تنظیمات اولیه را کامل کنید (دیتابیس، کاربر ادمین).

چرا Docker؟ سریع، قابل‌تکرار، و بدون نیاز به نصب دستی وابستگی‌ها. فقط کافی است Docker و Docker Compose روی سیستم داشته باشید.

۲.۲.۲ نصب دستی: کنترل کامل در دستان شما

اگر عاشق کنترل دقیق هستید، نصب دستی به شما اجازه می‌دهد هر جزء را شخصی‌سازی کنید.

  1. نصب وابستگی‌ها (برای اوبونتو/دبیان):
   sudo apt update
   sudo apt install -y php8.2 php8.2-mysql php8.2-gd php8.2-curl php8.2-mbstring \
       php8.2-xml php8.2-zip php8.2-intl nodejs npm mariadb-server redis-server
  1. تنظیم MariaDB:
   mysql -u root -p
   CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
   GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'secret';
   EXIT;
  1. نصب Nextcloud:
   cd server
   php occ maintenance:install --database mysql --database-name nextcloud \
       --database-user nextcloud --database-pass secret \
       --admin-user admin --admin-pass admin123
  1. فعال‌سازی حالت دیباگ: فایل config/config.php را ویرایش کنید:
   <?php
   $CONFIG = [
       'debug' => true,
       'loglevel' => 0,  // لاگ‌های کامل
       'log_type' => 'file',
       'logfile' => 'nextcloud.log',
       'trusted_domains' => ['localhost'],
       'memcache.local' => '\OC\Memcache\Redis',
       'redis' => [
           'host' => 'localhost',
           'port' => 6379,
       ],
   ];
  1. اجرای سرور تست:
   php -S localhost:8080

۲.۲.۳ نصب وابستگی‌های توسعه

برای توسعه، به ابزارهای JavaScript و PHP نیاز داریم:

cd server
npm install  # نصب پکیج‌های Node.js (مثل Webpack)
make npm-install  # نصب ابزارهای توسعه
composer install  # نصب وابستگی‌های PHP

چک کنید: فایل package.json و composer.json را بررسی کنید:

npm list
composer show

۲.۳ فورک و استراتژی برنچ: مدیریت کد مثل یک حرفه‌ای

برای سفارشی‌سازی پروژه، باید کد را تحت کنترل خودمان بیاوریم و یک استراتژی ورژن‌کنترل تمیز داشته باشیم.

  1. فورک ریپازیتوری‌ها:
  2. به GitHub بروید و ریپازیتوری‌های server, calendar, spreed, و desktop را فورک کنید.
  3. یا با GitHub CLI:
gh repo fork nextcloud/server --clone=false
gh repo fork nextcloud/calendar --clone=false
gh repo fork nextcloud/spreed --clone=false
gh repo fork nextcloud/desktop --clone=false
  1. ایجاد برنچ توسعه:
   cd server
   git checkout -b feature/persian-jalali
   cd ../calendar
   git checkout -b feature/persian-jalali
   cd ../spreed
   git checkout -b feature/persian-jalali
   cd ../desktop
   git checkout -b feature/persian-jalali
  1. تنظیم CI با GitHub Actions: فایل: .github/workflows/ci.yml (در server):
   name: Continuous Integration
   on:
     push:
       branches: [feature/persian-jalali]
     pull_request:
       branches: [main]
   jobs:
     php-lint:
       runs-on: ubuntu-latest
       steps:
         - uses: actions/checkout@v3
         - name: Setup PHP
           uses: shivammathur/setup-php@v2
           with:
             php-version: '8.2'
         - run: composer install
         - run: make php-lint
     js-build:
       runs-on: ubuntu-latest
       steps:
         - uses: actions/checkout@v3
         - name: Setup Node.js
           uses: actions/setup-node@v3
           with:
             node-version: '20'
         - run: npm install
         - run: make npm-build

۲.۴ تست محیط: لحظه حقیقت!

حالا وقت آن است که مطمئن شویم همه چیز درست کار می‌کند.

  1. بررسی اپلیکیشن‌های فعال:
   cd server
   php occ app:list

خروجی باید شامل calendar, spreed, و اپ‌های پیش‌فرض باشد.

  1. تست سرور:
   curl http://localhost:8080
  • باید صفحه لاگین Nextcloud را ببینید.
  • در مرورگر به http://localhost:8080 بروید و لاگین کنید.

  • چک لاگ‌ها:

   cat nextcloud.log

نکته حرفه‌ای: از ngrok برای تست خارجی استفاده کنید:

ngrok http 8080

نکات حرفه‌ای برای موفقیت

  • ذخیره‌سازی امن: فایل config.php را به .gitignore اضافه کنید.
  • بک‌آپ: از دیتابیس بک‌آپ بگیرید:
  mysqldump -u nextcloud -p nextcloud > backup.sql
  • مانیتورینگ: با htop یا docker stats منابع را بررسی کنید.