前言

Docker-compose搭建的nextcloud具有快速、便捷等特点,但是对于带宽是有一定损失的,并且系统内存占用会稍高,对于小的实例来说,压力会稍大。同时,对于ubuntu+apache2基础上对docker中的nextcloud进行https,会比较麻烦。我之前用的docker-compose搭建,可能是反向代理设置的问题,https一直无法部署成功。所以希望通过直接在/var/www/html目录下新建一个nextcloud。

下面将对搭建的过程和后期解决一些基本的安全告警进行记录(主要是怕自己下次忘了咋弄OωO)。

首先是安装前的环境准备

Mysql的安装

sudo apt-get install mysql-server mysql-client libmysqlclient-dev -y
service mysql start
sudo mysql
#进入mysql数据库后
create database nextcloud;
use nextcloud;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你要设置的密码';
#上面设置好用户名root,密码自己更换,数据库名nextcloud,后面要用

Php的安装

sudo apt-get install php libapache2-mod-php php-mysql php-mbstring php-zip php-curl php-gd php-ldap php-xml php-imagick -y
#安装完以后重启一下apache2和mysql

下载并安装nextcloud

上面的准备工作做好以后,下载nexcloud的一键安装,命令如下

cd /var/www/html
wget https://download.nextcloud.com/server/installer/setup-nextcloud.php

这里需要注意一点。注意文件的所属以及权限,必要的时候需要设置。

chown -R www-data:www-data setup-nextcloud.php
#一起其他一些报错可能都是和权限设置有关。我用的apache2,如果是nginx则不是www-data 

此时,打开浏览器,输入地址准备安装。地址为你的“你的ip/setup-nextcloud.php”
setup画面1
显示上述画面后点击next

如果显示dependencies有欠缺,则按照报错的情况加装扩展,直到显示下面的画面
setup2
此处如果直接输入一个点,则代表安装在当前目录下,那因为我的/var/www/html目录下是由内容的,所以我选择在网站根目录下新建一个nextcloud目录进行安装,所以我在这里填写的就是默认的nextcloud。
随后点击下一步,这一步会耗费一点时间,大家不到着急、等待即可。
等加载完后,就是数据库的设置页面,按照指引设置管理员账户、密码,数据库用户、数据库名、数据库密码就是前面我们刚刚才设置的,地址localhost不要动。点击下一步,等待片刻应该就安装好了。

此时进入系统,点击概况,可能会有很多的安全警告。下面对几个主要问题进行讨论,设置好了基本不会有运行问题。

报错内容

一、PHP configuration option output_buffering must be disabled

出现此报错,需要在php配置文件中设置output_buffering的值为0。设置改参数时,如果你直接用vim编辑器搜索output_buffering,可能不能找到对的地方,会使如下结果:
2022-12-24T09:25:43.png
通常情况下在php.ini的215行左右,看到一个绿色的参数设置的地方,修改为0才有效。
2022-12-24T09:25:50.png

二、内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。

这里我们首先保证相关扩展已经安装

apt-get install php-apcu

随后我们在nextcloud的安装目录中有config目录,进入,编辑config.php
以我的为例

cd /var/www/html/nextcloud/config
vim config.php
#在其中加一行
'memcache.local' => '\\OC\\Memcache\\APCu',

三、我们在尝试运行cron.php的时候可能存在报错:OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

解决方法,修改php.ini文件,在最后一行加入apc.enable_cli=1

四、设置cron任务

按照下面的代码进行设置

cd /etc/systemd/system
vim nextcloudcron.service

在文档中个输入

[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/html/nextcloud/cron.php
#这里的路径按照自己的实际情况写
[Install]
WantedBy=basic.target

接着在创建一个文件

vim nextcloudcron.timer

在文档中输入

[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

随后可以先运行service看看是否成功

systemctl enable --now nextcloudcron.service

没问题后,开启定时任务。

systemctl enable --now nextcloudcron.timer

2022-12-24T09:26:40.png

五、其他

可以参考B站的一篇文章https://www.bilibili.com/read/cv9817730

欢迎交流讨论,如有错误还请指出。