一步步教您在 CentOS 7 上搭建 ownCloud 私有雲

一、前言

國內的公有雲越來越不靠譜。丟文件的、信息泄漏的比比皆是……

國外的公有雲雖然比較靠譜,但是價格普遍偏高,而且國內訪問非常不方便。

公有雲用著都很不爽,那麼我們不妨來搭一個私有云然後自己爽吧!

那麼,私有雲用哪個軟體好呢?

目前來說,大名鼎鼎的 ownCloud 是私有雲的最佳解決方案。它不僅是開源的,而且個人用戶全免費!

ownCloud 說到底其實就是一個網站,它需要 PHP、資料庫等後端環境。

雖然網上也有許多私有雲的搭建教程,但是各人的系統環境各有不同,而且軟體版本又是不斷更新的,所以很難一次完美搭建。

本文純屬個人經驗分享,所有的步驟我在寫完之後都有重裝系統然後全部重新走一遍驗證一次。

如果想提高一次成功的幾率,建議使用全新安裝的系統,然後嚴格按照我的步驟要求來做。

如果有錯誤,可以的話麻煩留言提出,謝謝!


二、所需軟體 & 環境

  • 操作系統:CentOS 7.4.1708 最小安裝 (已關閉 SELinux 和防火牆)
  • 應用軟體: Nginx 1.10.2 、MariaDB 5.5.56 、PHP 7.1.8 、Redis 3.2.10 、ownCloud 10.0.3
  • 域名: http://cloud.example.com
  • http://cloud.example.com 數字證書 (推薦免費的 Lets Encrypt)

三、安裝軟體

3.1 添加 EPEL & WEBTATIC 軟體源

yum -y install epel-release && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm && yum -y updaten

3.2 安裝所需軟體包

yum -y install nginx mariadb-server redis lbzip2 php71w-common php71w-fpm php71w-gd php71w-mysql php71w-mbstring php71w-intl php71w-mcrypt php71w-pecl-imagick php71w-xml php71w-pecl-redis samba-clientn

3.3 下載 & 安裝 ownCloud

curl -O https://download.owncloud.org/community/owncloud-10.0.3.tar.bz2 && tar -xf ./owncloud-10.0.3.tar.bz2 && rm -rf ./owncloud-10.0.3.tar.bz2 && mv owncloud /usr/share/nginx/ && chown -R nginx:nginx /usr/share/nginx/owncloud && find /usr/share/nginx/owncloud -type d -exec chmod 755 {} ; && find /usr/share/nginx/owncloud -type f -exec chmod 644 {} ;n

3.4 創建 ownCloud 數據目錄

ownCloud 上的數據將存儲到 /var/lib/owncloud 中。

mkdir /var/lib/owncloud && chown nginx:nginx /var/lib/owncloudn


四、配置資料庫

4.1 初始化資料庫

4.1.1 啟動服務

systemctl start mariadbn

4.1.2 進行安全設置

mysql_secure_installation nnNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQLn SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!nnIn order to log into MySQL to secure it, well need the currentnpassword for the root user. If youve just installed MySQL, andnyou havent set the root password yet, the password will be blank,nso you should just press enter here.nnEnter current password for root (enter for none): #回車即可nOK, successfully used password, moving on...nnSetting the root password ensures that nobody can log into the MySQLnroot user without the proper authorisation.nnSet root password? [Y/n] y #使用密碼驗證nNew password: #輸入 root 密碼nRe-enter new password: nPassword updated successfully!nReloading privilege tables..n ... Success!nn#後面的問題全部按y回車,這裡省略。n

4.2 ownCloud 專屬資料庫的設置

4.2.1 進入資料庫命令行界面

mysql -u root -pnnEnter password: #輸入密碼按回車n

出現 MariaDB [(none)]> 指示符就說明進入了。

4.2.2 創建一個用戶用於讀寫 ownCloud 資料庫

CREATE USER owncloud@localhost IDENTIFIED BY owncloud;n

4.2.3 創建 ownCloud 資料庫

CREATE DATABASE owncloud;n

4.2.4 為用戶授予讀寫許可權

GRANT ALL PRIVILEGES ON owncloud.* TO owncloud@localhost IDENTIFIED BY owncloud;n

4.2.5 刷新許可權表

FLUSH PRIVILEGES;n

資料庫設置完成。按 Ctrl + D 退出 MySQL 命令行界面。


五、配置 Nginx

5.1 創建 ownCloud 專屬配置文件

vi /etc/nginx/conf.d/owncloud.confn

請按實際情況以及注釋提示修改以下內容,在命令行窗口按下 i ,將內容直接粘貼到命令行窗口中,再按下 ESC ,最後輸入 :wq 按回車。

upstream php-handler {n server unix:/run/php-fpm/owncloud.sock;n}nnserver {n listen 80;n server_name cloud.example.com; # cloud.example.com 改為您的域名n n location /.well-known/acme-challenge/ {n root /usr/share/nginx/owncloud;n }n n location / {n return 301 https://$server_name$request_uri;n }n}nnserver {n listen 443 ssl http2;n server_name cloud.example.com; # cloud.example.com 改為您的域名nn ssl_certificate /etc/pki/tls/owncloud.pem; # 域名證書文件位置,需要修改n ssl_certificate_key /etc/pki/tls/private/owncloud_key.pem; # 域名證書私鑰文件位置,需要修改nn ssl_session_timeout 5m;n ssl_protocols TLSv1 TLSv1.1 TLSv1.2;n ssl_ciphers "-ALL:EECDH+AES256:EDH+AES256:AES256-SHA:EECDH+AES:EDH+AES:!ADH:!NULL:!aNULL:!eNULL:!EXPORT:!LOW:!MD5:!3DES:!PSK:!SRP:!DSS:!AESGCM:!RC4";n ssl_dhparam /etc/pki/tls/certs/dh4096.pem;n ssl_prefer_server_ciphers on;n keepalive_timeout 70;n ssl_stapling on;n ssl_stapling_verify on;nn add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";n add_header X-Content-Type-Options nosniff;n add_header X-Frame-Options "SAMEORIGIN";n add_header X-XSS-Protection "1; mode=block";n add_header X-Robots-Tag none;n add_header X-Download-Options noopen;n add_header X-Permitted-Cross-Domain-Policies none;nn root /usr/share/nginx/owncloud;nn location = /robots.txt {n allow all;n log_not_found off;n access_log off;n }nn location = /.well-known/carddav {n return 301 $scheme://$host/remote.php/dav;n }n location = /.well-known/caldav {n return 301 $scheme://$host/remote.php/dav;n }nn client_max_body_size 16G;n fastcgi_buffers 64 4K;nn gzip off;nn error_page 403 /core/templates/403.php;n error_page 404 /core/templates/404.php;nn location / {n rewrite ^ /index.php$uri;n }nn location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {n return 404;n }n location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {n return 404;n }nn location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34]).php(?:$|/) {n fastcgi_split_path_info ^(.+.php)(/.*)$;n include fastcgi_params;n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;n fastcgi_param SCRIPT_NAME $fastcgi_script_name; n fastcgi_param PATH_INFO $fastcgi_path_info;n fastcgi_param HTTPS on;n fastcgi_param modHeadersAvailable true; n fastcgi_param front_controller_active true;n fastcgi_read_timeout 180; n fastcgi_pass php-handler;n fastcgi_intercept_errors on;n fastcgi_request_buffering off; n }nn location ~ ^/(?:updater|ocs-provider)(?:$|/) {n try_files $uri $uri/ =404;n index index.php;n }nn location ~ .(?:css|js)$ {n try_files $uri /index.php$uri$is_args$args;n add_header Cache-Control "max-age=15778463";n add_header X-Content-Type-Options nosniff;n add_header X-Frame-Options "SAMEORIGIN";n add_header X-XSS-Protection "1; mode=block";n add_header X-Robots-Tag none;n add_header X-Download-Options noopen;n add_header X-Permitted-Cross-Domain-Policies none;n access_log off;n }nn location ~ .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ {n add_header Cache-Control "public, max-age=7200";n try_files $uri /index.php$uri$is_args$args;n access_log off;n }n}n

5.2 生成 Nginx 所需的 DH 文件

openssl dhparam -out /etc/pki/tls/certs/dh4096.pem 4096n

速度可能會有些慢,請耐心等待!


六、配置 PHP-FPM

6.1 創建 ownCloud 專屬配置文件

vi /etc/php-fpm.d/owncloud.confn

請在命令行窗口中按下 i ,將以下內容直接粘貼到命令行窗口中,再按下 ESC ,最後輸入 :wq 按回車。

[owncloud]nuser = nginxngroup = nginxnlisten = /run/php-fpm/owncloud.socknlisten.owner = nginxnlisten.group = nginxnlisten.mode = 0600npm = dynamicnpm.max_children = 50npm.start_servers = 5npm.min_spare_servers = 5npm.max_spare_servers = 35nslowlog = /var/log/php-fpm/owncloud-slow.lognphp_admin_value[error_log] = /var/log/php-fpm/owncloud-error.lognphp_admin_flag[log_errors] = onnphp_value[memory_limit] = 512Mnphp_value[session.save_handler] = filesnphp_value[session.save_path] = /var/lib/php/sessionnphp_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcachenphp_value[upload_max_filesize] = 16Gnphp_value[post_max_size] = 16Gnphp_value[max_input_time] = 3600nphp_value[max_execution_time] = 3600nphp_value[date.timezone] = Asia/Shanghainenv[HOSTNAME] = $HOSTNAMEnenv[PATH] = /usr/local/bin:/usr/bin:/binnenv[TMP] = /tmpnenv[TMPDIR] = /tmpnenv[TEMP] = /tmpn

6.2 創建 PHP 會話目錄

mkdir -p /var/lib/php/session && chown -R nginx:nginx /var/lib/php/sessionn


七、啟動服務

systemctl start nginx php-fpm redisn

如需開機啟動,請執行

systemctl enable nginx php-fpm mariadb redisn


八、配置 ownCloud

8.1 初始化 ownCloud

打開瀏覽器,輸入 https://cloud.example.com ,回車打開。然後按圖片提示進行 ownCloud 的初始化。

初始化完畢之後會出現登錄界面,這時候我們先關閉瀏覽器。

8.2 配置緩存 & 啟用本地文件讀取

vi /usr/share/nginx/owncloud/config/config.phpn

請在命令行窗口中使用方向鍵將游標移至 倒數第二行開頭(installed 那裡) ,然後按下 o,將以下內容直接粘貼到命令行窗口中(效果如下圖),再按下 ESC ,最後輸入 :wq 按回車。

memcache.local => OCMemcacheRedis,nredis => [n host => localhost,n port => 6379,n],nmemcache.locking => OCMemcacheRedis,nfiles_external_allow_create_new_local => true,n

?

8.3 配置計劃任務 & 完工!

crontab -en

請在命令行窗口中按下 O(大寫) ,將以下內容直接粘貼到命令行窗口中,再按下 ESC ,最後輸入 :wq按回車。

*/15 * * * * sudo -u nginx php -f /usr/share/nginx/owncloud/cron.php > /dev/null 2>&1n

然後打開瀏覽器,輸入 https://cloud.example.com ,回車打開。用剛才設置的賬號登錄之後根據圖片提示來設置。

然後,大功告成了!


九、不完美的地方

WebDAV 幾乎無法在 macOS 的 Finder 上使用(下圖中的官方文檔已提到)。

一旦上傳文件,就會提示 -36 錯誤。拉取文件時也會經常性出錯。

可能是由於 macOS 系統會自動生成點開頭的隱藏文件才導致發生錯誤(蘋果:怪我咯~)。

macOS 用戶可以使用第三方工具(如 Yummy FTP Pro)來使用 WebDAV 服務。


十、注意事項

  1. ownCloud 對伺服器的磁碟的 I/O 性能要求較高。如果伺服器的磁碟的 I/O 性能不夠,在處理文件時速度會比較慢。
  2. 如果伺服器沒有公網 IP 地址,建議使用 Ngrok 之類的內網穿透工具配合雲主機使用。切記不要直接在雲主機上搭建 ownCloud!原因你懂的。
  3. 請務必設置高強度的密碼以策安全。
  4. 目前不推薦購買 ownCloud 的手機客戶端,功能少而且體驗很一般。建議使用支持 WebDAV 的文件管理器。

十一、參考文獻

  1. (官網)Installation
  2. (官網)NGINX Configuration
  3. (官網)Uploading big files > 512MB

推薦閱讀:

為何www.atheros-drivers.com中沒有用於linux系統的無線網卡驅動?
Linux 下的伺服器時間同步方案有哪些?
如何學習使用桌面 Linux 發行版?
能否利用 bash for windows 學習 Linux系統?
usb的端點是什麼?

TAG:Linux | Linux运维 | 个人私有云 |