起由
- 由于最近的“凈網(wǎng)”行動,很多網(wǎng)盤包括我一直在使用的快盤關(guān)停,仍然存活的百度云、360云等又沒有l(wèi)inux客戶端掉冶,用Dropbox等國外網(wǎng)盤受空間和墻的限制比較大。
- 同時又有一定的收集高清電影在局域網(wǎng)里共享播放的需要脐雪。家里是百兆電信寬帶郭蕉,平時空時可以用來下載,所以有了自建以私有云為基礎(chǔ)的服務(wù)器的想法喂江。
- 私有云方案有多種方案召锈,出于可擴(kuò)展功能的需要,選擇了Ubuntu14.04+Owncloud的方案获询,使用者要有一點(diǎn)的linux操作和vi編輯經(jīng)驗涨岁。
- 順帶要把mysql和phpmyadmin也配置好
主機(jī)配置
-
主機(jī)放于家庭電視機(jī)柜中,24小時開機(jī)吉嚣,喬思伯V3 ITX HTPC機(jī)箱
- 放了3塊以前留下的2.5寸硬盤梢薪,一共2.5T,其中兩塊是裝在PCIE硬盤掛架上尝哆。
- 內(nèi)存2G(以前淘汰下來的秉撇,基本夠用),系統(tǒng)裝在一塊64Gssd上
-
主板集成J1800 CPU,無風(fēng)扇琐馆,TDP 15w规阀,足夠放1080p X264編碼的高清電影,不過現(xiàn)在建議用更高級的N3455主板瘦麸,能放4k的高清谁撼。
- 不算硬盤,HTPC的資金投入是 主板250+內(nèi)存100+機(jī)箱200+電源150=700
帶端口映射的智能路由器
- 一般情況下滋饲,家庭局域網(wǎng)出口在公網(wǎng)環(huán)境下是沒有固定ip厉碟,所以路由要有動態(tài)域名解析功能,能從公網(wǎng)環(huán)境中反向通過家庭路由訪問到局域網(wǎng)
- 由于電信封了80和8080端口屠缭,同時又要把對路由公網(wǎng)ip的訪問轉(zhuǎn)到HTPC上箍鼓,所以要有端口映射功能
- 又有其他翻墻、路由分離功能
- openwrt是一個比較好的方案呵曹,我的方案是淘寶上這一款 841N 五口 OpenWrt 無線路由器 16M 64M 雙天線袄秩,體積小,拆掉天線后放入弱電箱逢并,無線功能靠二級路由實現(xiàn),要注意要把二級跟帖的ip段設(shè)置的和主路由一樣郭卫。
- 以下我都把我用的這個路由器稱作為openwrt
修改openwrt路由器root密碼和端口
-
上述路由器的默認(rèn)帳戶和密碼是root砍聊,出于安全的需要,請把密碼改了
- 電信封了家庭用戶的80和8080端口贰军,如果你想在辦公室里修改家里路由器的設(shè)置玻蝌,請修改。
- 方法:在局域網(wǎng)環(huán)境下词疼,
ssh root@192.168.10.1
- windows下建議用xshell俯树,在此下載 ->Zdfans上的xshell下載
- linux下直接terminal
- 進(jìn)入 /etc/config后編輯 uhttp,
vi uhttp
贰盗,把兩個listen_http后面的端口改成800许饿。
config uhttpd 'main'
list listen_http '0.0.0.0:800'
list listen_http '[::]:800'
list listen_https '0.0.0.0:443'
list listen_https '[::]:443'
- 重啟路由
開啟openwrt的端口映射
- 首先要確定你的機(jī)器(下面統(tǒng)稱HTPC)的靜態(tài)IP
- 在web界面,網(wǎng)絡(luò)-防火墻-端口轉(zhuǎn)發(fā)里舵盈,增加以下幾條轉(zhuǎn)發(fā)到此靜態(tài)IP的規(guī)則
21->21:#For FTP
20->20:#For FTP
22->22:#For SSH remote login
443->443:#For Https
6800->6800:#For Aria2
6801->6801:#For Aria2
- 你們可以注意到?jīng)]有規(guī)則對80轉(zhuǎn)發(fā)或者轉(zhuǎn)發(fā)到80端口
開啟動態(tài)域名
- openwrt內(nèi)置動態(tài)域名解析功能陋率,可以在 changeip.com去申請,比如我申請了一個 testdomain.changeip.com秽晚,這樣在外網(wǎng)環(huán)境中結(jié)合上述端口映射瓦糟,可以直接對內(nèi)網(wǎng)中的HTPC進(jìn)行操作,安裝軟件赴蝇、修改服務(wù)菩浙、。
安裝samba和vsftp
- ssh到HTPC后自行安裝,并設(shè)置好目錄劲蜻,我 木木是把 三塊 HDD mount 到 /mnt目錄下陆淀,開啟對samba用戶和ftp用戶的訪問權(quán)。
- 我的samba的配置要用到圖形界面軟件
system-config-samba
斋竞,最好在htpc上直接用鍵盤操作倔约。
安裝mysql
sudo apt-get install mysql-server mysql-client
出人意料的NTFS權(quán)限問題
- 這個是歷史遺留問題:
我的三塊硬盤在放到htpc里時全是ntfs格式,上面都有數(shù)據(jù)坝初,不能無損轉(zhuǎn)成EXT4 - owncloud的存貯路徑是在其中一塊硬盤上浸剩,原來是直接mount到/mnt目錄下,在后面配置owncloud時指定存貯目錄時鳄袍,出現(xiàn)權(quán)限770問題
- 數(shù)據(jù)太多绢要,不能格盤,在owncloud的官方網(wǎng)站上找了好久拗小,找出是mount時出的 用戶權(quán)限分配問題时迫,后來通過修改 /etc/fstab 指定 mount時的uid等來解決
/dev/sdb5 /mnt/disk1 ntfs locale=zh_CN.UTF-8,uid=33,gid=33,dmask=007,windows_names 0 0
- 上面的uid=33,gid=33分別對應(yīng)遠(yuǎn)行nginx的用戶
www-data
和用戶組www-data
安裝nginx和php-fpm和mysql
- 請給你的mysql設(shè)置一個比較強(qiáng)的root密碼,并且為owncloud創(chuàng)建專有用戶
sudo apt-get install nginx
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0 php-fpm php-mysql php-mbstring
安裝phpmyadmin和owncloud
- 直接從網(wǎng)上下載誊垢,解壓到web服務(wù)目錄
- 我的web服務(wù)根目錄是
/home/test/www
- 改變目錄擁有者
sudo chown www-data -R /home/test/www
- 改變權(quán)限
sudo chmod 755 -R /home/test/www
- 配置phpmyadmin
- 拷貝原始配置文件
cd /home/test/www/phpmyadmin
cp config.sample.inc.php config.inc.php
vi /home/test/www/phpmyadmin/config.inc.php
- 配置
$cfg['blowfish_secret'] = '$#%#$%#$%#$^#^ETETR';
就是一個加密信息荸镊,越亂越好 - 配置另一個config文件
cd /home/test/www/phpmyadmin/libraries
vi config.default.php
- 同樣配置
$cfg['blowfish_secret']
- 其他用默認(rèn)
分別配置php7-fpm和php5-fpm
- 先裝的是php7-fpm,和新版phpmyadmin 配合的比較好阅束,但是和owncloud9.0不兼容
- 幸好php7-fpm里也有php5-fpm呼胚,經(jīng)過一番試驗后,可以分別配置兩個php的后臺運(yùn)行
- php7.0的 配置環(huán)境在 /etc/php/7.0/fpm里息裸,有php-fpm.conf和php.ini兩個重要的配置文件
- php.ini:
- 設(shè)置
short_open_tag = On
-
extension_dir = "/usr/lib/php/20151012"
蝇更,目錄通過catfish
搜索mysql.so
找到,用于安裝各種擴(kuò)展呼盆,應(yīng)該是apt-get install
時自動放入年扩。 - 開啟對mysql的支持:
extension=mysqli.so
,extension=pdo_mysql.so
- 設(shè)置''cgi.fix_pathinfo=0''
-
php-fpm.conf:
可以看到include=/etc/php/7.0/fpm/pool.d/*.conf
访圃,里面有www.conf
文件- 配置
listen
:listen = /run/php/php7.0-fpm.sock
厨幻,配置nginx時會用到 - 重啟php-fpm:
sudo service php7-fpm restart
- 配置
- php5的配置文件夾為
/etc/php5/fpm
,也是這兩個文件* php-fmp.conf和php.ini*兩個重要的文件
- php.ini
1. 設(shè)置 ```short_open_tag = On```
2. ``extension_dir="/usr/lib/php5/20121212"``腿时,注意和php7的不同克胳,估計也是編譯時生成
3. ``cgi.fix_pathinfo=1``,應(yīng)該是和owncloud有關(guān)的一個設(shè)置圈匆,否則會報錯漠另。
4. 各種extensions,有部分是和owncloud相關(guān)
```
extension=mysql.so
extension=mysqli.so
extension=pdo_mysql.so
extension=pdo.so
extension=json.so
extension=gd.so
extension=opcache.so
```
-
php-fpm.conf
可以看到include=/etc/php5/fpm/pool.d/*.conf
跃赚,里面有www.conf
文件笆搓,找listen參數(shù):listen = /var/run/php5-fpm.sock
nginx開啟https性湿,兩種方案
owncloud9.0強(qiáng)制要求https服務(wù),需要對自己web站進(jìn)行認(rèn)證满败,實際中我試過兩種方案肤频,最后用的是第一種方案
-
用自簽名的SSL證書
- 采用自驗證方案,借用廖雪峰大神的腳本給Nginx配置一個自簽名的SSL證書
- 運(yùn)行這個腳本后算墨,把生成的key文件和crt文件復(fù)制到
/etc/nginx/ssl/
目錄宵荒,
如/etc/nginx/ssl/testdomain.changeip.com.crt
和/etc/nginx/ssl/testdomain.changeip.com.key
配置nginx時要用到
或者你直接在后面寫nginx文件時指向這兩個文件
-
用letsencypt加密自己的服務(wù)器
- 被大牛吐槽自授權(quán)是錯誤的價值觀,在他的建議下?lián)Q成 Let’s Encrypt(是一個免費(fèi)净嘀、自動化报咳、開放的證書頒發(fā)機(jī)構(gòu),由網(wǎng)絡(luò)安全研究小組運(yùn)作)的免費(fèi)授權(quán)系統(tǒng)挖藏,主要參考了Let's Encrypt SSL證書配置和折騰Let‘s Encrypt免費(fèi)SSL證書
- 下載安裝
git clone https://github.com/certbot/certbot.git
cd certbot
./letsencrypt-auto --help
- 生成密鑰暑刃,在這之前要停止nginx
./letsencrypt-auto certonly -d testdomain.changip.com -m testdomain@gmail.com
- 這樣,會生成
/etc/letsencrypt/live/testdomain.changeip.com/fullchain.pem
/etc/letsencrypt/live/testdomain.changeip.com/privkey.pem
兩個文件膜眠,不用移動位置 - 生成2048位 DH parameters:
sudo openssl dhparam -out /etc/nginx/ssl/dhparams.pem 2048
- 美中不足的是岩臣,這種方案只有90天的有效期,要到時候運(yùn)行腳本renew
owncloud
- 前面已經(jīng)提到了很多owncloud的配置宵膨,都為實踐中一一摸索得來架谎,主要有
- 專用mysql用戶
- https證書
- php.ini配置
- 文件夾權(quán)限
- 端口映射
- 特別要強(qiáng)調(diào),要把owncloud的數(shù)據(jù)文件目錄的用戶改成 www-data辟躏,權(quán)限也要改770
aria2和yaaw
- aria2可以apt-get安裝或者編譯安裝谷扣,參考網(wǎng)上教程,至少能安裝到1.19版本
- yaaw下載后直接解壓縮到/home/kodi/yaaw下
- aria2的教程網(wǎng)上很多鸿脓,我這里貼出我的配置,放在~/.aria2/aria2.conf里
rpc-secret=secret #token加密方式
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-listen-port=6800#nginx里有個轉(zhuǎn)發(fā)到這個端口的設(shè)置
rpc-secure=true
rpc-certificate=/etc/letsencrypt/live/testdomain.changeip.com/fullchain.pem
rpc-private-key=/etc/letsencrypt/live/testdomain.changeip.com/privkey.pem
max-concurrent-downloads=5
continue=true
max-connection-per-server=5
min-split-size=10M
split=10
max-overall-download-limit=3M
max-download-limit=0
max-overall-upload-limit=256K
max-upload-limit=0
dir=/mnt/disk2/Downloads
disk-cache=32M
file-allocation=prealloc
input-file=/home/kodi/.aria2/aria2.session
save-session=/home/kodi/.aria2/aria2.session
- 在配置yaaw是關(guān)鍵一步涯曲,在
setting
后野哭,要把JSON-RPC Path
設(shè)置成
https://token:secret@testdomain.changeip.com:6801/jsonrpc #請注意https和6801
nginx配置
- 這一步配的頭大,后來參考了owncloud官方配置文件才寫出來
- 實際使用過程中又進(jìn)行了不斷的調(diào)整
- 你們可以注意到有個對 6801進(jìn)行ssl加密又轉(zhuǎn)發(fā)到6800端口的配置 幻件,這是為了讓yaaw在全站加密的情況下拨黔,突破aria2c的server對https的兼容性問題
- 要解釋的東西太多了,有些我還看不懂绰沥,以后一一寫來
upstream php5-handler {
server unix:/var/run/php5-fpm.sock;
}
upstream php7-handler {
server unix:/run/php/php7.0-fpm.sock;
}
server{
listen 6801 ssl;
server_name testdomain.changeip.com;
ssl_certificate /etc/letsencrypt/live/testdomain.changeip.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/testdomain.changeip.com/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:6800;
}
}
server {
listen 443 ssl;
server_name testdomain.changeip.com 192.168.10.150;
ssl_certificate /etc/letsencrypt/live/testdomain.changeip.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/testdomain.changeip.com/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
# Path to the root of your installation
root /home/kodi/www/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location /luci{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://192.168.10.1;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /owncloud/public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /owncloud/public.php?service=host-meta-json last;
location = /.well-known/carddav { return 301 $scheme://$host/owncloud/remote.php/dav; }
location = /.well-known/caldav { return 301 $scheme://$host/owncloud/remote.php/dav; }
location /.well-known/acme-challenge { }
location ^~ /phpmyadmin{
location /phpmyadmin{
server_name_in_redirect off;
index index.php;
}
location ~ ^/phpmyadmin/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/phpmyadmin/(?:\.|autotest|occ|issue|indie|console) {
deny all;
}
location ~ "^\/phpmyadmin\/.*\.php$" {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_param front_controller_active true;
fastcgi_pass php5-handler;
fastcgi_intercept_errors on;
# fastcgi_request_buffering off;
}
location ~ "^\/phpmyadmin\/.*\.\(htm|html|gif|jpg|png|js|css\)$" {
root /home/kodi/www;
}
}
location ^~ /owncloud {
# set max upload size
client_max_body_size 51200M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location /owncloud {
rewrite ^ /owncloud/index.php$uri;
}
location ~ ^/owncloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/owncloud/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/owncloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_param front_controller_active true;
fastcgi_pass php5-handler;
fastcgi_intercept_errors on;
# fastcgi_request_buffering off;
}
location ~ ^/owncloud/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
try_files $uri /owncloud/index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /owncloud/index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
}