راه اندازی NextCloud ، یک مدیر فایل متن باز و جایگزین گوگل درایو #
Nextcloud یک پلتفرم رایگان و متنباز برای میزبانی و مدیریت سرویسهای ذخیرهسازی فایل است. این پلتفرم قابلیتهای مشابهی مانند گوگل درایو، مانند اشتراکگذاری فایل و همکاری را ارائه میدهد، اما کاملاً بر روی زیرساختی که شما کنترل میکنید، اجرا میشود. کد منبع آن به صورت عمومی در GitHub برای بررسی و مشارکت در دسترس است.
در این مقاله، شما Nextcloud را روی Rocky Linux 9 با استفاده از نصب دستی با Nginx، PHP و MariaDB یا نصب کانتینر شده با Docker و Docker Compose مستقر خواهید کرد. هر دو روش شامل پیکربندی امن وب سرور، تنظیم پایگاه داده و پشتیبانی اختیاری HTTPS برای دسترسی رمزگذاری شده هستند.
پیش نیازها #
قبل از اینکه باشید، مطمئن شوید که:
- به عنوان یک کاربر root یا غیر روت با دسترسی های لازم ، به سرور Rocky Linux 9 دسترسی داشته باشید .
sudo - یک رکورد DNS A ایجاد کنید که به آدرس IP سرور شما پوینت بخورد، مانند
nextcloud.example.com.
این بخش سیستم را برای نصب Nextcloud تنظیم میکند. شما بستههای خود را بهروزرسانی خواهید کرد، ابزارهای مورد نیاز را نصب خواهید کرد و محیط را برای سرویسهای وب، پایگاه داده و PHP آماده خواهید کرد.
- بستههای سیستم را بهروزرسانی کنید.console
$ sudo dnf updateوقتی از شما خواسته شد، برای تأیید و نصب بهروزرسانیهای موجود، <kbd class=”key”>Y</kbd> را فشار دهید.
- نصب ابزارهای سیستم و وابستگیها.کنسول
$ sudo dnf install epel-release unzip curl wget policycoreutils-python-utils dnf-plugins-core -yاین بستهها ابزارهای ضروری برای راهاندازی برنامههای وب و مدیریت SELinux را ارائه میدهند.
فایل های برنامه وب Nextcloud را دانلود کنید #
- آخرین نسخه Nextcloud را دانلود کنید.کنسول
$ wget https://download.nextcloud.com/server/releases/latest.zipاین دستور آخرین نسخه پایدار Nextcloud را در دایرکتوری کاری فعلی شما دانلود میکند.
- بایگانی را استخراج کنید.کنسول
$ unzip latest.zipاین یک
nextcloud/دایرکتوری حاوی فایلهای برنامه وب ایجاد میکند. - مطمئن شوید که دایرکتوری ریشه وب هدف وجود دارد.کنسول
$ sudo mkdir -p /var/www/ - فایلهای استخراج شده را به
/var/www… منتقل کنید.کنسول$ sudo mv nextcloud/ /var/www/فایلهای Nextcloud اکنون آمادهی ارائه از هستند
/var/www/nextcloud.
نصب سرور پایگاه داده MariaDB #
Nextcloud پیکربندی و دادههای کاربر خود را در یک پایگاه داده رابطهای ذخیره میکند. اگرچه از MySQL، PostgreSQL، SQLite و Oracle پشتیبانی میکند، SQLite فقط برای آزمایش یا استقرارهای بسیار کوچک مناسب است. در این بخش، MariaDB را به عنوان پایگاه داده عملیاتی نصب و پیکربندی کنید.
- یک فایل مخزن سفارشی برای MariaDB ایجاد کنید.کنسول
$ sudo tee /etc/yum.repos.d/MariaDB.repo > /dev/null <<EOF [mariadb] name = MariaDB baseurl = https://rpm.mariadb.org/11.4/rhel/\$releasever/\$basearch gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck = 1 EOF
- سرور و کلاینت MariaDB را نصب کنید.کنسول
$ sudo dnf install MariaDB-server MariaDB-client - MariaDB را هنگام بوت شدن شروع و فعال کنید.کنسول
$ sudo systemctl enable --now mariadb
- نصب MariaDB خود را ایمن کنید.کنسول
$ sudo mariadb-secure-installationاین اسکریپت شما را در تنظیم رمز عبور ریشه و تنظیمات گزینههای امنیتی اولیه راهنمایی میکند. در صورت درخواست، یک رمز عبور ریشه قوی وارد کنید، سپس
Yبه سؤالات باقیمانده پاسخ دهید تا پیشفرضهای توصیهشده اعمال شوند.
پیکربندی پایگاه داده MariaDB برای Nextcloud #
- وارد حساب کاربری root در MariaDB شوید.کنسول
$ mariadb -u root -pرمز عبور ریشهای که در طول تنظیم کردید را وارد کنید
mariadb-secure-installation. - پایگاه داده Nextcloud را ایجاد کنید.sql
MariaDB [(none)]> CREATE DATABASE nextcloud;
- یک کاربر پایگاه داده اختصاصی برای Nextcloud ایجاد کنید.sql
MariaDB [(none)]> CREATE USER 'nextcloud'@'۱۲۷.۰.۰.۱' IDENTIFIED BY 'StrongPass';
با یک رمز عبور امن شامل حروف و اعداد جایگزین کنید
StrongPass. - به کاربر امتیازات کامل در پایگاه داده Nextcloud اعطا کنید.sql
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'۱۲۷.۰.۰.۱';
- امتیازات را دوباره بارگذاری کنید.اس کیو ال
MariaDB [(none)]> FLUSH PRIVILEGES;
- از کنسول MariaDB خارج شوید.اس کیو ال
MariaDB [(none)]> exit
- ورود کاربر جدید پایگاه داده را آزمایش کنید.کنسول
$ mariadb -u nextcloud -p -h ۱۲۷.۰.۰.۱
رمز عبوری که قبلاً تنظیم کردهاید را وارد کنید.
- تأیید کنید که
nextcloudپایگاه داده وجود دارد.اس کیو الMariaDB [(none)]> SHOW DATABASES;
خروجی:
+--------------------+ | Database | +--------------------+ | information_schema | | nextcloud | +--------------------+با تایپ کردن از جلسه خارج شوید
exit.
تنظیم MariaDB برای Nextcloud #
Nextcloud برای اطمینان از سازگاری و عملکرد بهینه، به تنظیمات خاصی از MariaDB نیاز دارد. پیکربندی MariaDB را برای برآورده کردن این الزامات تغییر دهید.
- فایل پیکربندی MariaDB را ویرایش کنید.کنسول
$ sudo nano /etc/my.cnf.d/server.cnf - در زیر
[mysqld]بخش، خطوط زیر را اضافه کنید:اینیbind-address = ۱۲۷.۰.۰.۱ character_set_server = utf8mb4 collation_server = utf8mb4_general_ci transaction_isolation = READ-COMMITTED binlog_format = ROW innodb_large_prefix = ۱ innodb_file_format = barracuda innodb_file_per_table = ۱
bind-address = 127.0.0.1: اتصالات را به localhost محدود میکند.character_set_serverوcollation_server:utf8mb4برای پشتیبانی کامل از یونیکد پیکربندی کنید.transaction_isolation = READ-COMMITTED: از ناسازگاریهای خواندهشدهی تاییدنشده جلوگیری میکند.binlog_format = ROW: دقت و بازیابی تکثیر را بهبود میبخشد.- گزینههای InnoDB: فعال کردن پیشوندهای اندیس بزرگتر، فرمت فایل Barracuda و فضای جدول به ازای هر جدول.
- باز هم در همان فایل، موارد زیر را در زیر
[server]بخش اضافه کنید:اینیskip_name_resolve = ۱ innodb_buffer_pool_size = 128M innodb_buffer_pool_instances = ۱ innodb_flush_log_at_trx_commit = ۲ innodb_log_buffer_size = 32M innodb_max_dirty_pages_pct = ۹۰ query_cache_type = ۱ query_cache_limit = 2M query_cache_min_res_unit = 2K query_cache_size = 64M tmp_table_size = 64M max_heap_table_size = 64M slow_query_log = ۱ slow_query_log_file = /var/log/mysql/slow.log long_query_time = ۱
skip_name_resolve: جستجوی DNS را غیرفعال میکند تا سرعت اتصال بهبود یابد.innodb_*پارامترها: پیکربندی بافر Poolها، flushing و لاگ بافرها برای عملکرد متعادل.query_cache_*پارامترها: مدیریت حافظه پنهان پرسوجو (نکته: در MariaDB 11.4 منسوخ شده و ممکن است نادیده گرفته شود).tmp_table_sizeوmax_heap_table_size: محدودیتهایی را برای جداول موقت و جداول درون حافظه تعریف کنید.slow_query_logگزینهها: فعالسازی و پیکربندی ثبت وقایع کند برای تحلیل عملکرد.
- برای اعمال تغییرات، MariaDB را مجدداً راهاندازی کنید.کنسول
$ sudo systemctl restart mariadb - تأیید کنید که MariaDB در حال اجرا است.کنسول
$ sudo systemctl status mariadb
نصب PHP 8 برای Nextcloud #
Nextcloud برای اجرا به PHP نیاز دارد. نسخه ۸.۳ یا بالاتر برای عملکرد بهتر، مدیریت حافظه و سازگاری توصیه میشود. در این بخش، PHP 8.3 را نصب کنید، ماژولهای لازم را فعال کنید و PHP-FPM را برای کار با Nginx پیکربندی کنید.
- جریانهای PHP موجود را بررسی کنید.کنسول
$ sudo dnf module list phpPHP 8.3 به طور پیشفرض در Rocky Linux 9 موجود است، اما ممکن است برخی از بستهها در آن گنجانده نشده باشند. برای اطمینان از دسترسی به همه ماژولهای مورد نیاز، باید مخزن Remi را برای PHP 8.3 اضافه و فعال کنید.
- مخزن Remi را اضافه کنید.کنسول
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpmمخزن Remi یک مخزن شخص ثالث قابل اعتماد است که نسخههای بهروز PHP را برای توزیعهای Enterprise Linux نگهداری میکند.
- مخزن Remi و ماژول PHP 8.3 را فعال کنید.کنسول
$ sudo dnf config-manager --set-enabled remi $ sudo dnf module enable php:remi-8.3
- PHP 8.3، PHP-FPM و افزونههای مورد نیاز را نصب کنید.کنسول
$ sudo dnf install php php-fpm php-intl php-sodium php-ctype \ php-curl php-dom php-gd php-mbstring php-posix php-session \ php-xml php-zip php-zlib php83-php-pecl-redis php-mysqlnd -y
- برای استفاده از کاربر، پیکربندی PHP-FPM را ویرایش کنید
nginx.کنسول$ sudo nano /etc/php-fpm.d/www.confخطوط زیر را تغییر دهید:
اینیuser = nginx group = nginx
- محدودیت حافظه PHP را افزایش دهید.کنسول
$ sudo nano /etc/php.iniخط زیر را تغییر دهید:
inimemory_limit = 512M
- فعال کردن و اجرای PHP-FPMکنسول
$ sudo systemctl enable --now php-fpm
- به PHP-FPM اجازه دهید به سوکت MariaDB (SELinux) دسترسی داشته باشد.کنسول
$ sudo semanage fcontext -a -t mysqld_var_run_t "/var/lib/mysql/mysql.sock"
- برای اعمال تغییرات، تمام سرویسها را مجدداً راهاندازی کنید.کنسول
$ sudo systemctl restart php-fpm nginx mariadb
نصب و پیکربندی وب سرور Nginx #
Nextcloud برای ارائه خدمات frontend و مدیریت درخواستهای PHP به یک وب سرور نیاز دارد. Nginx یک وب سرور سبک و با کارایی بالا است که برای این کار بسیار مناسب است. برای نصب و پیکربندی آن، این مراحل را دنبال کنید.
- Nginx را نصب کنید.کنسول
$ sudo dnf install nginx -yDNF به طور خودکار کلید GPG را میپذیرد و نسخه پایدار را از مخزن پیکربندی شده نصب میکند.
- سرویس Nginx را فعال و شروع کنید.کنسول
$ sudo systemctl enable --now nginx
- تأیید کنید که Nginx فعال است.کنسول
$ sudo systemctl status nginxخروجی باید نشان دهد که سرویس فعال (در حال اجرا) است.
- اجازه عبور ترافیک HTTP و HTTPS از فایروال را بدهید.کنسول
$ sudo firewall-cmd --zone=public --permanent --add-port=۸۰/tcp $ sudo firewall-cmd --zone=public --permanent --add-port=۴۴۳/tcp
- برای اعمال تغییرات، فایروال را مجدداً بارگذاری کنید.کنسول
$ sudo firewall-cmd --reload - آدرس IP سرور خود را در یک مرورگر باز کنید. اگر Nginx به درستی نصب شده باشد، صفحه خوشامدگویی پیشفرض را مشاهده خواهید کرد:

- مالکیت فایل را برای دایرکتوری Nextcloud تغییر دهید تا Nginx بتواند فایلها را بخواند و اجرا کند.کنسول
$ sudo chown -R nginx:nginx /var/www/nextcloud - مجوزها را تغییر دهید تا به کاربر مجوزهای خواندن، نوشتن و اجرا داده شود.کنسول
$ sudo chmod -R ۷۵۰ /var/www/nextcloud
- یک فایل پیکربندی جدید برای Nextcloud ایجاد کنید.کنسول
$ sudo nano /etc/nginx/conf.d/nextcloud.conf - محتوای زیر را اضافه کنید. آن را
nextcloud.example.comبا دامنه واقعی خود جایگزین کنید.اینی# PHP-FPM socket upstream php-handler { server unix:/run/php-fpm/www.sock; } # Cache control for assets map $arg_v $asset_immutable { "" ""; default ", immutable"; } server { listen 80; listen [::]:۸۰; server_name nextcloud.example.com; root /var/www/nextcloud; server_tokens off; client_max_body_size 512M; client_body_timeout 300s; fastcgi_buffers 64 4K; gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; client_body_buffer_size 512k; add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "noindex, nofollow" always; add_header X-XSS-Protection "1; mode=block" always; fastcgi_hide_header X-Powered-By; include mime.types; types { text/javascript mjs; } index index.php index.html /index.php$request_uri; location = / { if ($http_user_agent ~ ^DavClnt) { return 302 /remote.php/webdav/$is_args$args; } } location = /robots.txt { allow all; log_not_found off; access_log off; } location ^~ /.well-known { location = /.well-known/carddav { return 301 /remote.php/dav/; } location = /.well-known/caldav { return 301 /remote.php/dav/; } location /.well-known/acme-challenge { try_files $uri $uri/ =۴۰۴; } location /.well-known/pki-validation { try_files $uri $uri/ =۴۰۴; } return 301 /index.php$request_uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; } location ~ \.php(?:$|/) { rewrite ^/(?!index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|.+/richdocumentscode(_arm64)?/proxy) /index.php$request_uri; fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =۴۰۴; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; fastcgi_max_temp_file_size 0; } location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ { try_files $uri /index.php$request_uri; add_header Cache-Control "public, max-age=۱۵۷۷۸۴۶۳$asset_immutable"; add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "noindex, nofollow" always; add_header X-XSS-Protection "1; mode=block" always; access_log off; } location ~ \.(?:otf|woff2?)$ { try_files $uri /index.php$request_uri; expires 7d; access_log off; } location /remote { return 301 /remote.php$request_uri; } location / { try_files $uri $uri/ /index.php$request_uri; } }
- پیکربندی Nginx را آزمایش کنید.کنسول
$ sudo nginx -tخروجی:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful - با استفاده از SELinux به Nginx اجازه دسترسی به فایلهای Nextcloud را بدهید.کنسول
$ sudo chcon -R -t httpd_sys_content_t /var/www/nextcloud - وب سرور Nginx را مجدداً راه اندازی کنید.کنسول
$ sudo systemctl restart nginx - تأیید کنید که وب سرور Nginx در حال اجرا و فعال است.کنسول
$ sudo systemctl status nginxاطمینان حاصل کنید که خروجی نشان میدهد
active (running)که Nginx عملیاتی است.
Nextcloud را با HTTPS ایمن کنید #
از Certbot برای درخواست و نصب خودکار گواهی TLS از Let’s Encrypt استفاده کنید . Certbot با Nginx ادغام میشود تا HTTPS را پیکربندی کرده و ترافیک HTTP را به صورت ایمن هدایت کند.
- Certbot و افزونه Nginx را نصب کنید.کنسول
$ sudo dnf install certbot python3-certbot-nginx -y - گواهی TLS را تولید و نصب کنید.کنسول
$ sudo certbot --nginx -d nextcloud.example.com--nginx: از افزونه Nginx برای پیکربندی خودکار HTTPS استفاده میکند.-d nextcloud.example.com: با نام دامنه واقعی خود جایگزین کنید.
وقتی از شما خواسته شد:
- برای اطلاع از تمدید اشتراک، آدرس ایمیل خود را وارد کنید.
- شرایط خدمات را بپذیرید.
- گزینهای را انتخاب کنید که تمام ترافیک HTTP را به HTTPS هدایت کند .
قبل از اجرای Certbot، مطمئن شوید که پورتهای ۸۰ (HTTP) و ۴۴۳ (HTTPS) در فایروال باز هستند.
دسترسی و راهاندازی Nextcloud #
پس از اتمام راهاندازی و اجرای کانتینرها، با مراجعه به آدرس زیر به نمونه خود دسترسی پیدا کنید:
https://nextcloud.example.comاز راه اندازی:
- یک نام کاربری ادمین و رمز عبور امن ایجاد کنید
- مسیر پوشه داده را تنظیم کنید (پیشفرض را بگذارید، مگر اینکه تغییر دهید)
- نوع پایگاه داده را MySQL/MariaDB انتخاب کنید .
- وارد کنید:
- کاربر پایگاه داده :
nextcloud - رمز عبور : رمزی که تنظیم کردهاید
- نام پایگاه داده :
nextcloud - میزبان :
db(در صورت استفاده از Docker) یا۱۲۷.۰.۰.۱(در صورت استفاده از MariaDB محلی)
- کاربر پایگاه داده :
پس از اتمام تنظیمات، میتوانید Nextcloud را با برنامههای اضافی گسترش دهید، فایلها را سازماندهی و به اشتراک بگذارید و دادهها را با استفاده از رابط وب یا کلاینتهای موبایل و دسکتاپ بین دستگاهها همگامسازی کنید. این به شما یک پلتفرم متمرکز برای مدیریت فضای ذخیرهسازی ابری خصوصی خود از طریق یک داشبورد بصری میدهد.
نتیجه گیری #
در این مقاله، شما Nextcloud را روی Rocky Linux 9 با استفاده از نصب دستی یا تنظیمات مبتنی بر Docker مستقر کردید. شما استقرار را با Nginx و HTTPS ایمن کردید، پایگاه داده و Redis را پیکربندی کردید و اطمینان حاصل کردید که دادههای کاربر برای پشتیبانگیری آسانتر روی سیستم میزبان باقی میمانند.
اجرای Nextcloud در کانتینرها، ایزولهسازی، استفاده کارآمد از منابع و انعطافپذیری را فراهم میکند، در حالی که روش دستی کنترل دقیقتری بر محیط به شما میدهد. برای ویژگیهای پیشرفته مانند ذخیرهسازی خارجی و ابزارهای گروهافزار، به مستندات Nextcloud مراجعه کنید .
