亚马逊AWS官方博客

手把手教你如何部署企业级云存储网盘

Nextcloud 是一个开源的、功能强大的云存储网盘项目。它提供了一个安全和灵活的解决方案,允许用户共享一个或多个文件和目录,并与Nextcloud服务器同步。

部署演示

我们会使用快速入门的“Ubuntu Server 18.04 LTS”系统镜像部署并运行Nextcloud,接着我们会配置NextCloud的LDAP应用程序以允许活动目录(Active Directory)的用户登陆并使用Nextcloud,并将用户的工作目录设置到Amazon EFS文件系统,同时挂载S3存储桶作为共享盘。本次部署需要准备的前提条件包括:

-Amazon EC2 实例

-Ubuntu Server 18.04 LTS

-Nextcloud

-AWS Directory Service

-Amazon EFS文件系统

-S3 存储桶

安装Nextcloud

在AWS EC2控制台上点击启动实例,然后从快速入门中选择“Ubuntu Server 18.04 LTS”系统镜像,选择c5.large或更高配置的实例类型启动实例。实例启动后使用密钥登陆Ubuntu系统。

步骤一:安装LAMP

sudo apt update
sudo apt-get install apache2 mariadb-server libapache2-mod-php7.2 php7.2-gd php7.2-json php7.2-mysql php7.2-curl php7.2-mbstring php7.2-intl php-imagick php7.2-xml php7.2-ldap php7.2-zip

 

安装完成后,检查服务是否已经启动和启用了自动启动。

systemctl status apache2
systemctl status mariadb
systemctl is-enabled apache2
systemctl is-enabled mariadb

注意:如果没有启动或者没有启用自动启动,使用下面的命令启动并启用自动启动。

sudo systemctl start apache2
sudo systemctl start mariadb
sudo systemctl enable apache2
sudo systemctl enable mariadb

步骤二:安装MariaDB

sudo mysql_secure_installation

回答提示问题:

为 root 输入当前密码(默认是没有,回车即可)

Enter current password for root (enter for none):

是否设置root密码(建议设置一个复杂的安全密码)

Set root password? [Y/n] y

是否删除匿名用户

Remove anonymous users? [Y/n] y

是否禁止远程登陆

Disallow root login remotely? [Y/n] y

是否删除自带的test测试数据库

Remove test database and access to it? [Y/n] y

是否重新加载权限表

Reload privilege tables now? [Y/n] y

步骤三:配置Nextcloud数据库

确保数据库完成安装之后,登陆数据库:

sudo mysql -u root -p

运行以下 sql 命令,请注意使用您的密码替换以下命令中的“PASSWORD”。

MariaDB [(none)]> CREATE DATABASE nextcloud; 
MariaDB [(none)]> CREATE USER ncadmin@localhost IDENTIFIED BY 'PASSWORD'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.*  TO ncadmin@localhost IDENTIFIED BY 'PASSWORD'; 
MariaDB [(none)]> FLUSH PRIVILEGES; 
MariaDB [(none)]> EXIT;

步骤四:配置 Nextcloud

从Nextcloud官方网站(点击查看)下载最新版本的Nextcloud:

sudo wget -c https://download.nextcloud.com/server/releases/nextcloud-20.0.1.zip

解压并复制到web服务器的根目录下,并设置所有权:

sudo unzip nextcloud-18.0.0.zip
sudo cp -r nextcloud /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud

 

为 Nextcloud 创建一个 Apache 配置文件:

sudo cat <<EOF > /etc/apache2/sites-available/nextcloud.conf
Alias /nextcloud "/var/www/html/nextcloud/"

<Directory /var/www/html/nextcloud/>
  Require all granted
  Options FollowSymlinks MultiViews
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www//html/nextcloud
 SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
EOF

 

启用新的配置和模块:

sudo a2ensite nextcloud.conf
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime

重新启动 Apache2服务,使更改生效:

sudo systemctl restart apache2

 

步骤五:通过图形向导完成Nextcloud的安装

在开始配置之前,我们还需要将TCP端口80的入站规则添加到安全组,并将该安全组与实例相关联。如果使用HTTPS,还需要将TCP端口443的入站规则添加到安全组。

打开浏览器,指向以下地址: http://IP/nextcloud/

安装向导加载后,创建一个Nextcloud管理员帐户。输入用户名和密码,并配置数据库。


安装完成后,您将看到以下窗口。单击将出现在蓝色窗口右侧的向前箭头继续并按照提示进行操作。


然后在下一个窗口中,单击Start Using Nextcloud开始使用。

步骤六:配置 S3存储桶为外部存储

Amazon S3提供99.999999999% 的持久性,提供了一个高度扩展、高持久性和高可用的分布式数据存储服务。Nextcloud完全兼容 S3 的 API 接口,可以很容易地将S3存储桶挂载为外部存储。在开始配置之前,我们需要创建一个S3存储桶和一个可以编程方式访问该存储桶的IAM用户。如果使用已经存在的S3存储桶和IAM用户,可以跳到Nextcloud配置外部存储。

登陆S3控制台,创建一个存储桶,详见官方文档

登陆IAM控制台,从访问管理菜单中单击策略,创建策略。

JSON内容如下,请将nextcloud更改为您的存储桶名字。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws-cn:s3:::nextcloud",
                "arn:aws-cn:s3:::nextcloud/*"
            ]
        }
    ]
}


从访问管理菜单中单击用户,添加用户。

附加刚刚创建的策略

下载密钥文件

点击右上角的Admin用户图标,选择Apps

点击搜索框图标,搜索 “External storage support“,在单击External storage support的Enable按钮启用

启用后,点击Admin用户图标,选择Settings

单击左边Administration菜单下的External storages

下图是配置宁夏区域S3存储桶的示例。如果是配置海外区域的S3存储桶,请参考官方文档

宁夏区域S3的主机名是 s3---cn-northwest-1.amazonaws.com.rproxy.goskope.com.cn

北京区域S3的主机名是 s3---cn-north-1.amazonaws.com.rproxy.goskope.com.cn

配置完成后,单击左上方的文件夹图标,选择“All files”,可以看到我们刚刚配置的S3存储桶。

步骤七:配置 LDAP

在配置LDAP之前,我们需要创建一个活动目录。如果使用已经存在的活动目录,可以跳到Nextcloud配置LDAP。

参考文档创建活动目录,如下图:

回到Nextcloud控制台,和上面的步骤一样,点击右上角的Admin用户图标,选择Apps,搜索LDAP并启用。

启用LDAP后,点击Admin用户图标,选择Settings,单击左边Administration菜单下的“LDAP / AD integration”。

具体配置详见Nextcloud的 LDAP配置文档。我们根据活动目录的信息填写配置,单击“Test Base DN”测试配置是否正确。

注意:Server地址为活动目录的DNS地址,端口为389。

选择允许登陆Nextcloud的用户组。在AWS托管的活动目录里,新创建的用户默认会分配到组“Domain Users”。可单击下方的“Verify settings and count users”查找该用户组的成员数。

配置登陆方式。如果希望使用AD用户的邮箱地址登陆,则可以勾选“LDAP / AD Email Address”如下图。可在下方的“Test Loginname”输入AD用户名验证。

最后,默认情况下,在 Nextcloud 上不会有 LDAP 组。我们选择活动目录的默认用户组“Domain Users”在Nextcloud 可用。

用户工作目录的命名规则默认是根据LDAP的用户属性创建,如果是迁移或者升级后设置失效,可以运行以下命令强制启用命名规则:

sudo -u www-data php /var/www/html/nextcloud/occ config:app:set user_ldap enforce_home_folder_naming_rule –value=”true”

我们还可以运行以下命令设置LDAP的同步间隔,间隔以秒为单位,例如设置为一天,即86400秒。

sudo -u www-data php /var/www/html/nextcloud/occ config:app:set user_ldap updateAttributesInterval --value=86400

更多命令可以请参考文档

注意,除了LDAP APP外,Nextcloud还有非常丰富的APP,例如draw.io流程图绘制应用、WebMail插件RainLoop、开源办公onlyoffice应用等等。

步骤七:配置域名

Nextcloud安装后,默认信任的域名只有IP地址,如果希望通过域名连接Nextcloud,需要添加信任域名,运行如下命令:

sudo -u www-data php /var/www/html/nextcloud/occ config:system:set trusted_domains 1 --value=nextcloud.example.com

或者修改配置文件 /var/www/html/nextcloud/config/config.php 中的array变量

步骤八:配置EFS

从上面步骤的截图我们看到'datadirectory' => '/var/www/html/nextcloud/data',这是Nextcloud的默认配置,用户的工作目录均放在路径/var/www/html/nextcloud/data,为了更好的持久性和可扩展性,建议将所有用户的工作目录放在可扩展的、弹性原生云 NFS 文件系统Amazon Elastic File System。这样一来,我们可以实现多台主备服务器同时挂载EFS,提高可用性。

创建EFS文件系统,详见博客 利用 EFS 快速搭建 NFS 文件系统

通过SSH登陆Nextcloud服务器,挂载EFS,然后运行以下命令修改datadirectory的路径:

进入维护模式:

sudo -u www-data php /var/www/html/nextcloud/occ  maintenance:mode --on

 

拷贝现有文件到EFS,假设EFS挂载在/efs:

cp -a /var/www/html/nextcloud/data/. /efs
chown -R www-data:www-data /efs

 

修改datadirectory参数:

sudo -u www-data php /var/www/html/nextcloud/occ config:system:set datadirectory --value="/efs" --update-only

 

退出维护模式:

sudo -u www-data php /var/www/html/nextcloud/occ  maintenance:mode –off

 

注意,您也可以直接进入维护模式之后,将EFS挂载到/var/www/html/nextcloud/data,这样就不需要更改目录路径。

 

步骤九:登陆Nextcloud客户端

Nextcloud支持Windows、Mac、Android、iOS、Linux 等各种平台的客户端(点击下载)。下载安装后,打开客户端,选择login。

输入nextcloud的IP地址或者域名,http://Server_IP/nextcloud/

注意,演示使用的是HTTP。

单击Next,将跳转到浏览器,单击Log in,登陆并授权。


设置同步。

打开软件,选择Settings并设置同步S3存储桶。

打开Nextcloud云盘,即可看到用户自己的工作目录(存放在EFS,仅自己可见),还有作为共享盘的S3存储桶(所有成员可见)。

总结

在本次演示中,考虑到仅在VPC内使用,所以没有配置SSL,若是在生产环境中使用,建议配置SSL证书,使用HTTPS连接。Nextcloud是一款开源免费的云存储网盘项目。除了上述的安装方式,还支持Docker快速安装,配合AWS S3和EFS服务,我们可以快速地构建企业级的云存储网盘,从而实现跨平台跨设备的文件同步、共享、版本控制和团队协作等功能。

 

本篇作者

吴金福

AWS 混合云方案架构师,负责基于AWS的混合云方案架构的咨询和设计。在加入AWS之前,就职于大型集团企业。负责私有云数据中心的方案设计和建设,在数据中心基础设施、虚拟化、高性能计算和混合云等领域有着多年的经验积累。