Ubuntu+ownCloud搭建私有云教程

本文简单介绍了Ubuntu环境下,搭建ownCloud私有云的详细过程。为什么选择ownCloud而不是Seafile呢,因为Seafile的所有数据文件在服务器上都是进行了切割和整合存储的,而ownCloud则是将文件原样保存在服务器上,也就是说,如果别人能访问你的主机,可以绕过ownCloud直接查看你私有云的文件。如果你对安全性的要求较高,就选择Seafile;而我比较在意的是,如果系统崩溃了,或者换服务器了,可以比较方便的将所有文件迁移或直接导出来,所以我选择ownCloud。

搭建内网云

  1. 首先,得有一个能装Ubuntu的电脑,但先不要选择和安装Ubuntu。

  2. 访问:ownCloud下载,在页面上选择Ubuntu(或其他系统),根据下面列出的系统版本选择Ubuntu的版本,到Ubuntu官网下载相应版本,并安装,安装是建议单独分一个较大的区挂在/home。另外,建议后续所有要输入密码的地方,都与Ubuntu的管理员密码保持一致。

  3. 安装ssh服务端(不装的话只是没法用ssh连接服务器进行远程而已,仍旧可以在服务器进行配置)

1
2
sudo apt update
sudo apt install openssh-server
  1. 安装vim
1
sudo apt install vim
  1. 安装并启动Apache2
1
2
3
4
5
6
7
sudo apt update
sudo apt install apache2 -y

// 启动Apache2
sudo systemctl start apache2.service
sudo systemctl enable apache2.service
sudo systemctl status apache2.service // 用:q退出

如果你开启了 Ubuntu 的防火墙(ufw),那么你可以使用如下的命令来解除 web 服务器的端口(80和443)限制

1
2
3
4
5
sudo ufw status
=> Status: active // 状态为不活动时,无需继续执行后续指令
sudo ufw allow in 'Apache Full'
=> Rule added
=> Rule added (v6)

打开浏览器,输入 (http://服务器IP),能访问到Apache2的默认页面,说明Apache2安装成功。

  1. 安装MySql
1
sudo apt install mysql-server mysql-client

安装过程中会要求你设置mysql的root密码,设置完成后,可以执行下列命令查看MySql状态:

1
sudo systemctl status mysql.service
  1. MariaDB Server安装
1
sudo apt install mariadb-server

运行如下的命令来设置 MariaDB root 帐户的密码,中间会让你作几个选择,比如是否关闭远程登录功能。

1
sudo mysql_secure_installation
  1. PHP 脚本语言的安装
1
sudo apt install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0

安装phpMyAdmin

1
2
3
sudo apt install php-mbstring php7.0-mbstring php-gettext
sudo systemctl restart apache2.service
sudo apt install phpmyadmin

安装过程中,它会提示我们选择 phpMyAdmin 运行的目标服务器,选择 Apache2 并点击确定。还需要设置phpMyAdmin向数据库服务器注册时所用的密码。

然后可以开始尝试访问 phpMyAdmin,打开浏览器并输入:http://服务器IP/phpmyadmin ,使用我们安装时设置的 root 帐户和密码,可以访问phpMyAdmin。

至此,LAMP全部安装完成。

  1. 安装ownCloud

    在刚才的ownCloud下载,一般会有两种标题以供选择,执行不带files字样命令

    Ubuntu_16.04 owncloud-9.1.3-1.1 <== 执行这个下面的命令

1
2
3
4
5
6
7
8
9
wget -nv https://download.owncloud.org/download/repositories/stable/Ubuntu_16.04/Release.key -O Release.key

sudo apt-key add - < Release.key

sudo sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/Ubuntu_16.04/ /' > /etc/apt/sources.list.d/owncloud.list"

sudo apt-get update

sudo apt-get install owncloud

Ubuntu_16.04 owncloud-files-9.1.3-1.1 <== 这个无视

1
......
  1. 配置MySql数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 登录mysql
sudo mysql -u root -p

// 输入密码

// 创建owncloud专用库
CREATE DATABASE owncloud;

// 创建一个单独的MySQL用户帐户owncloud
GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY '密码';

/**
* 如果上面脑抽直接复制语句执行了,导致owncloud的密码设置为"密码",就用root登录mysql后,用下面的命令修改密码
* USE mysql
* UPDATE user SET password = password(”新密码”) WHERE user = “owncloud”;
* FLUSH PRIVILEGES;
*/

FLUSH PRIVILEGES;

exit
  1. 初始化ownCloud,在浏览器输入
1
http://服务器IP/owncloud

应当会跳出一个管理界面,在界面上输入:

1
2
3
4
5
6
7
8
9
10
用户名:按需设置
密码:按需设置

数据目录:/var/www/owncloud/data

配置数据库:
用户名:owncloud
密码:******
数据库名:owncloud
地址:localhost
  1. 修改数据存储位置

    停止apache2

1
service apache2 stop    // 需要输入密码

在/home/tyrival下创建owncloud用于存储数据,这就是第2步单独挂载/home的原因

1
2
cd /home/tyrival
mkdir owncloud

编辑owncloud配置文件

1
sudo vim /var/www/owncloud/config/config.php

修改配置文件

1
2
3
4
5
'datadirectory' => '/var/www/owncloud/data'
改为
'datadirectory' => '/home/tyrival/owncloud'

// :wq 保存退出

查看原始文件夹/var/www/owncloud/data权限,所有者和组通常都为www-data,将其修改为系统用户

1
sudo chown -R tyrival:tyrival /var/www/owncloud/data

进入此文件夹,将其中所有的文件复制到/home/tyrival/owncloud中,包括隐藏文件.htaccess和.ocdata,然后修改目标文件夹所有者和权限

1
2
sudo chown -R www-data:www-data /home/tyrival/owncloud
sudo chmod 770 /home/tyrival/owncloud // 修改后无法访问

启动apache2

1
service apache2 start    // 需要输入密码

至此,数据文件夹修改完成。

  1. 浏览器访问: http://服务器IP/owncloud,登录后,点击右上角的用户名,选择“管理”,然后选择左侧菜单“文件处理”,可以修改上传文件的最大限制,通常我设置为10240 MB。

  2. 内网云搭建完成。

搭建外网云

由于使用的是ADSL,ip是动态的,所以希望能动态获取ip并进行解析,国内最有名的花生壳又不是很稳定,现在阿里云开放了API,有人已经写了个动态域名解析工具出来,而且是跨平台的,直接配置下就能用。步骤如下:

  1. 首先得有一个带端口转发功能的路由器,否则外网访问你的ip只能访问到路由器,无法穿透到内网中访问到云服务器,除非你直接把云服务器接在电信的modem上拨号。

  2. 先到阿里云注册账号,申请域名,现在域名一年的费用是60,新注册还能便宜点。

  3. 进入阿里云的管理界面,选择左侧的“域名与网站”—“云解析DNS”,勾选注册的域名,选择“添加解析”:

    记录类型:A

    主机记录:www或者其他子域名,如cloud

    记录值:随便写一个

    解析线路和TTL默认不改

    点击“添加”,完成。

  4. 回到刚才的云解析DNS界面,右上方有个AccessKeys,进入后选择”创建Access Key“,然后根据手机验证创建一个Key,将Access Key ID和Access Key Secret记录下来,一会要用到。

  5. 安装git

1
sudo apt install git
  1. 安装和配置阿里云ddns客户端
1
2
3
4
5
6
7
8
9
cd /opt
sudo git clone https://github.com/rfancn/aliyun-ddns-client.git

// 拷贝配置文件到指定位置
cd aliyun-ddns-client/
sudo cp ddns.conf.example /etc/ddns.conf

//编辑配置文件
sudo vim /etc/ddns.conf
1
2
3
4
5
6
7
8
9
10
11
12
[DEFAULT]
access_id = ABC******XYZ // 第3步的Access Key ID
access_key = aaabbb*********YYYZZZ // 第3步的Access Key Secret
interval = 600 // 默认
debug = true // 默认

[DomainRecord1]
domain = tyrival.com // 第2步注册的域名
sub_domain = www // 第2步填写的www等子域名
type = A // 第2步的记录类型
id = // 空着
value = // 空着

按ESC,然后:wq保存退出。

  1. 由于ddns客户端需要用到python,可能要安装如下依赖包:
1
2
3
4
5
6
7
// 安装pip——python包管理工具<可选择>
sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip
sudo pip install --upgrade virtualenv

// 安装requests依赖包
pip install requests
  1. 执行ddns客户端同步
1
2
3
4
sudo python /opt/aliyun-ddns-client/ddns.py

// 第一次运行可能会报错[ERROR] You must specify domain record id.如果报这个错,再执行一次试试看。
****[INFO] Successfully sync done for record:DomainRecord1

执行完后,到云DNS解析那里看看,刚才随便写的ip应该被修改成了你的真实ip。

  1. 利用Ubuntu的任务管理来实现域名动态解析
1
sudo crontab -e

我们在文件内容末尾追加一行,输入:

1
*/1 * * * * cd /opt/aliyun-ddns-client && /usr/bin/python ddns.py

表示每隔1分钟进行一次刚才的刷新,至此,动态域名解析完成。

  1. 通常,我们使用的ADSL是带路由器的,外网访问你的ip,也只能到路由器,无法具体找到内网中的电脑,所以需要在路由器上设置一个端口转发规则:
1
2
3
4
5
6
协议:TCP或者全部
IP:云服务器的内网IP
外部端口:8090或者其他
内部端口:80 <== 这个取决于你的Apache2服务监听的端口,如果没改过就是80

// 另外可以顺便建立外部映射到云服务器,外网端口和内网端口都为22的ssh映射,方便在外网连接云服务器

这里需要注意的是外部端口,因为未备案的网站的80端口是被国家全部封掉的,443和8080可能也是封掉的,所以这三个端口就不要用于外部端口了,自定义一个8090这种可用的端口。

  1. 至此,外网云搭建完成,等上一会儿,最多估计10分钟左右,就可以通过域名访问你的云服务了。
1
http://www(第3步中的子域名).你的域名.com:8090(第10步中的外部端口)/owncloud
  1. 可选步骤:如果第10步中,你希望指向一个非80端口,那就需要修改Apache的端口,记得和第10步的内网端口一致
1
2
3
sudo vim /etc/apache2/sites-available/000-default.conf

// <VirtualHost *:80>改成<VirtualHost *:你想要的端口>,然后保存退出。
1
2
3
sudo vim /etc/apache2/ports.conf

// Listen 80改成Listen 你想要的端口,然后保存退出。
1
service apache2 restart    // 重启apache服务
  1. 可选步骤:使用HTTPS加密,这个需要

    安装签名工具

1
2
3
4
5
6
7
cd /home/tyrival

git clone https://github.com/Neilpang/acme.sh.git

cd ./acme.sh

sudo ./acme.sh --install

生成证书

1
2
3
4
5
6
7
sudo ./acme.sh --issue --dns -d 你的域名.com

==> Registering account
==> *********
==> Domain: '_acme-challenge.你的域名.com'
==> TXT value: '_AAABBB*********YYYZZZ'
==> *********

记住Domain和TXT Value到刚才的阿里云DNS解析那里,新增一个解析

1
2
3
记录类型:TXT
主机记录:'_acme-challenge.你的域名.com'
记录值:'_AAABBB*********YYYZZZ'

申请证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sudo ./acme.sh --renew -d 你的域名.com

// 成功的话会有如下提示
*** Renew: '你的域名.com'
*** Single domain='你的域名.com'
*** Getting domain auth token for each domain
*** Verifying:你的域名.com
*** Success
*** Verify finished, start to sign.
*** Cert success.
-----BEGIN CERTIFICATE-----
MIIE+jCCA+KgAwIBAgISA1yIkeGmdcR3mWQ1mDRuGpYwMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
************
0tofB/V66BhMtw+BzwUNk/brmy2iuA6mdoiGOaS5rxlv/rsRlFgba5mKLwOhuLvo
bNVG4y1lNAQ1m17QYdfPMtUFpfiO6e+xyuiownBoJWcWs1TnCx7k6J36ICLyljuB
xjeDoZFiVBewn4iapjQB98E6J77wfMEttlunqslS
-----END CERTIFICATE-----
*** Your cert is in /home/***/.acme.sh/***.com/***.com.cer
*** Your cert key is in /home/***/.acme.sh/***.com/***.com.key
*** The intermediate CA cert is in /home/***/.acme.sh/***.com/ca.cer
*** And the full chain certs is there: /home/***/.acme.sh/***.com/fullchain.cer

记录倒数第3、4行中,in后面的信息。

安装证书,首先要看存放证书的位置,然后把证书复制过去

1
2
3
4
5
sudo vim /etc/apache2/sites-available/default-ssl.conf

// 找到下面两行
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

:q退出,然后把证书和私钥复制进去,证书为钢材倒数第4行,私钥为倒数第3行

1
2
sudo cp /home/***/.acme.sh/***.com/***.com.cer /etc/ssl/certs/ssl-cert-snakeoil.pem
sudo cp /home/***/.acme.sh/***.com/***.com.key /etc/ssl/private/ssl-cert-snakeoil.key

安装openssl

1
2
3
4
apt install openssl

// 开启ssl模块
sudo a2enmod ssl

修改https默认路径

1
2
3
4
sudo vim /etc/apache2/sites-available/default-ssl.conf

// 改成下面值的
DocumentRoot /var/www/owncloud

启用https:上文安装完后,会在 /etc/apache2/sites-available/ 目录下生成一个缺省的 default-ssl 文件。缺省的网页目录仍然是 /var/www/ 。我们可以创建一个链接到 site-enabled 目录。

1
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

重启apache服务

1
service apache2 restart

然后到路由器配置下映射到云服务器的443端口,https加密完成。

分享到