فصل هشتم: استحکام، امنیت، و انتشار: آمادهسازی Nextcloud پارسی برای جهان¶
هدف فصل: استقرار یک شاهکار امن و پایدار¶
تصور کنید Nextcloud پارسی شما نهتنها بینقص کار میکند، بلکه با تستهای جامع، امنیت آهنین، و استقراری روان آماده فتح دنیای دیجیتال است! در این فصل، سیستم Nextcloud ۳۲.۰.۰ را با تستهای واحد و E2E بررسی میکنیم، امنیت را با اسکن API و بهترین روشهای رمزنگاری تقویت میکنیم، و آن را با Docker و مستندات کامل برای استقرار آماده میکنیم. آمادهاید تا پروژهتان را به یک محصول حرفهای و قابل اعتماد تبدیل کنید؟
۸.۱ تست: اطمینان از عملکرد بینقص¶
۸.۱.۱ تست واحد¶
- اجرای تستها:
cd server
composer install --dev
make test-php-unit
- نمونه تست واحد:
فایل:
apps/myapp/tests/Unit/JalaliConverterTest.php
<?php
namespace OCA\MyApp\Tests\Unit;
use OCA\MyApp\Calendar\JalaliConverter;
use PHPUnit\Framework\TestCase;
class JalaliConverterTest extends TestCase {
public function testToJalali() {
$gregorian = new \DateTime('2025-03-21');
$jalali = JalaliConverter::toJalali($gregorian);
$this->assertEquals(['year' => 1404, 'month' => 1, 'day' => 1], $jalali);
}
public function testToGregorian() {
$gregorian = JalaliConverter::toGregorian(1404, 1, 1);
$this->assertEquals('2025-03-21', $gregorian->format('Y-m-d'));
}
}
- تست API:
فایل:
apps/myapp/tests/Integration/UserControllerTest.php
<?php
namespace OCA\MyApp\Tests\Integration;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IUserManager;
use OCA\MyApp\Controller\UserController;
use PHPUnit\Framework\TestCase;
class UserControllerTest extends TestCase {
private $controller;
private $userManager;
protected function setUp(): void {
$this->userManager = \OC::$server->getUserManager();
$this->controller = new UserController('myapp', \OC::$server->getRequest(), $this->userManager);
}
public function testBulkUpdate() {
$response = $this->controller->bulkUpdate(['testuser'], '10GB');
$this->assertInstanceOf(JSONResponse::class, $response);
$this->assertEquals('completed', $response->getData()['status']);
}
}
۸.۱.۲ تست سرتاسری (E2E)¶
- نصب وابستگیها:
npm install -g selenium-webdriver chromedriver
- ایجاد تست E2E:
فایل:
tests/e2e/test.js
const { Builder, By, until } = require('selenium-webdriver');
async function testNextcloud() {
let driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get('http://localhost:8080');
await driver.findElement(By.id('user')).sendKeys('admin');
await driver.findElement(By.id('password')).sendKeys('adminpass');
await driver.findElement(By.id('submit-form')).click();
await driver.wait(until.elementLocated(By.xpath("//*[contains(text(), 'فایلها')]")), 5000);
console.log('رابط کاربری پارسی تأیید شد');
await driver.get('http://localhost:8080/index.php/apps/calendar');
await driver.wait(until.elementLocated(By.xpath("//*[contains(text(), 'فروردین')]")), 5000);
console.log('تقویم جلالی تأیید شد');
await driver.get('http://localhost:8080/index.php/apps/spreed');
await driver.wait(until.elementLocated(By.xpath("//*[contains(text(), 'گفتوگو')]")), 5000);
console.log('پیامرسان پارسی تأیید شد');
} catch (error) {
console.error('خطا در تست E2E:', error);
} finally {
await driver.quit();
}
}
testNextcloud();
- اجرای تست E2E:
node tests/e2e/test.js
۸.۲ امنیت: قلعهای نفوذناپذیر¶
۸.۲.۱ اسکن امنیتی API¶
docker run -t owasp/zap2docker-stable zap-baseline.py -t http://localhost:8080 \
--autooff --report-html report.html
۸.۲.۲ هشینگ رمزهای عبور¶
فایل: apps/myapp/lib/Controller/UserController.php
public function bulkUpdate(array $users, string $quota, ?string $password = null): JSONResponse {
foreach ($users as $uid) {
$user = $this->userManager->get($uid);
if ($user) {
$user->setQuota($quota);
if ($password) {
$hashedPassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$user->setPassword($hashedPassword);
}
}
}
return new JSONResponse(['status' => 'success']);
}
۸.۲.۳ سایر اقدامات امنیتی¶
- HTTPS:
certbot --apache -d nextcloud.example.com
- محدودیت دسترسی API:
if (!\OC::$server->getUserSession()->getUser()->isAdmin()) {
throw new \OCP\AppFramework\Http\NotFoundResponse();
}
۸.۳ استقرار: انتشار پروژه به جهان¶
۸.۳.۱ تگگذاری نسخه¶
git add .
git commit -m "نسخه 1.0 پارسی آماده انتشار"
git tag v1.0-persian
git push origin v1.0-persian
۸.۳.۲ ساخت و انتشار Docker Image¶
- ایجاد Dockerfile:
فایل:
Dockerfile
FROM nextcloud:32.0.0-apache
COPY apps/myapp /var/www/html/custom_apps/myapp
COPY themes/persian-theme /var/www/html/themes/persian-theme
RUN apt-get update && apt-get install -y php-zip php-gd
RUN php occ app:enable myapp
RUN chown -R www-data:www-data /var/www/html
- ساخت و انتشار:
docker build -t mynextcloud:1.0 .
docker push mynextcloud:1.0
- اجرای با Docker Compose:
فایل:
docker-compose.yml
version: '3'
services:
app:
image: mynextcloud:1.0
ports:
- 8080:80
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=secret
db:
image: mariadb:10.5
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=secret
volumes:
nextcloud_data:
db_data:
- اجرای سرویس:
docker-compose up -d
۸.۴ مستندات: راهنمای کاربران پارسی¶
فایل: README.fa.md
# Nextcloud پارسی: فضای ابری بومیشده
این پروژه نسخهای از Nextcloud با پشتیبانی کامل از زبان پارسی، تقویم جلالی، و قابلیتهای مدیریت کاربران است.
## ویژگیها
- رابط کاربری پارسی با فونت Vazir
- تقویم جلالی در Calendar و Talk
- مدیریت انبوه کاربران و گروهها
- کلاینت دسکتاپ با احراز هویت محلی
## پیشنیازها
- PHP 8.2+
- MariaDB 10.5+
- Docker (اختیاری)
## نصب
1. کلون کنید:
```bash
git clone https://github.com/your-repo/nextcloud-persian.git
- نصب وابستگیها:
composer install
npm install
- اجرا با Docker:
docker-compose up -d
- فعالسازی اپلیکیشن:
php occ app:enable myapp
تست¶
- تست واحد:
make test-php-unit
- تست E2E:
node tests/e2e/test.js
استقرار¶
- تصویر Docker:
docker build -t mynextcloud:1.0 .
docker push mynextcloud:1.0
پشتیبانی¶
برای گزارش مشکلات، به GitHub Issues مراجعه کنید.
---
## ۸.۵ تست: لحظه اطمینان نهایی
1. **تست واحد**:
```bash:disable-run
cd server
make test-php-unit
- تست E2E:
node tests/e2e/test.js
- تست امنیتی:
docker run -t owasp/zap2docker-stable zap-baseline.py -t http://localhost:8080
- تست استقرار:
docker-compose up -d
curl http://localhost:8080
تستهای لبه:
- بارگذاری ۱۰۰۰ کاربر در تست E2E.
- اجرای API بدون احراز هویت.
- استقرار روی سرور با منابع محدود.
نکات حرفهای¶
- مانیتورینگ:
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- بکآپ:
mysqldump -u nextcloud -p nextcloud > backup.sql
tar -czf data.tar.gz /var/www/html
- بهروزرسانی خودکار:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
- رابط کاربری تست:
<template>
<div v-if="testResults">{{ testResults.status }}</div>
</template>
<script>
export default {
data() { return { testResults: null }; },
async mounted() {
const response = await fetch('/index.php/apps/myapp/api/test-results');
this.testResults = await response.json();
}
}
</script>