阿里云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、安装
这里我们说一下,因为这个源码包是.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了?其他用户怎么进行写入和读取呢?
好的!
后来,我又继续查阅官方文档以及百度各种社区和论坛,解决办法基本上都是千篇一律的雷同,可见,天下文章大家抄啊!参考一下下面的文档,我就不多说了,实际证明显然是有问题的。

阿里云ossfs挂载官方文档

最后找了很多资料终于找到了一个合适的正确的挂载方法

应用于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

最后我们再一次
当然了,还有很多问题的出现!就不在这里一一例举了,总之,有问题就解决,花时间就是了!总会有办法的!
在这里插入图片描述
在这里插入图片描述

现在我们来验证一下是否挂载成功了吧!
在这里插入图片描述
在这里插入图片描述
可以看到确实是成功的!下面我们上传一个文件测试一下呗
在这里插入图片描述
至此全部完成!

发布了69 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40985788/article/details/103167226