지난 포스팅에 이어 이번에는 LAMP(Linux, Apache, MySQL, PHP) 스택 기반 위에서 파일 공유 클라우드 서비스인 ownCloud를 구축하는 과정을 다룬다. 구글 드라이브와 같이 빌려 쓰는 스토리지가 아니라, 내 컴퓨터(서버)에 직접 사설형(private) 클라우드 스토리지를 구축해 봄으로써 클라우드의 핵심 개념인 분산 파일 시스템(DFS)의 기초를 배워볼 수 있다.
Step 1. 기반 환경 구성 (Service Initiation)
클라우드 서비스 구동을 위해 필수적인 패키지 매니저를 업데이트하고, 웹 서버(Apache)와 데이터베이스(MySQL) 서비스를 시작한다.
apt update
service apache2 start
service mysql start
- apt update: Ubuntu 패키지 저장소(Repository)의 최신 패키지 리스트를 가져옴.
- service apache2 start: Apache 웹 서버 데몬을 백그라운드에서 시작.
- service mysql start: MySQL 데이터베이스 서버를 시작.
Step 2. 데이터베이스 구성 (Database Setup)
클라우드 서비스는 사용자 정보, 파일 메타데이터 등을 저장할 DB를 필요로 한다. ownCloud가 데이터를 저장할 전용 데이터베이스와 관리 계정을 생성한다. 보안을 위해 권한(Privileges)을 조정한다.
💡 ownCloud는 파일을 업로드할 때, 실제 데이터와 정보(메타 데이터)를 분리해서 저장한다.
실제 데이터: 사진이나 영상 파일 그 자체는 리눅스 디렉토리에 저장됨.
정보(메타 데이터): MySQL에는 다음과 같은 메타데이터만 텍스트로 저장됨.
사용자 정보: 아이디(paul, mary), 암호화된 비밀번호, 이메일
파일 정보: 파일 이름, 파일 크기, 업로드한 날짜
공유 권한: "A 파일은 Manager 그룹만 볼 수 있음", "B 파일은 외부 링크로 공유됨" 등등..
설정 값: ownCloud 테마, 언어 설정 등
# MySQL 접속 및 설정
mysql -u [MySQL_user_ID] -p*******
mysql> create database [DB_name];
mysql> grant all privileges on [DB_name].* to '[Database_User_ID]'@'localhost' identified by '[Password]';
mysql> grant all privileges on [DB_name].* to '[Database_User_ID]'@'%' identified by '[Password]';
mysql> flush privileges;
mysql> exit;
mysql 프롬프트에서 다음 작업을 수행한다.
- create database [DB_name];: [DB_name]이라는 이름의 데이터 저장소를 생성.
- grant all privileges on [DB_name].* to '[Database_User_ID]'@'localhost' ...: ' [Database_User_ID]'라는 사용자에게 ' [DB_name]'의 모든 권한을 줌. (localhost는 내부 접속용)
- grant all ... to ' [Database_User_ID]'@'%' ...: %는 외부(모든 호스트)에서 이 계정으로 접속하는 것을 허용한다는 뜻. (원격 DB 접속 허용)
- flush privileges;: 변경된 권한 설정이 즉시 적용되도록 메모리를 갱신.
Step 3. 애플리케이션 배포 (Deployment)
ownCloud 소스 코드를 다운로드하고, 압축을 해제하여 웹 서버가 서비스할 수 있는 위치 (웹 서버의 루트 디렉토리)(/var/www)에 배치한다. 기존의 기본 html 폴더는 제거하여 ownCloud가 메인 서비스가 되도록 한다.
# 소스 다운로드 및 압축 해제
wget https://ftp.icm.edu.pl/packages/owncloud/owncloud-10.5.0.tar.bz2
rm -rf /var/www/html
tar xvfj owncloud-10.5.0.tar.bz2 -C /var/www/
- wget ...: 웹(Web)에서 파일을 가져오는(Get) 도구입니다. ownCloud 10.5.0 압축 파일을 다운로드
- rm -rf /var/www/html: 기본으로 생성되는 Apache의 초기 페이지 폴더(html)를 삭제. (ownCloud를 메인으로 쓰기 위함)
- tar xvfj ... -C /var/www/:
- tar: 압축 해제 명령어
- xvfj: 묶음 풀기(x), 진행과정 보기(v), 파일 지정(f), bzip2 압축 풀기(j)
- -C /var/www/: 압축을 풀 목적지 디렉토리를 지정. 결과적으로 /var/www/owncloud가 생성됨.
Step 4. 권한 및 소유권 관리 (Configuration)
리눅스 보안 모델에 맞춰 웹 서버 계정(www-data)이 ownCloud 디렉토리를 제어할 수 있도록 소유권을 변경한다. 또한, Apache 설정 파일에서 DocumentRoot를 변경하고 필요한 모듈(rewrite, headers)을 활성화한다.
# 소유권 변경 (Permission)
grep "www-data" /etc/passwd
chown -R www-data:www-data /var/www/owncloud
- grep "www-data" /etc/passwd: Apache 웹 서버가 사용하는 기본 사용자 계정(www-data)이 존재하는지 확인.
- chown -R www-data:www-data /var/www/owncloud:
- chown: Change Owner (소유자 변경)
- -R: Recursive (하위 폴더/파일까지 모두 포함)
- 의미: /var/www/owncloud 폴더의 주인을 root에서 www-data(웹 서버)로 바꿈. 이 작업을 안 하면 ownCloud에서 파일을 업로드하거나 설정을 저장할 때 "Permission Denied" 오류가 발생함.
Step 5. 웹 서버 설정 및 모듈 활성화 (Web Server Config)
Apache가 ownCloud를 올바르게 처리하도록 설정을 변경한다.
# 모듈 활성화 및 서비스 재시작
nano -c /etc/apache2/apache2.conf
a2enmod rewrite && a2enmod headers
systemctl restart apache2
# Apache 설정 변경 (DocumentRoot 수정: /html -> /owncloud)
nano -c /etc/apache2/sites-available/000-default.conf
- nano -c /etc/apache2/apache2.conf: Apache의 메인 설정 파일 편집
<Directory /var/www/> #owncloud가 설치된 웹 루트 디렉터리
Options Indexes FollowSymLinks
AllowOverride All <-- (기존 None에서 변경)
Require all granted
</Directory>
💡AllowOverride : 각 디렉토리 안에 있는 개별 설정 파일(.htaccess)의 규칙을 인정해줄지 여부를 결정.
AllowOverride None 상태에서는 ownCloud가 제공하는 .htaccess 파일(보안 설정 등)이 무시된다. 이를 All로 변경해야만 URL 재작성(Rewrite) 모듈과 보안 헤더가 정상적으로 작동한다.
- a2enmod rewrite && a2enmod headers:
- a2enmod: Apache 2 Enable Module (모듈 활성화)
- rewrite: URL 주소를 깔끔하게 변경해주는 모듈 (Clean URL)
- headers: 보안 및 캐시 제어 헤더를 조작하는 모듈
- nano .../000-default.conf: 가상 호스트(Virtual Host) 설정 파일
- 설정 변경: DocumentRoot /var/www/html을 /var/www/owncloud로 변경.
- 기대 결과: 사용자가 IP 주소로 접속하면 Apache가 owncloud 폴더의 내용을 보여주게 됨.
Step 6. 네트워크 및 방화벽 (Network & Firewall)
외부에서 웹 서비스(80 포트)와 데이터베이스(3306 포트)에 접근할 수 있도록 방화벽(UFW) 설정을 오픈한다.
ufw allow 80/tcp
ufw allow 3306/tcp
netstat -nltp | grep LISTEN # 포트 리스닝 확인
- ufw allow 80/tcp: UFW(Uncomplicated Firewall)를 통해 웹 접속 포트(80)를 허용함.
- ufw allow 3306/tcp: MySQL 데이터베이스 포트(3306)를 허용함. (보통 웹 서버와 DB가 같은 서버에 있으면 3306은 안 열어도 되지만, 외부에서 DB 관리 툴로 접속을 허용하려면 열어놔야 함.)
- netstat -nltp | grep LISTEN: 현재 서버가 기다리고 있는(LISTEN) 포트 목록을 확인하여 웹(80)과 DB(3306)가 정상적으로 떠 있는지 검증.
Step 7. 웹 설치 및 사용자 관리
터미널 작업을 마치고 GUI(Firefox)에서 설정을 마무리한다.
웹 브라우저 설정
- 브라우저에서 localhost로 접속하여 설치 마법사를 실행.
- DB 설정: 앞서 생성한 [DB_name]과 ownCloud 계정 정보를 입력하여 연동을 완료.
사용자 및 그룹 관리
- 관리자(Admin) 계정 생성 후 로그인.
- 일반 사용자 계정을 생성하고 새로운 그룹에 할당하여 실제 클라우드 스토리지의 그룹별 권한 관리 기능을 확인.

'AI Journey > 리눅스' 카테고리의 다른 글
| [Linux] Hadoop 마스터 노드 구축하기 part.3 - 하둡 설치 및 환경 설정, 데몬 확인 (0) | 2025.12.19 |
|---|---|
| [Linux] Hadoop 마스터 노드 구축하기 part.2 - APM 스택, SSH 서버 구축 및 SSH 키 생성 (0) | 2025.12.18 |
| [Linux] Hadoop 마스터 노드 구축하기 part.1 - 자바 설치 및 환경변수 설정 (0) | 2025.12.18 |
| [Linux] 우분투에 APM(Apache, PHP, MySQL) 설치하기 (0) | 2025.12.15 |
| [Linux] Ubuntu - /etc/network/interfaces에서 고정 IP 설정하기 (0) | 2025.12.15 |