跳到主要内容

博客

代码人生:编织技术与生活的博客之旅


相关

  • 想法起源 别人的博客, 看起来很酷,还能显示当前人数。
  • 在 docusaurus 或者 markdown 中博客展示 google analysis 数据
  • 目前好像没有相关项目 可以做个类似 display card 的东西
  • 使用默认的 google analytics 查看数据
  • lookerstudio 可以调用 google analytics 并展示,但是自带的模板库没有使用最新的 API。
    • 报告地址
    • embed
    • 右上角分享 - 复制代码后 需要删除部分代码
    • 暂时不能实现的功能
      • 不能显示当前再看的人数
<!-- 代码参考 -->
<iframe width="800" height="600" src="https://lookerstudio.google.com/embed/reporting/6054b482-a054-42f9-870d-3fe15faeb78f/page/IpdTE">

编程阅读需 1 分钟

docker-compose.yml 默认不装载插件

  • 使用自定义 Dockerfile
  • vim Dockerfile.ttrss
# 使用原始镜像
FROM wangqiru/ttrss:latest

# 安装 git
# RUN apt-get update && apt-get install -y git && \
# rm -rf /var/lib/apt/lists/*

# 配置 Git 允许不安全目录
RUN git config --global --add safe.directory '*'

# 克隆插件到指定目录
RUN git clone https://gitlab.tt-rss.org/tt-rss/plugins/ttrss-mailer-smtp.git /var/www/plugins.local/mailer_smtp

# 更改克隆目录的权限,确保容器内的用户拥有该目录
RUN chown -R nobody:nginx /var/www/plugins.local/mailer_smtp
  • 修改镜像
# 修改前
service.rss:
image: wangqiru/ttrss:latest

# 修改后
service.rss:
# image: wangqiru/ttrss:latest
build: # 新增
context: .
dockerfile: Dockerfile.ttrss # 使用自定义 Dockerfile
  • 这样就默认装插件了

启动插件

      - ENABLE_PLUGINS=auth_internal,mailer_smtp # plugin
- SMTP_FROM_NAME=TinyTinyRSS # email
- SMTP_FROM_ADDRESS=xxxxxxx_bot@163.com # email
- SMTP_SERVER=smtp.163.com:465 # email
- SMTP_LOGIN=xxxxxxx_bot@163.com # email
- SMTP_PASSWORD=XXXXXXXXXXXXXX # email
- SMTP_SECURE=ssl # email

报错

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

  • 修改邮箱配置
    • 将端口从 25 改为 465 测试邮件发送成功

全 docker-compose.yml

  • vim docker-compose.yml
version: "3"

# https://ttrss.4yewu.cc/ guest guest 弄个普通账号给大家玩

services:
service.rss:
build:
context: .
dockerfile: Dockerfile.ttrss # 使用自定义 Dockerfile
container_name: ttrss
ports:
- 181:80
environment:
- HTTP_PROXY=http://localhost:9999 # 设置代理
- HTTPS_PROXY=http://localhost:9999 # 设置代理
- SELF_URL_PATH=http://localhost:181/ # please change to your own domain
- DB_PASS=ttrss # use the same password defined in `database.postgres`
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,mailer_smtp # plugin
- SMTP_FROM_NAME=TinyTinyRSS # email
- SMTP_FROM_ADDRESS=xxxxxxx_bot@163.com # email
- SMTP_SERVER=smtp.163.com:465 # email
- SMTP_LOGIN=xxxxxxx_bot@163.com # email
- SMTP_PASSWORD=XXXXXXXXXXXXXX # email
- SMTP_SECURE=ssl # email
volumes:
- feed-icons:/var/www/feed-icons/
networks:
- public_access
- service_only
- database_only
stdin_open: true
tty: true
restart: always

service.mercury:
# set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
image: wangqiru/mercury-parser-api:latest
container_name: mercury
networks:
- public_access
- service_only
restart: always

service.opencc:
# set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
image: wangqiru/opencc-api-server:latest
container_name: opencc
environment:
- NODE_ENV=production
networks:
- service_only
restart: always

database.postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_PASSWORD=ttrss # feel free to change the password
volumes:
- ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
networks:
- database_only
restart: always
# utility.watchtower:
# container_name: watchtower
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# - WATCHTOWER_CLEANUP=true
# - WATCHTOWER_POLL_INTERVAL=86400
# restart: always

volumes:
feed-icons:

networks:
public_access: # Provide the access for ttrss UI
service_only:
# Provide the communication network between services only
internal: true
database_only:
# Provide the communication between ttrss and database only
internal: true
  • Dockerfile.ttrss 往上看

ps.这部分资料是真的少 😵‍💫

编程阅读需 2 分钟

  • 之前试过别的项目 tts-server-android
    • 首先他要联网 进地铁就不能用了
    • 其次信号不好或者其他未知原因,会偶尔是原语音偶尔是这个软件的语音,很难受。
    • 最后这个项目最近用的时候已经不能用了

MultiTTS

编程阅读需 1 分钟

  • 软件 目前版本
    • Moon__Reader_Pro-v9.7_build_907002-Mod.apk

calibre

  • 太大了 镜像都有好几个 g 不想弄

WebDav

  • 打开异常
    • 放弃

ftp

  • 读取地址异常
  • 估计是 docker 服务不行
  • 换了一个打开就好了
version: '3'
services:
ftp-server:
image: fauria/vsftpd # 使用 fauria/vsftpd 镜像
container_name: ftp-server
ports:
- "9921:21" # FTP 控制连接端口
- "21100-21110:21100-21110" # FTP 被动模式的端口范围
environment:
FTP_USER: "user" # FTP 用户名
FTP_PASS: "123" # FTP 密码
PASV_ADDRESS: "192.168.31.2" # 替换为你的服务器公网 IP 地址
PASV_MIN_PORT: "21100" # 被动模式端口范围开始
PASV_MAX_PORT: "21110" # 被动模式端口范围结束
FILE_OPEN_MODE: "0777" # 文件权限
LOCAL_UMASK: "022" # 掩码设置
volumes:
- ./ftp-data:/home/vsftpd # 挂载本地目录到容器
restart: always
  • 静读天下 设置- FTP 同步 - 设置

  • 查看下路径写的什么 默认应该是 [FTP]/Apps/Books

  • 需要根据 docker-compose.yml 使用命令

    • mkdir -p ./ftp-data/user/Apps/Books
  • 现在应该能正常使用了

  • 可以吧自动同步关掉 改成手动同步

    • 离开家后 弹出同步失败
      • 其实提示也不多 不要频繁切换小说就还好
  • tips:

    • 在设置里可以点击同步 将所以书目同步到云上
编程阅读需 1 分钟

  • Docusaurus (kuizuo-blog) 当前是 Algolia 搜索,想切换成 docusaurus-search-local 搜索。
    • Algolia 好像看我不活跃 发邮件 Your suspended application will be removed in 2 days. ,弄过一次,过了几个月又报这个,直接换成本地检索好了。
    • 本地检索不支持句子中的中文,只能直接搜索一段话,并不是特别好用。
      • 列如:我最近用的版本:aaabbb
        • 搜索版本 是搜索不到这句的
        • 搜索我最近用的版本 才搜索到对应的这篇文章。
    • 需要安装 结巴分词 jieba

安装

pnpm i
pnpm i @cmfcmf/docusaurus-search-local
pnpm i @node-rs/jieba

修改

vim docusaurus.config.ts


module.exports = {
// ...
themeConfig: {
// ⭐ 注释掉 algolia 的配置
// algolia: {
// appId: 'aaaa',
// apiKey: 'bbbb',
// indexName: 'index_name',
// },
}
// ...
plugins: [require.resolve("@cmfcmf/docusaurus-search-local")],

// or, if you want to specify options:

// ...
plugins: [
[
require.resolve("@cmfcmf/docusaurus-search-local"),
{
// Options here
// ⭐ 增加中文配置
language: ['en', 'zh'],
},
],
],
};

启动

  • pnpm run github 上说直接启动不会开启搜索
    • 需要 build serve 才行
npm run docusaurus build
npm run docusaurus serve

报错

安装 nodejieba 报错

  • 已经改包 名为 node-rs/jieba
    • pnpm i @node-rs/jieba
(base) PS D:\CodeProjects\anguswg.github.io> pnpm install nodejieba@^2.5.0
 WARN  deprecated loadsh@0.0.4: This is a typosquat on the popular Lodash package. This is not maintained nor is the original Lodash package.
 WARN  22 deprecated subdependencies found: are-we-there-yet@2.0.0, gauge@3.0.2, npmlog@5.0.1, rollup-plugin-terser@7.0.2, sourcemap-codec@1.4.8, stable@0.1.8, workbox-background-sync@6.6.1, workbox-broadcast-update@6.6.1, workbox-build@6.6.1, workbox-cacheable-response@6.6.1, workbox-core@6.6.1, workbox-expiration@6.6.1, workbox-google-analytics@6.6.1, workbox-navigation-preload@6.6.1, workbox-precaching@6.6.1, workbox-range-requests@6.6.1, workbox-recipes@6.6.1, workbox-routing@6.6.1, workbox-strategies@6.6.1, workbox-streams@6.6.1, workbox-sw@6.6.1, workbox-window@6.6.1
Packages: +30 -1
++++++++++++++++++++++++++++++-
Progress: resolved 1524, reused 1523, downloaded 0, added 0, done
node_modules/.pnpm/nodejieba@2.6.0/node_modules/nodejieba: Running install script, failed in 1.9s
.../node_modules/nodejieba install$ node-pre-gyp install --fallback-to-build
│ node-pre-gyp info it worked if it ends with ok
│ node-pre-gyp info using node-pre-gyp@1.0.11
│ node-pre-gyp info using node@20.10.0 | win32 | x64
│ node-pre-gyp info check checked for "D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba\build\Releas…
│ node-pre-gyp http GET https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-node-v115-win32-x64.tar.gz
│ node-pre-gyp ERR! install response status 404 Not Found on https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-nod…
│ node-pre-gyp WARN Pre-built binaries not installable for nodejieba@2.6.0 and node@20.10.0 (node-v115 ABI, unknown) (falling back to source co…
│ node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-n…
│ gyp info it worked if it ends with ok
│ gyp info using node-gyp@9.4.1
│ gyp info using node@20.10.0 | win32 | x64
│ gyp info ok
│ gyp info it worked if it ends with ok
│ gyp info using node-gyp@9.4.1
│ gyp info using node@20.10.0 | win32 | x64
│ gyp info find Python using Python version 3.10.13 found at "D:\ProgramData\miniconda3\python.exe"
│ gyp ERR! find VS
│ gyp ERR! find VS msvs_version not set from command line or npm config
│ gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
│ gyp ERR! find VS checking VS2022 (17.6.33829.357) found at:
│ gyp ERR! find VS "C:\Program Files\Microsoft Visual Studio\2022\Community"
│ gyp ERR! find VS - found "Visual Studio C++ core features"
│ gyp ERR! find VS - missing any VC++ toolset
│ gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
│ gyp ERR! find VS not looking for VS2015 as it is only supported up to Node.js 18
│ gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
│ gyp ERR! find VS
│ gyp ERR! find VS **************************************************************
│ gyp ERR! find VS You need to install the latest version of Visual Studio
│ gyp ERR! find VS including the "Desktop development with C++" workload.
│ gyp ERR! find VS For more information consult the documentation at:
│ gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
│ gyp ERR! find VS **************************************************************
│ gyp ERR! find VS
│ gyp ERR! configure error
│ gyp ERR! stack Error: Could not find any Visual Studio installation to use
│ gyp ERR! stack at VisualStudioFinder.fail (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visua…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:75:16
│ gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gy…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:71:14
│ gyp ERR! stack at VisualStudioFinder.findVisualStudio2015 (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gy…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:67:12
│ gyp ERR! stack at VisualStudioFinder.parseData (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:143:14
│ gyp ERR! stack at ChildProcess.exithandler (node:child_process:414:7)
│ gyp ERR! stack at ChildProcess.emit (node:events:514:28)
│ gyp ERR! System Windows_NT 10.0.22631
│ gyp ERR! command "D:\\ProgramData\\nodejs\\nodejs\\node.exe" "C:\\Users\\z7407\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\node_modules…
│ gyp ERR! cwd D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
│ gyp ERR! node -v v20.10.0
│ gyp ERR! node-gyp -v v9.4.1
│ gyp ERR! not ok
│ node-pre-gyp ERR! build error
│ node-pre-gyp ERR! stack Error: Failed to execute 'D:\ProgramData\nodejs\nodejs\node.exe C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\…
│ node-pre-gyp ERR! stack at ChildProcess.<anonymous> (D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\@mapbox+node-pre-gyp@1.0.11\nod…
│ node-pre-gyp ERR! stack at ChildProcess.emit (node:events:514:28)
│ node-pre-gyp ERR! stack at maybeClose (node:internal/child_process:1105:16)
│ node-pre-gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:305:5)
│ node-pre-gyp ERR! System Windows_NT 10.0.22631
│ node-pre-gyp ERR! command "D:\\ProgramData\\nodejs\\nodejs\\node.exe" "D:\\CodeProjects\\anguswg.github.io\\node_modules\\.pnpm\\@mapbox+node…
│ node-pre-gyp ERR! cwd D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
│ node-pre-gyp ERR! node -v v20.10.0
│ node-pre-gyp ERR! node-pre-gyp -v v1.0.11
│ node-pre-gyp ERR! not ok
│ Failed to execute 'D:\ProgramData\nodejs\nodejs\node.exe C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\bin\…
└─ Failed in 1.9s at D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
 ELIFECYCLE  Command failed with exit code 1.

Error: Cannot find module '@node-rs/jieba'

  • 'pnpm i @node-rs/jieba'
编程阅读需 4 分钟

  • 之前有个展示个人 waketime 的小卡片
  • 感觉还挺高级的
<p>
<img
src="https://github-readme-stats.vercel.app/api?username=anguswg&count_private=true&theme=dark&show_icons=true"
height="165"
/>
<img
src="https://github-readme-stats.vercel.app/api/top-langs/?username=anguswg&theme=dark&show_icons=true"
height="165"
/>
<img
src="https://github-readme-stats-nzp4ivrq9-florianbussmann.vercel.app/api/wakatime?username=AngusWG&theme=dark&show_icons=tru&range=last_7_days"
height="165"
/>
</p>


找了一下 leetcode 的项目

  • LeetCode-Stats-Card
  • 支持 leetcode 和 leetcode cn
  • 找到你的用户名
    • 顺便,用户名可以再力扣中更改一个好看的,目前 90 天一次。
  • 配置网页 配置一下
    • 还是展示 Activity 把,以前 hitmap 还稍微好看一点,但是做题太频繁真的扛不住,也不是很喜欢刷题。

![LeetCode Stats](https://leetcard.jacoblin.cool/anguswg?theme=light&ext=activity&site=cn)

LeetCode Stats


  • 懒人一点 直接吧 anguswg 换成你自己的用户名就好了
编程阅读需 1 分钟

删除旧镜像服务器文件

sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak.20240609

Docker d 开启代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
sudo vim /etc/systemd/system/docker.service.d/proxy.conf

# Add content below
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

# 重启Docker
sudo systemctl daemon-reload && sudo systemctl restart docker

# 检查Docker有没有使用VPN
systemctl show --property=Environment docker
# Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890
编程阅读需 1 分钟

最近在编写爬虫时,我遇到了一个非常奇怪的请求,通过浏览器的 F12 开发者工具抓取到了它。

  • 响应与预览
    • 无法加载响应数据:因为该请求被重定向,所以没有可用内容
  • 但在请求发起者链下面有多条记录

  • 在网络选项卡下也能找到对应的请求
  • 经过几次跳转后,触发了浏览器的文件下载工具开始下载文件

  • 我首先尝试使用 requests 直接访问这个下载链接,等待了一段时间后,请求超时了
  • 我以为是 cookies 的问题,右键请求-复制为 cURL - [转成 Python 代码](https://curlconverter.com/)
    • 仍然不行
  • 我还以为每次请求会有某个头部或其他东西,于是使用了 requests.session。
    • 也不行
  • 偶尔有一次请求成功了,状态码是 200,但是我注意到 F12 里面显示的请求状态码是 302,还是不对劲,
  • 我查找了关于 Python requests 302 相关的帖子
    • Python requests 默认设置了 allow_redirects=True
    • 这导致了有 302 的情况下直接跳转到下一个链接,
    • 无法获取到文件下载的链接,
    • 然后直接开始下载,
    • 由于网络不稳定或其他原因,导致了超时。
    • 将 allow_redirects 设置为 False 后问题得到解决

# 三层下载
# 第一层
resp = requests.get(
download_url,
allow_redirects=True,
cookies=cookies,
proxies=proxies,
)

# 第二层
download_url_2 = resp.headers["Location"]
resp = requests.get(
download_url_2,
allow_redirects=False,
cookies=cookies,
proxies=proxies,
)
# 第三层
download_url_3 = resp.headers["Location"]
data = call_aria2(download_url_3)
  • 真是屁大点事发个帖子。哈哈哈。
屁大点事阅读需 2 分钟

小米运动数据导出

  • 参考
  • 我的 - 设置 - 账号与安全 - 注销账号 - 导出数据

图表体重

  • gpt 语句
现在有一个 filepath = './BODY_1711700416591.csv'  数据如下 

time weight height
2016-02-25 12:51:09+0000 62 null
2016-02-25 12:53:18+0000 64.5 null

怎么用图标查看 weight 的变化


import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 读取CSV文件
filepath = './BODY_1711700416591.csv'
data = pd.read_csv(filepath)
weight_filter = 50
start_time = "2014-01-01"
end_time = "2025-01-01"

# 将时间列转换为日期时间格式
data['time'] = pd.to_datetime(data['time'])

# 根据时间范围过滤数据
df = data[(data['time'] >= start_time) & (data['time'] <= end_time) & (data['weight'] > weight_filter)]

# 提取"weight"列的数据
weights = df["weight"]

# 设置图表大小
plt.figure(figsize=(12, 6)) # 宽度为12英寸,高度为6英寸
# plt.figure(figsize=(30, 20)) # 宽度为12英寸,高度为6英寸

# # 绘制柱状图,设置线条宽度为最细
# plt.bar(df['time'], weights, linewidth=0.5)

# 绘制折线图
plt.plot(df['time'], weights, marker='o', linestyle='-', linewidth=1)

# # 添加数据标注
# for i, weight in enumerate(weights):
# plt.annotate(weight, (df['time'].iloc[i], weight), ha='center', va='bottom')

# 设置横坐标刻度间隔为3个月
# plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=3))

# 设置纵坐标刻度间隔为5.0
plt.yticks([i for i in range(50, 100, 5)])


# 设置图表标题和标签
plt.xlabel('Time')
plt.ylabel('Weight')
plt.title('Weight Variation')
plt.xticks(rotation=45)
plt.grid(True)

# 设置Weight坐标轴范围
plt.ylim(55, 90)

# 自动调整子图布局,尽可能放大图表
plt.tight_layout()

# 显示图表
plt.show()
plt.savefig('weight_variation.png')

体重


随笔阅读需 2 分钟

选择镜像

在 docker hub 上搜索 frp ,没有官方镜像,目前下载量最高的是 snowdreamtech/frpc 这个,所以选用这个,查了一下没有现成的 docker-compose.yml 参考。

写配置文件

# 公网服务器
mkdir frps
touch frps/frps.toml
touch frps/docker-compose.yml

mkdir nginx
mkdir nginx/conf.d
touch nginx/conf.d/service_1.my_domain.conf
touch nginx/conf.d/tmp.my_domain.conf # 测试用 Nginx 配置

# 内网服务器
mkdir frpc
touch frpc/frpc.toml
touch frpc/docker-compose.yml

frps.toml

  • Server 端配置文件
    • 有公网 ip 或者域名指向
    • 用户访问 ip 所在的服务器
# vim frps/frps.toml
bindPort = 7000 #{必选} 客户端与该端口建立连接
log.to = "console" #{可选} 日志配置, 通过打印的方式输出日志
vhostHTTPPort = 7100 #{可选} http 代理需要,当访问该端口时跳到对应本地 frpc 代理
vhostHTTPSPort = 7200 #{可选} https 代理需要,当访问该端口时跳到对应本地 frpc 代理
transport.tcpMux = true #tcp 流多路复用(优化传输,需一致)

#身份验证
auth.method = "token" #{可选}身份验证方式
auth.token = "password" #token 设置密码,用于通过身份验证创建连接

#frp 服务仪表板配置

webServer.port = 7500 #{也可自行修改端口}
webServer.addr = "0.0.0.0" #公网 ip 或者域名
webServer.user = "admin" #登录用户名{可自行修改}
webServer.password = "admin" #登录密码{可自行修改}

frpc.toml

# vim frpc/frpc.toml
serverAddr = "服务器 IP 或域名"
serverPort = 7000
log.to = "console"
auth.token = "密钥"

#frpc 服务仪表板配置 可以不要
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

[[proxies]]
name = "rdp"
type = "tcp"
localIP = "10.128.39.41"
localPort = 3389
remotePort = 3389

报错

访问 Nginx 域名间接性无响应

  • 写了个简单的配置测试,测试后依然没有返回结果,无日志。
# vim tmp.my_domain.conf
server {
listen 80;
listen 443 ssl;

server_name tmp.my_domain.com; #请求域名

include /etc/nginx/conf.d/base.conf;

location / {
default_type application/json;
return 200 '{"status":"success","result":"nginx json"}';
}
}

  • 本地机器上 curl tmp.my_domain.com 依然无结果。
  • 感觉是官方 nginx 被反复硬重启,导致的无响应。
  • sudo docker compose stop && sudo docker compose rm -f && sudo docker compose up -d
  • 重启后 curl tmp.my_domain.com 反应正常。

my_domain.com 端口可以访问 二级域名映射后走 Nginx 不能访问

 *1 connect() failed (111: Connection refused) while connecting to upstream, client: 223.73.6.219, server: ttrss.my_domain.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:10181/", host: "ttrss.my_domain.com"

被访问端 Server A

  • 声明所用的网络
# vim frps/docker-compose.yml
version: '3'
services:
frps:
restart: unless-stopped
image: snowdreamtech/frps
container_name: frps
volumes:
- ./frps.toml:/etc/frp/frps.toml
ports:
- 7000:7000
networks:
- default # 默认为 service_name + network_name = frps_default

networks:
default:
driver: bridge

访问端 Nginx

  • 注明需要访问的网络
# vim nginx/docker-compose.yml
version: '3'
services:
nginx:
restart: unless-stopped
container_name: nginx
image: nginx
# network_mode: "host"
ports:
- 80:80
- 443:443
environment:
- NGINX_PORT=80
- TZ=Asia/Shanghai
privileged: true
volumes:
# # 有可能会出现不能挂载,这个时候用手动拷贝配置文件就行
# - /usr/local/nginx/nginx.conf/:/etc/nginx/nginx.conf
# - /usr/local/nginx/html:/usr/share/nginx/html
# - /usr/local/nginx/www:/var/www
# - /usr/local/nginx/etc/cert:/etc/nginx/cert
- /var/log/nginx:/var/log/nginx
- ./conf.d:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
- /etc/letsencrypt/live/my_domain.com:/usr/local/nginx/ssl/any
networks:
- frps_default # 默认为 service_name + network_name = frps_default

networks:
frps_default:
external: true
  • 这时候,Nginx 配置文件里的 ip 地址就可以直接用 frps 配置里的服务名 frps
# vim ./conf.d/service_a.my_domain.conf
upstream docker-frps {
server frps:3389;
}

server {
listen 80;
listen 443 ssl;

server_name service_a.my_domain.com; #请求域名

include /etc/nginx/conf.d/base.conf;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://docker-frps;

}

# set site favicon
location /favicon.ico {
return 204 ;
}
}

Nginx and favicon.ico - "GET /favicon.ico HTTP/1.1" FAILED

location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}

最后 frpc 的 docker-compose.yml

# vim frpc/docker-compose.yml
version: '3'
services:
frpc:
restart: unless-stopped
image: snowdreamtech/frpc
container_name: frpc
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
# ports:
# - 7400:7400

因为是由 frpc 访问内网服务,所以它不用写端口,不过有个管理页面,需要的打开。


编程阅读需 4 分钟