ownCloud 설치 가이드

은재형·2023년 4월 23일
0

NAS 만들기

목록 보기
1/2
post-custom-banner

이 문서는 ownCloud server 10.12의 "Quick Install on Ubuntu 22.04"를 바탕으로 작성했습니다. (원본링크)

개요

우분투 22.04 클린 설치를 기준으로 작성된 가이드 입니다.
아래 코드들은 모두 터미널에서 입력해야 합니다.
빠른 설치를 목적으로 한 문서인 만큼 세부 사항에 대해서는 다루지 않습니다.
PHP의 종속성, 운영체제, 웹 서버, 데이터베이스 등에서 문제가 발생하면 세부 설치 가이드를 참조해야 합니다.

사전 요구 사항

SSH를 활성화한 우분투에서 설치를 진행해야 합니다.
이 가이드는 사용자가 슈퍼유저라 가정하고 작성되었습니다.
ownCloud를 설치하는 디렉토리는 /var/www/owncloud/입니다.
ondrej/php PPA에서 제공하는 php7.4를 우분투 22.04에 설치할 것입니다.

❗ 현재 우분투 22.04는 php8을 기본으로 설치하지만, ownCloud 10.12와 호환되지 않습니다.

준비

도메인 이름 설정

my_domain="Your.Domain.tld"
echo $my_domain

hostnamectl set-hostname $my_domain
hostname -f

강력한 암호 생성

sec_admin_pwd=$(openssl rand -base64 18)
echo $sec_admin_pwd > /etc/.sec_admin_pwd.txt

sec_db_pwd=$(openssl rand -base64 18)
echo $sec_db_pwd > /etc/.sec_db_pwd.txt

시스템 업데이트

모든 패키지가 최신 상태이고 PHP가 APT 레포지토리에 있는지 확인합니다.

apt update && apt upgrade -y

occ 헬퍼 스크립트 작성

occ 명령 실행을 돕는 스크립트를 작성합니다.

FILE="/usr/local/bin/occ"
cat <<EOM >$FILE
#! /bin/bash
cd /var/www/owncloud
sudo -E -u www-data /usr/bin/php /var/www/owncloud/occ "\$@"
EOM

헬퍼 스크립트를 실행가능하도록 만듭니다.

chmod +x $FILE

필수 패키지 설치

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update && sudo apt upgrade -y
apt install -y \
  apache2 \
  libapache2-mod-php7.4 \
  mariadb-server openssl redis-server wget \
  php7.4 php7.4-imagick php7.4-common php7.4-curl \
  php7.4-gd php7.4-imap php7.4-intl php7.4-json \
  php7.4-mbstring php7.4-gmp php7.4-bcmath php7.4-mysql \
  php7.4-ssh2 php7.4-xml php7.4-zip php7.4-apcu \
  php7.4-redis php7.4-ldap php-phpseclib



smbclient php 모듈 설치

SMB를 통해 외부 저장소에 접속하려면 smbclient php 모듈을 설치합니다.

apt-get install -y php7.4-smbclient
echo "extension=smbclient.so" > /etc/php/7.4/mods-available/smbclient.ini
phpenmod smbclient
systemctl restart apache2

제대로 활성화 했는지 확인합니다.

php -m | grep smbclient

위의 명령을 입력했을 때 아래와 같이 결과를 출력해야 합니다.

libsmbclient
smbclient

권장 패키지 설치

디버깅에 필요한 도구를 설치합니다.

apt install -y \
  unzip bzip2 rsync curl jq \
  inetutils-ping  ldap-utils\
  smbclient

아파치 설정

Virtual Host 설정 파일 생성

FILE="/etc/apache2/sites-available/owncloud.conf"
cat <<EOM >$FILE
<VirtualHost *:80>
ServerName $my_domain
DirectoryIndex index.php index.html
DocumentRoot /var/www/owncloud
<Directory /var/www/owncloud>
  Options +FollowSymlinks -Indexes
  AllowOverride All
  Require all granted

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

 SetEnv HOME /var/www/owncloud
 SetEnv HTTP_HOME /var/www/owncloud
</Directory>
</VirtualHost>
EOM

설정 테스트

apachectl -t

위의 명령을 입력했을 때 아래와 같이 결과를 출력해야 합니다.

AH00112: Warning: DocumentRoot [/var/www/owncloud] does not exist
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

AH00112은 ownCloud를 설치해서 해결할 수 있습니다.
AH00558은 다음 명령으로 해결할 수 있습니다.
apache2.conf 파일에 해당 항목이 한 번만 존재하는지 확인합니다.

echo "ServerName $my_domain" >> /etc/apache2/apache2.conf

Virtual Host 설정 활성화

a2dissite 000-default
a2ensite owncloud.conf

Database 설정

❗ mariadb 설치를 보호하고 데이터베이스 사용자를 위한 강력한 비밀번호를 설정하기 위해 mysql_secure_installation을 실행하는 것이 좋습니다.

트랜잭션 격리 수준이 설정되어 있고 performance_schema가 켜져 있는지 확인합니다.

sed -i "/\[mysqld\]/atransaction-isolation = READ-COMMITTED\nperformance_schema = on" /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl start mariadb
mysql -u root -e "CREATE DATABASE IF NOT EXISTS owncloud; \
GRANT ALL PRIVILEGES ON owncloud.* \
  TO owncloud@localhost \
  IDENTIFIED BY '${sec_db_pwd}'";

몇 일 동안 실행한 후 데이터베이스 구성을 분석하기 위해 mysqltuner 스크립트를 실행하는 것이 좋습니다.

아파치 모듈 중 권장사항 활성화

a2enmod dir env headers mime rewrite setenvif
systemctl restart apache2

설치

ownCloud 다운로드

cd /var/www/
wget https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2 && \
tar -xjf owncloud-complete-latest.tar.bz2 && \
chown -R www-data owncloud

ownCloud 설치

❗ ownCloud 관리자의 비밀번호를 강력하게 설정하고 --database-pass 인수로 앞서 설정한 데이터베이스 사용자 비밀번호를 제공해야 합니다.

occ maintenance:install \
    --database "mysql" \
    --database-name "owncloud" \
    --database-user "owncloud" \
    --database-pass ${sec_db_pwd} \
    --data-dir "/var/www/owncloud/data" \
    --admin-user "admin" \
    --admin-pass ${sec_admin_pwd}

ownCloud의 신뢰할 수 있는 도메인 설정

my_ip=$(hostname -I|cut -f1 -d ' ')
occ config:system:set trusted_domains 1 --value="$my_ip"
occ config:system:set trusted_domains 2 --value="$my_domain"

반복 작업 설정

백그라운드 작업 모드를 cron으로 설정합니다.

occ background:cron

15분마다 반복 수행하도록 job을 설정하고 매일 밤 2시에 청크 정리를 수행합니다.

echo "*/15  *  *  *  * /var/www/owncloud/occ system:cron" \
  | sudo -u www-data -g crontab tee -a \
  /var/spool/cron/crontabs/www-data
echo "0  2  *  *  * /var/www/owncloud/occ dav:cleanup-chunks" \
  | sudo -u www-data -g crontab tee -a \
  /var/spool/cron/crontabs/www-data

❗ LDAP 또는 Active Directory 서버에서 사용자를 동기화해야 하는 경우, 아래 job을 추가합니다. 이 job은 6시간마다 ownCloud의 LDAP 사용자를 동기화하고 ownCloud에서 사용할 수 없는 사용자를 비활성화합니다. 또한, 디버깅을 위해 /var/log/ldap-sync/user-sync.log에 로그 파일을 생성합니다.

echo "1 */6 * * * /var/www/owncloud/occ user:sync \
  'OCA\User_LDAP\User_Proxy' -m disable -vvv >> \
  /var/log/ldap-sync/user-sync.log 2>&1" \
  | sudo -u www-data -g crontab tee -a \
  /var/spool/cron/crontabs/www-data
mkdir -p /var/log/ldap-sync
touch /var/log/ldap-sync/user-sync.log
chown www-data /var/log/ldap-sync/user-sync.log

캐싱과 파일 락킹 설정

occ config:system:set \
   memcache.local \
   --value '\OC\Memcache\APCu'
occ config:system:set \
   memcache.locking \
   --value '\OC\Memcache\Redis'
occ config:system:set \
   redis \
   --value '{"host": "127.0.0.1", "port": "6379"}' \
   --type json

로그 로테이션 설정

FILE="/etc/logrotate.d/owncloud"
sudo cat <<EOM >$FILE
/var/www/owncloud/data/owncloud.log {
  size 10M
  rotate 12
  copytruncate
  missingok
  compress
  compresscmd /bin/gzip
}
EOM

설치 마무리

권한이 올바른지 확인합니다.

cd /var/www/
chown -R www-data owncloud

이제 ownCloud가 설치되었습니다.
ownCloud의 올바른 버전이 설치되었는지, occ 명령이 작동하는지 확인하려면 다음을 실행합니다.

occ -V
echo "Your Admin password is: "$sec_admin_pwd
echo "It's documented at /etc/.sec_admin_pwd.txt"
echo "Your Database Password is: "$sec_db_pwd
echo "It's documented at /etc/.sec_db_pwd.txt and in your config.php"
echo "Your ownCloud is accessable under: "$my_domain
echo "The Installation is complete."

❗ 관리자 비밀번호는 로그인 시 필요하니 잘 관리해야 합니다. 설치 완료 후 보안 강화 가이드라인을 참조하는 것이 좋습니다.

profile
정리를 잘 못하는 개발자
post-custom-banner

0개의 댓글