文章目录
- 概述
- 环境准备
-
- Samba安装部署
- nextCloud安装部署
- docker安装
- 安装相关容器
- 配置及优化
- 创建数据库next_cloud
- 注册错误提示:nextcloud install Error while trying to initialise the database: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
- 您的数据目录可被其他用户读取, 请更改权限为 0770 以避免其他用户查看目录。
- 视频文件不显示缩略图
- 启用缓存
- **通过不被信任的域名访问**
- 后台任务cron的配置
- 局域网上传速度优化
- 扫描手动拷贝进入的文件
- 提前生成缩略图
- 严格模式禁止http访问
- ****提示”php-imagick模块不支持SVG”****
- 您的安装没有设置默认的电话区域
- 此实例中的 php-imagick 模块不支持 SVG
- 您的网页服务器未正确设置以解析“/.well-known/caldav”, “/.well-known/carddav”
- 外网穿透部署
概述
- 目前网盘服务要么都限速, 要么都空间比较小; 对于使用来说, 十分的不方便;
- 对于一些文档, 图片以及视频想通过电视来播放, 又不想插硬盘或u盘;
- 想对自己的数字资料进行集中式管理;
刚好手中有一台树莓派, 一台带宽8M云服务器, 还有几个淘汰下来的机械硬盘; 因此准备自己搭建一个私有云; 对于大流量的访问基本也会是在内网, 外网最多偶尔看看文件, 看看照片之类的, 对于应急使用, 通过云服务器穿透的速度也基本够用了;
环境及耗材信息:
- 安装ubuntu2004的树莓派4B
- 1Tb的机械硬盘,
- 8M云服务器 - ubuntu2004
- 网线一根
注: 根据当前教程创建出来, nextcloud是samba的一个子集, 如果要完整覆盖的话, 需要自行去理清相关目录关系;
环境准备
网络
树莓派通过网线连接千兆路由器, 因为树莓派4B的wifi是百兆带宽的, 而网口是千兆的, 因此必须通过网线来连接;
否则通过wifi最大网速(即使手动设置wifi为5G)理论也就 12.5Mb/s, 实测最大峰值也就11多, 平均也就9Mb/s;
网速监控:
apt install ethstatus
sudo ethstatus -i eth0
sudo ethstatus -i eth0
机械硬盘格式化及分区
机械硬盘需要插在树莓派的 usb3.0 接口上
fdisk -l
fdisk /dev/sda
mkfs.ext4 /dev/sdb1
Samba安装部署
sudo apt-get install samba samba-common
mkdir /pan
mount /dev/sdb1 /pan
chmod 777 -R /pan
vim /etc/samba/smb.conf
[share]
comment = NAS Storage
valid users = pi,root
path = /pan
browseable = yes
writable = yes
create mask = 0755
directory mask = 0775
smbpasswd -a <USER>
groupadd [--gid ID] <GROUP>
useradd -g <GROUP> <USER>
gpasswd –a <USER> <GROUP>
gpasswd –d <USER> <GROUP>
service smbd restart
到这里, 一个网络文件系统就已经部署完成了; 如果不需要云盘相关的一些功能, 直接使用也没有问题
nextCloud安装部署
官方文档:
Introduction - Nextcloud latest Administration Manual latest documentation
为了移植方便, 这里选择了docker的方式进行安装, 数据信息全部存储在samba共享目录下, 方便下次迁移到其他机器; 当然会占用磁盘的io了, 不过个人使用, 不想费力气去运维本地环境; 速度也够用;
docker安装
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
hostnamectl set-hostname 名字
lsmod | grep br_netfilter
systemctl start br_netfilter.service
systemctl enable br_netfilter.service
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
apt-cache madison docker-ce
apt-cache madison docker-ce-cli
apt-cache madison containerd.io
apt-get install docker-ce=5:19.03.15~3-0~ubuntu-focal
vim /boot/firmware/cmdline.txt
vim /etc/default/grub file
apt install grub2-common
update-grub
reboot
cat > /etc/docker/daemon.json << EOF
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://l3n7ikj1.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
systemctl status docker
安装相关容器
docker run --name mariadb -d -p 3306:3306 \
-e MARIADB_ROOT_PASSWORD=root \
-v /pan/apps/mariadb/conf.d:/etc/mysql/conf.d \
-v /pan/apps/mariadb/data:/var/lib/mysql \
mariadb:latest
docker run --name redis -d -p 6379:6379 \
-v /pan/apps/redis:/usr/local/etc/redis \
redis
docker run --name next-cloud -d -p 1080:80 \
-e MYSQL_DATABASE=next_cloud \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=root \
-e MYSQL_HOST=192.168.5.21:3306 \
-v /pan/apps/next-cloud:/var/www/html \
-v /pan/apps/next-cloud/apps:/var/www/html/custom_apps \
-v /pan/apps/next-cloud/config:/var/www/html/config \
-v /pan:/var/www/html/data \
-v /pan/apps/next-cloud/db:/var/lib/mysql \
nextcloud
对于nexcloud, 这里基于mariadb来进行构建, pg/mysql也是可以的; 同时使用redis作为缓存; 因为不使用缓存的话, 访问速度是有些限制的, 用着一点不丝滑…
到这里nextcloud基本能运行起来了, 可以在浏览器中打开或者到谷歌商店去下载一个app来连接看看.
配置及优化
创建数据库next_cloud
create schema if not exists next_cloud collate utf8mb4_unicode_ci;
注册错误提示:nextcloud install Error while trying to initialise the database: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
docker exec -it mariadb mysql -u root -p
SET GLOBAL innodb_read_only_compressed=OFF;
cd /pan/apps/mariadb/conf.d
touch my.cnf
vim my.cnf
[mariadbd]
innodb_read_only_compressed = OFF
docker restart mariadb
您的数据目录可被其他用户读取, 请更改权限为 0770 以避免其他用户查看目录。
因为我们还要能够通过samba来访问,而且是私服, 完全没必要这么设置, 自己的数据当然自己做主, 这个可以跳过
vim /pan/apps/next-cloud/config/config.php
'check_data_directory_permissions' => false,
保存后, 刷新页面即可
视频文件不显示缩略图
docker exec -it --user root next-cloud sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
docker exec -it --user root next-cloud apt-get update
docker exec -it --user root next-cloud apt-get -y install ffmpeg
docker exec -it next-cloud ffmpeg
vim /pan/apps/next-cloud/config/config.php
'enable_previews' => true,
'enabledPreviewProviders' =>
array (
0 => 'OC\\Preview\\Image',
1 => 'OC\\Preview\\Movie',
2 => 'OC\\Preview\\MarkDown',
3 => 'OC\\Preview\\TXT',
),
docker restart next-cloud
启用缓存
vim /pan/apps/next-cloud/config/config.php
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
'host' => '192.168.5.21',
'port' => 6379,
],
'memcache.local' => '\\OC\\Memcache\\APCu',
通过不被信任的域名访问
vim /pan/apps/next-cloud/config/config.php
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'cloud-nk.leiax00.cn',
2 => '192.168.5.10',
3 => '127.0.0.1',
),
后台任务cron的配置
crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/cron.php
crontab -u www-data -e
*/5 * * * * docker exec --user www-data next-cloud php cron.php
局域网上传速度优化
docker exec --user www-data next-cloud php occ config:app:set files max_chunk_size --value 0
扫描手动拷贝进入的文件
docker exec --user www-data next-cloud php occ files:scan --all
files files:cleanup
files:scan
files:transfer-ownership
格式: files:scan [-p|--path="..."] [-q|--quiet] [-v|vv|vvv --verbose] [--all] [user_id1] ... [user_idN]
参数: user_id
选项: --path
提前生成缩略图
docker exec --user www-data next-cloud php occ preview:generate-all
crontab -u www-data -e
30 2 * * * docker exec --user www-data next-cloud php occ preview:pre-generate
docker exec --user www-data next-cloud php occ config:app:set --value="32 64 1024" previewgenerator squareSizes
docker exec --user www-data next-cloud php occ config:app:set --value="64 128 1024" previewgenerator widthSizes
docker exec --user www-data next-cloud php occ config:app:set --value="64 256 1024" previewgenerator heightSizes
严格模式禁止http访问
web使用https反向代理了http导致的, 配置文件中新增以下配置
'overwriteprotocol' => 'https',
'trusted_proxies' => array(
0 => '10.10.10.1',
)
提示”php-imagick模块不支持SVG”
管理员后台【概览】页提示“此实例中的 php-imagick 模块不支持 SVG。为了获得更好的兼容性,建议安装它。
docker exec next-cloud apt -y update
docker exec next-cloud apt -y install libmagickcore-6.q16-6-extra
您的安装没有设置默认的电话区域
'default_phone_region' => 'CN',
此实例中的 php-imagick 模块不支持 SVG
docker exec -it next-cloud bash
apt install libmagickcore-6.q16-6-extra
您的网页服务器未正确设置以解析“/.well-known/caldav”, “/.well-known/carddav”
由于我的环境比较复杂,
- nexcloud是在树莓派4B的docker中运行
- 通过frp的 tcp + tls 到云服务器
- K8s增加对应外部服务的Service (服务名: simple-zero, port: web12711)
- 通过k8s的ingress-nginx进行反向代理, 最终暴露到外网;
最终等效场景应该是: 反向代理 + docker部署;
解决方案如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /remote.php/dav/
labels:
app.kubernetes.io/instance: simple-zero
name: simple-zero-nextcloud-rewrite
spec:
rules:
- host: cloud.leiax00.cn
http:
paths:
- backend:
service:
name: simple-zero
port:
name: web12711
path: /.well-known/carddav
pathType: Prefix
- backend:
service:
name: simple-zero
port:
name: web12711
path: /.well-known/caldav
pathType: Prefix
tls:
- hosts:
- xxx.cn
- '*.xxx.cn'
secretName: default-sct-tls
rewrite ^/\.well-known/carddav https://$server_name/remote.php/dav/ redirect;
rewrite ^/\.well-known/caldav https://$server_name/remote.php/dav/ redirect;
外网穿透部署
外网穿透推荐frp来实现: FRP文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)