Docker搭建 or LNMPA搭建 随你选

Nextcloud 简介

今年来,国内众多免费网盘相继倒下,于是大家都转投了百度网盘门下,然而这只独角兽限速倒逼开通会员下载速度依旧很难改善,还能维持多久也一直都是一个未知数。也有部分人开始涌向国外的有免费额度的网盘,比如以前以数据安全保障出名的 Mega (由于核心人员出走最近好像也不行了)、微软的 OneDrive、老牌网盘 DropboxBox、谷家的 Google drive(除了微软的网盘其他几个网速都不怎么好)。在这么多产品中,一个计算机技术人员却难以选择一款合适的网盘,于是用 VPS 和对象存储搭建自托管的方案开始成为一种可行的方案。 Nextcloud 就是这样一款网盘,来源于 Owncloud 却较之更加强大、安全(集成 Office 文档、图片相册、日历、RSS阅读,几乎等同于一个私有的 Dropbox),搭建也是非常简单,适合大部分技术栈的技术人员。当然,此处先谈如何搭建 Nextcloud ,至于结合对象存储下回再说。

Docker 搭建 Nextcloud

Docker 部署软件的好处我就不多提了:简单、高效,极其适合运维人员的应用管理工具。下面就先谈使用 Docker 一键搭建 Nextcloud

安装 Docker 环境

请移步 Docker 入门

安装 docker-compose 工具

docker-compose 是一个由 Docker 官方提供的应用多容器搭配管理工具,适合一个应用需要多个容器配合统一管理,进一步简化部署、升级步骤。

# 安装 python3 python3-pip
sudo apt install -y python3 python3-pip

# 安装 docker-compose
sudo pip3 install docker-compose

编写 docker-compose.yml

docker-compose 的管理主要依赖于一个名为 docker-compose.ymlyaml 文件来进行管理,当然这个文件也可以以任何别的名称并以 -f 文件名 的方式来启用,但必须是符合 yaml 格式和 Docker 官方定义的字段和方式。以下为本实验所需的内容,其中用到了 mariadb官方提供的数据库容器 和 Nextcloud 官方提供的应用容器。

version: '2'

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - /home/data/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=nextcloud
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:  
    image: nextcloud
    restart: always
    ports:
      - 7009:80
    links:
      - db
    volumes:
      - /home/data/nextcloud/www:/var/www/html

启动容器

以下命令即可开始拉取所需容器的镜像文件并根据 docker-compose.yml 文件配置好本地文件夹挂载和端口映射。

# 启动容器
sudo docker-compose up -d

# 更新nextcloud
sudo docker pull nextcloud
sudo docker-compose down && sudo docker-compose up -d

然后 Nextcloud 就在 7009 端口(可自行修改 docker-compose.yml 文件来改变)开启好了,使用浏览器访问 http://IP:7009

应用初始化配置

自行设置管理员用户名和密码,数据目录默认即可,数据库信息填写如 docker-composer.yml 中所示,数据库主机名填 db (配置文件中的数据库应用名)。

初始化示意图

所有初始化配置填写完毕之后,等待大约半分钟左右安装完成就可以看见nextcloud的主目录页面。到此处, Docker 搭建 Nextcloud 应用就大功告成了(也可在80端口安装Nginx服务代理到7009端口,此处不加赘述)。

LNMPA 搭建 Nextcloud

本实验采用 Ubuntu 操作系统为例,其他Linux操作系统可以根据系统不同类比操作,操作步骤基本一致。

安装 LNMPA 环境

为什么选用 LNMPA 而非 LNMP 或者 LMPA架构

LNMPA的含义:

LNMPA相比其他两种架构的优势在于充分发挥了 NginxApache 的功能优势,即 Nginx 擅长提供静态文件服务、代理HTTP请求服务、Apache擅长对于动态编程语言的结合接管编译工作。

安装

LNMP.org提供一键式的环境安装脚本,所有软件均从各种软件官方下载源码编译安装,软件升级也相当方便。如果你的CPU核数不够的话,那么第一次安装的时候编译可能需要花很长一段时间。

# 建议使用 tmux 来管理后台任务
sudo apt install -y tmux

# 新建一个后台session
tmux new -s lnmpa
# ctrl+b+d 将任务放到后台
# tmux attach -t lnmpa 进入后台session

# 下载一键安装包
wget -c http://soft1.vpser.net/lnmp/lnmp1.4-full.tar.gz

# 解压压缩包
tar zxf lnmp1.4-full.tar.gz 

# 执行安装程序
cd lnmp1.4-full
sudo ./install.sh lnmpa

# 安装完成后可以通过 http://IP 直接访问

准备工作

新建数据库

使用 LNMPA 带的 phpMyadmin可以直接新增数据库,比如数据库名为 nextcloud,分配用户名和密码均为 nextcloud

安装 PHP 扩展

# 进入 lnmpa 一键安装包文件夹的 php 的 fileinfo 扩展源码目录
cd ~/lnmp1.4-full/src/php-7.1.4/ext/fileinfo

# 从源码编译 fileinfo 扩展到 php 配置中
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && sudo make install

# 查看 fileinfo 是否启动
 php -i | grep fileinfo

修改 Nginx 和 PHP 配置

# /usr/local/nginx/conf/nginx.conf
# 修改下面一行参数为10240m(10G),增加上传最大文件大小
client_max_body_size 10240m;

# /usr/local/php/etc/php.ini
# 添加下面一行,以生效fileinfo扩展
extension = fileinfo.so


# 重启服务使配置生效
sudo lnmp restart

安装 Nextcloud

下载 Nextcloud 代码

# 下载 Nextcloud 源码
wget -c https://download.nextcloud.com/server/releases/nextcloud-13.0.1.zip

# 解压源码
unzip nextcloud-13.0.1.zip

# 将源码拷贝至 wwwroot 目录
sudo cp -r nextcloud /home/wwwroot/nextcloud
sudo chown -R www:www /home/wwwroot/nextcloud

添加虚拟主机

一种方式是使用 lnmp vhost add 的方式来添加(要求要域名,一步一步设置即可),另一种是直接添加文件,下面给出后一种方法无需域名的配置文件。

# /usr/local/nginx/conf/vhost/default

server
    {
        listen 80;
        listen [::]:80;
        server_name default;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/nextcloud;

        #error_page   404   /404.html;
        include proxy-pass-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/nextcloud.log;
    }
# /usr/local/apache/conf/vhost/default

<VirtualHost *:88>
ServerAdmin webmaster@example.com
php_admin_value open_basedir "/home/wwwroot/nextcloud:/tmp/:/var/tmp/:/proc/:Data将要放置目录的绝对路径:/dev/urandom"
DocumentRoot "/home/wwwroot/nextcloud"
ServerName default
ErrorLog "/home/wwwlogs/nextcloud-error_log"
CustomLog "/home/wwwlogs/nextcloud-access_log" combined
<Directory "/home/wwwroot/nextcloud">
    SetOutputFilter DEFLATE
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    DirectoryIndex index.html index.php
</Directory>
</VirtualHost>

使用 sudo lnmp restart 重启服务生效,接着即可通过浏览器访问 http://IP 或者 http://域名 来访问。

配置 Nextcloud

自行设置管理员用户名和密码,数据目录可任意选择一处有权限的目录即可(默认的应为/home/wwwroot/nextcloud/data,建议填一个非源代码的目录便于版本更新,比如/home/data/nextcloud,要求所属用户和用户组为 www-data),数据库信息均填写 nextcloud,数据库主机名默认填 localhost初始化示意图

所有初始化配置填写完毕之后,等待大约半分钟左右安装完成就可以看见nextcloud的主目录页面。到此处, LNMPA 搭建 Nextcloud 应用就完成了,不过更新应用版本的话就更麻烦一点了。

更新 Nextcloud

这种方式安装的 Nextcloud 也需要通过源代码更新的方式来更新,以下为主要步骤。

# 备份原来的源代码
sudo mv /home/wwwroot/nextcloud /home/wwwroot/netxcloud-old/

# 下载最新的源代码
wget -c https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
cd nextcloud
sudo cp -r nextcloud /home/wwwroot/nextcloud
sudo chown -R www:www /home/wwwroot/nextcloud

# 应用更新
cd /home/wwwroot/
sudo cp nextcloud-old/config/config.php nextcloud/confi/config.php

cd /home/wwwroot/nextcloud
sudo -u www /usr/local/php/bin/php occ maintenance:mode --on
sudo -u www /usr/local/php/bin/php occ upgrade
sudo -u www /usr/local/php/bin/php occ maintenance:mode --off