学而时习之,不亦乐乎。
群晖NAS---DOCKER容器部署
首先 在群辉--套件中心下载并安装套件:Container Manager (新群晖已不支持原Docker容器套件)
在 Container Manager 套件中点击 映像/操作/导入 从 URL 添加:
填入地址为 mereith/van-blog , 标签选择默认的 latest 即可::
因公司群晖未连接外网,只能从原有项目导出后,再导入
列出镜像命令:
C:\Users\Administrator> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mereith/van-blog latest 7a718409ee86 2 years ago 1.31GB
mongo 4.4.16 92ff83581bcd 2 years ago 626MB
镜像导出命令行:
docker save -o <输出文件路径> <镜像名称>:<标签>
如:
docker save -o E:\vvv\1.tar mereith/van-blog:latest
docker save -o E:\vvv\2.tar mongo:4.4.16
将备份上传到群晖服务器后:
在 Container Manager 套件中点击 映像/操作/导入 从 文件 添加:
导入成功后可以看到 映像 如图:
两个镜像方法相同,略
点击 容器/新建 ,选中刚刚下载的 mongo 镜像。
容器名称设置为 mongo
,其他的一路下一步就行。
选择 容器/新增 映像就选择刚刚导入的镜像
注意
如果此处导入镜像并保存后,发现【环境变量】信息为空,需:1、重新导出镜像,2、重新导入镜像
完成后启动即可。
和上面一样,点击 容器/新建 ,选中刚刚下载的 mereith/van-blog:latest
镜像,容器名称为 VanBlog
。
点击 高级设置/环境,其他的都可忽略,但下表的环境变量需要设置/新加:
名称 | 值 |
---|---|
你自己的邮箱 |
为了让 VanBlog 容器内可以访问之前创建的 mongo 容器,在 高级设置/链接 中添加链接到之前创建的 mongo 容器。
然后点击下一步,进行端口映射,群晖不能用默认的 80 端口,所以可以映射成其他端口,比如 8880。
可以参考 以下 中的目录映射部分进行映射(添加文件夹)。
容器内目录 | 说明 |
---|---|
/app/static | 图床中数据的存放路径,使用内置图床请务必映射好! |
/var/log | 日志的存放路径,包括 access 日志、 Caddy 日志和前台服务日志 |
/root/.config/caddy | Caddy 配置存储路径 |
/root/.local/share/caddy | Caddy 证书存储路径 |
然后点击完成即可:
如果发生错误,可以在容器日志中查看报错原因。
启动完毕后,请 完成初始化
避坑
注意,必须先创建mango容器(且配置正确,且需要多次重启才能成功),否则会无法启动:
警告
群晖的容器子网、网桥、host 使用默认即可,不要轻易修改,可以新增子网,否则导致群晖网络丢失,只能直连服务器恢复默认配置
部署 VanBlog 后,请使用浏览器打开 http://<域名>/admin/init,并按照指引完成初始化。具体设置项可以参考 站点配置。
访问地址端口为修改后的端口:8880,并非群晖默认的80端口:http://192.168.88.57:8880/
也可以直接访问博客地址,并点击导航栏右上角管理员按钮进入后台初始化页面。
提示
如果你直接使用默认的 80 和 443 端口,并且不打算套反代,
直接访问 https://<你的域名>/admin/init,VanBlog 会自动为你访问的域名签发证书,并开启 HTTPS。
这个过程可能会比较慢,取决于域名解析验证的时长。
具体请参考 HTTPS。
如果需要套反向代理,请参考 反代。
在原项目导出全部数据:
数据与图片没有同时导出,需手动导出
导出后再使用系统功能导入【全部数据】即可(文章、标签、部分系统设置)
图片需单独解压到群晖NAS的img文件夹 \\192.168.88.57\docker\img
,如下图:
迁移并不会打包个性化代码:
在此备份【单向历】及【Sakana】组件
自定义HTML:
【Sakana】<div id="sakana-widget" style="position: fixed;bottom: 20px;right:40px;"></div> <script> function initSakanaWidget() { new SakanaWidget({ autoFit: true }).setState({ i: 0.001, d: 1 }).mount('#sakana-widget'); } </script> <script async onload="initSakanaWidget()" src="static/config/sakana.min.js" ></script>
【单向历】<img id="author-card" ></img> <script> window.onload = function() { // 创建外层的 div 元素 const newDiv = document.createElement('div'); newDiv.className = 'hidden lg:block flex-shrink-0 flex-grow-0 vanblog-sider w-52'; newDiv.style.width = '480px'; // 设置宽度 newDiv.style.marginRight = '10px'; // 设置右边距 // 创建内层 div,包含图片并设置属性 const authorCardDiv = document.createElement('div'); authorCardDiv.id = 'author-card'; authorCardDiv.className = 'sticky side-bar no-submenu side-bar-not-top side-bar-unpinned headroom--bottom'; // 创建 img 元素并设置属性 const img = document.createElement('img'); img.src = 'https://xialiu.cn/api/dan/'; img.alt = 'Image'; img.style.borderRadius = '20px'; // 将 img 添加到 authorCardDiv authorCardDiv.appendChild(img); // 将 authorCardDiv 添加到 newDiv newDiv.appendChild(authorCardDiv); // 找到要插入的父元素 const parentDiv = document.querySelector('.flex.mx-auto.justify-center'); // 将 newDiv 插入到父元素的开头 if (parentDiv) { parentDiv.insertBefore(newDiv, parentDiv.firstChild); } }; </script>
提示
More info call: 微信/企业微信/钉钉/QQ/手机号:183****6036
本文作者:木白非白
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!