Как установить Nextcloud на AlmaLinux 9?

Nextcloud – это лучшее программное обеспечение для синхронизации и обмена файлами с открытым исходным кодом. Оно является альтернативой различным файлообменным приложениям, таким как Google Drive, Dropbox, OwnCloud и др. Nextcloud предлагает широкие функциональные возможности, такие как синхронизация и обмен файлами, редактирование документов в режиме онлайн, организация календаря, управление контактами и многое другое. В этом руководстве мы расскажем, как установить Nextcloud на AlmaLinux 9.

В этом руководстве для установки всего и выполнения команд будет использоваться root. Если вы используете другого системного пользователя с привилегиями sudo, вам необходимо добавить „sudo“. Для начала давайте войдем на нашу машину с Almalinux 9.

ssh root@IP_Address -p Port_number

Вам нужно заменить „IP_Address“ и „Port_number“ на соответствующие IP-адрес и номер порта SSH вашего сервера. Кроме того, замените „root“ на имя пользователя системы с привилегиями sudo.

Проверить, установлена ли на вашем сервере нужная версия AlmaLinux, можно с помощью следующей команды:

cat /etc/redhat-release
AlmaLinux release 9.4 (Seafoam Ocelot)

Шаг 2: Обновление системы

Перед началом работы убедитесь, что вся информация о пакетах приложений, установленных на сервере, в ОС AlmaLinux актуальна. Это можно сделать, выполнив следующие команды:

dnf update

Шаг 3: Установите PHP 8

На момент написания этой статьи версией PHP по умолчанию в AlmaLinux 9 является PHP 8.0. Согласно системным требованиям Nexcloud на сайте docs.nextcloud.com, мы собираемся установить PHP 8.3 и использовать его для установки Nextcloud.

dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.2.rpm
dnf update

После обновления мы можем проверить все доступные версии PHP для установки на наш сервер AlmaLinux после установки репозитория Remi.

dnf module list php

На выходе вы увидите следующее:

[root@rh ~]$# dnf module list php
Last metadata expiration check: 0:00:17 ago on Wed 19 Jun 2024 03:51:07 AM CDT.
AlmaLinux 9 - AppStream
Name                               Stream                                 Profiles                                                Summary                                            
php                                8.1                                    common [d], devel, minimal                              PHP scripting language                             
php                                8.2                                    common [d], devel, minimal                              PHP scripting language                             
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                               Stream                                 Profiles                                                Summary                                            
php                                remi-7.4                               common [d], devel, minimal                              PHP scripting language                             
php                                remi-8.0                               common [d], devel, minimal                              PHP scripting language                             
php                                remi-8.1                               common [d], devel, minimal                              PHP scripting language                             
php                                remi-8.2                               common [d], devel, minimal                              PHP scripting language                             
php                                remi-8.3                               common [d], devel, minimal                              PHP scripting language

Как видно из вышеприведенного, теперь мы можем установить PHP 8.3.

Чтобы включить источник по умолчанию для установки этого пакета сценариев на нашу машину AlmaLinux, нам нужно сначала переустановить его, а затем указать желаемую версию для включения.

dnf module reset php
dnf module enable php:remi-8.3

Вот и все, мы перешли на PHP 8.3. Теперь, чтобы установить PHP 8.3 с необходимыми расширениями, мы можем выполнить следующую команду:

dnf install php php-{bz2,ctype,curl,fpm,gd,imagick,intl,json,fileinfo,libxml,mbstring,mysqlnd,openssl,posix,session,simplexml,xmlreader,xmlwriter,zip,zlib}

После завершения установки служба PHP-FPM будет запущена, но не будет включена при перезагрузке сервера. Вы можете проверить и убедиться в установленной версии PHP с помощью этой команды.

php -v

Она выдаст результат, подобный этому:

[root@almalinux8 ~]# php -v
PHP 8.3.8 (cli) (built: Jun 4 2024 14:53:17) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.8, Copyright (c) Zend Technologies
with Zend OPcache v8.3.8, Copyright (c), by Zend Technologies

Шаг 4: Настройка PHP-FPM

На машине Almalinux в качестве «пользователя» и «группы» в файле /etc/php-fpm.d/www.conf по умолчанию установлено значение «apache». Поскольку мы будем использовать nginx в качестве веб-сервера, нам нужно отредактировать файл конфигурации.

vim /etc/php-fpm.d/www.conf

Измените „user“ и „group“ на „nginx“.

user = nginx
group = nginx

Сохраните файл и выйдите. После этого мы отредактируем некоторые значения PHP, необходимые для установки Nextcloud.

vim /etc/php.ini

Откомментируйте и измените значения конфигурации, как показано ниже.

memory_limit = 768M
date.timezone = America/Chicago
cgi.fixpathinfo = 0

Нам также нужно изменить права доступа к директориям PHP-сессии и OpCache.

chown -R root.nginx /var/lib/php/opcache/
chown -R root.nginx /var/lib/php/session/

Затем перезапустим PHP-FPM и включим его при перезагрузке.

systemctl restart php-fpm
systemctl enable php-fpm

Шаг 5: Установка и настройка Nginx

После настройки PHP-FPM мы установим и настроим nginx в качестве веб-сервера, а не Apache. Выполните эту команду, чтобы установить его.

dnf install nginx -y

Запустите nginx и включите его при загрузке.

systemctl enable --now nginx

Создадим блок сервера nginx.

vim /etc/nginx/conf.d/cloud.example.com.conf

Вставьте следующее и убедитесь, что вы заменили cloud.example.com на ваше реальное имя домена или поддомена:

upstream php-handler {
    server unix:/run/php-fpm/www.sock;
}
Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
    "" "";
    default "immutable";
}
server {
    listen 80;
    server_name cloud.example.com;
    # Path to the root of your installation
    root /var/www/nextcloud;
     # Prevent nginx HTTP Server Detection
    server_tokens off;
    # set max upload size and increase upload timeout:
    client_max_body_size 512M;
    client_body_timeout 300s;
    fastcgi_buffers 64 4K;
    # Enable gzip but do not remove ETag headers
    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 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;
    # HTTP response headers borrowed from Nextcloud `.htaccess`
    add_header Referrer-Policy                      "no-referrer"   always;
    add_header X-Content-Type-Options               "nosniff"       always;
    add_header X-Download-Options                   "noopen"        always;
    add_header X-Frame-Options                      "SAMEORIGIN"    always;
    add_header X-Permitted-Cross-Domain-Policies    "none"          always;
    add_header X-Robots-Tag                         "none"          always;
    add_header X-XSS-Protection                     "1; mode=block" always;
    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;
    index index.php index.html /index.php$request_uri;
    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    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;
    }
    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.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; }
       # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }
    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }
    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/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;         $# Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     $# Enable pretty urls
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
        fastcgi_max_temp_file_size 0;
    }
    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, $asset_immutable";
        access_log off;     $# Optional: Don't log access to assets
        location ~ \.wasm$ {
            default_type application/wasm;
        }
    }
    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         $# Cache-Control policy borrowed from `.htaccess`
        access_log off;     $# Optional: Don't log access to assets
    }
    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

Сохраните файл, затем выйдите и перезапустите nginx

systemctl restart nginx

Шаг 6: Установите сервер MySQL

Nextcloud поддерживает несколько движков баз данных, таких как PostgreSQL, Oracle, SQLite и MySQL/MariaDB. В этом руководстве мы будем использовать MySQL 8.0. Сначала установим его, выполнив следующую команду.

dnf install mysql mysql-server
systemctl enable --now mysqld

Теперь сервер MySQL запущен и будет автоматически запускаться при перезагрузке. Вы можете проверить его состояние, выполнив эту команду:

systemctl status mysqld

Команда выдаст следующее сообщение:

[root@almalinux9 ~]$# systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-06-19 03:26:55 CDT; 1min 41s ago
    Process: 4912 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
    Process: 4934 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
   Main PID: 5009 (mysqld)
     Status: "Server is operational"
      Tasks: 37 (limit: 23191)
     Memory: 459.9M
        CPU: 9.713s
     CGroup: /system.slice/mysqld.service
             └─5009 /usr/libexec/mysqld --basedir=/usr
Jun 19 03:26:41 almalinux9.rosehosting.com systemd[1]: Starting MySQL 8.0 database server...
Jun 19 03:26:41 almalinux9.rosehosting.com mysql-prepare-db-dir[4934]: Initializing MySQL database
Jun 19 03:26:55 almalinux9.rosehosting.com systemd[1]: Started MySQL 8.0 database server.

Шаг 7: Создание базы данных

После установки сервера MySQL на предыдущем шаге мы можем приступить к созданию новой базы данных и пользователя для нашего сайта Nextcloud.

mysql

Войдя в оболочку MySQL, выполните следующие команды.

mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY "mod1fyth15";
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> \q

Не забудьте заменить „m0d1fyth15“ на более надежный пароль.

Шаг 8: Установите SSL-сертификат

Мы установим SSL-сертификат для нашего сайта Nextcloud, используя бесплатный SSL-сертификат от Lets Encrypt.

dnf install certbot python3-certbot-nginx -y

После установки вы можете выполнить эту команду для выпуска SSL-сертификата. Опять же, убедитесь, что заменили субдомен на реальное имя домена или субдомена; оно должно совпадать с именем в файле конфигурации блока сервера nginx, который мы создали ранее. Также убедитесь, что домен или поддомен уже указывает на IP-адрес вашего сервера.

certbot --nginx -d cloud.example.com

Убедитесь, что вы ответили на все подсказки, и вы увидите примерно такой результат:

[root@rh ~]$# certbot --nginx -d cloud.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): you@cloud.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Account registered.
Requesting a certificate for cloud.example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/cloud.example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/cloud.example.com/privkey.pem
This certificate expires on 2024-09-17.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for cloud.example.com to /etc/nginx/conf.d/nexcloud.conf
Congratulations! You have successfully enabled HTTPS on https://cloud.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Теперь давайте перезапустим nginx

systemctl restart nginx

Шаг 9: Установка Nextcloud

Наконец, мы можем приступить к установке Nextcloud. Сначала нам нужно скачать архив с установочным файлом. Перейдите на страницу загрузки Nextcloud и выберите нужную вам версию.

В данном примере мы загрузим последнюю доступную версию. Выполним эту команду:

wget https://download.nextcloud.com/server/releases/latest.zip -O latest.zip

Затем распакуйте скачанный zip-архив в корневой каталог документов на вашем сервере

unzip latest.zip -d /var/www/
mkdir /var/www/nextcloud/data
chown -R nginx: /var/www/nextcloud

После извлечения вы можете приступить к установке Nextcloud через веб-установщик по адресу http://cloud.yourdomain.com, перейдите на вкладку MySQL/MariaDB, заполните необходимые поля и нажмите кнопку «Установить» для завершения установки.

После завершения установки вы попадете в форму входа в бэкэнд сайта.

В этом руководстве SELinux считается отключенным. Если вы столкнулись с проблемой, скорее всего, связанной с SELinux, вы можете обратиться к документации Nextcloud для ее решения.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.rosehosting.com

Похожие статьи

Комментарии (0)