문제해결
- Redis : AOF 관련 오류 및 504 timeout
- 외부 저장소 추가 시 "Entry .... will not be accessible due to incompatible encoding" 문제
- "/.well-known/" 관련 문제
- SSL 인증서 오류 (기존 시놀로지 인증서 활용 방법)
- 로그인 시 IP 관련 오류 해결
- "server reached pm.max_children setting" 문제 발생 시
- "X-Robots-Tag" HTTP 헤더 문제 발생 시
- Nextcloud Update 이후 "INVALID_HASH" (db index error) 문제 발생 시
- 로그인 시간이 유난히 길때
- "sysvsem" 경고 문제 해결
- DB 속도 개선 (DB반응이 늦을때)
- "opcache" 경고 시
- "데이터베이스에 일부 인덱스가 없습니다" 오류 시
- "서버 유지관리 창의 시작 시간이 설정되지 않았습니다." 문제 발생
Redis : AOF 관련 오류 및 504 timeout
디스크가 SSD가 아닌 경우 AOF 쓰기작업 디스크가 느려서 발생 하며, 주로 발생되는 증상은 한꺼번에 많은 파일을 동기화하는 과정에서 504 timeout이 나오는 증상이 발생 합니다.
Asynchronous AOF fsync is taking too long (disk is busy?).
Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
docker run --name redis \
-p 6379:6379 \
-v /volume1/docker/redis/data:/data \
-e TZ=Asia/Seoul \
-d redis:latest redis-server --appendonly yes --appendfsync no
이 경우 Redis Container 설치 시 "--appendfsync no" 옵션을 넣어 줍니다.
외부 저장소 추가 시 "Entry .... will not be accessible due to incompatible encoding" 문제
외부 저장소 추가 후 "occ files:scan" 동작시 "Entry .... will not be accessible due to incompatible encoding" error가 발생 되고,
자료 추가가 실패할 수 있습니다.
이 관련 문제는 외부 저장소의 Source단의 한글이나 특수문자로된 폴더/파일명 문제 입니다.
아래의 명령으로 문제가 되는 문자열을 utf-8로 일괄 변경 가능 합니다.
./convmv -f utf-8 -t utf-8 -r --notest --nfc <nextcloud-data-folder>
Portainer > nextcloud 콘솔 > occ files:scan --all 재실행
* convmv가 없어 실행 불가 시 "wget http://www.j3e.de/linux/convmv/convmv-2.05.tar.gz"으로 받아
"tar xzvf convmv-2.05.tar.gz"로 압축해제 후 실행 하시면 됩니다.
"/.well-known/" 관련 문제
[보안 및 설치 경고]
설정을 살펴본 결과 몇 가지 경고할 것이 있습니다.
웹 서버에서 "/.well-known/webfinger"을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오.
웹 서버에서 "/.well-known/nodeinfo"을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오.
웹 서버에서 "/.well-known/caldav"을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오.
웹 서버에서 "/.well-known/carddav"을(를) 올바르게 처리할 수 없습니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오
[해결책1] nginx 설정 수정
1. "config > nginx > site-confs"에 들어가면 "default.conf"가 있습니다.
2. "server { }" 중간에 아래를 추가 합니다. 또는 주석처리가 되어 있으면 주석 "#"를 삭제해 줍니다.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
3. 중간에 "location ^~ /.well-known { }" 항목이 있는데 아래 3개 문장을 수정해 줍니다.
(경로에 https도메인과 포트 입력이 포인트 입니다.)
location = /.well-known/carddav { return 301 https://도메인:포트/remote.php/dav/; }
location = /.well-known/caldav { return 301 https://도메인:포트/remote.php/dav/; }
return 301 https://도메인:포트/index.php$request_uri;
[해결책2] Nginx Proxy Manager을 사용할 경우 (Nginx Proxy Manager의 advanced에 스크립트 추가)
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 1024k; #옵션
client_max_body_size 0;
#limit_rate 500k;
location = /.well-known/webfinger {
return 301 https://도메인/index.php/.well-known/webfinger;
}
location = /.well-known/nodeinfo {
return 301 https://도메인/index.php/.well-known/nodeinfo;
}
location = /.well-known/carddav {
return 301 https://도메인/remote.php/dav;
}
location = /.well-known/caldav {
return 301 https://도메인/remote.php/dav;
}
SSL 인증서 오류 (기존 시놀로지 인증서 활용 방법)
SSL 관련 오류를 해결하기 위해서는 SSL 인증서를 설치해 주셔야 합니다.
본 해결 방법은 시놀로지를 사용할 경우 간단히 시놀로지의 인증서를 빼내서 nextcloud에 적용하는 방법입니다.
1. "시놀로지 제어판 > 보안 > 인증서" 항목에서 기존 보유한 인증서를 선택 후 "인증서 내보내기"를 실행 합니다. (PC로 다운로드)
2. 압축을 풀고 이 중에서 사용할 인증서는 "cert.pem"와 "privkey.pem" 입니다.
3. nextcloud에 새로운 인증서 생성
1) "nextcloud/config" 밑에 "cert" 디렉토리를 생성 합니다.
2) cert 디렉토리 밑에 "cert1.crt" 파일을 생성하고 앞서 다운로드 받은 "cert.pem" 파일의 내용을 메모장을 열어 복사하고
붙여 줍니다.
3) cert 디렉토리 밑에 "cert1.key" 파일을 생성하고 앞서 다운로드 받은 "privkey.pem" 파일의 내용을 메모장을 열어 복사하고
붙여 줍니다.
4. nextcloud "ngnix > ssl.conf"에 신규 생성한 인증서 정보를 넣어 줍니다.
1) 위치는 "config > nginx > ssl.conf " 입니다. (nano 또는 시놀의 텍스트 편집기로 수정을 하시면 됩니다.)
2) 아래 두 문장을 주석 처리 합니다.
#ssl_certificate /config/keys/cert.crt;
#ssl_certificate_key /config/keys/cert.key;
3) 앞서 만든 root에 위치한 신규 인증서의 위치를 넣어 줍니다.
ssl_certificate /config/cert/cert1.crt;
ssl_certificate_key /config/cert/cert1.key;
5. Docker Container를 재시작 합니다.
로그인 시 IP 관련 오류 해결
사용 중인 ip에서 여러 번의 잘못된 로그인 시도를 감지했습니다. 30초 후에 다시 로그인할 수 있습니다.
이 문제는 로그인 시 Docker 내부가 가상의 ip로 처리를 시도하기 때문입니다.
이 경우 1차로 nextcloud의 관리자에 있는 "앱"에서 "Brute-force setting"을 "사용"으로 설정합니다.
"관리자 설정 > 관리항목"에 있는 "보안"으로 이동합니다.
- 무작위 대입 ip 허용목록 (화이트리스트)에 nextcloud 도커에서 사용하는 ip 대역을 넣어줍니다.
- 보통 Docker의 가상 ip는 "172.x.x.x"로 되어 있는데 portainer나 시놀로지 도커의 네트워크에서 ip 대역을 확인 할 수
있습니다. - ip는 "172.17.0.0/24"와 같이 맨 뒷자리는 "0"을 넣어주고 "/24"를 넣으면 됩니다.
(해당 게이트웨이에 있는 뒷자리 1~255까지의 대역 범위를 주는 의미)
"server reached pm.max_children setting" 문제 발생 시
1. Portainer 또는 다른 방법으로 nextcloud 컨테이너 Console 접속 후 "/etc/php81/php-fpm.d" 경로로 이동 합니다.
2. "www.conf" 수정를 nano나 vi editor로 아래와 같이 수정해 줍니다.
pm.max_children = 128
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 96
"X-Robots-Tag" HTTP 헤더 문제 발생 시
"X-Robots-Tag" HTTP 헤더가 "noindex, nofollow"(으)로 설정되어 있지 않습니다. 잠재적인 정보 유출 및 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.
[해결책] nginx 설정 수정
1. "config > nginx > site-confs"에 들어가면 "default.conf"가 있습니다.
2. "add_header X-Robots-Tag" 부분을 찾아 아래와 같이 수정 합니다.
"add_header X-Robots-Tag "noindex, nofollow" always;"
Nextcloud Update 이후 "INVALID_HASH" (db index error) 문제 발생 시
- INVALID_HASH:
- core/js/mimetypelist.js:
- expected: ***************
- current: **************
1. Nextcloud의 Docker Console에서 아래 명령을 실행 합니다.
# occ db:add-missing-indices
2. Nextcloud의 "config > www > nextcloud > config.php"에 아래 문장을 추가해 줍니다.
'integrity.check.disabled' => true,
3. Nextcloud Docker Container를 재실행 합니다.
4. Nextcloud의 "관리자 설정" 진입 후 error 항목에서 "Rescan" 클릭 합니다.
5. 정상 확인 후 2번 항목을 원상복귀 (문장 삭제) 후 Nextcloud Docker Container를 재실행 합니다.
로그인 시간이 유난히 길때
"config/www/nextcloud/config/config.php"에 아래 문장을 추가해 줍니다.
"'auth.bruteforce.protection.enabled' => false,"
"sysvsem" 경고 문제 해결
이 인스턴스에 추천하는 PHP 모듈 중 일부가 존재하지 않습니다. 성능 향상과 호환성을 위하여 PHP 모듈을 설치하는 것을 추천합니다.
sysvsem
1. Nextcloud v26 버전부터 "sysvsem" PHP 모듈이 필요 합니다. 경고가 발생될 경우 Nextcloud의 Docker 이미지를 최신버전으로
업그레이드해 주셔야 합니다. (php.ini의 extention을 설정해도 경고 문구 발생)
2. linuxserver/nextcloud 대응 버전 : 21.03.23: - Add php81-sysvsem as new dep for v26. Update default X-Robots-Tag to `noindex,
nofollow``.
DB 속도 개선 (DB반응이 늦을때)
MariaDB에 "my.cnf"파일을 생성 후 내용을 추가해 줍니다.
touch /var/packages/MariaDB10/etc/my.cnf
"my.cnf" 에 작성되야할 내용은 아래와 같습니다.
[myisamchk]
key_buffer_size=64M
sort_buffer_size=64M
[mysqld]
max_connections = 1000
innodb_buffer_pool_size=500M
key_buffer=256M
key_buffer_size=256M
query_cache_limit=16M
query_cache_size=32M
max_allowed_packet=128M
thread_stack=192K
thread_cache_size=8
table_open_cache=128
sort_buffer_size=512K
read_buffer_size=512K
read_rnd_buffer_size=512K
skip-name-resolve
skip-host-cache
skip-external-locking
wait_timeout = 28800
innodb_log_file_size = 128MB
max_allowed_packet = 128M
아래 명령으로 MariaDB를 재실행 합니다.
/var/packages/MariaDB10/scripts/start-stop-status restart
"opcache" 경고 시
"php.ini"를 아래와 같이 수정 합니다.
opcache.enable=1
opcache.interned_strings_buffer=512
opcache.max_accelerated_files=10000
opcache.memory_consumption=2048
opcache.save_comments=1
opcache.revalidate_freq=1
"데이터베이스에 일부 인덱스가 없습니다" 오류 시
테이블 "oc_systemtag_object_mapping"에 인덱스 "systag_by_tagid"이(가) 없습니다.
테이블 "text_steps"에 인덱스 "textstep_session"이(가) 없습니다.
Nextcloud Version Update 시 발생되는 오류로 Nextcloud 콘솔에서 아래 명령을 실행하면 해결 됩니다.
occ db:add-missing-indices
"서버 유지관리 창의 시작 시간이 설정되지 않았습니다." 문제 발생
- 서버 유지관리 창의 시작 시간이 설정되지 않았습니다. 자원 집약적인 배경 작업이 사용자의 주된 사용 시간에 시작할 수 있습니다. 부하가 큰 작업에 의해 사용자가 불편을 겪지 않도록, 사용량이 적은 시간대로 이를 지정하십시오. 더 자세한 사항은 문서 ↗를 참조하십시오.
1. Nextcloud의 "config > www > nextcloud > config.php"에 아래 문장을 추가해 줍니다.
'maintenance_window_start' => 1,
2. Nextcloud Docker Container를 재실행 합니다.