本文参考:
Nextcloud Installation and server configuration

本文主要演示了如何使用 Fedora Server 部署 LAMP 和 Nextcloud。搭建一个私人云。NextCloud 是一款开源免费的私有云存储网盘项目。网上的教程大多是使用宝塔面板或者各种脚本傻瓜式部署的方法。对于我这种追求清真的人不能接受。本文演示了纯手动部署 Nextcloud 的方法。

本文主要参考的是 Nextcloud 的官方文档。本人求新求快,追求对最新设备的支持,所以选择的是 Fedora Server。但是其他 rpm 系的部署方法应当与本文类似。

环境准备

部署 Nextcloud 需要先搭建 LAMP 环境。LAMP 即 Linux + Apache + Mysql/Mariadb + PHP。由于 Fedora 的软件仓库源足够的全面,并且相对较新。本文搭建环境全部从软件源中获取,无需另外下载编译。

从源中安装环境

使用下面的命令安装环境:

开始安装之前,建议先启用 rpmfusion 源

1
sudo dnf install httpd mariadb mariadb-server php mod_ssl php-gmp php-bcmath php-pecl-apcu php-pecl-imagick php-mcrypt php-mysqlnd php-curl php-gd php-xml php-bcmath php-zip php-intl

配置 Mariadb

安装完成后,设置字符集

编辑 /etc/my.cnf.d/mariadb-server.cnf 在 [mysqld] 部分下设置您的字符集。

1
2
[mysqld]
character-set-server=utf8

然后启动 mariadb 服务并使其开机启动

1
2
sudo systemctl start mariadb
sudo systemctl enable mariadb

执行 MariaDB 初始设置,例如设置 root 密码、禁用远程 root 登录等:

1
sudo mysql_secure_installation 

安照提示回答如下问题:

  • 输入 root 的当前密码(不输入):
  • 设置 root 密码? [是/否] 是,并输入密码
  • 删除匿名用户? [是/否] 是
  • 删除测试数据库并访问它? [是/否] 是
  • 现在重新加载权限表? [是/否] 是

该 root 账户为 Mariadb 的 root 账户,不是指系统 root 账户。

创建用于 Nextcloud 的数据库:

首先登陆 mariadb。输入以下命令后输入 root 密码即可登陆 mariadb。

1
mysql -u root -p

然后输入以下 sql 命令创建用于 Nextcloud 的用户和数据库。

1
2
3
4
5
CREATE DATABASE 数据库名;

GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'localhost' IDENTIFIED BY "用户密码";

FLUSH PRIVILEGES;

如果你需要通过互联网访问 mariadb,请自行打开 mariadb 通过互联网访问权限并打开防火墙端口。本文为本地访问数据库。

配置 PHP

编辑 /etc/php.ini 文件。来设置 PHP。

在 [Date] 下找到 date.timezone 行。去掉 ; 号设置时区。

1
date.timezone =	Asia/Shanghai

找到 memory_limit 行,将 128M 改为 512M 以上。(除非你的服务器内存极小,否则都建议将内存限制改为 512M 以上)

1
memory_limit = 512M

配置 apache httpd

为 Nextcloud 准备一个文件夹,本文以 /srv/nextcloud/ 文件夹为例。

将 nextcloud 文件夹的所有权改为 apache 。

查看 /etc/httpd/conf/httpd.conf 文件中 User 和 Group 设置的是什么,nextcloud 目录的所有权就改为相应的用户。

1
sudo chown apache:apache /srv/nextcloud/

https://download.nextcloud.com/server/installer/setup-nextcloud.php 下载 setup-nextcloud.php 文件至 /srv/nextcloud/ 文件夹。

1
2
cd /srv/nextcloud/
sudo -u apache wget https://download.nextcloud.com/server/installer/setup-nextcloud.php

新建 httpd 的配置文件 /etc/httpd/conf.d/nextcloud.conf,设置虚拟主机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ServerName  你的域名或 ip 地址
<VirtualHost *:80>
DocumentRoot "/srv/nextcloud"

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

<Directory /srv/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>

如果你有域名并且有 ssl 证书,请将证书放在合适路径,使用以下配置。

如果你开启了 Selinux,记得正确设置证书文件的安全上下文:sudo chcon -u system_u -r object_r -t httpd_sys_content_t 证书文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ServerName 你的域名或 ip 地址

<VirtualHost *:80>
DocumentRoot "/srv/nextcloud"
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/srv/nextcloud"
SSLEngine on
#证书文件的路径
SSLCertificateFile /证书/文件/路径
#私钥文件的路径
SSLCertificateKeyFile /私钥/文件/路径
#证书链文件的路径
SSLCertificateChainFile /证书链/文件/路径

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

<Directory /srv/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

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

接下来启动 httpd 就可以进行下一阶段配置了。

如果你有开启 Selinux,记得提前放开端口。semanage port -a -t http_port_t -p tcp 你的端口

1
sudo systemctl enable --now httpd

Nextcloud 配置精灵

这时访问 http://你的域名/setup-nextcloud.php 就可以打开 Nextcloud 配置精灵了。界面如下:

图片名称

如果检测依赖都没有问题了,就会让您选择 Nextcloud 安装目录。我们只需要输入一个 . 安装在当前目录下。

Nextcloud 安装目录选择

点击 Next,然后静静的等待一会,随后 Nextcloud 就会安装完成。点击 Next。

Nextcloud 安装成功

接下来就到了输入用户名和数据库信息的时候了。用户名和密码您自行选择,第一次创建的用户为管理员。

Nextcloud 用户名和密码

数据库选择 Mariadb ,数据库名,用户名以及密码为之前 配置 Mariadb 时的数据库名,用户名以及密码。

Nextcloud 配置数据库

点击安装,然后静静等待,就大功告成了。

Nextcloud 常见问题汇总

进入 Nextcloud 后,点击个人头像,选择管理设置会进入安全与设置警告栏目,他会自动检测你配置中还存在的问题。

Server has no maintenance window start time configured。

编辑 Nextcloud目录/config/config.php 文件。在 ); 前添加行:

1
'maintenance_window_start' => 1,

该实例缺少一些推荐的 PHP 模块

大多数模块 Fedora 的源里面都有,缺少什么模块装什么就行了。

PHP 的组件 OPcache 没有正确配置

编辑 /etc/php.d/10-opcache.ini:将以下参数改为类似的即可。

1
2
3
4
5
6
7
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

HTTP的请求头 “Strict-Transport-Security” 未设置为至少 “15552000” 秒.

在 apache httpd 的 nextcloud.conf 配置中添加以下行

1
2
3
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

本文前文已经添加了这些配置。

你还没有设置或验证你的电子邮件服务器配置。

在个人-基本设置-电子邮件服务器中设置即可。注意需要先在个人信息中填写好个人的邮箱地址。

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

编辑 Nextcloud目录/config/config.php 文件。在 ); 前添加行:

1
2
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\APCu',

对于个人使用的 Nextcloud 而言 APCu 足够用了。

您的安装没有设置默认的电话区域。

编辑 Nextcloud目录/config/config.php 文件。在 ); 前添加行:

1
'default_phone_region' => 'CN',

apcu 报错。

编辑 /etc/php.d/40-apcu.ini,编辑 apc.enable_cli=1 并删除 ; 取消注释。

配置 cron.php 定时任务。

Nextcloud 后台任务

设置为 cron。并在操作系统中编辑文件 /etc/systemd/system/nextcloudcron.service:

1
2
3
4
5
6
7
8
[Unit]
Description=Nextcloud cron.php job

[Service]
User=apache
ExecCondition=php -f 你的Nextcloud安装目录/occ status -e
ExecStart=/usr/bin/php -f 你的Nextcloud安装目录/cron.php
KillMode=process

User=apache:如前所述,此处填写 /etc/httpd/conf/httpd.conf 文件中 User 的用户名。

并且编辑文件 /etc/systemd/system/nextcloudcron.timer:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Run Nextcloud cron.php every 5 minutes

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

[Install]
WantedBy=timers.target

然后执行命令:

1
2
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer

以上就是在 Fedora Server 39 中配置 Nextcloud 的方法啦,希望能够对你有所帮助。

Selinux 太难了,我配置到后面还是把 Selinux 关了,下次再学习这个 Selinux 怎么玩吧。