目标

安装好nexcloud并进行优化

硬件环境

CPU: j4125(4核心 4线程)
内存:8G
磁盘:128 nvme SSD + 1T sata SSD
网络: 1000Mb/s有线

vi编辑器基本使用
sql语句的基本使用

前置:

docker network create nas

一、Docker安装Mysql

其实不用安装mysql 使用sqlite也能使用nextcloud,但是在多用户下mysql性能更好, 特别是在文件备份的情况下, 这个也是属于优化选项。其次因为其他docker应用也需要使用到mysql,所以我们在此就不将mysql装到docker-compose里面去了, 独立启动一个docker,其他docker应用需要使用数据库的时候都使用这个docker实例。

mkdir -p ~/mysql/data
cd ~/mysql
mkdir config #创建mysql config目录 防止以后要配置优化mysql 参数(忘记密码等操作需要)

因为这里数据库的时区不对。我们在**~/mysql/conf目录下面新建nas.cnf**

[mysqld]
default-time_zone="+8:00"

然后就是使用docker命令一键启动

vi start.sh
docker run -d --name nas-mysql \
--network nas \
	-v /home/zx/mysql/data:/var/lib/mysql \
	-v /home/zx/mysql/config:/etc/mysql/conf.d \
	-e MYSQL_ROOT_PASSWORD="密码" \
	mysql:5.7.14

参数说明: -e MYSQL_ROOT_PASSWORD=“密码” 这里设置mysql的root密码

bash start.sh

至此 我们的mysql启动完成

然后创建数据库

docker exec -it nas-mysql /bin/bash
mysql -uroot -p  #然后输入你之前设置的mysql的密码
create database nextcloud default character set utf8mb4 collate utf8mb4_unicode_ci; #创建数据库 nextcloud用
exit #退出mysql
exit  #退出docker容器

二、安装redis

cd ~
mkdir redis
cd redis
wget https://raw.githubusercontent.com/redis/redis/6.2/redis.conf
vi start.sh

这里我们使用redis.conf文件的时候切记将redis.conf文件中的bind改成0.0.0.0不然nextcloud容器无法连接
编辑start.sh文件

docker run -d --name nas-redis \
--network nas \
 -v /home/zx/redis/redis.conf:/usr/local/etc/redis/redis.conf \
 redis redis-server /usr/local/etc/redis/redis.conf \

四、安装nextcloud

cd ~
mkdir -p nextcloud/config
cd nextcloud
vi start.sh
docker run -d --name nextcloud  --network nas \
        -e PUID=1000 \
        -e GUID=1000 \
        -e TZ=Asia/Shanghai \
        -p 8001:443 \
        -v /home/zx/nextcloud/config:/config/ \
        -v /mnt/sda/nextcloud:/data \
        linuxserver/nextcloud:latest

注意这里8001 可以换成任意端口
这样nextcloud就启动起来了
通过浏览器访问https://ip:8001就可以访问到nextcloud(注意前面是https 如果提示警告点击继续访问)
在安装界面输入数据db:3306
至此 nextcloud安装完毕

QA:

1. 安装完成后 如果新增用户显示名称写的是中文名称有可能 生成的头像是个框框 处理方法如下

从本地电脑上传一个ttf字体文件到服务器目录~/nextcloud/config/www/nextcloud/core/fonts
中,windows字体路径 C:\Windows\Fonts\SIMSUN.TT 如果是mac电脑。 网上下载一个或者叫windows的朋友给你发一个就行
然后修改 ~/nextcloud/config/www/nextcloud/lib/private/Avatar/Avatar.php文件中的145行和182行

$font = __DIR__ . '/../../../core/fonts/simsun.ttc';

后面的simsun.ttc 根据你自己的字体文件改动

2. https证书风险问题

linuxserver社区维护的镜像是默认开启https访问的,但是ssl证书是linuxserver颁发的, 所以我们要去权威机构申请ssl证书
申请ssl证书需要域名验证 域名验证有两种方式

  1. 文件验证(需要开启80端口) 默认家庭公网80、443端口是关闭的 ,所以当域名指向家庭服务器是无法通过文件验证方式申请https证书的
  2. 域名指向验证 这里需要增加一条解析记录,比较方便。

这里我的域名是在阿里云购买, 所以我直接在阿里云工作台->ssl证书->免费证书 申请了一个证书 然后下载的时候选择服务器类型 nginx
这样就获得了ssl证书
将证书zip文件上传到服务器的 **~/nextcloud/config/keys **目录下

#删除服务器自动生成的证书
cd ~/nextcloud/config/keys
rm -rf cert.*
unzip 你的证书.zip

这里会生成两个文件 一个是pen文件一个是key文件
然后编辑nginx配置文件

vim  ~/nextcloud/config/nginx/site-confs/default

文件的第14行 15行

ssl_certificate /config/keys/证书文件名.pem;
 ssl_certificate_key /config/keys/证书文件名.key;

这里只要改证书文件名即可。 /config/keys前面不用动。因为这个文件是被docker容器读取映射到docker中的/config/keys目录下

3. 设置默认语言

nextcloud默认是英语 这里我们设置中文 配置文件总体如下
~/nextcloud/config/www/nextcloud/config/config.php

<?php
$CONFIG = array (
  'memcache.local' => '\\OC\\Memcache\\Redis',
	'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
        'host' => 'rds', // can also be a unix domain socket: '/tmp/redis.sock'
        'port' => 6379,
        'dbindex' => 0, // Optional, if undefined SELECT will not run and will use Redis Server's default DB Index.
  ],
  'datadirectory' => '/data',
  'instanceid' => '',
  'passwordsalt' => '',
  'secret' => '',
  'trusted_domains' =>
  array (
          0 => '',
          1 => 'localhost:8001',
  ),
  "force_language" => "zh_CN",
  "default_locale" => "zh_CN",
  'dbtype' => 'mysql',
  'version' => '23.0.0.10',
  'overwrite.cli.url' => '',
  'dbname' => 'nextclou',
  'dbhost' => 'db:3306',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'oc_adminzx5',
  'dbpassword' => '',
  'installed' => true,
);

这里我删除了一些敏感信息。 文件内容大概就是这样
至此 安装并优化完成

参考文档

nextcloud官方文档官方issue