docker-compose로 Nextcloud를 설치하여 사내 파일서버를 구축한 내용 정리
S3를 붙이고 파일을 저장하고자 할 때, S3에 대해 크게 2가지 접근이 있다.
S3를 external storage(외부 저장소)로 사용할 것인지, primary storage(주 저장소)로 사용할 것인지
아래는 각 접근에 대해 내가 생각한 특징을 정리한 내용이다.
config.php
에서 S3에 대한 설정을 추가하지 않아도 되고, 이 방식이 더 안정적임 참조아래 링크의 가이드를 베이스로 삼아 설치를 진행했다.
참조
설치 후 외부 저장소 app을 통해 S3를 external storage(외부저장소)로 등록했지만 에러가 발생
아래 명령어를 docker 컨테이너 내부에서 실행 -> 나중에 보니 php-imagick이 필수는 아니었음
apt update
apt-get install -y --no-install-recommends $(apt-cache search libmagickcore-6.q[0-9][0-9]-[0-9]-extra | cut -d " " -f1)
php명령어로 찾은 php.ini파일을 수정해도 설정값이 적용되지 않는 이슈가 있었음
php -i |grep php.ini
root@1cf2b5525c37:/usr/local/etc/php# php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
그러나 이 경로에 있는 php.ini-development, php.ini-production 파일을 변경해도 서버에 적용되지는 않았다.
아래의 방법으로 php 설정 상황을 확인하여 변경한 설정이 적용되는지 확인했다. 참조
vi /usr/local/etc/php/conf.d/smlee-uploadTmpDir.ini
upload_tmp_dir = /var/www/html/upload_temp_dir
sudo chmod 755 /var/www/html/upload_temp_dir
sudo chown -R www-data:www-data /var/www/html/upload_temp_dir
Nextcloud에서 제공하는 docker-compose.yaml로 설치 했을 경우, 사용에는 문제가 없으나 mysql 메타DB에 접속하여 확인할 수가 없었음 -> DB상태 확인을 위한 외부접속 시도
에러) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
설정파일 예시
vi /nc_data/app_data/.htaccess
php_value upload_max_filesize 100G
php_value post_max_size 100G
php_value memory_limit 7200M
php_value max_execution_time 21600
---------------------------------------------------------
vi /nc_data/app_data/.user.ini -> 적용되는지 확실하지않음
upload_max_filesize = 100G
post_max_size =100G
memory_limit=7200M
---------------------------------------------------------
vi /nc_data/app_data/config/config.php -> 설치된 후 건드리지 않음
---------------------------------------------------------
/usr/local/etc/php/conf.d/smlee-uploadTmpDir.ini -> 개인적으로 설정한 파일
upload_tmp_dir = /var/www/html/upload_temp_dir
최종 작성한 yaml파일
참조 링크에 따르면 id방식으로 mysql에 저장하고, 실제 데이터는 s3에 저장되는 듯
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
ports:
- 3306:3306 # 외부 접속을 위해 설정
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- /nc_data/mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=[패스워드]
- MYSQL_PASSWORD=[패스워드]
- MYSQL_DATABASE=[DB이름]
- MYSQL_USER=[DB유저]
app:
image: nextcloud:20.0.14-apache
restart: always
ports:
- 8080:90 # http redirect를 위해 설정
- 8081:100 # http redirect를 위해 설정
links:
- db
volumes:
- /nc_data/app_data:/var/www/html
environment:
- MYSQL_PASSWORD=[패스워드]
- MYSQL_DATABASE=[DB이름]
- MYSQL_USER=nc-[DB유저]
- MYSQL_HOST=db
# 아래는 S3를 primary storage로 사용할 경우 설정하는 값
#- OBJECTSTORE_S3_HOST=kr.object.ncloudstorage.com
#- OBJECTSTORE_S3_BUCKET=[s3 bucket이름]
#- OBJECTSTORE_S3_KEY=1234
#- OBJECTSTORE_S3_SECRET=1234
#- OBJECTSTORE_S3_REGION=kr-standard
#- OBJECTSTORE_S3_SSL=true
depends_on:
- db
docker-compose up -d
명령어 실행
s3fs-fuse를 설치하여 S3를 마운트시킨다.
이렇게 하면 서버에서 S3를 마치 서버의 디스크인 것 처럼 사용할 수 있다.
참고 가이드
yum install automake fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure
make
make install
설치 후 마운트 작업
echo 1234567:abcdefg > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs
mkdir [마운트 포인트]
s3fs [버킷이름] [마운트 포인트] -o url=https://kr.object.ncloudstorage.com
NCP(Naver Cloud Platform) 기준으로 아래처럼 세팅한다.
Health check 경로를 /index.html
로 설정하지 않으면, 302 redirect 이슈로 헬스체크에 실패하므로 주의
다음에는 Nextcloud http redirect 작업 포스트를 작성해야겠다.