阿里云ubuntu16.04/18.04基于oss搭建nextcloud私人网盘
一、搭建LAMP环境
搭建过程中需要的一些必须的安装包,对着这篇博客做就没有问题。没有积分的下方评论区找我。
1、安装apache
可以先更新一下服务器
sudo apt-get update # 获取最新资源包
sudo apt-get upgrade # 本机软件全部更新
sudo apt-get dist-upgrade # 本机系统软件更新
安装Apache
sudo apt install apache2 -y
检查是否开启Apache,一般安装完会默认开启。
systemctl status apache2
顺带讲一下apache的关闭 启动 和重启
service apache2 stop
service apache2 start
service apache2 restart
现在开始访问你的 web 服务器,打开浏览器并输入服务器的IP地址或者主机名(http://IP_Address_OR_Host_Name)
2、数据库服务器的安装 (MySQL Server 5.7或者MariaDB,选择其中一种即可,这里我选择安装mysql5.7)
sudo apt install mysql-server mysql-client
在安装过程中,它会要求你设置 mysql 服务器 root 帐户的密码以及确认 root 帐户的密码
安装成功之后我们查看一下mysql的状态
sudo netstat -tap | grep mysql
当然了,我们还需要打开mysql的远程连接(重要!)
登陆mysql mysql -u root -p 进入数据库,选择mysql表,将host只能本地访问的 localhost 改为 %
update user set host="%" where user="root";
刷新授权设置
flush privileges;
然后再授权设置
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
接下来,查看3306端口是否被开放
root@iZwz956snfyrvah6yq8sa4Z:~# netstat -an | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
注意:现在3306端口只能被本地访问(127.0.0.1)。修改mysql配置文件,我这里的文件路径是/etc/mysql/mysql.conf.d/mysqld.cnf
vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到
bind-address = 127.0.0.1
在前面加上 #号,将它注释掉,重启MySQL。
service mysql restart
再次查看3306端口
root@iZwz956snfyrvah6yq8sa4Z:~# netstat -an | grep 3306
tcp6 0 0 :::3306 :::* LISTEN
然后就可以用navicat等远程工具连接阿里云服务器的mysql了。
3、PHP 脚本语言的安装:
在终端中执行如下的命令来安装 PHP 7.2:
sudo apt install php7.2-mysql php7.2-curl php7.2-json php7.2-cgi php7.2 libapache2-mod-php7.2
测试PHP,查看版本:
php --version
输出php基本信息
vim /var/www/html/phpinfo.php
写入如下
<?php echo phpinfo();?>
现在可以从 浏览器中访问这个页面, 输入 : “http://Server_IP/phpinfo.php” ,Server_IP是你服务器的ip,(ip通过ifconfig命令查看)可以看到如下页面
4、phpMyAdmin 的安装(可选,主要可以通过它的 web 界面来执行所有与数据库管理和其他数据库操作相关的任务,有navicat基本上就可以,但是为了补全教程,我们还是安装一下吧):
sudo apt install php-mbstring php7.2-mbstring php-gettext
sudo systemctl restart apache2.service
sudo apt install phpmyadmin
选择 Apache2 并点击确定。
点击确定来配置 phpMyAdmin 管理的数据库。
指定 phpMyAdmin 向数据库服务器注册时所用的密码。
指定 phpMyAdmin 向数据库服务器注册时所用的密码。
现在开始尝试访问 phpMyAdmin,打开浏览器并输入 : “http://ip/phpmyadmin”
注意:phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
至此,你的环境准备工作就完成了!
二、安装nextcloud
1、首先找到阿里云免费的nextcloud的镜像源,这个比较麻烦,所以我就直接在官网下载了一个nextcloud的源码包,将其上传到服务器的web根目录下面。
2、安***r> 这里我们说一下,因为这个源码包是.zip文件,所以我们不能用常见的tar -zxvf ----------。这里安装一个可以解压.zip文件的工具。
apt-get install unzip
unzip /你的资源包路径/nextcloud.zip
之后我们浏览器输入
ip/nextcloud
出现了
可能还会显示其他模块为安装吧,是因为nextcloud是基于LAMP环境的,并且需要很多的php模块扩展,直接安装php时候并没有安装这些扩展。(这里补充一下,php版本最好用7.0和7.2的,因为我开始的时候试过5.6,报版本低,卸载重装,7.3报错,最后知道版本高了,又试了一下7.0和7.3的就行了,真的是浪费了很多时间。其中具体原因有待深究,为了不引起不必要的麻烦还是按我说的去做吧)
sudo apt-get install php7.2-bcmath
sudo apt-get install php7.2-bz2
sudo apt-get install php7.2-calendar
sudo apt-get install php7.2-ctype
sudo apt-get install php7.2-curl
sudo apt-get install php7.2-dom
sudo apt-get install php7.2-enchant
sudo apt-get install php7.2-exif
sudo apt-get install php7.2-fileinfo
sudo apt-get install php7.2-ftp
sudo apt-get install php7.2-gd
sudo apt-get install php7.2-gettext
sudo apt-get install php7.2-gmp
sudo apt-get install php7.2-iconv
sudo apt-get install php7.2-intl
sudo apt-get install php7.2-json
sudo apt-get install php7.2-ldap
sudo apt-get install php7.2-mbstring
sudo apt-get install php7.2-mysqli
sudo apt-get install php7.2-mysqlnd
sudo apt-get install php7.2-opcache
sudo apt-get install php7.2-pdo
sudo apt-get install php7.2-phar
sudo apt-get install php7.2-posix
sudo apt-get install php7.2-pspell
sudo apt-get install php7.2-readline
sudo apt-get install php7.2-shmop
sudo apt-get install php7.2-simplexml
sudo apt-get install php7.2-snmp
sudo apt-get install php7.2-soap
sudo apt-get install php7.2-sockets
sudo apt-get install php7.2-sqlite3
sudo apt-get install php7.2-sysvmsg
sudo apt-get install php7.2-sysvsem
sudo apt-get install php7.2-sysvshm
sudo apt-get install php7.2-wddx
sudo apt-get install php7.2-xml
sudo apt-get install php7.2-xsl
sudo apt-get install php7.2-recode
sudo apt-get install php7.2-dba
sudo apt-get install php7.2-imap
sudo apt-get install php7.2-interbase
sudo apt-get install php7.2-odbc
sudo apt-get install php7.2-pgsql
sudo apt-get install php7.2-tidy
sudo apt-get install php7.2-zip
自行对照安装吧!
现在我们再访问一下nextcloud吧
哈哈哈,是不是感觉到很无奈?没事,解决方法我给你找到了,是因为文件夹权限设置的不到位。网上找了很多的方法比如加脚本,直接将nextcloud文件夹权限设置为777。都是不适用的,可能因为他们的教程时间太久了吧,不太适用了,为此又浪费了我不少时间。最终解决办法…
创建一个 /etc/apache2/sites-available/nextcloud.conf 文件 内容如下,其中 /var/www/html/nextcloud/ 为你待会nextcloud放置的网站目录
Alias /owncloud "/var/www/html/nextcloud/"
<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
然后创建一个符号链接/etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf
将您自己的nextcloud目录的所有权暂时更改为HTTP用户
chown -R www-data:www-data /var/www/html/owncloud/
重启Apache使生效
service apache2 restart
然后再访问看一下
停停停! 这里我们需要配置这些东西,因为我们要将这个存储目录挂载到阿里云oss上面,实现数据的实时同步!
三、阿里云 OSS文件存储挂到云服务器ESC文件系统中
ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享。
使用限制
ossfs使用有以下限制:
不支持挂载归档型Bucket。
编辑已上传文件会导致文件被重新上传。
元数据操作,例如list directory,因为需要远程访问OSS服务器,所以性能较差。
重命名文件/文件夹可能会出错。若操作失败,可能会导致数据不一致。
不适合高并发读/写的场景。
多个客户端挂载同一个OSS Bucket时,数据一致性由您自行维护。例如,合理规划文件使用时间,避免出现多个客户端写同一个文件的情况。
不支持hard link。
主要功能
ossfs基于s3fs构建,具有s3fs的全部功能。其中包括:
支持POSIX 文件系统的大部分功能,包括文件读写、目录、链接操作、权限、uid/gid、以及扩展属性(extended attributes)。
使用OSS的multipart功能上传大文件。
支持MD5校验,保证数据完整性。
怎么创建的我就不说了,网上一搜一串。
然后找到Bucket的accesskey,点右上角头像你就看到了!
下面我们需要 bucketname accesskeyid accesskeysecret 这三个参数
ossfs Linux发行版下载,这里我就不说其他版本的下载地址了,上传一下ubuntu16.04和ubuntu18.04两个版本的吧,下载下来随便放在你服务器的哪个目录下面都可以! oaafs+nextcloud15
对于ubuntu安装的命令:
sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi 你的文件路径+你的文件名
对于centos5以上的安装命令:
sudo yum localinstall 你的文件路径+你的文件名 --nogpgcheck
对于CentOS5,安装命令为:
sudo yum localinstall 你的文件路径+你的文件名 --nogpgcheck
设置bucket name 和 AccessKeyId/Secret信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置,建议设为640。
echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
将OSS bucket mount到指定目录。
ossfs my-bucket my-mount-point -ourl=my-oss-endpoint
这里我要说明一下! 防止很多不必要的错误发生!
这个my-mount-point指的是Bucket的地域节点,网上基本上都是用内网节点,唯一的好处就是流量免费,但是不会发现会挂载很慢甚至挂载不上去。所以我们还是用外网节点吧
所以在这里:
ossfs aliyun-chengdu /usr/ossfiles -ourl=http://oss-cn-chengdu.aliyuncs.com -ouid=33 -ogid=33 -oumask=007 -o allow_other
这里再次注意!
/usr/ossfiles指的是挂载的指定目录,这里我们选择nextcloud的数据文件目录吧。 -ourl = *************后面接的参数, 网上以及官方文档说的基本都是直接设置成权限777,即 ossfs aliyun-chengdu /usr/ossfiles -ourl=http://oss-cn-chengdu.aliyuncs.com -o allow_other。其实这是不对的,这样做确实可以实现任何用户都可以将数据存储到nextcloud的数据文件夹里面,但是之后你就会接收到这样的一个错误
看吧!还是权限问题,将权限设置的太开放了。
早在官方文档中就看到正确的权限设置为770。及所有者和用户组可以对文件进行读取写入和执行。但是,仅仅是直接简单的设置成770吗?显然不是的?因为如果你设置成770了?其他用户怎么进行写入和读取呢?
好的!
后来,我又继续查阅官方文档以及百度各种社区和论坛,解决办法基本上都是千篇一律的雷同,可见,天下文章大家抄啊!参考一下下面的文档,我就不多说了,实际证明显然是有问题的。
最后找了很多资料终于找到了一个合适的正确的挂载方法
应用于nextclou使用oss挂载。因nextclou对附件目录权限需使用770权限,估我们使用-oumask=007来修改默认的777权限。
ossfs aliyun-chengdu /usr/ossfiles -ourl=http://oss-cn-chengdu.aliyuncs.com -ouid=33 -ogid=33 -oumask=007 -o allow_other
最后我们再一次
当然了,还有很多问题的出现!就不在这里一一例举了,总之,有问题就解决,花时间就是了!总会有办法的!
现在我们来验证一下是否挂载成功了吧!
可以看到确实是成功的!下面我们上传一个文件测试一下呗
至此全部完成!