J-한솔넷

기록 보관 : NextCloud 만들기 본문

웹 개발관련/서버

기록 보관 : NextCloud 만들기

jhansol 2024. 1. 22. 20:50

저의 개인 홈페이지에 있던 내용을 옮겨 기록하고자 합니다. 제가 게으른 탓에 활용하기 힘들고 유지를 하기에 금전적으로도 낭비다 생각되어 님길 것은 남기고, 버릴 것은 버리고 사이트를 없에기 위함입니다. 기존 내용 그대로 아래와 같이 옮겼습니다.

NextCloud 소개

넥스트클라우드는 파일 공유, 화상 회의, 문자 대화, 메일, 온라인 문서 작성 등 구글 클라우드에서 가능한 대부분의 기능을 실현할 수 있는 오픈소스 솔루션이다.

시스템 요구사항

넥스트클라우드의 운영환경은 PHP를 지원하는 웹서버 환경이라면 뭐든 가능하다. 그러나 최대의 성능을 발휘하기 위해서는 아래와 간은 시스템 요구사항을 권장한다.

구분 플렛폼
운영체제
  • Ubuntu 20.04 LTS (권장)
  • Red Hat Enterprise Linux 8 (권장
  • Debian 10 (Buster)
  • SUSE Linux Enterprise Server 15
  • openSUSE Leap 42.1+
  • CentOS Stream
데이터베이스 MySQL 8.0+ or MariaDB 10.2/10.3/10.4/10.5 (권장)
Oracle Database 11g (엔터프라이즈 버전 권장)
PostgreSQL 10/11/12/13
SQLite (최소 설치용 또는 테스트용으로만 권장)
웹서버 Apache 2.4 with mod_php 또는 php-fpm (권장)
nginx with php-fpm
PHP 7.4
8.0 (권장)
8.1

위에서 최선의 성능을 내기 위해서는 리눅스, 데이터베이스는 MySQL 호환, Apache 웹서버가 적당해보인다. 그래서 여기서는 이를 기반으로 설치를 진행할 것이다.

PHP 모듈

구분 모듈

기본
모두 설치

  • PHP 7.3, 7.4 or 8.0 (recommended)
  • PHP module ctype
  • PHP module curl
  • PHP module dom
  • PHP module filter (only on Mageia and FreeBSD)
  • PHP module GD
  • PHP module hash (only on FreeBSD)
  • PHP module JSON (included with PHP >= 8.0)
  • PHP module libxml (Linux package libxml2 must be >=2.7.0)
  • PHP module mbstring
  • PHP module openssl (included with PHP >= 8.0)
  • PHP module posix
  • PHP module session
  • PHP module SimpleXML
  • PHP module XMLReader
  • PHP module XMLWriter
  • PHP module zip
  • PHP module zlib

데이터베이스 연결 모듈
 

  • PHP module pdo_sqlite (>= 3, 성능 문제로 권장하지 않음)
  • PHP module pdo_mysql (MySQL/MariaDB)
  • PHP module pdo_pgsql (PostgreSQL)
권장 모듈
  • PHP module fileinfo (강력 권장, 파일 분석 성능 향상)
  • PHP module bz2 (권장, app 압축 해제에 필요함)
  • PHP module intl (언어 번역 향상, 비 ASC 문자열 정렬)
특정 App을 위한 모듈
  • PHP module ldap (LDAP 기능 통합을 위해 필요)
  • PHP module smbclient (SMB/CIFS 기능 통합)
  • PHP module ftp (FTP/외부 기능 연계)
  • PHP module imap (외부 이메일 연동)
  • PHP module bcmath (for passwordless login)
  • PHP module gmp (for passwordless login)
그외 특정 App를 위한 모듈 PHP module gmp (SFTP 기능 연계)
PHP module exif (이미지 회전 App를 위함)
서버 성능 향상을 위한 모듈
  • PHP module apcu (>= 4.0.6)
  • PHP module memcached
  • PHP module redis (>= 2.2.6, required for Transactional File Locking)
미리보기를 위한 패키지
  • PHP module imagick
  • avconv or ffmpeg
  • OpenOffice or LibreOffice
명령줄을 위한 처이 모듈
  • PHP module pcntl (enables command interruption by pressing ctrl-c)
명령줄을 통한 Updater를 위한 모듈
  • PHP module phar (upgrades Nextcloud by running sudo -u www-data php /var/www/nextcloud/updater/updater.phar)

설치전 작업

넥스트클라우드를 설치하기 전에 아래와 같이 Apache 웹서버, MySQL, PHP를 설치해야한다.
먼저 Apache 웹서버를 아래와 같이 설치한다.

apt-get update
apt-get upgrade
apt-get install -y apache2 unzip

그리고 MySQL을 설치한다.

apt-get install -y mysql-server mysql-client

마지막으로 PHP를 아래와 같이 설치한다.

apt-get install apt-transport-https lsb-release ca-certificates
add-apt-repository ppa:ondrej/php
apt-get update

# PHP 7.4
apt-get -y install php7.4 php7.4-cli php7.4-curl php7.4-gd php7.4-json \
        php7.4-mysql php7.4-opcache php7.4-xml php7.4-xml php7.4-xmlrpc \
        php7.4-intl php7.4-ldap php7.4-mbstring php7.4-zip php7.4-redis \
        php7.4-dev php7.4-imagick php7.4-bcmath php7.4-gmp

# PHP 8.1
apt install -y php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-ldap \
        php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-amqp \
        php8.1-amqp php8.1-ast php8.1-bcmath php8.1-bz2 php8.1-dba php8.1-ds \
        php8.1-gearman php8.1-gnupg php8.1-http php8.1-igbinary php8.1-imagick \
        php8.1-imap php8.1-intl php8.1-mailparse php8.1-memcache php8.1-memcached \
        php8.1-msgpack php8.1-oauth php8.1-pcov php8.1-phpdbg php8.1-ps php8.1-psr \
        php8.1-raphf php8.1-redis php8.1-smbclient php8.1-soap php8.1-ssh2 php8.1-uopz \
        php8.1-uploadprogress php8.1-uuid php8.1-xdebug php8.1-xml php8.1-xmlrpc \
        php8.1-xmlrpc php8.1-yac php8.1-yaml php8.1-zip php8.1-zmq

NextCloud 파일 다운르도

파일을 내려 받아 설치하는 방법은 여러 가지가 있다. 이 중에서 파일을 직접 내려받아 설치하는 방법을 선택할 것이다. 아래와 같이 내래받을 수 있다. 내려 받아 압축을 풀고 폴더를 '/var/www' 폴더로 이동한다. 그리고 소유자를 'www-data:www-data' 지정하여 그룹과 소유자정보를 'www-data'로 지정한다. 이렇게 지정하는 이유는 파일 저장 및 각종 앱을 설치할 때 소유자가 다르게 설정되어 있는 경우 정상적으로 동작하지 않을 수 있기 때문이다.

wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud /var/www
chown -R www-data:www-data /var/www/nextcloud

환경 설정

웹서버에 넥스트쿨라우드를 설치할 도매인에 대한 가상호스트 환경을 아래와 같이 설정한다. 위에서 '/var/www/' 폴더에 파일을 이동하였으므로 웹 루트는 '/var/www/nextcloud'가 달굇이다. 그리고 WebDomainAddress 부분에 접근 가능한 도매인 주소를 입력한다.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nextcloud
        ServerName WebDomainAddress
        ServerAlias WebDomainAddress

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory /var/www/nextcloud>
                DirectoryIndex index.html index.htm index.php
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
                Require all granted
        </Directory>
</VirtualHost>

데이터베이스 생성

데이터베이스와 접근 가능한 사용자를 생헝한다. DatabaseName, User, UserPassword를 저장하여 아래와 같이 생성한다.

mysql -u root
create database DatabaseName character set utf8mb4 collate utf8mb4_general_ci;
create user User@localhost identified with mysql_native_password by 'UserPassword';
grant all on DatabaseName.* to User@localhost;
flush privileges;
exit

설치 마무리

이후의 설정은 웹 브라우즈를 통해서도 설정이 가능하다. 그렇지만 지금까지 명령줄을 이용하고 있으므로 설치를 명령줄을 이용하여 진행해부겠다. 아래와 같이 입력하여 데이터베이스에 관련 테이블과 관리자 계정을 생성한다.

sudo -u www-data php occ  maintenance:install --database "mysql" \
        --database-name "데이터베이스명"  --database-user "데이터베이스 사용자 계정명" \
        --database-pass "데이터베이스 사용자 암호" --admin-user "관리자 계정" --admin-pass "관리자 계정 암호"

그리고 설치된 폴더로 이동하여 신뢰할 수 있는 호스트 도매인 주소를 아래와 같이 입력한다. 신뢰할 수 있는 호스트는 현재 넥스트클라우드가 설치된 호스트 도매인을 입력한다

sudo -u www-data php occ config:system:set trusted_domains 1 --value=호스트 도메인 주소

Clean URL 설정

위와 설치마무리까지 진행하고 웹 브라우즈로 접속하면 정상적으로 접근이 될 것이다. 그러나 한 가지 불만은 주소 부분에 '~.php' 로 하여 표시되눈 것이 불만스럽다. 요즘의 트렌드와드 맞지 않으므로 설치된 폴더로 이동하여 아래와 같이 설정하여 Clean URL 혹은 Pretty URL 이 적용되도록 한다.

sudo -u www-data php occ config:system:set overwrite.cli.url --value=http://test.jhansol.net
sudo -u www-data php occ config:system:set htaccess.RewriteBase --value=/
sudo -u www-data php occ maintenance:update:htaccess

설치 확인

설치를 위한 작업은 다 되었다. 웹 브라우즈를 통해 설치된 호스트 도매인에 관리자 계정으로 접속했을 때 아래와 같은 화면이 출력되면 완료된 것이다.