Nextcloud 문서를 보고 그대로 따라하면 작은 문제들에 부딪히게 된다.
짜증을 최소화하고자 이 글을 작성했다.
먼저, Snap 과 수동 설치 중 하나를 택해야 한다. Nextcloud 단독으로 사용한다면, Snap 을 사용하는 편이 훨씬(백만배쯤?) 편하다.
그리고, Snap 을 선택했다면 이 글은 쓸 데가 없다.
따라서, 이 글은 당연히 ‘수동’, 다른 말로 ‘꽃삽질’ 설치를 대상으로 한다.
Nextcloud 설명서를 참고했다.
** 20.09.02 수정 / Ubuntu server 20.04 기준
** 21.08.15 수정 / CalDAV 등 오류 처리 추가.
** 21.08.16 수정 / Memcache 등 오류 처리 추가.
1. 아파치 등등
LAMP 설치가 우선되어야 하므로, 우분투 서버에서, Apache, PHP, MariaDB 를 설치한다. PHP 모듈은 일단 기본으로만 설치한다.
- MariaDB 는, 현재 최신판인 10.5 를 설치하도록 한다.
- php 는 설치하는 시점에서 가장 최신판으로 설치한다. (20.09 현재 우분투 20.04 에서 최신판은 7.4)
# 아파치, 마리아DB sudo apt install apache2 mariadb-server libapache2-mod-php7.4 # PHP 모듈 #1 sudo apt install php7.4-gd php7.4-json php7.4-mysql php7.4-curl php7.4-mbstring # PHP 모듈 #2 sudo apt install php7.4-intl php-imagick php7.4-xml php7.4-zip php7.4-bcmath php7.4-gmp # PHP php-imagick 관련 sudo apt install libmagickcore-6.q16-6-extra
세 줄로 나눴지만, 한꺼번에 몽땅 몰아서 설치해도 된다.
libmagickcore-6.q16-6-extra
은 svg 파일 지원을 위해 설치해준다. Nextcloud 21 에서부터 svg 파일이 지원되는 모양인데, 이 꾸러미가 없으면 설정에서 이에 대한 경고(권고?) 문구를 보게된다.
여기까지 설치하고, 아파치가 잘 돌아가는지 먼저 확인한다.
웹브라우저 주소창에 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 로 접속하려면 그 주소도 넣어준다.
6.2 언어, 로캘, 전화번호 지역 추가
/var/www/nextcloud/config/config.php 파일을 열고, 아래와 같이 추가한다.
'default_language' => 'ko', 'default_locale' => 'ko_KR', 'default_phone_region' => 'KR',
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’ 를 통해 버전을 확인해볼 수 있다.
판올림 오류 #1 – Downloading 에서 멈춤.
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 시에 오류가 발생하는지는 알 수가 없다.
아무튼, 오류가 발생하는 당시엔 계속해봐야 안되는 듯 하니, 시간이 좀 지난 뒤에 다시 해보는게 방법 밖엔 없을 듯.
판올림 오류 #2 – 작업이 미처 끝나지 않았는데 종료됐을 때.
updater.phar
로 작업하다가 뭔가 오류가 발생하여 완결되지 못했을 때, 웹으로 접근하면 업데이트 중이라고 나오고, CLI 로 명령을 다시 시작하면 이런 오류가 발생한다.
Nextcloud Updater – version: v26.0.0beta2-9-g64e2e4c dirty
Step 9 is currently in process. Please call this command later.
version, Step 은 다를 수 있지만, 아무튼 이런 식으로 오류가 난다. 해결하려면, nextcloud 디렉토리(/var/www/nextcloud 등)로 이동한 뒤, data
디렉토리에 있는 업데이트 파일(updater-occ*)을 지운다. (일단 안전을 위해 먼저 이름을 바꾼다.) 그리고나서 다시 판올림 작업을 수행한다. (역시나, 선경험자들의 도움을 받았다.)
9. 경고 해제?
설정 – Overview 에 가면 여러 경고들이 표시된다. (안나올 수도 있겠지만..)
이중, 몇가지에 대해 해결책(?)을 정리한다.
- “PHP 메모리 제한이 추천값인 512MB보다 작습니다.” :
위 값을 늘려주려면, php.ini 를 편집해야 한다. 배포판에 따라 이 파일 위치가 다 다른데, 우분투 18.04 에는 다음 위치에서 찾을 수 있다.
/etc/php/7.2/apache2/php.ini
위 파일을 열고, memory_limit = 128M
를 memory_limit = 512M
로 바꾼다.
그리고 아파치를 재시동해주면 끝.
sudo systemctl reload apache2
- caldav, carddav, webfinger, nodeinfo 오류 처리.
웹 서버에서 “/.well-known/caldav”을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서를 참고하십시오.
등등 오류가 뜨는 경우, 다음 글을 참고한다.
- 사이트에 HTTP를 통해서 보안 없이 접근하고 있습니다. 보안 팁↗에서 제안하는 것처럼 HTTPS를 설정하는 것을 추천합니다.
이 부분은 지금은 넘기고..
- 메모리 캐시가 구성되지 않았습니다. 가능한 경우 memcache를 설정하여 성능을 향상시킬 수 있습니다. 자세한 내용은 문서를 참고하십시오.
여기도 다음을 참고하여 설정.
- 배경 작업..
cron 으로 처리한다.
10. 쓰기 권한 설정.
이 글에선 권한에 관해 자세한 설명은 안한 듯 한데..
Other 에 기본 권한, 즉 755/644 가 설정돼 있으면 nextcloud 가 이 파일들을 읽을 수는 있다.
그러나, 폴더를 만들거나, 새 파일을 업로드 하거나, 이미 있는 파일을 수정하려면 ‘쓰기’ 권한이 추가돼야만 한다.
자세한 사항은 다른 글에서 정리했다.
Error while trying to create admin user: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [1045] Access denied for user ‘admin’@’localhost’ (using password: YES)
이 오류가 계속뜨는데 해결방법아시나요? ㅠㅠ
확실하진 않지만, 아마도 제가 쓴 글에 보시면 해결법이 나올 듯 합니다만.
4. MariaDB 설정 항목에 연결된 글들을 한번 살펴보시죠.
이 글입니다
링크 걸어주신 글에 있는 방법으로 다해봣는데 결과는 같습니다. cmd에서 SQLSTATE[HY000] [1045] Access denied for user 나오내요 관리자로 권한 다 준거같은데도 occ통해서 계정생성못하는게 문제인거같은데 .. 왜 생성못하는지 이해가 안되내요 .. 2틀동안 밤새가면서 찾고있는데 방법이 안보여요..
리눅스에서 뭔가 문제가 생겼을 때는 권한 문제일 가능성도 꽤 됩니다.
말씀하신 상황도 권한 관련 문제로 보이는데요.
간단하게, 그 ID/PW 로 mysql 로 가셔서 DB 를 만들어보시죠.
접속이 되고, 생성이 된다면 권한엔 문제가 없다고 볼 수 있고, 생성이 안된다면 권한에 문제가 있는 겁니다.
위 글 5.1로 하셔서 실패하셨다면, 5.2 로 해보시죠?
전 그렇게 해서 잘 쓰고 있습니다.