概述环境准备
网络机械硬盘格式化及分区 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 以避免其他用户查看目录。视频文件不显示缩略图启用缓存 外网穿透部署
概述- 目前网盘服务要么都限速, 要么都空间比较小; 对于使用来说, 十分的不方便;对于一些文档, 图片以及视频想通过电视来播放, 又不想插硬盘或u盘;想对自己的数字资料进行集中式管理;
刚好手中有一台树莓派, 一台带宽8M云服务器, 还有几个淘汰下来的机械硬盘; 因此准备自己搭建一个私有云; 对于大流量的访问基本也会是在内网, 外网最多偶尔看看文件, 看看照片之类的, 对于应急使用, 通过云服务器穿透的速度也基本够用了;
环境及耗材信息:
- 安装ubuntu2004的树莓派4B1Tb的机械硬盘,8M云服务器 - ubuntu2004网线一根
注: 根据当前教程创建出来, nextcloud是samba的一个子集, 如果要完整覆盖的话, 需要自行去理清相关目录关系;
环境准备 网络树莓派通过网线连接千兆路由器, 因为树莓派4B的wifi是百兆带宽的, 而网口是千兆的, 因此必须通过网线来连接;
否则通过wifi最大网速(即使手动设置wifi为5G)理论也就 12.5Mb/s, 实测最大峰值也就11多, 平均也就9Mb/s;
网速监控:
apt install ethstatus # 查看 ADSL 的速度 sudo ethstatus -i eth0 # 查看 网卡 的速度 sudo ethstatus -i eth0机械硬盘格式化及分区
机械硬盘需要插在树莓派的 usb3.0 接口上
# 1. 查看磁盘信息 fdisk -l # 2. 开始操作待分区磁盘: /dev/sda, 进入操作命令行中 fdisk /dev/sda # Generic # d delete a partition # F list free unpartitioned space # l list known partition types # n add a new partition # p print the partition table # t change a partition type # v verify the partition table # i print information about a partition # w write table to disk and exit # 通过输入n进行分区, 然后根据提示信息进行相应输入, 最后通过w保存 # 3. 格式化新建分区: /dev/sdb1 mkfs.ext4 /dev/sdb1Samba安装部署
# 1. 安装Samba sudo apt-get install samba samba-common # 2. 新建一个用于共享的目录或挂载硬盘 并赋予权限 mkdir /pan mount /dev/sdb1 /pan chmod 777 -R /pan # 3. 修改samba的配置文件 vim /etc/samba/smb.conf # ================================================================== [share] # 显示的文件名: 127.0.0.1/share comment = NAS Storage # 说明信息 valid users = pi,root # 可访问用户 path = /pan # 共享目录 browseable = yes # 可被其他人看到资源名称(非内容) writable = yes # 可写 create mask = 0755 # 新建文件权限 664 directory mask = 0775 # 新建目录权限 775 # ================================================================== # 4. 设置用户密码 # samba使用的linux的用户, 但是密码是单独设立的; smbpasswd -a# 如果要新建一个用户 groupadd [--gid ID] useradd -g # 加入/移除分组 gpasswd –a gpasswd –d # 5. 重启samba service smbd restart
到这里, 一个网络文件系统就已经部署完成了; 如果不需要云盘相关的一些功能, 直接使用也没有问题
nextCloud安装部署官方文档:
Introduction - Nextcloud latest Administration Manual latest documentation
为了移植方便, 这里选择了docker的方式进行安装, 数据信息全部存储在samba共享目录下, 方便下次迁移到其他机器; 当然会占用磁盘的io了, 不过个人使用, 不想费力气去运维本地环境; 速度也够用;
docker安装# 1. 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 3. 关闭swap:
swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
# 4. 修改主机名称
hostnamectl set-hostname 名字
# 5. 将桥接的IPv4流量传递到iptables的链
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
# 6. 前置库安装
sudo apt-get update
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg
lsb-release
# 7. 添加docker软件源
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
# 8. 安装docker , 自动会安装 docker-ce-cli, containerd.io, 官方安装命令:sudo apt-get install docker-ce docker-ce-cli containerd.io
apt-get install docker-ce=5:19.03.15~3-0~ubuntu-focal
# 9. 修改相关配置
vim /boot/firmware/cmdline.txt
# 结尾追加:
vim /etc/default/grub file
# GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
apt install grub2-common
update-grub
reboot
# 10. 加速及更改驱动
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
安装相关容器
# mariadb 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 # redis docker run --name redis -d -p 6379:6379 -v /pan/apps/redis:/usr/local/etc/redis redis # nextcloud 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_cloudcreate 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 # 输入密码进入mysql的终端 SET GLOBAL innodb_read_only_compressed=OFF;您的数据目录可被其他用户读取, 请更改权限为 0770 以避免其他用户查看目录。
因为我们还要能够通过samba来访问,而且是私服, 完全没必要这么设置, 自己的数据当然自己做主, 这个可以跳过
vim /pan/apps/next-cloud/config/config.php # 在配置数组最后添加一下配置 'check_data_directory_permissions' => false,
保存后, 刷新页面即可
视频文件不显示缩略图# 安装ffmpeg 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 nextcloud 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启用缓存 外网穿透部署



