꽃삽질 : Nextcloud 설치 (우분투 서버)

Nextcloud 문서를 보고 그대로 따라하면 작은 문제들에 부딪히게 된다.
짜증을 최소화하고자 이 글을 작성했다.

먼저, Snap 과 수동 설치 중 하나를 택해야 한다. Nextcloud 단독으로 사용한다면, Snap 을 사용하는 편이 훨씬(백만배쯤?) 편하다.
그리고, Snap 을 쓴다면 이 글은 쓸 데가 없다.
따라서, 이 글은 당연히 ‘수동’, 다른 말로 ‘꽃삽질’ 설치를 대상으로 한다.

Nextcloud 설명서를 참고했다.


1. 아파치 등등

LAMP 설치가 우선되어야 하므로, 우분투 서버에서, Apache, PHP, MariaDB 를 설치한다. PHP 모듈은 일단 기본으로만 설치한다.

** MariaDB 는, 현재 최신판인 10.4 를 설치하도록 한다.

# 아파치, 마리아DB
sudo apt-get install apache2 mariadb-server libapache2-mod-php7.2

# PHP 모듈 #1
sudo apt-get install php7.2-gd php7.2-json php7.2-mysql php7.2-curl php7.2-mbstring

# PHP 모듈 #2
sudo apt-get install php7.2-intl php-imagick php7.2-xml php7.2-zip

세 줄로 나눴지만, 한꺼번에 몽땅 몰아서 설치해도 된다.

여기까지 설치하고, 아파치가 잘 돌아가는지 먼저 확인한다.
웹브라우저 주소창에 http://ip 주소 를 넣고, 아파치 화면이 보이면 성공.

2. Nextcloud 내려받고, 복사

Nextcloud 파일을 받은 후, apache home directory(/var/www) 로 복사해준다.
설명서에 MD5, SHA256, PGP 서명등등을 확인하는 방법도 있으니 참고.

압축을 풀고, 생성된 nextcloud 폴더를 /var/www 로 옮겨준다.

tar -xjf nextcloud-x.y.z.tar.bz2
sudo cp -r nextcloud /var/www

3. Apache 웹서버 설정

/etc/apache2/sites-available/nextcloud.conf 을 생성한다.

# /etc/apache2/sites-available/nextcloud.conf

Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Require all granted
  Options FollowSymlinks MultiViews
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud

</Directory>

또는, 기존 홈페이지와는 다른 포트로 접속하기를 원한다면, 다음과 같이 nextcloud.conf 파일을 작성한다.
단, 위 내용은 Nextcloud 와 동일하지만, 아래는 내가 임의로 수정했기 때문에, 어떤 오류가 발생할지는..?

Listen 8181
<VirtualHost *:8181>
        Alias /nextcloud "/var/www/nextcloud/"

        <Directory /var/www/nextcloud/>
          Require all granted
          Options FollowSymlinks MultiViews
          AllowOverride All
         <IfModule mod_dav.c>
          Dav off
         </IfModule>
         SetEnv HOME /var/www/nextcloud
         SetEnv HTTP_HOME /var/www/nextcloud
        </Directory>
</VirtualHost>

그리고 다음 명령들을 실행한다. 모두 관리자 권한이 필요하다.

a2ensite nextcloud.conf
a2enmod rewrite

SSL 설정?

Self-Signed SSL 이란 기능이 있긴 한데.. 외부로 연결할 때는 그다지 안전하지 못하다고 한다. 설정하기 위해 다음을 실행한다.
(아래와 같이 설정하고 웹브라우저에서 접속하면, ‘보안 위험’가능성이 있다는 경고가 나온다.)

a2enmod ssl
a2ensite default-ssl

모든 설정이 끝났으면, 아파치 설정에 문제가 없는지 확인하고, 재시동한다.

sudo apache2ctl configtest

# 이상이 없다면,
sudo systemctl reload apache2

4. MariaDB 설정

꼭 할 필요는 없지만, 그래도 하는게 좋다고 하니 해보자.

sudo mysql_secure_installation

위 명령을 실행하고, 시키는 대로 입력하면 된다. root 를 사용할 지, 암호는 무엇으로 할 지등등을 입력해야한다.
다만, mysql root 비밀번호는 바꾸지 말고 그대로 둔다. 즉, 기본값(암호 없음)으로 그냥 놔둔다. 이에 관한 길고도 지루한 얘기는 다른 글에서 다뤘다.

10.1 을 사용하고, mysql root 를 일반 사용자 계정으로 사용하게끔 하려면, 몇가지 단계가 더 필요하다.
그러나, 그러지 말고 그냥 시스템 관리자(root)와 mysql 관리자(mysql root)를 같은 수준으로 취급하는 편이 요즘 추세라고 보여진다.

정리하자면, MariaDB 에서 mysql root 를 따로 만들지 말고, 그냥 sudo mysql 을 통해 DB 에 접근한 뒤, 5.2 방식으로 설치할 것!

따라서, 5.1 은 참고용으로 그냥 기록해놓았고, 실제 설치는 5.2 방식대로 하기로 한다.

5.1 Nextcloud Commandline 설치 : occ 명령

이 명령은, php occ 스크립트를 실행하여 일련의 설치를 마무리하게 해준다. Nextcloud 에서 제안하는 방법과는 권한 면에서 조금 다르다.

먼저, sudo 를 사용해서 php occ 를 실행한다. (Nextcloud 에서는 www-data 로 하여금 php occ 를 실행하도록 하고 있다.)

/var/www/nextcloud 로 이동한 후, 다음 명령을 실행한다.

cd /var/www/nextcloud/
sudo php occ maintenance:install --database "mysql" \
--database-name "nextcloud" --database-user "root" --database-pass "" \
--admin-user "관리자ID" --admin-pass "관리자PW"

–database-pass 는 “”, 즉 passwordless 로 해줘야 제대로 작동한다.
관리자ID, 관리자PW 는 원하는대로 지정한다.
이 작업은 (서버 성능에 따라 다르지만) 시간이 좀 걸리므로, 조급해하지 말지어다!

오류가 없이 작업이 끝났으면, 이제 /var/www/nextcloud 디렉토리의 소유권을 apache 사용자(www-data)로 바꿔줘야한다.

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

여기서, “root” 뒤에 나오는 “암호” 는, 위 MariaDB 에서 설정해준, mysql root 의 PW 를 넣어줘야 한다.
“관리자ID” 와 “관리자PW” 는, 원하는 대로 정해서 넣어준다.

5.2 Nextcloud Commandline 설치 : 수동 DB 설정 및 웹 사용.

occ 를 사용하지 않고, 수동으로 DB 를 설정한 뒤 Nextcloud 설치를 마무리할 수도 있다. nextcloud 포럼을 참고했는데, 어떤 문제가 있을 지는 모르겠다.
USER, PW(IDENTIFIED BY) 는 적절히 설정한다.

$ sudo mysql
MariaDB [(none)]> CREATE USER 'iamadmin'@'localhost' IDENTIFIED BY 'xyza';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS nextcloud;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'iamadmin'@'localhost' IDENTIFIED BY 'xyza';

DB 생성이 끝났으면, 디렉토리 소유권을 아래처럼 바꿔준다. (물론 DB 만들기 전에 해도 된다.)

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

이후, 웹브라우저으로 접속하면, 아래 그림처럼, 관리자계정/PW, 바로 위에서 설정한 DB 관리자의 ID/PW 를 입력할 대화상자가 표시된다. 그곳에 입력해주고 마무리하면 된다.

** 여기를 occ 명령을 이용해서 마무리 할 수도 있을 듯 한데..
굳이 그럴 필요가 있을까?
웹브라우저로 해도 전혀 무리가 없으므로, occ 는 고려하지 않기로 한다.

Nextcloud 관리자 계정과 DB 관리자 계정은 ‘서로 다름’을 기억해야 한다. (occ 로 만들면, DB 관리자 계정이 oc_xxx 형식으로 생성된다.)

6. 접속 및 최종 설정

기본 설정은 모두 끝났다. 웹브라우저로 접속하면, 다음과 같은 초기 화면이 나온다.

위에서 설정한 admin ID/PW 로 접속한다.

이후, 설정 – Overview 를 통해 버전을 확인하고, ‘보안 및 설치 경고’에서 제안하는 내용을 반영한다.

6.1 Trusted Domain 추가.

최초 접근은 IP/nextcloud 로 가능한데, 이걸 외부로 연결(Port Fowarding 등)하거나, 아니면 도메인과 연결시켰을 경우엔, 지금 설정으론 그런 곳으로부터 접근이 불가능하다.

/var/www/nextcloud/config/config.php 파일을 열고, 아래 부분을 적절하게 수정한다.

  'trusted_domains' => 
  array (
    0 => '192.168.0.3',
    1 => 'www.abcd.org',
  ),

2, 3, 4 등으로 도메인을 추가할 수도 있다. 공인 IP 로 접속하려면 그 주소도 넣어준다.

7. 로컬 드라이브 추가

설명서는 그다지 친절하지 않다. 그래도 연결은 걸어놓았다.

우상귀 메뉴를 누르고, ‘+ 앱‘을 선택한다.
왼쪽 창에서, ‘비활성화된 앱‘ 을 누르고, ‘External storage support‘ 를 선택하고, ‘사용함’을 누른다.

그리고, 다시 우상귀 메뉴에서 ‘설정’으로 가면, 화면 왼쪽 ‘관리’ 항목에 ‘외부 저장소’가 생겼음을 볼 수 있다. (‘개인’ 항목에도 있는데, 여기가 아니고 ‘관리’를 택해야 한다.)
그리고, 아래 그림처럼 설정한다.

8. 판올림 (CLI)

Nextcloud 문서를 참고로, 다음과 같이 작업한다.

cd /var/www/nextcloud/updater
sudo -u www-data php updater.phar
Nextcloud Updater - version: v15.0.7-4-ged74b90

Current version is 15.0.8.

Update to Nextcloud 16.0.1 available. (channel: "stable")
Following file will be downloaded automatically: https://download.nextcloud.com/server/releases/nextcloud-16.0.1.zip

Steps that will be executed:
[ ] Check for expected files
[ ] Check for write permissions
[ ] Create backup
[ ] Downloading
[ ] Verify integrity
[ ] Extracting
[ ] Enable maintenance mode
[ ] Replace entry points
[ ] Delete old files
[ ] Move new files in place
[ ] Done

Start update? [y/N] 

여기에서 y 를 선택하면 이제 일련의 과정이 진행되어야 하는데..(?)
이런 오류가 나버렸다.

[✘] Check for expected files failed
The following extra files have been found:
    .rnd

Update failed. To resume or retry just execute the updater again.

왜 그런지, .rnd 라는 파일이 있다고 한다. 어디서, 왜 이 파일이 생성되었는지 모르겠으나, 그냥 가볍게 지워버리면 된다.

sudo rm /var/www/nextcloud/.rnd

그리고 updater.phar 를 다시 실행하면, 이제 제대로 판올림 작업이 진행된다.

Start update? [y/N] y

Info: Pressing Ctrl-C will finish the currently running step and then stops the updater.

[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[✔] Verify integrity
[✔] Extracting
[✔] Enable maintenance mode
[✔] Replace entry points
[✔] Delete old files
[✔] Move new files in place
[✔] Done

Update of code successful.

Should the "occ upgrade" command be executed? [Y/n] 

확인 작업이 이상없이 완료되면, 최종 결정(occ upgrade)만 남았다.
Y 를 택하면 또 여러가지 작업들이 수행되고..

2019-06-27T05:18:38+00:00 Repair info: Sending notifications to admins and affected users
2019-06-27T05:18:38+00:00 Repair info: Removed potentially over exposing link shares
2019-06-27T05:18:38+00:00 Starting code integrity check...
2019-06-27T05:18:41+00:00 Finished code integrity check
2019-06-27T05:18:41+00:00 Update successful
2019-06-27T05:18:41+00:00 Maintenance mode is kept active
2019-06-27T05:18:41+00:00 Reset log level

Keep maintenance mode active? [y/N]
Maintenance mode disabled

Maintenance mode is disabled

관리 상태(maintenance mode)를 유지하겠냐고 묻는데, 해제(N)를 택한다.
판올림이 끝났다. 웹브라우저에서 ‘설정’ – ‘Overview’ 를 통해 버전을 확인해볼 수 있다.

** 판올림 오류

updater.phar 실행 시, Downloading 에서 멈추고 더 이상 진행되지 않는 경우가 있다. 검색해보니 이런 경우가 종종 발생하는 듯 하다.

이럴 땐 몇시간(?)을 기다려도 진행이 되지 않는데, Ctrl-C 를 누르면 정지가 된다고 하지만, 결코 그렇질 못했다.

일단, updater.phar 를 멈춰야 한다.

$ ps -aux | grep updater                                                   :( 1 20-03-15 - 16:34:41
root      2071  0.0  0.0  63508  4180 pts/0    S+   13:58   0:00 sudo -u www-data php updater.phar
www-data  2072  0.1  0.5 434888 42536 pts/0    S+   13:58   0:12 php updater.phar

PID 가 2072 이므로, 이것을 죽인다.

sudo kil -9 2072

그리고, Maintenance 에 진입한 Nextcloud 를 원상복구 시킨다.

cd /var/www/nextcloud
sudo -u www-data php occ maintenance:repair

이러면 원 상태로 돌아오는데.. 왜 Downloading 시에 오류가 발생하는지는 알 수가 없다.
아무튼, 오류가 발생하는 당시엔 계속해봐야 안되는 듯 하니, 시간이 좀 지난 뒤에 다시 해보는게 방법 밖엔 없을 듯.

9. 경고 해제?

설정 – Overview 에 가면 여러 경고들이 표시된다. (안나올 수도 있겠지만..)
이중, 몇가지에 대해 해결책(?)을 정리한다.

  • PHP 메모리 제한이 추천값인 512MB보다 작습니다.” :

위 값을 늘려주려면, php.ini 를 편집해야 한다. 배포판에 따라 이 파일 위치가 다 다른데, 우분투 18.04 에는 다음 위치에서 찾을 수 있다.

/etc/php/7.2/apache2/php.ini
위 파일을 열고, memory_limit = 128Mmemory_limit = 512M 로 바꾼다.
그리고 아파치를 재시동해주면 끝.

sudo systemctl reload apache2
  • 웹 서버에서 “/.well-known/caldav”을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서를 참고하십시오.
  • 웹 서버에서 “/.well-known/carddav”을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서를 참고하십시오.

위 두가지는, 당장 쓸 일이 없으므로 그냥 내버려 두기로 한다.

  • 사이트에 HTTP를 통해서 보안 없이 접근하고 있습니다. 보안 팁↗에서 제안하는 것처럼 HTTPS를 설정하는 것을 추천합니다.

이 부분도 지금은 넘기고..

  • 메모리 캐시가 구성되지 않았습니다. 가능한 경우 memcache를 설정하여 성능을 향상시킬 수 있습니다. 자세한 내용은 문서를 참고하십시오.

마찬가지로, 여기도 넘긴다. Nextcloud 를 많이 쓰면 모를까, 쓰임새가 그다지 많지 않기에, 일단은 그냥 넘기기로 한다.

4 Comments
  1. Avatar
    • 아무도안
      • Avatar
        • 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.