웹사이트 검색

CentOS 8에서 Nginx 및 PHP 7.3으로 Nextcloud를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 센트OS 8
  • 센트OS 7

이 페이지에서

  1. 1단계 - Nginx 설치
  2. 2단계 - PHP-FPM 설치
  3. 3단계 - PHP-FPM 7.3 구성
  4. 4단계 - MariaDB 설치 및 구성
  5. 4단계 - SSL Letsencrypt 생성
  6. 5단계 - Nextcloud 다운로드 및 설치
  7. 6단계 - Nextcloud용 Nginx 가상 호스트 설정\n
  8. 7단계 - Nextcloud용 SELinux 설정
  9. 8단계 - Nextcloud 설치 마법사
  10. 참조

Nextcloud는 무료(오픈 소스) dropbox와 유사한 소프트웨어로 ownCloud 프로젝트의 포크입니다. Nextcloud는 PHP 및 JavaScript로 작성되었으며 MySQL/MariaDB, PostgreSQL, Oracle 데이터베이스 및 SQLite와 같은 많은 데이터베이스 시스템을 지원합니다.

데스크톱과 서버 간에 파일 동기화를 유지하기 위해 Nextcloud는 Windows, Linux 및 Mac 데스크톱용 애플리케이션과 Android 및 iOS용 모바일 애플리케이션을 제공합니다.

이 튜토리얼에서는 CentOS 8 서버에서 Nginx 웹 서버, PHP 7.3 및 MariaDB 데이터베이스와 함께 Nextcloud 17을 설치하는 방법을 보여줍니다. Nextcloud를 설치하고 무료 Lets Encrypt SSL 인증서로 보호합니다.

전제 조건

이 가이드에서는 2GB RAM, 25GB 여유 공간 및 2CPU가 있는 CentOS 8 서버에 Nextcloud를 설치합니다.

우리가 할 일:

  • Nginx 웹 서버 설치
  • PHP-FPM 7.3 설치
  • PHP-FPM 7.3 구성
  • MariaDB 데이터베이스 설치 및 구성
  • SSL Letsencrypt 생성
  • Nextcloud 17 다운로드
  • Nextcloud용 Nginx 가상 호스트 설정\n
  • Nextcloud용 SELinux 설정
  • Nextcloud 설치 후\n

1단계 - Nginx 설치

먼저 CentOS 8 서버에 Nginx 웹 서버를 설치하고 방화벽에서 HTTP 및 HTTPS 포트를 엽니다.

아래의 dnf 명령을 사용하여 AppStream 리포지토리에서 Nginx를 설치합니다.

sudo dnf install nginx

설치가 완료되면 nginx 서비스를 시작하고 시스템 부팅에 추가합니다.

systemctl start nginx
systemctl enable nginx

이제 아래 명령을 사용하여 nginx 서비스 상태를 확인하십시오.

systemctl status nginx

CentOS 8 서버에서 nginx 서비스가 시작되어 실행됩니다.

다음으로 HTTP 및 HTTPS 서비스를 firewalld에 추가합니다.

아래의 firewall-cmd 명령을 사용하여 HTTP 및 HTTPS 서비스를 firewalld에 추가합니다.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

그런 다음 firewalld 서비스를 다시 로드합니다.

firewall-cmd --reload

결과적으로 Nginx 웹 서버를 성공적으로 설치하고 CentOS 8 서버에서 HTTP 및 HTTPS 포트를 열었습니다.

2단계 - PHP-FPM 설치

Nextcloud 시스템 요구 사항에 따라 설치에 PHP 7.2 또는 PHP 7.3을 사용하는 것이 좋습니다.

이 가이드에서는 REMI 리포지토리에서 설치할 수 있는 PHP 7.3을 사용합니다.

더 진행하기 전에 PowerTools 리포지토리를 활성화하고 CentOS 8 서버용 EPEL 및 REMI 리포지토리를 추가합니다.

아래의 dnf 명령을 실행합니다.

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

이제 시스템에서 사용 가능한 모든 저장소를 확인하십시오.

dnf repolist

그러면 아래와 같은 결과를 얻게 됩니다.

PowerTools 리포지토리를 활성화하고 CentOS 8용 EPEL 및 REMI 리포지토리를 추가했습니다.

다음으로 PHP 7.3 REMI 저장소를 활성화합니다.

PHP 패키지에 사용 가능한 모든 모듈을 확인하십시오.

dnf module list php

이제 PHP 7.3 REMI 저장소의 모듈을 활성화하십시오.

dnf module enable php:remi-7.3

그런 다음 아래 dnf 명령을 사용하여 Nextcloud용 PHP 및 PHP-FPM 7.3 패키지를 설치합니다.

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

그리고 CentOS 8 시스템에 PHP와 PHP-FPM 7.3을 설치했습니다.

3단계 - PHP-FPM 7.3 구성

이 단계에서는 Nextcloud 배포를 위해 PHP-FPM을 설정합니다.

다음 명령을 사용하여 php.ini 구성을 편집합니다.

vim /etc/php.ini

주석을 해제하고 아래와 같이 구성을 변경합니다.

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

저장하고 닫습니다.

이제 PHP opcache 구성 /etc/php.d/10-opcache.ini를 편집합니다.

vim /etc/php.d/10-opcache.ini

아래와 같이 구성을 변경합니다.

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

저장하고 닫습니다.

다음으로 PHP-FPM 구성 /etc/php-fpm.d/www.conf를 편집합니다.

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

사용자 및 그룹을 nginx로 변경합니다.

user = nginx
group = nginx

아래와 같이 청취 구성을 sock 파일로 변경합니다.

listen = /run/php-fpm/www.sock

아래 PHP 환경 변수의 주석을 제거하십시오.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

마지막 줄에서 opcache 구성의 주석을 해제하십시오.

php_value[opcache.file_cache] = /var/lib/php/opcache

저장하고 닫습니다.

이제 PHP 세션 및 opcache용 새 디렉토리를 생성한 다음 해당 디렉토리의 소유자를 nginx 사용자 및 그룹으로 변경합니다.

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

그리고 Nextcloud 설치를 위한 PHP-FPM 구성을 완료했습니다.

PHP-FPM 서비스를 시작하고 시스템 부팅에 추가하십시오.

systemctl enable php-fpm
systemctl start php-fpm

이제 PHP-FPM 양말 파일과 서비스 상태를 확인하십시오.

netstat -pl | grep php
systemctl status php-fpm

그러면 아래와 같은 결과를 얻게 됩니다.

결과적으로 PHP-FPM이 시작되고 양말 파일 /run/php-fpm/www.sock에서 실행됩니다.

4단계 - MariaDB 설치 및 구성

이 단계에서는 MariaDB 데이터베이스 서버를 설치하고 루트 비밀번호 인증을 설정하고 Nextcloud에 대한 새 데이터베이스 및 사용자를 생성합니다.

아래의 dnf 명령을 사용하여 MariaDB 데이터베이스를 설치합니다.

sudo dnf install mariadb mariadb-server

설치가 완료되면 MariaDB 서비스를 시작하고 시스템 부팅에 추가합니다.

systemctl start mariadb
systemctl enable mariadb

그리고 MariaDB 서비스가 시작되어 실행 중입니다.

다음으로 아래의 mysql_secure_installation 명령을 사용하여 루트 비밀번호 인증을 설정합니다.

mysql_secure_installation

루트 암호를 입력하고 나머지 구성에 대해 Y를 입력합니다.

Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

그리고 MariaDB 루트 암호가 구성되었습니다.

이제 아래의 mysql 명령을 사용하여 MySQL 셸에 로그인합니다.

mysql -u root -p
TYPE YOUR ROOT PASSWORD

이제 새 데이터베이스 nextcloud_db를 만들고 아래 쿼리를 사용하여 비밀번호 nextcloudpassdb로 새 사용자 nextclouduser를 만듭니다.

create database nextcloud_db;
create user identified by 'nextcloudpassdb';
flush privileges;

그리고 Nextcloud 설치를 위한 데이터베이스와 사용자를 생성했습니다.

4단계 - SSL Letsencrypt 생성

이 단계에서는 certbot을 사용하여 SSL letsencrypt를 생성합니다. SSL 인증서는 Nextcloud 액세스를 보호하는 데 사용됩니다.

아래의 dnf 명령을 사용하여 EPEL 저장소에서 certbot을 설치합니다.

sudo dnf install certbot

설치가 완료되면 아래 명령을 사용하여 Nextcloud 도메인 이름에 대한 SSL 인증서를 생성하고 도메인 이름과 이메일 주소를 자신의 것으로 변경했는지 확인하십시오.

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m  -d cloud.hakase-labs.io

완료되면 생성된 모든 SSL 인증서는 /etc/letsencrypt/live/cloud.hakase-labs.io 디렉터리에 있습니다.

다음 명령을 사용하여 확인하십시오.

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

그리고 certbot 도구를 사용하여 SSL letsencrypt를 생성했습니다.

5단계 - Nextcloud 다운로드 및 설치

이 단계에서는 최신 버전의 Nextcloud 17을 다운로드합니다.

nextcloud 소스 코드를 다운로드하기 전에 zip 패키지를 시스템에 설치하십시오.

sudo dnf install unzip

이제 /var/www/ 디렉토리로 이동하여 아래와 같이 wget 명령을 사용하여 Nextcloud 소스 코드를 다운로드합니다.

cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip

아래 명령어를 사용하여 Nextcloud 소스 코드를 추출합니다.

unzip nextcloud-17.0.2.zip

그러면 nextcloud라는 새 디렉토리가 생성됩니다.

이제 Nextcloud에 대한 새 데이터 디렉터리를 만듭니다. 데이터 디렉토리는 사용자 데이터를 저장하는 데 사용됩니다.

mkdir -p /var/www/nextcloud/data/

그런 다음 nextcloud 디렉터리의 소유자를 nginx 사용자 및 그룹으로 변경합니다.

sudo chown -R nginx:nginx /var/www/nextcloud

최신 Nextcloud 17을 /var/www 디렉터리에 다운로드했습니다.

6단계 - Nextcloud용 Nginx 가상 호스트 설정

Nextcloud 소스 코드를 다운로드한 후 Nextcloud용 Nginx 가상 호스트를 설정합니다.

/etc/nginx/conf.d 디렉토리로 이동하여 새 구성 nextcloud.conf를 생성합니다.

cd /etc/nginx/conf.d/
vim nextcloud.conf

이제 도메인 이름과 SSL 인증서 경로를 자신의 것으로 변경하고 다음 구성을 붙여넣습니다.

upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}

server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;

# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;

# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
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;

# Path to the root of your installation
root /var/www/nextcloud;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}

# set max upload size
client_max_body_size 512M;
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/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;

# Uncomment if your server is built with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;

location / {
rewrite ^ /index.php;
}

location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}

location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
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;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}

# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
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;

# Optional: Don't log access to assets
access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}

저장하고 닫습니다.

그런 다음 nginx 구성을 테스트하고 Nginx 서비스를 다시 시작하십시오. 그리고 오류가 없는지 확인하십시오.

nginx -t
systemctl restart nginx

이제 Nginx 서비스가 시스템에서 새 HTTPS 포트를 엽니다. 다음 명령을 사용하여 확인합니다.

netstat -plntu

그러면 아래와 같은 결과를 얻게 됩니다.

그 결과 Nextcloud용 Nginx 가상 호스트 구성을 추가하고 그 위에 보안 HTTPS를 활성화했습니다.

7단계 - Nextcloud용 SELinux 설정

이 자습서에서는 강제 모드에서 SELinux를 사용합니다. 그리고 Nextcloud 설치를 위해 SELinux를 설정합니다.

아래의 dnf 명령을 사용하여 SELinux 관리 도구를 설치합니다.

sudo dnf install policycoreutils-python-utils

이제 서버에서 루트로 다음 명령을 실행하십시오.

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

restorecon -Rv '/var/www/nextcloud/'

그리고 Nextcloud에 대한 SELinux 구성이 완료되었습니다.

8단계 - Nextcloud 설치 마법사

이제 웹 브라우저를 열고 주소 표시줄에 Nextcloud 도메인 이름을 입력합니다.

https://cloud.hakase-labs.io/

이제 아래와 같이 Nextcloud 설치 페이지가 나타납니다.

관리자 사용자 및 암호를 입력한 다음 MySQL/MariaDB를 데이터베이스로 선택하고 위에서 생성한 데이터베이스에 대한 세부 정보를 입력합니다.

이제 Finish Setup 버튼을 클릭하면 설치가 시작됩니다.

설치가 완료되면 아래와 같이 Nextcloud 대시보드가 나타납니다.

그 결과 CentOS 8 서버에 Nginx 웹 서버, PHP-FPM 7.3 및 MariaDB 데이터베이스와 함께 최신 Nextcloud 17을 성공적으로 설치했습니다.

참조

  • https://docs.nextcloud.com/