Skip to content

Commit

Permalink
docs: update posts (Docker)
Browse files Browse the repository at this point in the history
  • Loading branch information
rockbenben committed Mar 21, 2024
1 parent c3bf2f2 commit 658c9c2
Show file tree
Hide file tree
Showing 32 changed files with 469 additions and 241 deletions.
2 changes: 1 addition & 1 deletion docs/.vuepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ export default sidebar({
icon: "",
prefix: "",
collapsible: true,
children: ["reverse-proxy.md", "cors-anywhere.md", "deeplx.md"],
children: ["reverse-proxy.md", "cors-anywhere.md", "deeplx.md", "portainer.md"],
},
{
text: "其他",
Expand Down
64 changes: 51 additions & 13 deletions docs/services/dockers-on-nas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,74 @@ title: NAS 应用集合
icon: process
---

网络附加存储(NAS)日益重要,它提供了一个平台,可以部署各种 Docker 服务,进而完成个人的自动化工作流程。[awesome-selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted)可查看多种自部署服务。而使用 `docker-compose.yml` 文件进行 Docker 部署无疑是其中最为便捷的方法。具体如何使用 docker-compose,可以参考 [TTRSS docker-compose 的教程](http://ttrss.henry.wang/zh/#%E9%80%9A%E8%BF%87-docker-compose-%E9%83%A8%E7%BD%B2)
随着网络附加存储(NAS)在个人和小型企业中的广泛应用,它不仅是数据存储的理想选择,也成为了部署各种 Docker 服务、完成个人自动化工作流程的强大平台。探索 [awesome-selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted) 可以发现多种自部署服务,这些服务适合在 NAS 上运行,覆盖从网页应用到服务器软件等广泛领域

操作步骤如下:
## 部署教程

1. 打开「控制面板」,选择「终端机和 SNMP」,并开启 SSH 功能。
2. 使用 putty 或其他 SSH 客户端连接到群晖,并导航到 `docker-compose.yml` 文件的所在目录,例如:`cd /volume3/storage`
3. 在该目录下,执行 `sudo docker-compose up -d` 并稍等片刻以完成部署过程。
4. 为了系统安全,完成操作后不要忘记关闭 SSH 功能。
### Docker Compose 部署

注意:root 用户需在命令前添加 `sudo`,否则可能遇到 `Permission denied` 的提示。另外,可以使用 `sudo -i` 来直接获得 root 权限
使用 `docker-compose.yml` 文件进行 Docker 部署不仅简便高效,而且适用于各种 NAS 系统,包括但不限于群晖、Qnap、Unraid 等。此处以群晖 NAS 为例,介绍通过 Docker Compose 部署应用的过程,而在其他系统上的操作流程大同小异

## 部署问题
1. **启用 SSH 功能**
- 登录到你的 NAS 设备,打开「控制面板」。
- 选择「终端机和 SNMP」选项,然后启用 SSH 功能,以便可以通过 SSH 客户端远程访问你的 NAS。

### 路径对照
2. **准备 `docker-compose.yml` 文件**
- 创建一个名为 `docker-compose.yml` 的文件。
- `ports`部分容器和宿主机之间的端口,用于 Web 界面访问和服务配置。
- `volumes`部分则映射了数据存储位置,确保数据的持久化。
- 将所需的部署配置代码粘贴进这个文件。确保代码正确无误,并根据需要调整服务设置。

3. **通过 SSH 连接到 NAS**
- 使用 SSH 客户端(如 PuTTY 或其他终端软件)连接到你的 NAS。
- 根据提示输入用户名和密码进行登录。

4. **导航至 `docker-compose.yml` 文件所在目录**
- 执行命令 `cd /volume3/storage`(或你存放 `docker-compose.yml` 文件的具体路径)。

5. **执行 Docker Compose 命令**
-`docker-compose.yml` 文件所在的目录下,执行命令 `sudo docker-compose up -d`
- 此命令会在后台启动并运行你的 Docker 容器。稍等片刻,等待部署过程完成。

6. **关闭 SSH 功能**(推荐):
- 为了系统安全,完成部署操作后,建议关闭 NAS 的 SSH 功能。
- 返回到「控制面板」中的「终端机和 SNMP」选项,禁用 SSH 功能。

**注意**

- 对于非 root 用户,执行 Docker 相关命令时需要在命令前添加 `sudo`,以避免遇到 `Permission denied` 的权限问题。
- 通过执行 `sudo -i` 命令,可以直接获得 root 用户的权限,便于管理和执行后续操作。

通过遵循以上步骤,你可以轻松在 NAS 上部署和管理 Docker 容器,无论是群晖 NAS 还是其他品牌的 NAS 系统。这一过程不仅提升了部署的效率,也使得容器化应用的管理变得更加灵活方便。

虽然你可以轻易地采用我所分享的 compose 设置进行安装,但对于 volumes 部分,你需要重点关注本地存储的路径选择。拿 emby 作例,电视剧路径配置可以为 `/volume1/tvshows:/data/tvshows`
### Portainer 部署

在这里,`/data/tvshows` 是 Docker 的固定内部路径,不能修改。而 `/volume1/tvshows` 则是你可以根据实际情况自由定义的本地路径。
如果你的 NAS 系统上已安装 [Portainer](./portainer.html),可直接通过以下步骤使用 Portainer 部署 Docker 服务:

1. 在 Portainer 界面中依次选择 Stacks > Add stack。
2. 在 Web editor 中粘贴你的 `docker-compose.yml` 配置,然后点击 Deploy the stack 完成部署。

![](https://img.newzone.top/2024-03-21-05-57-36.png?imageMogr2/format/webp)

## 常见问题

### 路径对照

在配置 volumes 时,请特别注意本地存储路径的选择。例如,Emby 服务的电视剧路径配置可能为 `/volume1/tvshows:/data/tvshows`。这里,`/data/tvshows` 是 Docker 容器内部的固定路径,而 `/volume1/tvshows` 是你可根据实际情况自定义的 NAS 本地路径。

### 用户与组身份

UID 和 GID 分别代表用户身份和组身份标识。在启动 Docker 容器时,默认情况下,容器进程是以 root 用户(UID 0)运行。然而,从安全的角度出发,非 root 的运行模式会更加安全,因为这可以在容器受到攻击时,降低攻击者获取主机高权限的风险。在常规的设置中,UID 和 GID 通常被设置为 1000。但例如在群晖系统中,第一个用户的 UID 实际为 1026,而 GID 则为 100。

值得注意的是,当外部系统的用户标识与 NAS 上的 UID/GID 存在不匹配的情况时,可能会出现权限不一致的问题,进而影响到文件的正常访问权限。

文章中我默认提供的是群晖 UID/GID,非群晖系统可以都该为 1000。

### 文件夹访问权限

对于如 Emby 这类依赖外部存储资源的 Docker 服务,文件夹的访问权限是不可或缺的。一个直接的解决方案是将文件夹的权限设置为“所有人”(Everyone。然而,这样的做法在安全性上存在隐患。一旦有人获得 Docker 的操作权限,相关文件夹很可能会被擅自更改,这只能作为一个短期的权宜之计。
对于如 Emby 这类依赖外部存储资源的 Docker 服务,文件夹的访问权限是不可或缺的。一个直接的解决方案是将文件夹的权限设置为“Everyone。然而,这样的做法在安全性上存在隐患。一旦有人获得 Docker 的操作权限,相关文件夹很可能会被擅自更改,这只能作为一个短期的权宜之计。

下图以 Emby 服务中的电视节目存储路径 `/volume1/tvshows` 为实例,为了确保正常运行,我们可以临时为该文件夹授权“所有人”权限,但建议后续寻求更安全的权限管理策略。
下图以 Emby 服务中的电视节目存储路径 `/volume1/tvshows` 为实例,为了确保正常运行,我们可以临时为该文件夹授权“Everyone”权限,但建议后续寻求更安全的权限管理策略。

![](https://img.newzone.top/2023-09-16-08-42-22.png?imageMogr2/format/webp)

Expand Down
48 changes: 28 additions & 20 deletions docs/services/dockers-on-nas/alist.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,9 @@ title: Alist:聚合网盘
order: 23
---

[Alist](https://alist.nn.ci/zh/guide/install/docker.html) 是支持多种存储的文件列表程序,支持本地存储、阿里云盘、OneDrive、Google Drive
[Alist](https://alist.nn.ci/zh/guide/install/docker.html) 是一款支持多种存储服务的文件列表程序,它允许用户将文件保存在本地存储、阿里云盘、OneDrive、Google Drive 等多个平台上。对于需要将大文件分享且受限于免费云存储服务大小限制的用户来说,Alist 提供了一个理想的解决方案,使其成为私人轻量级网盘分享应用的绝佳选择

原本我的文件保存在蓝奏云上,但免费用户有 100M 的限制,因此我将一些要分享的大文件放在 Alist,作为私人轻量网盘分享应用和文件。

```yml
version: "3.3"
services:
alist:
image: xhofe/alist:latest
container_name: alist
volumes:
- /volume1/docker/alist/data:/opt/alist/data
ports:
- 9044:5244
environment:
- PUID=1026
- PGID=100
- UMASK=022
- TZ=Asia/Shanghai
restart: always
```
![](https://img.newzone.top/2024-03-21-15-35-43.png?imageMogr2/format/webp)

## 重置密码

Expand Down Expand Up @@ -55,3 +37,29 @@ sudo docker exec -it alist ./alist admin set NEW_PASSWORD
- 写入:允许访客新建目录、新文件和上传文件。
- 隐藏:此路径要隐藏的对象,每行一个正则表达式。
- 说明:进入该路径时渲染的自述文件,支持 Markdown 内容或 Markdown 链接。

## 部署代码

推荐通过 Docker Compose 部署 Alist,详情请见 [Docker Compose 部署教程](./#%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B)。以下是 Docker Compose 配置示例:

```yml
version: "3.3"
services:
alist:
image: xhofe/alist:latest
container_name: alist
volumes:
- /volume1/docker/alist/data:/opt/alist/data
ports:
- 9044:5244
environment:
- PUID=1026
- PGID=100
- UMASK=022
- TZ=Asia/Shanghai
restart: always
```
部署完成后,通过浏览器访问 `http://<你的服务器IP或域名>:9044` 即可使用 Alist 管理和分享文件。

Alist 提供了一个高效、灵活的方式来聚合和管理分散在不同存储服务中的文件。无论是个人还是团队,都可以从中受益,享受到便捷的文件管理和分享体验。希望这篇文章能帮助你更好地理解和使用 Alist。如果在使用过程中遇到任何问题,欢迎交流探讨解决方案。
10 changes: 6 additions & 4 deletions docs/services/dockers-on-nas/cors-anywhere.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ order: 201

若你想要自行部署 CORS Anywhere,可以自建镜像,或者使用我提供的预先配置好的 Docker 镜像 [rockben/cors-anywhere](https://hub.docker.com/r/rockben/cors-anywhere)

以下是使用 Docker 部署 CORS Anywhere 的示例配置:
## 部署代码

推荐通过 Docker Compose 部署 CORS Anywhere,详情请见 [Docker Compose 部署教程](./#%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B)。以下是 Docker Compose 配置示例:

```yml
version: "3"
Expand All @@ -22,9 +24,9 @@ services:
restart: unless-stopped
```
## 使用示例
部署完成后,通过访问 `http://<你的服务器IP或域名>:49152`,你就能开始使用 CORS Anywhere API 服务。

在 JavaScript 中利用 CORS Anywhere 的过程非常直接。以下是一个简单的调用示例
在前端项目中使用 CORS Anywhere 非常直接,以下是一个简单的 AJAX 请求示例

```javascript
var corsAnywhereUrl = "http://192.168.2.3:49152/";
Expand All @@ -42,7 +44,7 @@ $.ajax({

## 构建自定义 Docker 镜像

你还可以通过提供的 Dockerfile 根据自己的需求构建一个专属的 CORS Anywhere 镜像。
如果你有自定义 CORS Anywhere 配置的需求,可以根据以下 Dockerfile 来构建专属镜像:

```dockerfile
# 使用 Alpine 为基础镜像,该镜像体积较小
Expand Down
12 changes: 8 additions & 4 deletions docs/services/dockers-on-nas/deeplx.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
---
article: false
title: DeepLX - 免费翻译接口
title: DeepLX:如何免费使用 DeepL 翻译接口
order: 102
---

[DeepLX](https://github.com/OwO-Network/DeepLX/) 提供了一个基于 DeepL 的免费翻译服务。它可以将 DeepL Free API 转换为本地 API,使得第三方程序能够方便地使用 DeepL 提供的翻译功能。
[DeepLX](https://github.com/OwO-Network/DeepLX/) 提供了一个基于 DeepL 的免费翻译服务。它可以将 DeepL Free API 转换为本地 API,使得第三方程序能够方便地使用 DeepL 提供的翻译功能。[json-translate](https://tools.newzone.top/json-translate) 的免费翻译功能便是基于 DeepLX 所开发,使用户能够迅速完成文本翻译。

以下是通过 Docker 部署 DeepLX 的配置文件,简单易懂,你可以快速启动你的翻译服务:
## 部署代码

推荐通过 Docker Compose 部署 DeepLX,详情请见 [Docker Compose 部署教程](./#%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B)。以下是 Docker Compose 配置示例:

```yml
version: "3"
version: "3.8"

services:
deeplx:
Expand All @@ -26,3 +28,5 @@ services:
```

如果你已经注册了 DeepL 的免费接口,建议设置 AUTHKEY。这样,一旦遇到请求频率过快的情况,DeepLX 会自动使用官方的 AuthKey 进行请求,从而加快翻译速度,提高效率。

部署完成后,将 DeepLX 接口 `http://<你的服务器IP或域名>:32770/translate` 填到翻译应用上,即可免费使用 DeepL 翻译接口。
19 changes: 9 additions & 10 deletions docs/services/dockers-on-nas/docsify.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ title: Docsify:私密文件服务器
order: 103
---

在日常工作中,我需要管理大量以 Markdown 格式编写的笔记和文档。这些资料往往包含敏感信息,不适合公开分享,但我又希望能有一个方便的方式来查看和管理这些文档。Docsify 是一个轻量级的文档网站生成器,支持将 Markdown 文件即时转换为网页格式,非常适合作为个人或团队的文档查看工具
在日常工作中,对于需要管理大量包含敏感信息的 Markdown 格式笔记和文档的情况,公开分享显然不是一个合适的选择。Docsify,一个轻量级的文档网站生成器,它支持将 Markdown 文件即时转换为网页格式,非常适合用作个人或团队的文档查看工具

起初,我通过一个 ahk 脚本在开机时执行 `Run, PowerShell.exe -NoExit -Command &{docsify serve --port 3030}, D:\web\marketing` 命令来启动 Docsify 服务。虽然这种方法能够工作,但启动和维护过程相对繁琐。为了提高效率并实现更好的部署方式,我转向了 Docker 技术,并构建了一个名为 [docsify-docker](https://github.com/rockbenben/docsify-docker) 的项目。这个项目不仅简化了部署流程,还能自动检测 docsify-cli 的更新,确保文档服务器始终保持最新状态
起初,我尝试通过 ahk 脚本在开机时自动执行 `Run, PowerShell.exe -NoExit -Command &{docsify serve --port 3030}, D:\web\marketing` 命令来启动 Docsify 服务。虽然这种方式可行,但在启动和维护上相对不够方便。因此,为了寻求一种更高效的解决方案,我转向使用 Docker,并创建了一个名为 [docsify-docker](https://github.com/rockbenben/docsify-docker) 的项目,旨在简化部署过程,同时自动检测 docsify-cli 的更新,确保文档服务器始终处于最新状态

以下是通过 Docker 部署 Docsify 的命令,这可以让你轻松地在任何支持 Docker 的环境中部署自己的私密文件服务器:
## 部署代码

推荐通过 Docker Compose 部署 Docsify,详情请见 [Docker Compose 部署教程](./#%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B)。以下是 Docker Compose 配置示例:

```yml
version: "3.8"
Expand All @@ -18,17 +20,14 @@ services:
container_name: docsify-server
image: rockben/docsify-server
volumes:
- /volume1/docker/docsify/docs:/docs
- /volume1/docker/docsify/docs:/docs # 映射了本地的文档目录到容器内,使得容器可以访问并展示这些 Markdown 文件
ports:
- "3310:3000"
- "3310:3000" # 将容器的 3000 端口映射到本地的 3310 端口
restart: unless-stopped
```
这个 Docker 配置文件定义了一个服务 `docsify`:

- `volumes` 映射了本地的文档目录到容器内,使得容器可以访问并展示这些 Markdown 文件。
- `ports` 将容器的 3000 端口映射到本地的 3310 端口,你可以通过访问本地的 3310 端口来查看文档。
部署完成后,通过浏览器访问 `http://<你的服务器IP或域名>:3310`,即可轻松查看和管理你的 Markdown 文档。

通过以上步骤,我们可以轻松地利用 Docsify Docker 构建一个私密且高效的文件服务器。这不仅简化了我们的工作流程,还提高了文档管理的安全性和便捷性。无论是个人笔记、团队协作文件还是企业内部资料,利用这种方法,你都能享受到快速、安全且易于管理的文档服务。现在,尝试动手实践,为你的文档管理带来一场革新吧!
Docsify 加上 Docker 的组合,为私密文件的管理和展示提供了一个简便、安全的解决方案。无论是个人笔记、团队协作文件还是企业内部资料,这种方法都能带来快速、安全且易于管理的文档服务体验。开始实践,让你的文档管理变得更加高效和私密。

如果你在部署或使用过程中遇到任何问题,欢迎在评论区留言交流,我们可以一起探讨解决方案。
Loading

0 comments on commit 658c9c2

Please sign in to comment.