西区代码小仓库 - 2022年7月
type: channel
link: https://lisper517.top/2022/07/
description: lisper517的个人博客
items: Docker实践——gogs及https与备份
items: Docker树莓派实践——portainer使用https
items: Docker树莓派实践——Typecho及其备份
items: Docker树莓派实践——frp（附dashboard开启https、frp双向验证）
items: Docker树莓派实践——LNMP
items: Docker入门（二）
items: Docker入门（一）
items: NAS（网络附属存储）简介
items: 树莓派+Samba+frp搭建NAS（网络云存储）

Docker实践——gogs及https与备份
type: item
date: 2022-07-31T15:23:00+00:00
description: 步骤/目录： 1.准备工作 2.编写compose模板 3.运行并验证 4.gogs使用https 5.gogs备份本文首发于个人博客https://lisper517.top/index.php/archives/24/，转载请注明出处。本文的目的是使用docker、docker-compose在云服务器上运行gogs。本文实验日期为2022年7月28日。本文使用的云服务器为阿里云轻量应用服务器，系统镜像 Docker 19.03 。之前的文章中曾介绍过gogs，详见 树莓派+云服务器，gogs+frp搭建私有git 。简单来说，使用gogs可以搭建一个私有的轻量级的git服务器，一般gogs用于个人或小微企业。在docker官方仓库网页可以搜索到官方gogs镜像即 gogs/gogs ，其下载量为50M+，3天前更新。下面就使用该镜像+mysql镜像搭建gogs服务。1.准备工作和frp的部署一样，笔者准备了一台云服务器，如果只打算在局域网用gogs也可以在本地机器上运行。在服务器上准备目录，拉取镜像：mkdir -p /docker/gogs/data/gogs mkdir /docker/gogs/data/mysql mkdir -p /docker/gogs/conf/mysql docker pull gogs/gogs docker pull mysql:8.0.29这里需要简单说明一下docker-gogs的使用。容器内的22端口用于git命令相关操作，3000用于网页访问；容器内的/data目录包含了仓库、gogs的个性化设置。2.编写compose模板编写compose模板：vim /docker/gogs/docker-compose.yml写入以下内容：version: "3.9" services: gogs: image: gogs/gogs ports: - "50023:22" - "9444:3000" volumes: - /docker/gogs/data/gogs:/data depends_on: - mysql logging: driver: syslog restart: always mysql: image: mysql:8.0.29 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: gogs MYSQL_USER: gogs MYSQL_PASSWORD: 234567 command: - mysqld - --character-set-server=utf8 - --default-authentication-plugin=mysql_native_password volumes: - /docker/gogs/data/mysql:/var/lib/mysql - /docker/gogs/conf/mysql:/etc/mysql/conf.d logging: driver: syslog restart: always根据 docker-mysql 的介绍，通过 MYSQL_USER 、 MYSQL_PASSWORD 创建的用户，对通过 MYSQL_DATABASE 创建的数据库享有所有权限。3.运行并验证cd /docker/gogs docker-compose config docker-compose up记得在云服务器的设置里打开9444、50023端口。这时可以访问 云服务器ip:9444 ，出现gogs初始页面。这里谈一点gogs的初始设置：数据库选mysql，数据库主机填mysql:3306，用户密码就是gogs@234567。基本设置里的域名，笔者使用云服务器就填服务器ip，应用URL则不影响实际、只是展示用。SMPT设置和typecho的CommentNotifier插件差不多，见 Docker树莓派实践——Typecho及其备份 。如果是私人或小微企业，可以在 禁止用户自主注册 、 启用登录访问限制 里打勾。具体配置细节还是参考 gogs/gogs镜像原址 。另外，若要后台运行docker-frpc，可使用docker-compose up -d命令。4.gogs使用httpsgogs可以使用https，这里笔者使用的是自己域名的证书，也可以用自签证书。mkdir /docker/gogs/ssl_certificate cp /docker/gogs/data/gogs/gogs/conf/app.ini /docker/gogs/data/gogs/gogs/conf/app.ini_backup vim /docker/gogs/data/gogs/gogs/co…

Docker树莓派实践——portainer使用https
type: item
date: 2022-07-29T15:58:00+00:00
description: 步骤/目录： 1.准备工作 2.运行并测试 3.其他方式本文首发于个人博客https://lisper517.top/index.php/archives/23/，转载请注明出处。本文的目的是使用docker在云服务器上运行portainer，并使得其网页UI只能使用https访问。本文实验日期为2022年7月29日。本文使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ）。云服务器为阿里云的轻量应用服务器，镜像为Docker 19.03。之前的文章中曾介绍过使用https访问frp的dashboard，详见 Docker树莓派实践——frp（附dashboard开启https、frp双向验证） 。上次生成的server.crt和server.key在本文中也会用到。本文主要参考了 portainer的官方文档 。1.准备工作首先需要生成自己的.crt和.key文件。这里和 Docker树莓派实践——frp（附dashboard开启https、frp双向验证） 中一模一样，同样参考了 gofrp文档 。在树莓派上进行以下操作：mkdir /home/pi/ssl_cert #或者在其他文件夹，只要是WinSCP登录用户能访问的文件夹 cd /home/pi/ssl_cert find / -name "openssl.cnf" #查找openssl.cnfopenssl.cnf是openssl的配置文件，需要拷贝到/home/pi/ssl_cert下。在树莓派上找到了/usr/lib/ssl/openssl.cnf和/etc/ssl/openssl.cnf，但内容与 gofrp文档 有些差异。于是笔者直接复制了 gofrp文档 中的配置：nano /home/pi/ssl_cert/my-openssl.cnf写入以下内容：[ ca ] default_ca = CA_default [ CA_default ] x509_extensions = usr_cert [ req ] default_bits = 2048 default_md = sha256 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca string_mask = utf8only [ req_distinguished_name ] [ req_attributes ] [ usr_cert ] basicConstraints = CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = CA:true接下来生成默认ca（CA即Certification Authority，颁发证书的机构）：openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -subj "/CN=www.lisper517.top" -days 5000 -out ca.crt其中可以把www.lisper517.top改成自己的域名，或者也可以乱写。然后使用以下命令生成证书：#第一条命令 openssl genrsa -out server.key 2048 #第二条命令 openssl req -new -sha256 -key server.key \ -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=server.com" \ -reqexts SAN \ -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:47.98.39.236,DNS:lisper517.top")) \ -out server.csr #第三条命令 openssl x509 -req -days 365 \ -in server.csr -CA ca.crt …

Docker树莓派实践——Typecho及其备份
type: item
date: 2022-07-27T02:46:00+00:00
description: 步骤/目录： 1.方法一：独立镜像、network连接 （1）准备工作 （2）运行容器与测试 （3）收尾与总结 2.方法二：docker-compose （1）准备工作 （2）编写文件并运行项目 （3）收尾与总结 3.实战：编写易移植的typecho博客并使用https （1）准备工作 （2）编写nginx配置及compose模板 （3）运行项目并测试 （4）问题及其他 a.博客迁移 b.安装完成后无法登录 c.typecho镜像选择 d.typecho插件及其他 （5）后续 （6）为typecho添加其它功能 a.在文章页面添加最新文章 b.添加侧边栏目录索引 c.添加Sitemap d.添加网站图标 e.添加回到顶部按钮 （7）使用其它主题 （8）升级版本本文首发于个人博客https://lisper517.top/index.php/archives/22/，转载请注明出处。本文的目的是使用docker、docker-compose在树莓派上运行Typecho。本文实验日期为2022年7月26日。本文使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ）。之前的文章中曾介绍过Typecho，详见 树莓派搭建个人博客 。简单来说，Typecho是LNMP环境下运行的个人博客。学习Docker后，发现docker官网有typecho官方维护的镜像，于是试着用docker运行typecho。另外，这个镜像的下载量为100K+，但更新时间为3年前。官方镜像虽然只有50K下载，但最近更新比较勤（据说之前typecho五年没更新，docker镜像就更不会更新了），所以下面还是使用官方镜像。在typecho官方镜像页可以看到后缀不同的镜像，这些镜像的命名格式是：nightly-php版本号-后缀。php的版本主要有7.3、7.4、8.0，后缀主要有 空后缀、cli、fpm、apache、alpine 。本文选用的镜像是nightly-php8.0-apache。1.方法一：独立镜像、network连接主要思路是使用nightly-php8.0-apache镜像（apache和nginx作用一样，也是网页服务器），搭配docker-mysql。两个容器独立运行，使用docker network连接。需要注意typecho设置时如何填写数据库地址。在这种方式中，可以不用Dockerfile或docker-compose。（1）准备工作准备文件夹并拉取镜像：mkdir -p /test/mysql/data mkdir /test/mysql/conf docker network create -d bridge net_test docker pull mysql:8.0.29 docker pull joyqi/typecho:nightly-php8.0-apache拉取typecho镜像时比较慢，需要耐心等待。感觉白天镜像下的快一点。（2）运行容器与测试进行如下操作：docker run -itd --name mysql_test -v /test/mysql/data:/var/lib/mysql -v /test/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.29 docker run -d --name typecho_test -p 80:80 joyqi/typecho:nightly-php8.0-apache docker network connect net_test mysql_test docker network connect net_test typecho_test笔者实验时宿主机的80、3306端口没有被占用，有占用的话需自行更改。另外，typecho初始化时使用的数据库需要提前创建。进行如下操作：docker exec -it mysql_test bash mysql -uroot -p #这里连不上库可以参考 Docker树莓派实践——LNMP 中的附录 create database test; show databases; exit exit顺便也可以查看mysql容器是否运行正常。如果不想进入mysql容器，也可在mysql容器启动命令中指定MYSQL_DATABASE：docker run -itd --name mysql_test -v /test/mysql/data:/var/lib/mysql -v /test/mysql/conf:/…

Docker树莓派实践——frp（附dashboard开启https、frp双向验证）
type: item
date: 2022-07-27T02:44:00+00:00
description: 步骤/目录： 1.准备工作 2.编写frpc.ini和compose模板 3.运行并验证 附录： 1.让frps的dashboard使用https （1）tls介绍 （2）生成证书并运行 （3）访问的注意事项 2.frp双向验证 （1）介绍 （2）准备工作 （3）修改配置并运行本文首发于个人博客https://lisper517.top/index.php/archives/21/，转载请注明出处。本文的目的是使用docker、docker-compose在云服务器上运行frps、在树莓派上运行frpc。本文实验日期为2022年7月27日。本文使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ）。之前的文章中曾介绍过frp，详见 在树莓派上设置frp穿透 。简单来说，frp的运行需要一台有公网ip的机器和另一台机器（比如没有公网ip的内网机器）；frp的作用是把另一台机器的端口映射到公网机器，使得从公网机器也能访问到另一台机器的端口（即内网穿透）。在docker官方仓库网页可以搜索到很多frp镜像，这里frpc选用的是snowdreamtech/frpc镜像，其下载量为10M+，两个月前更新。frps镜像也是该作者的。1.准备工作首先准备云服务器。笔者这里使用的是阿里云，镜像为Docker 19.03。在云服务器上进行如下操作：docker pull snowdreamtech/frps mkdir -p /docker/frps/conf mkdir /docker/frps/ssl_certificate #存放tls相关证书 #安装docker-compose。使用env命令发现PATH里没有/usr/local/bin，就放在/usr/bin里了 curl -L https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose chmod +x /usr/bin/docker-compose docker-compose -v #编辑frps配置 vim /docker/frps/conf/frps.ini笔者使用的初始frps配置如下：[common] bind_port = 7000 #frpc上也要有相同的token值 token = 你的密码 #frps统计板 dashboard_port = 7500 dashboard_user = wuhuqifei dashboard_pwd = wuhuqifei #kcp据说是多消耗15%流量、降低tcp延迟。端口可和bind_port相同 kcp_bind_port = 7000使用初始配置时的运行命令：docker run -d --name frps -v /docker/frps/conf/frps.ini:/etc/frp/frps.ini --network host --restart=always snowdreamtech/frps为了让dashboard使用tls协议加密，笔者将frps.ini修改为：[common] bind_port = 7000 #frpc上也要有相同的token值 token = 你的密码 #frps统计板 dashboard_port = 7500 dashboard_user = wuhuqifei dashboard_pwd = wuhuqifei #kcp据说是多消耗15%流量、降低tcp延迟。端口可和bind_port相同 kcp_bind_port = 7000 #dashboard使用tls的相关配置 dashboard_tls_mode = true dashboard_tls_cert_file = /ssl_certificate/server.crt dashboard_tls_key_file = /ssl_certificate/server.key关于.crt、.key、ca.crt文件的介绍与自己生成的方法见 附录1. ，或者参考 gofrp文档 。然后更改命令，加上挂载证书存放目录的部分：docker run -d --name frps -v /docker/frps/conf/frps.ini:/etc/frp/frps.ini -v /docker/frps/ssl_certificate:/ssl_certificate --network host --restart=always…

Docker树莓派实践——LNMP
type: item
date: 2022-07-26T08:16:00+00:00
description: 步骤/目录： 1.下载、烧录Pi OS最新镜像 2.安装docker并调试；备份系统镜像 3.方法一：假docker法 （1）拉取并运行ubuntu镜像 （2）安装vim、nginx （3）安装php并配置nginx （4）安装mariadb （5）收尾及总结 4.方法二：胖容器法 （1）创建环境，运行容器 （2）测试容器 （3）收尾及总结 5.方法三：瘦容器法 （1）创建环境，配置nginx （2）创建网络，开启php、nginx容器并测试 （3）运行mysql容器并测试 （4）准备环境并编写compose模板，运行并测试 （5）收尾及总结 附录 1.docker连接mysql时显示"Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'" （1）docker run /bin/bash （2）Dockerfile CMD （3）docker run未挂载或映射端口 （4）mysql配置问题 2.使用docker-compose创建mysql容器时的初始化 （1）挂载配置文件和数据库 （2）进入服务容器修改 （3）挂载到/docker-entrypoint-initdb.d （4）Dockerfile COPY到/docker-entrypoint-initdb.d （5）--init-file选项本文首发于个人博客https://lisper517.top/index.php/archives/20/，转载请注明出处。本文的目的是使用docker、docker-compose在树莓派上搭建LNMP环境。本文实验日期为2022年7月25日。本文使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ），装上系统后仅做了一些基础配置（安装了ufw、watchdog，设置了ssh密钥，apt update了一下）。LNMP环境指Linux、Nginx、Mysql、Php，LNMP常用于提供动态网页服务。一般来说使用docker有三种方式搭建LNMP环境：一是使用linux容器（如centos或ubuntu），docker run -it ubuntu bash，类似不使用docker时进行安装；二是使用Dockerfile，FROM ubuntu开始构建一个镜像，安装NMP；三是单独生成N、M、P的镜像，使用docker-compose或其他方法管理。方法一属于下策，但是最简单易行；方法二可称为fat container，只需要一个镜像、一个容器，缺点是不利于NMP的版本变更，但在一些情况下也可以使用；方法三为thin container，需要三个容器跑一个功能，容器多但是利于版本更迭、调整环境，而且使用docker-compose可以非常方便地管理多个容器。这里三种方法都演示一下。另外，如果需要非docker搭建LNMP，可以参考之前的文章 树莓派搭建个人博客 。1.下载、烧录Pi OS最新镜像这里涉及的操作之前的文章已经介绍过了，详见 树莓派4B初始化 。本次实验使用的是树莓派4B。在系统镜像下载网页下载最新的Pi OS 64位桌面版（下载文件名为2022-04-04-raspios-bullseye-arm64.img.xz，解压为.img文件后大小为3.95GB）。注意2022年4月后Pi OS取消了默认的pi用户，但可以自己创建：在boot下新建userconf文件，写入以下内容：pi:$6$8WzhrUbnvxbJdS5n$p5acHHXaB02qI1eCJrSH4lSUOsXx9WnTvbNm2T9h9d/OmnFuf0qXGTAYF3GK5pqFONn7LiA4Khn4AHXcYG72D/这样就手动创建了pi用户，密码还是raspberry。装上系统后仅进行了apt-get upgrade，安装并设置了ufw、watchdog，调整了ssh设置。2.安装docker并调试；备份系统镜像安装、调试docker和docker-compose的过程在前面已经介绍，这里不再赘述（见 Docker入门（一） ）。记得换docker源。这里使用RaspberryBackup脚本备份系统，详细介绍见 树莓派备份-RaspberryBackup详解 。3.方法一：假docker法再次提醒，这种方法只是学术探讨，实际环境中不管是生成还是测试都不要使用。（1）拉取并运行ubuntu镜像docker pull ubuntu docker run -itd -p 80:80 --name ubuntu_LNMP --…

Docker入门（二）
type: item
date: 2022-07-26T08:15:00+00:00
description: 本文较长，属于系统性总结，可作为使用手册查阅。本文主要介绍了docker-compose的使用。步骤/目录： 1.Docker Compose （1）安装compose与卸载 （2）compose的使用例一 （3）docker-compose命令 a.build b.config c.down d.exec e.images f.kill g.logs h.pause i.port j.ps k.pull l.push m.restart n.rm o.run p.scale q.start r.stop s.top t.unpause u.up v.help w.version （4）docker-compose.yml模板文件 a.build b.cap_add，cap_drop c.command d.configs e.cgroup_parent f.container_name g.deploy h.devices i.depends_on j.dns k.dns_search l.tmpfs m.env_file n.environment o.expose p.external_links q.extra_hosts r.healthcheck s.image t.label u.logging v.network_mode w.networks x.pid y.ports z.secrets a1.security_opt b1.stop_signal c1.sysctls d1.ulimits e1.volumes f1.其他指令 g1.读取变量值 （5）docker-compose实战 2.其他进阶内容 3.使用docker-compose更新容器 4.docker使用心得 （1）docker网络-单机 （2）docker与ufw （3）docker网络-多机本文首发于个人博客https://lisper517.top/index.php/archives/19/，转载请注明出处。本文的目的是对docker-compose相关内容做总结归纳，使用本文从零学习docker将有一定难度。本文主要总结自菜鸟教程和Docker——从入门到实践和一些其他零散资料，有不明白的地方请参考原文。本文写作日期为2022年2月-7月。本文涉及的主要是docker的进阶内容，初学者可以先只看Docker Compose，再使用一段时间docker后，有需要再学习其他的。1.Docker Compose更详细的说明见Docker Compose，这里只做一个快速手册式的总结。在以下compose的讲解中，服务（service）指一个镜像实例化的一个或多个容器（为了便于理解，笔者一般都称服务容器），项目（project）指为了完成某种功能而相互协作的多个容器构成的整体。Docker Compose是一种管理多个容器的工具，只需要配置docker-compose.yml（compose模板）文件就能打包多个容器为一个项目（project）。YAML格式（.yml文件）类似html、json格式，是一种组织内容表达的格式，规则类似json的键值对，形式上不同而已。最后，原来的compose是用python写的，后来的compose v2则是官方用Go重写的。（1）安装compose与卸载compose支持linux、mac、windows平台；可通过pip或二进制包下载两种方式安装。对于mac、windows平台，其docker桌面版自带compose；对于linux平台，x86_64架构的机器，可使用以下方式安装（该命令会自动选择合适的平台）：curl -L https://github.com/docker/compose/releases/download/v1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose #国内用户可替换为以下命令加快下载，笔者实验的时候这个网页好像已经失效了 curl -L https://download.fastgit.org/docker/compose/releases/download/v1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose #至此就算安装完成对于linux平台，arm架构的机器（如树莓派），可使用pip安装：pip install -U docker-compose另外还可以使用以下命令进行bash命令补全（…

Docker入门（一）
type: item
date: 2022-07-11T13:43:00+00:00
description: 本文较长，属于系统性总结，可作为使用手册查阅。本文主要介绍了docker常识与基础。步骤/目录： 一、初识docker与安装docker 二、docker网页GUI与docker源 三、docker命令行基本操作 1.docker pull拉取镜像 2.docker run运行容器 3.docker image ls查看镜像 4.docker image rm删除镜像 5.docker commit保存容器 6.docker cp及其他命令 四、编写Dockerfile定制镜像 1.FROM和RUN命令 2.Dockerfile的其他指令 （1）COPY （2）ADD （3）CMD （4）ENTRYPOINT （5）ENV （6）ARG （7）VOLUME （8）EXPOSE （9）WORKDIR （10）USER （11）HEALTHCHECK （12）ONBUILD （13）LABEL （14）SHELL 3.拉取时自动对应系统 4.其他方式制作镜像 五、操作容器 1.启动容器 2.后台运行容器 3.终止/重启容器 4.进入容器 5.导入/导出容器 6.删除容器 六、仓库 1.官方仓库 2.私有仓库 3.使用Nexus帮助管理私有仓库 七、docker数据卷 1.数据卷的常用操作 2.挂载宿主机目录作为数据卷 八、容器与网络 1.端口映射 2.docker网络 3.配置DNS 4.高级网络配置本文首发于个人博客https://lisper517.top/index.php/archives/18/，转载请注明出处。本文的目的是对docker基础内容做总结归纳，使用本文从零学习docker将有一定难度。本文主要总结自菜鸟教程和Docker——从入门到实践和一些其他零散资料，有不明白的地方请参考原文。本文写作日期为2022年2月-7月。本文使用的是树莓派4B（内存8G版），系统为Pi OS 64位桌面版（2022年4月4日更新，镜像名 2022-04-04-raspios-bullseye-arm64.img ），装上系统后仅做了一些基础配置（安装了ufw、watchdog，设置了ssh密钥，apt update了一下）。一、初识docker与安装dockerDocker是基于Go语言的开源应用容器引擎，可以将应用和依赖打包成容器、在其他linux/windows/mac机器运行，还支持虚拟化。docker的优点主要有三：标准化、一致化；可移植、响应式部署；轻量级、硬件开销小。最后附上docker官网和Github社区版docker。另外，Docker对比传统虚拟机有很大优势（硬件开销小）。最后介绍一下docker架构：包括镜像，容器和仓库。面向对象编程中，类实例化后就创建了对象，对于docker来说，镜像=类，容器=对象，仓库则用来保存镜像。另外，可通过 仓库名:标签 指定镜像版本，不给出时默认为latest。安装docker推荐使用官方脚本自动安装，树莓派可运行如下命令：cd /tmp curl https://get.docker.com/ > ./docker_install.sh chmod +x docker_install.sh sh docker_install.sh –mirror Aliyun #换源安装 rm docker_install.sh没有配置源时不要直接apt install安装Docker，使用apt命令安装可参考树莓派实验室和Docker——从入门到实践。安装完后测试docker，输入：docker run hello-world #输出结果 Unable to find image 'hello-world:latest' locally #默认为latest，并先在本地查找 latest: Pulling from library/hello-world #从公共仓库pull，这里是默认的Docker Hub 9b157615502d: Pull complete Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted…

NAS（网络附属存储）简介
type: item
date: 2022-07-06T15:15:00+00:00
description: 步骤/目录： 1.NAS释义及其用途 （1）局域网共享 （2）私人云存储 （3）离线下载 （4）数据备份/数据安全 （5）多人数据共享 （6）存储主机 2.NAS的实现方法 （1）商品NAS （2）DIY a.购买部件 b.NAS端软件下载 c.客户端软件与使用本文首发于个人博客https://lisper517.top/index.php/archives/17/，转载请注明出处。本文的目的是对NAS的大致框架进行简单介绍。本文写作日期为2022年7月6日。1.NAS释义及其用途NAS全称Network Attached Storage，即网络附属存储，通俗地说，基础的NAS就是一台小电脑+硬盘。相比于单纯的U盘、硬盘，NAS多出来的小主机可以实现很多额外的功能。NAS的用途可以大致分为以下几方面：（1）局域网共享比如在家庭场景下，可能包含windows电脑、linux电脑、MAC OS电脑、android或苹果手机、多种平板、电视机、投影仪等多种设备，有时需要在各个设备间共享文件，使用NAS的话就不用拿U盘拷来拷去。这里更偏向于多设备共享数据。（2）私人云存储如果使用一些手段使得外网也能访问NAS，那么就等同于拥有了私人云存储服务，实现云办公等。相较于百度网盘、阿里云盘等服务，NAS私人云存储的好处主要有：数据更偏向于在自己手里，泄露风险少；文件不会莫名其妙违规，一般也不会被网盘审查；不用买VIP，访问NAS的速度更快；敏感文件不会被网盘企业备份。（3）离线下载配合aria2、qBittorrent等软件，可以实现“离线”下载（台式机或笔记本离线）。相比于用台式机挂机下载，优势是耗电少、占用资源少、风扇噪音小。（4）数据备份/数据安全对一些重要数据可以用NAS进行云备份，常用的实现方法比如RAID等，可以通过重要数据存两份或纠错码等其他方式保全数据。（5）多人数据共享在公司等需要多人协作的场景下，可以实现内部数据共享。这里更偏向于多人、多设备、同时共享数据。（6）存储主机以后购买的电脑无需额外购置硬盘，把NAS作为存储即可，类似网吧。2.NAS的实现方法（1）商品NAS主要有群晖、威联通等品牌，其中群晖目前（2022年7月）仍占据相当一部分国内市场。相对于DIY，商品NAS的优势是简单易上手、配套服务（内网穿透等）成熟，缺点是定制度不够、价格较贵。（2）DIY这一部分只是简单介绍一下，具体细节可参考 树莓派+Samba+frp搭建NAS（网络云存储） 。a.购买部件如上所述，NAS主要包括一个小电脑和硬盘（以及硬盘读取设备），但是为了增加安全性还可以买一个UPS（不间断电源），减少或防止突然断电造成的数据丢失（有的UPS在停电时还可发出关机信号，使NAS主机自动关机）。小电脑有很多选择，比如：专门的NAS主板、树莓派/其他派（见 树莓派型号、参数与作用 ）、路由器（常用的是带USB接口的）、改造过的机顶盒/投影仪、老旧笔记本/手机等。这部分可能花费200-1000。如果小电脑没有硬盘接口或者硬盘比较多时，需要购买硬盘读取设备（输出接口为SATA或USB3.0）。常见的有专门的NAS硬盘盒、普通的硬盘盒，也大概花费200-1000。硬盘一般是花费大头。目前的西部数据、希捷都有NAS专用硬盘，一张8T的大概1500左右。单纯给NAS用的小输出功率UPS可能在300-500。但是如果预算充足，可以顺便给台式机等其他设备买多设备用的高功率UPS，1000左右。如果有空闲的杂物房，也可以买一个退役的存储服务器，缺点是噪音稍大（60分贝甚至更高），优点是设计成熟（散热风道，稳定性）。目前来说笔者较推荐Dell的存储服务器，比如R730XD（见 b站视频 ），它使用双路主板，可用E5的CPU（E5神教）。b.NAS端软件下载有一些用于NAS的系统（TrueNas/FreeNas，OpenMediaVault），集成了分享、离线下载等各种NAS端功能，还推出了多种系统的客户端。如果不想用，也可以用下面提到的软件自己搭建。对于windows或linux主机，都可通过samba、ftp等方式实现硬盘共享；使用aria2、qBittorrent等软件可实现离线下载；使用RAID等方式实现NAS数据安全（比如Ubuntu+mdadm）。使用frp或其他软件实现外网访问（还需要一个公网ip），更简单的方式则是 ipv6+DDNS 。使用plex、emby、jellyfin等软件管理影音文件。如果怕某地天灾（地震、火灾、洪灾等），可以异地+多个NAS，并使用Rsync进行异地备份（建议搭配ipv6。见 b站视频 ）。c.客户端软件与使用对samba、ftp实现的NAS，windows、linux机器上使用资源管理器或浏览器即可连接到NAS，andro…

树莓派+Samba+frp搭建NAS（网络云存储）
type: item
date: 2022-07-06T08:57:00+00:00
description: 步骤/目录： 0.Samba的陷阱 1.树莓派下载安装samba 2.配置samba 3.为samba绑定系统用户 4.其他客户端连接到共享文件夹 （1）linux （2）Windows （3）安卓手机 （4）投影仪、电视 附：ES文件浏览器 连接Samba 5.frp+samba 6.加快读写速度 （0）分析瓶颈、测试硬盘 （1）网线直连 （2）换路由器 （3）修改smb.conf （4）其他 （5）后续 （6）总结 7.自动挂载硬盘 8.使用qBittorrent离线下载 附录：小米手机开启FTP服务器本文首发于个人博客https://lisper517.top/index.php/archives/16/，转载请注明出处。本文的目的是使用树莓派搭建NAS，可以远程访问云硬盘上的文件，并可进行离线下载。本文实验日期为2022年2月19日。使用的是树莓派4B（内存8G版），系统为Pi OS 32位桌面版（2022年1月28日更新，镜像名 2022-01-28-raspios-bullseye-armhf.img ）。frps运行在阿里云服务器（系统镜像Ubuntu 20.04）。本文使用Samba搭建NAS，而且并没有涉及UPS电源、RAID等，属于入门级NAS，感兴趣的可自行深造。Samba可以替换为FTP，或者懒得自建NAS也可以购买群晖等现成NAS。0.Samba的陷阱当你在windows中打开 我的电脑 ，此时打开的东西叫文件管理器（Windows Explorer）。从文件管理器向其它地方拷贝东西，WE会要求目标硬盘先创建一个同等大小的空镜像（内容全部为0的镜像），再填充数据；Samba会调用 ftruncate() 函数来创建，而该函数在FAT文件系统上运行奇慢，需要花很长时间才能创建好空白镜像，WE以为Samba卡死了，最终会返回0x8007003B错误（ 参考回答 ）。FAT文件系统创建空镜像这么慢，归根结底是不支持sparse file（稀疏文件），所以它创建空镜像时真的会在硬盘上挨个写入0；而支持sparse file的，直接指定空镜像文件的头尾区块、存在metadata中即可，不用管这些区块上原本是1还是0。在Samba的设置中有一项隐藏的默认值 strict allocate = no ，如果改成yes，当单个文件大小超过500MB，Samba自己就会要求先生成空镜像再填充数据（参考 wiki-Samba 的 SMB/SMB2 write activities 一节）。综上所述，不需要改Samba的配置，只要保证Samba挂载的不是FAT文件系统（exFAT、FAT32）而是ext4、NTFS就行了（ 参考回答 ）。先创建空镜像再写入，本意是好的，只是FAT执行坏了。1.树莓派下载安装samba输入apt install samba即可。一共安装了16个包（如果没有samba-common-bin则需手动下载）：attr libcephfs2 liburing1 python3-dnspython python3-gpg python3-markdown python3-requests-toolbelt python3-samba python3-tdb python3-yaml samba-common samba-common-bin samba-dsdb-modules samba-vfs-modules tdb-tools2.配置sambasamba的配置文件为/etc/samba/smb.conf。在其中底部添加：[shared] path = /home/samba_user/shared #共享文件夹目录 valid users = samba_user writable = yes read only = no create mask = 0755 #创建文件时，权限为755（测试时发现不管改成什么，创建的文件都是755） directory mask = 0755 #创建目录权限为755（同上） #browseable = yes #无权限的人可看到资源名称另外在[global]下添加：security = user #设定安全等级保存退出，使用testparm检测samba设置有无语法错误。关于samba配置更多信息可参考这篇文章。安全方面，还可用hosts allow设置允许访问的主机、write list设置仅哪些用户可进行写操作。3.为samba绑定系统用户创建用户的命令可以参考 提升树莓派安全性 。这里新建一个用户samba_user，并创建共享文件夹：mkdir -p /home/samba_user/shared useradd -d /home/samba_user…