이 문서는 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 명령 실행을 돕는 스크립트를 작성합니다.
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
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
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
a2dissite 000-default
a2ensite owncloud.conf
❗ 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
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 관리자의 비밀번호를 강력하게 설정하고 --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}
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."
❗ 관리자 비밀번호는 로그인 시 필요하니 잘 관리해야 합니다. 설치 완료 후 보안 강화 가이드라인을 참조하는 것이 좋습니다.