Truenas Scale系统 Nextcloud+MySQL+Redis+SSL部署

一、创建mysql数据库的docker容器

注意:由于nextcloud现行使用的最高版本mysql数据库是8.4,版本太高或太低均会产生一系列问题。因此在部署前需要前往nextcloud官网查看支持的版本。

mysql的docker-compose文件书写如下:

services:
  mysql:
    container_name: mysql
    image: mysql:8.4 #自己选择版本,nextcloud推荐版本为8.0和8.4
    hostname: mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 12345678  #设置为自己的密码
      TZ: Asia/Shanghai
    networks:
      macvlan:
        ipv4_address: 192.168.1.x    #设置为自己的IP地址
    volumes:
      - /path/mysql:/var/lib/mysql   #数据库储存地址
      - /path/mysql:/etc/mysql/conf.d #配置文件的地址
      - /path/mysql/logs:/var/log/mysql #配置文件的地址
      
networks: #创建macvlan网络
  macvlan:
    driver: macvlan
    driver_opts:
      parent: eth0            # 改成你主机上接入局域网的网卡名
    ipam:
      config:
        - subnet: 192.168.1.0/24   # 你的局域网网段
          gateway: 192.168.1.1     # 你的网关/路由器

1、手动创建nextcloud和其余软件(如 onlyoffice)的数据库

进入mysql容器

docker exec -it mysql bash

进入mysql软件

mysql -uroot -p123456789 //-p后面填写自己设置的密码

创建Nextcloud数据库

CREATE USER 'nextcloud' IDENTIFIED by 'Password'; //password处填写自己设置的密码
CREATE DATABASE IF NOT EXISTS nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'%';

为数据库设置权限(可选)

chmod 777 /var/lib/mysql -R

二、创建nextcloud网盘的docker容器

本文会对nextcloud的https和hsts设置进行持久化的设计,因此使用起来和其余的有一定区别。

1、进行nextcloud的https持久化设置(保证在更新程序后,不需要对https进行重新设置)

  • 通过truenas的WEBUI界面进行创建,设定拥有者和组拥有者的名字为www-data,并且如果需要进行相关用户访问,则需要加上对应用户的组编号和用户编号。
  • 通过truenas的WEBUI界面进行证书的创建,在WEBUI的证书获取中,我们可以通过cloudflare和Let‘s Encrypt完成证书的创建,并通过定时命令,将证书转移到相关的文件夹。
cp /etc/certificates/fullchain.crt /path/certs/ && cp /etc/certificates/privkey.key /path/certs/

2、进行apache2文件夹的提取工作(需要两个shell界面进行操作)

运行一次短时间的nextcloud容器并自动删除。

docker run --rm --name tmpnextcloud nextcloud:latest sleep 60

运行apache2文件夹的提取命令。

docker cp tmpnextcloud:/etc/apache2 /path/ #apache2文件夹宿主机所在的路径

修改/mnt/application/nextcloud/apache2/sites-available/default-ssl.conf的ssl路径。

SSLCertificateFile      /etc/ssl/nextcloud/fullchain.pem
SSLCertificateKeyFile   /etc/ssl/nextcloud/privkey.pem

在“离线”目录预启用模块和站点。

docker run --rm -v /mnt/application/nextcloud/apache2:/etc/apache2 nextcloud:latest \
  bash -lc "a2enmod ssl headers rewrite && a2ensite default-ssl"

3、创建nextcloud的docker容器

nextcloud的docker-compose文件书写如下:

version: "3.8"

services:
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    group_add:
      - 1000  #添加其他用户的组,保证用户可以通过truenas的smb协议进行访问
    networks:
      backend: {}
      macvlan:
        ipv4_address: 192.168.1.x #设置为自己的IP地址
    volumes:
      - /path/html:/var/www/html #nextcloud配置文件夹映射
      - /path/certs:/etc/ssl/nextcloud #SSL的配置文件夹映射
      - /path/apache2:/etc/apache2 #apache2的配置文件映射
      - /path/nextcloud:/var/www/html/data #数据储存路径映射
    command: apache2-foreground

networks:
  macvlan:
    external: true
  backend:
    driver: bridge  

4、创建nextcloud使用的redis的docker容器

redis的docker-compose文件书写如下

version: "3.8"

services:
  redis:
    image: redis:latest
    container_name: redis
    restart: unless-stopped
    networks:
      - backend
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - /path/redis:/data

networks:
  backend:
    external: true

5、修复关于nextcloud的若干问题

(1)config.php相关的一系列问题

修改/html/config/config.php文件

添加redis

'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => 'redis',
'port' => 6379,
'timeout' => 1.5,
),

添加维护时间,默认时区,默认电话区域,其中文件自动扫描设置为关,因为耗费资源

'default_phone_region' => 'CN',
'maintenance_window_start' => 1,
'filesystem_check_changes' => 0,
'logtimezone' => 'Asia/Shanghai',
'default_timezone' => 'Asia/Shanghai',

(2) 修复数据库的一系列问题

有 mimetype 迁移可用

sudo -u www-data php occ maintenance:repair --include-expensive

缺少数据库索引(多条)

sudo -u www-data php occ db:add-missing-indices

(3)设置严格传输安全 (HSTS)

修改/hmtl/.htaccess文件

添加 Header always set Strict-Transport-Security “max-age=15552000; includeSubDomains” 代码,位置如下:

Header onsuccess unset X-XSS-Protection
Header always set X-XSS-Protection "1; mode=block"

Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"

SetEnv modHeadersAvailable true

6、通过smb等应用为nextcloud导入文件

由于导入的文件不会在nextcloud的数据库进行保存,因此需要通过命令扫描导入。

sudo docker exec -u www-data nextcloud php occ files:scan --all

可以通过在config.php设置 ‘filesystem_check_changes’ => 1, 进行文件的变更扫描,但会导致宿主机的开销过大,因此不推荐。

7、Nextcloud 的 corn定时刷新任务

我们可以通过Nextcloud的定时任务进行nextcloud的页面刷新,无需像以前一样通过shell文件和corntab进行页面的刷新,这样的好处是在truenas更新后,不需要重新进行设置。命令如下:

docker exec nextcloud /bin/bash -c "su www-data -s /bin/bash -c  'php cron.php'"

这个命令通过root的权限进行运行,其运行时间按如下图进行设置,方可设定为5分钟运行一次:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇