📄 محتوای کامل
راه اندازی NextCloud ، یک مدیر فایل متن باز و جایگزین گوگل درایو
Nextcloud را روی Rocky Linux ۹ با Docker، Nginx و HTTPS مستقر کنید. MariaDB، Redis را تنظیم کنید و فضای ذخیرهسازی ابری خصوصی خود را ایمن کنید.
Nextcloud یک پلتفرم رایگان و متنباز برای میزبانی و مدیریت سرویسهای ذخیرهسازی فایل است. این پلتفرم قابلیتهای مشابهی مانند گوگل درایو، مانند اشتراکگذاری فایل و همکاری را ارائه میدهد، اما کاملاً بر روی زیرساختی که شما کنترل میکنید، اجرا میشود. کد منبع آن به صورت عمومی در GitHub برای بررسی و مشارکت در دسترس است.
در این مقاله، شما Nextcloud را روی Rocky Linux ۹ با استفاده از نصب دستی با 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'@'127.0.0.1' IDENTIFIED BY 'StrongPass';
با یک رمز عبور امن شامل حروف و اعداد جایگزین کنید StrongPass.
- به کاربر امتیازات کامل در پایگاه داده Nextcloud اعطا کنید.
sqlکپی
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'127.0.0.1';
- امتیازات را دوباره بارگذاری کنید.
اس کیو الکپی
MariaDB [(none)]> FLUSH PRIVILEGES;
- از کنسول MariaDB خارج شوید.
اس کیو الکپی
MariaDB [(none)]> exit
- ورود کاربر جدید پایگاه داده را آزمایش کنید.
کنسولکپی
$ mariadb -u nextcloud -p -h 127.0.0.1
رمز عبوری که قبلاً تنظیم کردهاید را وارد کنید.
- تأیید کنید که 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 = 127.0.0.1
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix = 1
innodb_file_format = barracuda
innodb_file_per_table = 1
- 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 = 1
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
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 = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
- skip_name_resolve: جستجوی DNS را غیرفعال میکند تا سرعت اتصال بهبود یابد.
- innodb_*پارامترها: پیکربندی بافر Poolها، flushing و لاگ بافرها برای عملکرد متعادل.
- query_cache_*پارامترها: مدیریت حافظه پنهان پرسوجو (نکته: در MariaDB ۱۱.۴ منسوخ شده و ممکن است نادیده گرفته شود).
- tmp_table_sizeو max_heap_table_size: محدودیتهایی را برای جداول موقت و جداول درون حافظه تعریف کنید.
- slow_query_logگزینهها: فعالسازی و پیکربندی ثبت وقایع کند برای تحلیل عملکرد.
- برای اعمال تغییرات، MariaDB را مجدداً راهاندازی کنید.
کنسولکپی
$ sudo systemctl restart mariadb
- تأیید کنید که MariaDB در حال اجرا است.
کنسولکپی
$ sudo systemctl status mariadb
نصب PHP ۸ برای Nextcloud
Nextcloud برای اجرا به PHP نیاز دارد. نسخه ۸.۳ یا بالاتر برای عملکرد بهتر، مدیریت حافظه و سازگاری توصیه میشود. در این بخش، PHP ۸.۳ را نصب کنید، ماژولهای لازم را فعال کنید و PHP-FPM را برای کار با Nginx پیکربندی کنید.
- جریانهای PHP موجود را بررسی کنید.
کنسولکپی
$ sudo dnf module list php
PHP ۸.۳ به طور پیشفرض در Rocky Linux ۹ موجود است، اما ممکن است برخی از بستهها در آن گنجانده نشده باشند. برای اطمینان از دسترسی به همه ماژولهای مورد نیاز، باید مخزن Remi را برای PHP ۸.۳ اضافه و فعال کنید.
- مخزن Remi را اضافه کنید.
کنسولکپی
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
مخزن Remi یک مخزن شخص ثالث قابل اعتماد است که نسخههای بهروز PHP را برای توزیعهای Enterprise Linux نگهداری میکند.
- مخزن Remi و ماژول PHP ۸.۳ را فعال کنید.
کنسولکپی
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf module enable php:remi-8.3
- PHP ۸.۳، 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
خط زیر را تغییر دهید:
iniکپی
memory_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 -y
DNF به طور خودکار کلید GPG را میپذیرد و نسخه پایدار را از مخزن پیکربندی شده نصب میکند.
- سرویس Nginx را فعال و شروع کنید.
کنسولکپی
$ sudo systemctl enable --now nginx
- تأیید کنید که Nginx فعال است.
کنسولکپی
$ sudo systemctl status nginx
خروجی باید نشان دهد که سرویس فعال (در حال اجرا) است.
- اجازه عبور ترافیک HTTP و HTTPS از فایروال را بدهید.
کنسولکپی
$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
$ sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
- برای اعمال تغییرات، فایروال را مجدداً بارگذاری کنید.
کنسولکپی
$ sudo firewall-cmd --reload
- آدرس IP سرور خود را در یک مرورگر باز کنید. اگر Nginx به درستی نصب شده باشد، صفحه خوشامدگویی پیشفرض را مشاهده خواهید کرد:

- مالکیت فایل را برای دایرکتوری Nextcloud تغییر دهید تا Nginx بتواند فایلها را بخواند و اجرا کند.
کنسولکپی
$ sudo chown -R nginx:nginx /var/www/nextcloud
- مجوزها را تغییر دهید تا به کاربر مجوزهای خواندن، نوشتن و اجرا داده شود.
کنسولکپی
$ sudo chmod -R 750 /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 [::]:80;
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/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
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 =404;
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=15778463$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) یا 127.0.0.1(در صورت استفاده از MariaDB محلی)
پس از اتمام تنظیمات، میتوانید Nextcloud را با برنامههای اضافی گسترش دهید، فایلها را سازماندهی و به اشتراک بگذارید و دادهها را با استفاده از رابط وب یا کلاینتهای موبایل و دسکتاپ بین دستگاهها همگامسازی کنید. این به شما یک پلتفرم متمرکز برای مدیریت فضای ذخیرهسازی ابری خصوصی خود از طریق یک داشبورد بصری میدهد.
نتیجه گیری
در این مقاله، شما Nextcloud را روی Rocky Linux ۹ با استفاده از نصب دستی یا تنظیمات مبتنی بر Docker مستقر کردید. شما استقرار را با Nginx و HTTPS ایمن کردید، پایگاه داده و Redis را پیکربندی کردید و اطمینان حاصل کردید که دادههای کاربر برای پشتیبانگیری آسانتر روی سیستم میزبان باقی میمانند.
اجرای Nextcloud در کانتینرها، ایزولهسازی، استفاده کارآمد از منابع و انعطافپذیری را فراهم میکند، در حالی که روش دستی کنترل دقیقتری بر محیط به شما میدهد. برای ویژگیهای پیشرفته مانند ذخیرهسازی خارجی و ابزارهای گروهافزار، به مستندات Nextcloud مراجعه کنید .