Debian 8搭建Nextcloud

Nextcloud是一套用于创建和使用文件托管服务的客户端 – 服务器软件 。 它的功能与Dropbox类似,但Nextcloud是免费且开源的 ,允许任何人在私人服务器上安装和操作它。
与Dropbox等专有服务相比,开放式架构允许以应用程序的形式向服务器添加附加功能,并使用户能够完全控制其数据。


安装前准备:

本文所有命令均是以root用户运行,其他用户请自行获取权限

编辑软件源列表:

vi /etc/apt/sources.list

删除原有内容,添加以下内容:

deb http://deb.debian.org/debian/ jessie main
deb-src http://deb.debian.org/debian/ jessie main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
deb http://deb.debian.org/debian/ jessie-updates main
deb-src http://deb.debian.org/debian/ jessie-updates main
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

国内请使用以下源列表:

deb http://ftp.cn.debian.org/debian/ jessie main
deb-src http://ftp.cn.debian.org/debian/ jessie main
deb http://ftp.cn.debian.org/debian-security jessie/updates main
deb-src http://ftp.cn.debian.org/debian-security jessie/updates main
deb http://ftp.cn.debian.org/debian/ jessie-updates main
deb-src http://ftp.cn.debian.org/debian/ jessie-updates main
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

安装GnuPG密钥:

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
apt-get update
apt-get install debian-keyring debian-archive-keyring
apt-key update
apt-get update
apt-get install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://h.end.pub/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

安装Apache与PHP7.0及其他所需PHP组件:

apt-get update
apt-get install apache2 unzip smbclient php7.3 php7.3-xml php7.3-dev php7.3-fpm php7.3-common php7.3-json php7.3-cgi php7.3-cli php7.3-gd php7.3-curl php7.3-zip php7.3-mysql php7.3-mysqlnd php7.3-readline php7.3-mbstring php7.3-intl php-mcrypt libapache2-mod-php7.3 php7.3-apcu php7.3-apcu-bc php7.3-memcached php7.3-imagick php-smbclient

添加Apache模块:

a2enmod rewrite && a2enmod headers && a2enmod ssl && a2ensite default-ssl && a2enmod env && a2enmod dir && a2enmod mime && a2enmod proxy_fcgi setenvif && a2enconf php7.3-fpm

重启Apache:

service apache2 restart

配置opcache:

vi /etc/php/7.3/apache2/php.ini

添加或更改以下内容:

memory_limit = 512M
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

安装MySQL:

apt-get install mysql-server mysql-client

安装过程中的操作:

New password for the MySQL "root" user:
为MySQL的"root"用户输入新密码

Repeat password for the MySQL "root" user:
重复输入密码

启用MySQL 4-byte 支持:

编辑MySQL的my.cnf文件:

vi /etc/mysql/my.cnf

在 [mysqld] 标签下添加如下内容:

innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

重启MySQL:

service mysql restart

安装PhpMyAdmin:

apt-get install phpmyadmin

安装过程中的操作:

Web server to reconfigure automatically:
[ ] apache2
[ ] lighttpd
移动光标选中apache2回车

Configure database for phpmyadmin with dbconfig-common?
使用dbconfig-common配置phpmyadmin数据库,选中Yes并回车

Password of the database's administrative user: 
输入MySQL的"root"用户密码

MySQL application password for phpmyadmin: 
为用户phpmyadmin设置密码

Password confirmation: 
确认密码

使用PhpMyAdmin创建新数据库与用户:

将PhpMyAdmin复制到www目录下:

cp -R /usr/share/phpmyadmin /var/www/

编辑Apache虚拟主机配置文件:

vi /etc/apache2/sites-available/000-default.conf

修改如下:

DocumentRoot /var/www/html
改为:
DocumentRoot /var/www/

重启Apache:

service apache2 restart

通过浏览器,使用你的域名或者IP地址访问PhpMyAdmin,格式:

http://域名/phpmyadmin
http://IP地址/phpmyadmin

使用用户名"root"登录
密码为安装过程中配置的密码

为Nextcloud添加数据库及用户:

登录后,点击左侧列表中的"New"或选择"数据库"->"新建数据库"
"数据库名"可自行定义,例如"nextcloud_db"
点击"创建",记录"数据库名",稍后配置Nextcloud时会用到

点击左侧列表中的数据库名"nextcloud_db"或选择"数据库"->"nextcloud_db"
点击"权限"->"新建"->"添加用户"
注:这个用户给Nextcloud访问MySQL数据库用的,记录用户名、主机、密码,稍后配置Nextcloud时会用到
User name: 输入用户名;Host:主机,选择"本地"或输入"localhost";输入及重新输入密码
选中"授予数据库“nextcloud_db”的所有权限。" 
下拉列表并点击"执行"

至此,最麻烦的数据库配置步骤已完成,可以关闭PhpMyAdmin管理页面回到控制台了


准备证书:

本文默认为开启https,如不需要,请自行过滤掉相关内容

证书应该包含3个文件:证书私钥文件*.key、证书公钥文件public.pem、证书链文件chain.pem

如果你只有证书公钥文件,那么:如果证书公钥文件包含证书链文件,则可以省略证书链文件配置;如果证书公钥文件不包含证书链文件,则需要证书链补全,方法请自行搜索。如果证书公钥文件包含两段两段以上内容,那么证书公钥文件应该是包含证书链文件的,当然也有其他情况,请自行判断

.crt后缀的证书公钥文件.pem后缀的证书公钥文件配置方法相同,无需转换

将证书所有文件存放到/etc/apache2/cert目录下:

mkdir /etc/apache2/cert
cd /etc/apache2/cert

获取Nextcloud:

wget https://download.nextcloud.com/server/releases/nextcloud-18.0.0.zip
unzip nextcloud-18.0.0.zip

将Nextcloud移动到www目录下:

mv nextcloud /var/www

创建Nextcloud数据存放文件夹:

mkdir /var/www/data

给予权限:

chown -R www-data /var/www/nextcloud
chown -R www-data /var/www/data

配置Apache虚拟主机文件:

配置000-default.conf:

将来自http的访问默认跳转为https

vi /etc/apache2/sites-available/000-default.conf

在VirtualHost中添加或更改以下内容:

ServerName 你的域名

DocumentRoot /var/www/nextcloud

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R=301,L]

配置default-ssl.conf:

vi /etc/apache2/sites-available/default-ssl.conf

在VirtualHost中添加或更改以下内容:

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

ServerName 你的域名

DocumentRoot /var/www/nextcloud

<Directory /var/www/nextcloud>
AllowOverride All
</Directory>

SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile cert/public.pem
SSLCertificateKeyFile cert/*.key
SSLCertificateChainFile cert/chain.pem

重启Apache:

service apache2 restart

通过浏览器配置Nextcloud:

访问:

https://你的域名

安装过程:

创建 管理员账号
输入用户名及密码

数据目录
/var/www/data

配置数据库
输入配置PhpMyAdmin过程中记录的"数据库用户"、"数据库密码"、"数据库名"、"主机"

点击"完成安装"

配置APCu:

vi /var/www/nextcloud/config/config.php

根据上文格式添加如下内容:

'memcache.local' => '\OC\Memcache\APCu',

修复数据库中的一些列由于进行长整型转换而缺失的问题:

cd /var/www/nextcloud
sudo -u www-data php occ db:convert-filecache-bigint

修复数据库丢失索引的问题:

cd /var/www/nextcloud
sudo -u www-data php occ db:add-missing-indices

刷新Nextcloud网页

至此Nextcloud安装已完成


使用occ命令手动向Nextcloud中添加文件:

可以直接把文件上传/下载/拷贝到data目录下,之后使用occ命令将这些文件添加到Nextcloud

扫描所有用户文件:

cd /var/www/nextcloud
sudo -u www-data php occ files:scan --all

扫描指定用户文件:

cd /var/www/nextcloud
sudo -u www-data php occ user:list
sudo -u www-data php occ files:scan user_id

扫描指定文件夹:

cd /var/www/nextcloud
sudo -u www-data php occ user:list
sudo -u www-data php occ files:scan --path="user_id/files/mount_name"

如果遇到一些小问题也可以使用occ命令修复:

cd /var/www/nextcloud
sudo -u www-data php occ maintenance:repair

更多occ命令请参见官方手册:Using the occ command

更多Nextcloud管理内容请参见官方手册:Nextcloud 13 Administration Manual


补充:安装SMBClient

由于Linux默认不支持SMB协议,所以要在Nextcloud中添加使用SMB协议的外置存储时,需要安装SMBClient.

apt-get install smbclient