首页
关于我们
友链链接
壁纸下载
更多
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
IP定位
Search
1
[Win DD包] wes7-x86-cn-精简,安装后仅占用1.55G存储空间
25,529 阅读
2
v2rayN基础使用教程、配置说明、添加订阅、路由选择
6,903 阅读
3
保姆级教程!甲骨文ARM DD成Debian10并升级内核成5.10
6,219 阅读
4
N1教程:Openwrt安装docker webui界面(基于flippy openwrt n1固件)
5,247 阅读
5
ZFAKA小店Docker版之 数据的备份和迁移
5,128 阅读
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
登录
Search
标签搜索
vps
typecho
linux
bench
mysql
cloudflare
nginx
lnmp
ssl
empirecms
openwrt
centos
google
docker
n1
301
qbittorrent
telegram
free
onedrive
V+变量
累计撰写
280
篇文章
累计收到
215
条评论
首页
栏目
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
页面
关于我们
友链链接
壁纸下载
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
IP定位
搜索到
91
篇与
的结果
2025-05-08
通过1panel使用docker部署bitwarden并配置mysql数据库和CDN加速以及自动化备份教程
在此之前你需要准备:聪明的脑子,灵活的手 ,友善的嘴巴,认真的耳朵。废话不多说我们开始吧!一、环境准备与1Panel安装1.服务要求推荐系统:Ubuntu/debian(务必使用最新的系统,不建议使用Centos)硬件配置:1核CPU以上、2GB内存、20GB存储(支持轻量级MySQL运行)域名:需要自己的独立域名,可选是否备案(用于HTTPS证书申请和CDN加速)2.开始搭建首先通过你能想象到的一切方法打开你购买的服务器ssh终端连接然后输入以下命令Ubtnuncurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.shDebiancurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh一路回车最后记录下ssh终端打印的1panel信息(外网/内网连接地址,用户名和密码),浏览器打开服务器的1panel网页管理地址登录到1panel管理面板后恭喜你已经完成了第一小步子 xhj016二.部署bitwarden前的准备1.登入1panel后找到侧边栏选择应用商店并打开选择安装如下软件1)mysql(数据库,最新版本即可)2)OpenResty(web平台,用于反向代理bitwarden到外网)这两个软件直接点击搜索然后一键安装即可2.创建一个mysql数据库点开1panel侧边栏的数据库按钮跳转的数据库页面后请按照如下配置创建数据库: 数据库名称(自定义) 数据库用户名(自定义) 数据库密码(自定义,建议使用复杂密码) 权限(所有人%)确定配置后点击确认即可3.创建一个网站用于反向代理bitwarden服务点开1panel侧边栏的网站按钮>网站选项跳转网站管理页面后请按照如下配置创建反向代理网站网站类型(反向代理) 分组(默认) 主域名(你为bitwarden准备的专用域名) 其他域名(默认不写) 监听IPV6(可选可不选) 代号(同网站目录地址,默认即可) 代理地址(填写bitwarden服务地址端口,本篇教程为http://127.0.0.1:8080)三.开始部署bitwarden1.打开1panel的应用商店搜索Bitwarden2.点击安装(请按照如下要求配置)名称(随意,推荐使用Bitwarden,BitwardenServer,Vaultwarden,VaultwardenServer等名字) 版本(默认即可,后续会通过自定义 compose修改安装版本) 端口(这里使用8080) 高级设置(这里要开启) 容器名字(与第一个配置“名称”一样即可) 端口外部访问(这里不要开) CPU限制(默认即可) 内存限制(默认即可) 编辑 compose文件(这里要开启) 拉取镜像(开启)3.自定义 compose配置networks: 1panel-network: external: true # 定义服务列表 services: # 服务名称:vaultwarden(Bitwarden 密码管理器的 Rust 实现) vaultwarden: # 指定容器名称(使用环境变量 CONTAINER_NAME 的值) container_name: ${CONTAINER_NAME} # 部署配置(通常用于 Docker Swarm,但单机模式也可识别) deploy: # 资源限制配置 resources: limits: # 限制 CPU 核数(使用环境变量 CPUS 的值) cpus: ${CPUS} # 限制内存使用量(使用环境变量 MEMORY_LIMIT 的值) memory: ${MEMORY_LIMIT} # 环境变量配置 environment: # 启用管理员令牌 ADMIN_TOKEN: true # MySQL 数据库连接字符串(格式:mysql://用户名:密码@主机:端口/数据库名) # 这里按照格式填写之前创建的数据库连接信息 DATABASE_URL: "mysql://vaultwarden:passwo@1Panel-mysql-OeCW:3306/vaultwarden" # 使用官方最新版镜像 image: vaultwarden/server:latest # 容器标签(用于元数据管理) labels: createdBy: Apps # 标识创建者 # 连接到的网络 networks: - 1panel-network # 使用预定义的 1panel-network # 端口映射(格式:主机IP:主机端口:容器端口) ports: - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:80 # 将主机端口映射到容器 80 端口 # 重启策略:始终自动重启 restart: always # 数据卷映射 volumes: # 将宿主机 /opt/vaultwarden 目录挂载到容器 /data 目录 - /opt/vaultwarden:/data四.启动Bitward并配置自动备份以上步骤全完成后就可以尝试启动Bitwarden服务了,这时候把第二部分第三步创建的网站的域名解析到服务器上,后打开域名应该就可以访问vaultwarden了(如果不行请检查是否配置正确)这时候回到1panel管理面板页面开始配置自动备份
2025年05月08日
18 阅读
0 评论
0 点赞
2025-04-27
来自Ns的端口流量限制脚本——Rent-PL ~出租流量的另一种选择
1 前言原帖来自Nodeseek的BlackSheep大佬。Rent-PL是一个端口流量限制脚本,对用户指定的端口组进行流量的统计、限制与周期性重置1.1功能特点基于iptables及cron实现了端口流量统计、流量超限拦截和流量定期重置三大核心功能高可用性,支持TCP+UDP、IPv4+IPv6低破坏性,不会改动已有的iptables规则及cron任务高灵活性,支持添加多组端口/端口范围/两者的组合简易WEB服务,查询流量无需登录机器统计指定sports+出站及指定dports+入站的流量——用于转发、代理类用途时,可视为单向流量1.2项目地址GitHub:https://github.com/BlackSheep-cry/Rent-PLRaw链接:https://raw.githubusercontent.com/BlackSheep-cry/Rent-PL/main/rent.sh2 快速使用以下以Debian/Ubuntu系统为示例2.1安装依赖sudo apt update && sudo apt upgrade sudo apt install iptables bc python3 wget nano openssl其他部分发行版可能还需手动安装cron (cronie/dcron)2.2下载并启动脚本wget -q https://raw.githubusercontent.com/BlackSheep-cry/Rent-PL/main/rent.sh -O /usr/local/bin/rent.sh && chmod +x /usr/local/bin/rent.sh && rent.sh set2.3端口配置模板配置格式:单端口/端口范围/两者的自由组合 月度流量限制(GiB) 重置日期(1-28日) 例如 : 6020-6030 100.00 1 443,80 1.5 15 5201,5202-5205 1 20 7020-7030,7090-7095,7096-8000 10 12PS: 组合端口时请用英文逗号隔开,端口 流量 日期三个参数中间用空格隔开2.4交互模式sudo rent.sh2.5命令行模式sudo rent.sh 命令选项 其他3 Nginx配置WEB服务中如果选择模式1则需要自行在本地配置Nginx/Caddy等作为前置,楼主在这里为不熟悉的朋友提供一个简单的Nginx配置教程3.1安装Nginxapt install nginx3.2修改配置文件nano /etc/nginx/sites-available/rent.conf3.3配置模板(默认443端口,http重写至https)server_tokens off; client_max_body_size 1m; server { listen 443 ssl http2; # 标准HTTPS端口 server_name your.domain; # 修改为您的域名 ssl_certificate /etc/nginx/ssl/rent.crt; # 修改为您的证书路径 ssl_certificate_key /etc/nginx/ssl/rent.key; # 修改为您的私钥路径 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve secp384r1:X25519; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; resolver_timeout 5s; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "0"; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report;"; add_header Referrer-Policy "strict-origin-when-cross-origin"; location / { limit_except GET HEAD { deny all; } proxy_pass http://localhost:8080; # 修改为您的WEB端口 proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_request_buffering off; proxy_connect_timeout 10s; proxy_send_timeout 15s; proxy_read_timeout 30s; } location ~* ^/(\.git|config|backup) { deny all; return 403; } } # HTTP重写至HTTPS server { listen 80; server_name your.domain; # 修改为您的域名 return 301 https://$host$request_uri; }3.4启用站点ln -s /etc/nginx/sites-available/rent.conf /etc/nginx/sites-enabled/3.5重载Nginx,配置完毕nginx -s reload3.6禁用站点rm /etc/nginx/sites-enabled/rent.conf4使用截图5注意事项1)问题反馈:主日志在/var/log/rent.log,WEB日志在/tmp/web_service.log2)如果你使用iptables进行流量转发,请将落地机和中转机端口保持一致,否则脚本无法正常统计流量3)status命令显示的月度限制发生变化是预期行为,而WEB中不会发生变化4)如果你设置的端口在动态端口范围内(可用查询),请确保端口有服务在监听,否则有小概率多统计流量PS:修改动态端口范围也可以,但不太建议:,写入新范围——不能太小,否则高并发下端口会耗尽,最后应用即可sysctl net.ipv4.ip_local_port_range sudo nano /etc/sysctl.conf net.ipv4.ip_local_port_range = xxxxx xxxxx sysctl -p
2025年04月27日
20 阅读
1 评论
0 点赞
2025-04-21
简单实用,打造属于自己的VPS 剩余价值计算器
前言很多时候,站长朋友有些吃灰的VPS不需要了,出售给其他人是个不错的选择,这个时候有个VPS剩余价值计算器是个不错的选择。对一名鸡进鸡出如家常事的 mjj 玩家来说,一枚好用的 VPS 的剩余价值计算器让你在交易中得心应手。而现有的 VPS 剩余价值计算器,使用下来每款总有那么一点点不太符合自己的口味,要么交互一点欠缺,要么功能稍有缺失,或者颜值不足...今天介绍的一款VPS剩余价值计算器来自Nodeseek的semyes大佬,其Github源码地址。🚀项目简介VPS 剩余价值计算器是一个帮助用户精确计算 VPS 产品剩余价值和剩余时间的工具。只需要输入续费金额,选择对应的付款周期、到期时间和交易日期,即可获取 VPS 剩余价值、剩余天数等信息。计算器支持多种支付货币和付款周期,外币汇率每日自动更新,支持自定义汇率计算,并提供一键分享计算结果图片功能。⚡功能特点交互合理简洁清晰的计算结果汇率每日自动更新,并且支持自定义汇率计算更准确的算法,比如大小月非直接取30天计算一键导出计算结果为图片,支持分享适应不同的屏幕,电脑和手机浏览器上体验良好首创 SVG 图片分享,速度更快、体验更佳、流量更省1. 交互合理只需要输入必要的信息,没有其它过多的要求。首先,最基本的信息,续费金额和方式,例如 12.00 美元/年。这个我认为应该是整体的,所以“续费金额”和“货币”得放一行,其次是“付款周期”,告知是“月付”还是“年付”等付款周期,三者一体。其次,到期时间。这个计算剩余多少时间,而决定 VPS 的剩余价值,因此续费金额和周期之后位置。第三,交易时间和外币汇率。两者会影响剩余价值,一般都是计算当天交易,表单默认交易日期为计算当天,外币汇率为当天的汇率。外币汇率有个细节,分固定的参考汇率和可更改的货币汇率,参考汇率是市场决定固定的,货币汇率是交易使用的实际汇率。正常情况,交易汇率直接使用参考汇率,但实际交易中,卖方或者买方可能使用自定义的汇率去计算,这样也是允许的,计算结果需要反映出这一行为。如下图所示,当参考汇率和外币汇率不相等的时候,结果会多自动新增一行,显示使用自定义的外币汇率计算的剩余价值。至于交易货币、交易金额、是否溢价等,我觉得这些都不需要,大而全反而影响使用体验。2. 简洁清晰的计算结果计算之后,需要获取的信息:续费价格及续费周期、剩余天数和过期日期、剩余价值和总价值,没有其它多余无用的信息。其中,当续费货币使用外币的时候,计算结果的总价值展示的是外币转人民币的金额,这点我是很需要的功能。3. 汇率每日自动更新,并且支持自定义汇率计算使用过的要么汇率固定,不会更新,要么有更新但只能使用更新后的汇率,不能自定义,但实际交易卖方或者买方可能使用自定义的汇率去计算,这样也是允许而且很需要的。4. 更准确的算法,比如大小月非直接取30天计算比如,2025/02/10 以 1美元/月购入服务器,下个月 2025/03/10 到期,当天转手,此 VPS 实际交易是 28 天才对,而非 30 天。目前网上的使用过的 VPS 剩余价值,几乎都是使用固定 30 天计算,对于我们这种吹毛求疵的用户,心里总感觉有一个小黑点,不完美了。5. 一键导出计算结果为图片,支持分享计算结果直接保存图片,支持复制 markdown 代码直接分享。6. 适应不同的屏幕,电脑和手机浏览器体验良好电脑和手机屏幕都有良好的用户体验。二📝Docker部署使用1 使用 docker 一键部署(推荐)docker run -d --name=jsq --rm -p=8088:80 hahabye/vps_jsq:latest2 使用 docker-compose 部署# 下载 docker-compose.yml 到本地 wget https://raw.githubusercontent.com/hahabye/vps_jsq/main/docker-compose.yml # 启动服务 docker-compose -f docker-compose.yml up -d三📝Cloudflare部署使用1下载最新的代码:https://github.com/hahabye/vps_jsq/releases/tag/latest2 解压到一个文件夹(只有一个html文件)3 部署Pagescloudflare 左边菜单 选择 Workers 和 Pages,上传文件夹,然后点击部署,完毕.整个过程不足 1 分钟完成一个理论永久在线的 vps 剩余价值计算器四📝自建WEB部署使用前两步与第三步的1、2一样,第3步直接上传到自己VPS可以访问的地址,本站https://www.vvars.com/tools/vps-jsq选择的就是这种部署方式。五 在线演示1 💻在线示例https://www.vvars.com/tools/vps-jsq2 📷运行截图VPS 剩余价值计算器
2025年04月21日
18 阅读
0 评论
0 点赞
2025-04-14
谷歌云GCP快速打开防火墙教程——利用自带的 CLI 快速打开IPV4+IPV6 防火墙
一 前言谷歌云每月200GB免费标准层互联网数据传输,足够一个小博客使用。关于谷歌云,之前本站有文章:谷歌云300赠金过期后不要丢!升级账号白嫖每月200GB流量云服务器。今天介绍如何使用GCP自带的CLI快速打开防火墙。二 利用自带的 CLI 快速打开GCP防火墙教程1.VPC网络---防火墙----删除现有的所有防火墙2.点击右上角的Cloud Shell 等待进入到系统3.将下列代码复制黏贴运行,点击回车等待代码运行并且完成curl -Ls https://raw.githubusercontent.com/networkgateways/script/main/Cloud/configure_gcp_firewall_rules.sh -o configure_gcp_firewall_rules.sh && bash configure_gcp_firewall_rules.sh4.完成
2025年04月14日
15 阅读
0 评论
0 点赞
2025-04-10
ImageFlow的安装教程:一款自动检测浏览器兼容性并提供 WebP 或 AVIF 格式图片的图床程序
一前言程序来自Nodeseek的sayyiku大佬。根据大佬介绍,其一直以来都是用的 chevereto 来作为图床管理,但是这个作者太脑瘫了。项目越改越辣鸡,经常增加一些虚头八脑的社交之类的功能,导致整个项目越来越臃肿卡顿,至于市面上其他的项目,也不想再过多尝试,大部分都是基于多用户场景的,和想要的相违背。本着既然没有,那就自己创造,还能加点自己喜欢的功能,例如 avif 和 webp 格式自动压缩,API 自适应横屏竖屏输出。于是 ImageFlow 就诞生了。仓库地址 欢迎大家给大佬点 star。关于图床,之前本站介绍过:1.用CF和BackBlaze零成本自建图床,年度最强白嫖攻略。二特点1主要特性API 密钥认证:安全的 API 密钥验证机制,保护您的图片上传功能自适应图像服务:根据设备类型(桌面端 / 移动端)自动提供横向或纵向图片现代格式支持:自动检测浏览器兼容性并提供 WebP 或 AVIF 格式图片简单的 API:通过简单的 API 调用获取随机图片用户友好的上传界面:支持拖拽上传,具有暗黑模式和实时预览功能图片管理功能:通过直观的管理界面查看、筛选和删除图片自动图像处理:上传后自动检测图像方向并转换为多种格式多存储支持:支持本地存储和 S3 兼容存储2? 技术优势安全性:API 密钥验证机制确保图片上传和管理功能的安全访问格式转换:自动将上传的图片转换为 WebP 和 AVIF 格式,减少 30-50% 的文件大小设备适配:为不同设备提供最合适的图片方向热重载:上传的图片无需重启服务即可立即可用并发处理:使用 Go 的并发特性高效处理图像转换可扩展性:模块化设计便于扩展和定制响应式设计:完美适配桌面端和移动端设备暗黑模式支持:自动适应系统主题。灵活存储:支持本地和 S3 兼容存储,通过 .env 文件轻松配置3界面预览三安装教程快速开始可以选择两种方式,都非常方便,一种是 Docker,一种是 二进制部署。1 Docker 部署1)拉取并进入仓库git clone https://github.com/Yuri-NagaSaki/ImageFlow && cd ImageFlow2)修改.envcp .env.example .env vim .env3)根据所选择的部署模式调整 参数具体 S3 的 下列参数如何获得这里就不再过多赘述了# API Keys API_KEY=your_api_key_here # 这是你的API key 用于身份验证登录 # Storage Configuration STORAGE_TYPE=local # Options: local, s3 根据部署模式选择 LOCAL_STORAGE_PATH=static/images # Local # S3 Configuration (required when STORAGE_TYPE=s3) S3_ENDPOINT= S3_REGION= S3_ACCESS_KEY= S3_SECRET_KEY= S3_BUCKET= # Custom Domain (optional) CUSTOM_DOMAIN= # 这里是S3 一般都会有的自定义域名。4)拉取镜像准备部署docker compose up -d一般默认监听8686端口,如有必要,自行修改。2 本地部署1)安装依赖1)安装 Go (1.22+)2)安装 WebP 工具: sudo apt-get install webp (Ubuntu/Debian)3)安装 AVIF 工具: sudo apt-get install libavif-bin (Ubuntu)注意:这里的需要 avif 1.0 版本以上,Debian 系统默认安装的是 0.9 版本。需要自行编译安装。Ubuntu 24.04 默认即可安装最新版本2)下载二进制文件修改 env默认提供 X86 和 ARM 的,自行选择git clone https://github.com/Yuri-NagaSaki/ImageFlow && cd ImageFlow https://github.com/Yuri-NagaSaki/ImageFlow/releases/download/v1.0/imageflow-x86 chmod 777 imageflow-x86 cp .env.example .env vim .env ./imageflow-x863)创建 service[Unit] Description=ImageFlow Service After=network.target [Service] ExecStart=/path/to/imageflow WorkingDirectory=/path/to/imageflow/directory Restart=always User=youruser [Install] WantedBy=multi-user.target三 如何使用1打开 IP:8686 端口 输入你在 env 设置的 API_Key2开始上传图片注意:由于压缩在本地进行,请选择 CPU 较强的进行部署3点击右上进入管理4这里会获取到你上传和压缩后的所有图片5当然你也可以对某个图片进行删除,他会连带删除原始图片 avif 和 webp 。6访问 APIAPI 的地址是 IP:8686/api/ramdom到此全部完成!
2025年04月10日
36 阅读
0 评论
0 点赞
2025-04-07
LNMP一键包Mariadb主从复制碰到的坑,如果你也碰到过,教你如何解决
0 前言这几天趁着休息把几个VPS上的LNMP都升级了下,全部换成LNMP2.2,PHP和MYSQL也升级了,PHP升级为8.3,Mysql升级为MariaDB10.11,升级后发现主从同步又要重新配置了,折腾了七八个小时总算弄好了,为避免以后少走坑,记录一下出现的问题。1 主服务器连不上如果从服务器 telnet 主服务器IP 3306 连不上,大概率是主服务器的防火墙问题,Debian系统可以按如下操作:1修改/etc/iptables的v4.rule将第15行的(有的系统可能不在第15行,按代码查找)-A INPUT -p tcp -m tcp --dport 3306 -j DROP中的DROP改为ACCEPT,改后:-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT然后重启防火墙:service iptables restart2 主从数据库不同步如果主服务器已有数据,需先手动同步数据到从服务器,重新导入一次:# 在主服务器导出数据(包含日志位置信息) mysqldump -u root -p --all-databases --master-data=2 > db_dump.sql # 在从服务器导入数据 mysql -u root -p < db_dump.sql3 检查主从服务器配置,确保ID、访问权限配置好配置文件在/etc/my.cnf:主服务器配置:[mysqld] server-id = 1 log_bin = mariadb-bin.log bind-address = 0.0.0.0从服务器配置:[mysqld] server-id = 2 -- 确保与主服务器不同 relay-log = mariadb-relay-bin.log read_only = 1注意lnmp一键包在在mysqld靠后的位置也有server-id = 1,不能重复操作后分别重启:lnmp mysql restart -- 修改配置后重启服务重启后需要确认验证主库和从库的 binlog 和 server_id:SHOW VARIABLES LIKE 'log_bin'; #应为 ON SHOW VARIABLES LIKE 'server_id'; # 必须唯一且非零4 CHANGE MASTER 命令参数有误确保在从服务器上执行 CHANGE MASTER 命令时,参数完整且正确:CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='replica_user', MASTER_PASSWORD='your_password', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000001', -- 主服务器的二进制日志文件名 MASTER_LOG_POS=12345678; -- 主服务器的日志位置关键点:MASTER_LOG_FILE 和 MASTER_LOG_POS 必须与主服务器执行 SHOW MASTER STATUS 的结果完全一致。如果主服务器未启用二进制日志(log_bin),需在主配置文件中启用并重启服务。5 确保主服务器上的复制用户(如 replica_user)具有正确的权限:在主服务器执行:SHOW GRANTS FOR 'replica_user'@'从服务器IP或%';正常显示权限如下:GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%';如果有问题需要重新刷新权限:GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;6 清除旧的复制配置如果从服务器曾配置过主从复制,旧配置可能导致冲突。重置从服务器状态:STOP SLAVE; RESET SLAVE ALL; -- 清除所有旧的复制信息然后重新执行 CHANGE MASTER 和 START SLAVE。7 检查MariaDB错误日志如果没找到原因,可以查看从服务器的错误日志(默认路径 /usr/local/mariadb/var/mariadb.err),定位具体错误原因:tail -n 100 /usr/local/mariadb/var/mariadb.err常见日志错误:连接主服务器失败(检查防火墙、网络、端口)。认证失败(用户名或密码错误)。二进制日志文件不存在(MASTER_LOG_FILE 名称或位置错误)。
2025年04月07日
35 阅读
0 评论
0 点赞
2025-04-07
不想继续使用docker?教你彻底卸载docker,不留痕迹
Docker曾是开发神器…直到它变成你的噩梦。或许你厌倦了诡异的容器问题、无止境的重建、”在我电脑上能跑啊!”的甩锅现场,无论什么原因,现在你决定与Docker一刀两断——不是简单卸载,而是要彻底抹除它的所有痕迹。如果你是这种狠人,这份指南就是你的救星。我们不绕弯子,直接进入正题。0 为什么要卸载Docker?残留镜像和废弃卷占用磁盘空间频繁的版本冲突和兼容性问题复杂配置让人抓狂想尝试更轻量的替代方案既然决心已定,我们直击重点。1 步骤1:停止并删除所有容器先给运行中的容器”断气”:docker ps -q | xargs -r docker stop想一键清空所有容器/镜像/数据卷?docker system prune -a --volumes --force⚠️ 警告:这会摧毁所有Docker数据,确认不需要备份再执行2 步骤2:卸载Docker(Ubuntu/Linux系统)Docker文件散落各处,必须斩草除根:sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli containerd runc3 步骤3:清理残留文件Docker藏匿的配置文件也要消灭:sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo rm -rf ~/.docker4 步骤4:删除软件源和密钥sudo rm /etc/apt/sources.list.d/docker.list sudo rm -rf /etc/apt/keyrings/docker.gpg # 如果密钥目录专为Docker创建: sudo rm -rf /etc/apt/keyrings/5 步骤5:清理孤立软件包sudo apt-get autoremove -y --purge docker docker-ce docker-ce-cli sudo apt-get clean6 步骤6:验证卸载结果docker --version# 应显示 "command not found" docker-compose --version# 同样应报错如果都提示命令不存在,恭喜!卸载成功。可选步骤:删除用户组sudo groupdel docker # 如果创建过专用用户: sudo userdel docker7 步骤7:重启系统(推荐)sudo reboot趁着重启喝口咖啡…此刻,你的系统已与Docker彻底诀别。没有残留配置,没有幽灵卷宗,就像它从未存在过。8 替代方案推荐:Podman:无需守护进程的容器工具 Minikube:轻量级Kubernetes方案 Vagrant:跨平台虚拟化工具或者干脆给自己放个假——容器化什么的,暂时见鬼去吧。再见,Docker。这段孽缘终于结束了。9 极简操作版:# 清空所有数据 docker system prune -a --volumes --force # 卸载软件包 sudo apt-get purge -y docker* # 删除残余文件 sudo rm -rf /var/lib/docker /etc/docker ~/.docker # 自动清理 sudo apt-get autoremove -y --purge docker* # 验证 docker --version # 重启 sudo reboot至此,Docker已从你的世界消失。不念,不悔。
2025年04月07日
50 阅读
0 评论
0 点赞
2025-04-03
笔记软件掌握在自己手中——使用docker自建e2ee开源笔记软件Notesnook服务器
一 前言笔记软件的类型非常多,划分的标准也不尽相同。以笔记的主要存储位置为标准,既有注重云端的 Notion, OneNote 和 FlowUs 等,也有本地优先的 Obsidian, Logseq 和思源笔记等;以编辑器类型为标准,既有专注于纯文本 / 富文本 / Markdown 编辑的,也有八面玲珑,兼顾日历、任务、书签管理功能的;以加密程度为标准,既有注重隐私安全的,也有注重便捷分享的。当一个笔记软件找到自己的定位,获得了一些目标人群的认可时,也往往会顾此失彼,让另一些潜在客户悄悄流失。例如,Obsidian 以强大的文本编辑能力、本地优先,无须网络或登录账户的快速便捷性和直接使用 .md 文档作为存储格式的开放性受到了用户的交口称赞,与此同时也因为同步的不便遭到了诟病;强调隐私保护的Standard Notes,因简洁的界面、开放源代码和经第三方审计的安全性在私人笔记市场受到欢迎,但与昂贵的订阅价格无法匹配的基础功能也令用户怨声载道。不论如何,这些赫赫有名的笔记软件都拥有自己的独门绝技。在这个硬件产品逐渐同质化的时代,软件产品的差异化,能让市场更加百花齐放,满足不同客户的需求。今天我们尝试部署的笔记软件 Notesnook 就是一个很好的例子。Notesnook 是由巴基斯坦的一个 3 人小公司 Streetwriters 开发的,在 2021 年发布了第一个版本,并在 2022 年以 GPL-3.0 许可证发布了服务端与客户端的源代码。同样以“端到端加密”的特性作为主打卖点,与拥有 8 年历史的 Standard Notes 相比,Notesnook 是一个年轻的竞争者。与 Standard Notes 较为稳健、保守的风格不同,Notesnook 广泛地听取用户意见,积极地引入各种新功能,而它比 Standard Notes 低许多的高级版定价以及相对慷慨的免费层服务吸引了不少 Standard Notes 的忠实用户。不少用户表示,“阻碍我转向 Notesnook 的唯一障碍就是不能自托管”。随着自托管进入 Alpha 阶段和服务端 Docker 镜像的发布,“不能自托管”的时代也已经结束了。尽管官方的完整版自托管文档尚未发布,但是已经有不少用户使用了 GitHub 仓库中的 Building From Source 或 成功进行了部署。docker compose我们使用 进行简便部署,并且用 Caddy 进行反代。docker compose二 安装教程1 前置条件1)Docker 和 Docker Compose2)4 个域名或者子域名,下面用 指代notes.example.io, mono.example.io, events.example.io, auth.example.io3)Caddy V22设置 compose.yml官方提供了一个开箱即用的 :docker-compose.ymlwget https://raw.githubusercontent.com/streetwriters/notesnook-sync-server/master/docker-compose.yml大部分内容我们都是不需要修改的:x-server-discovery: &server-discovery NOTESNOOK_SERVER_PORT: 5264 NOTESNOOK_SERVER_HOST: notesnook-server IDENTITY_SERVER_PORT: 8264 IDENTITY_SERVER_HOST: identity-server SSE_SERVER_PORT: 7264 SSE_SERVER_HOST: sse-server SELF_HOSTED: 1 IDENTITY_SERVER_URL: ${AUTH_SERVER_PUBLIC_URL} NOTESNOOK_APP_HOST: ${NOTESNOOK_APP_PUBLIC_URL} x-env-files: &env-files - .env services: validate: image: vandot/alpine-bash entrypoint: /bin/bash env_file: *env-files command: - -c - | # List of required environment variables required_vars=( "INSTANCE_NAME" "NOTESNOOK_API_SECRET" "DISABLE_SIGNUPS" "SMTP_USERNAME" "SMTP_PASSWORD" "SMTP_HOST" "SMTP_PORT" "AUTH_SERVER_PUBLIC_URL" "NOTESNOOK_APP_PUBLIC_URL" "MONOGRAPH_PUBLIC_URL" "ATTACHMENTS_SERVER_PUBLIC_URL" ) # Check each required environment variable for var in "$${required_vars[@]}"; do if [ -z "$${!var}" ]; then echo "Error: Required environment variable $$var is not set." exit 1 fi done echo "All required environment variables are set." # Ensure the validate service runs first restart: "no" notesnook-db: image: mongo:7.0.12 hostname: notesnook-db volumes: - dbdata:/data/db - dbdata:/data/configdb networks: - notesnook command: --replSet rs0 --bind_ip_all depends_on: validate: condition: service_completed_successfully healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh mongodb://localhost:27017 --quiet interval: 40s timeout: 30s retries: 3 start_period: 60s # the notesnook sync server requires transactions which only work # with a MongoDB replica set. # This job just runs `rs.initiate()` on our mongodb instance # upgrading it to a replica set. This is only required once but we running # it multiple times is no issue. initiate-rs0: image: mongo:7.0.12 networks: - notesnook depends_on: - notesnook-db entrypoint: /bin/sh command: - -c - | mongosh mongodb://notesnook-db:27017 <<EOF rs.initiate(); rs.status(); EOF notesnook-s3: image: minio/minio:RELEASE.2024-07-29T22-14-52Z ports: - 9000:9000 networks: - notesnook volumes: - s3data:/data/s3 environment: MINIO_BROWSER: "on" depends_on: validate: condition: service_completed_successfully env_file: *env-files command: server /data/s3 --console-address :9090 healthcheck: test: timeout 5s bash -c ':> /dev/tcp/127.0.0.1/9000' || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s # There's no way to specify a default bucket in Minio so we have to # set it up ourselves. setup-s3: image: minio/mc:RELEASE.2024-07-26T13-08-44Z depends_on: - notesnook-s3 networks: - notesnook entrypoint: /bin/bash env_file: *env-files command: - -c - | until mc alias set minio http://notesnook-s3:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin}; do sleep 1; done; mc mb minio/attachments -p identity-server: image: streetwriters/identity:latest ports: - 8264:8264 networks: - notesnook env_file: *env-files depends_on: - notesnook-db healthcheck: test: wget --tries=1 -nv -q http://localhost:8264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/identity?replSet=rs0 MONGODB_DATABASE_NAME: identity notesnook-server: image: streetwriters/notesnook-sync:latest ports: - 5264:5264 networks: - notesnook env_file: *env-files depends_on: - notesnook-s3 - setup-s3 - identity-server healthcheck: test: wget --tries=1 -nv -q http://localhost:5264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/?replSet=rs0 MONGODB_DATABASE_NAME: notesnook S3_INTERNAL_SERVICE_URL: "http://notesnook-s3:9000" S3_INTERNAL_BUCKET_NAME: "attachments" S3_ACCESS_KEY_ID: "${MINIO_ROOT_USER:-minioadmin}" S3_ACCESS_KEY: "${MINIO_ROOT_PASSWORD:-minioadmin}" S3_SERVICE_URL: "${ATTACHMENTS_SERVER_PUBLIC_URL}" S3_REGION: "us-east-1" S3_BUCKET_NAME: "attachments" sse-server: image: streetwriters/sse:latest ports: - 7264:7264 env_file: *env-files depends_on: - identity-server - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:7264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery monograph-server: image: streetwriters/monograph:latest ports: - 6264:3000 env_file: *env-files depends_on: - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:3000/api/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery API_HOST: http://notesnook-server:5264 PUBLIC_URL: ${MONOGRAPH_PUBLIC_URL} autoheal: image: willfarrell/autoheal:latest tty: true restart: always environment: - AUTOHEAL_INTERVAL=60 - AUTOHEAL_START_PERIOD=300 - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10 depends_on: validate: condition: service_completed_successfully volumes: - /var/run/docker.sock:/var/run/docker.sock networks: notesnook: volumes: dbdata: s3data:在这个文件中,我们可以看到,Notesnook 服务器的必需组件包括:1)Vandot2)MongoDB 数据库3)S3 存储,这里采用了自建 MinIO 实例的方式(应该和 Ente 一样,不是必须使用 MinIO,可以接入外部 S3,不过我没试过,这里先不演示)4)身份验证服务器5)同步服务器6)SSE,用于提醒事件7)Monograph,用于分享笔记的公开链接(可以加密)。其中需要映射到的宿主机端口是 5264(同步服务器),6264(Monograph),7264(SSE)和 8264(身份服务器)。如果这些端口被占用,你可以选择映射到其他的端口。3设置 .env我们需要进行个性化设置的是 .env文件,官方同样提供了一个示例:.envINSTANCE_NAME=self-hosted-notesnook-instance # 改成你的实例名称 NOTESNOOK_API_SECRET= # 随机生成一串 >32 位的长字符串 DISABLE_SIGNUPS=false # 这个变量目前(2025年4月3日,v1.0-beta.1)还不能起效, # 如果你需要禁用注册功能,请在自己注册完之后添加以下变量: # DISABLE_ACCOUNT_CREATION=1 # SMTP 配置,用于接收 2FA 代码和重设密码,可以使用你自己的邮件提供商的 SMTP 配置 SMTP_USERNAME= # 大部分情况下,是你的邮箱用户名,例如
[email protected]
# 当 SMTP 用户名不是邮箱用户名的时候,会有 bug 出现, # Notesnook 会尝试把发件人地址(也就是邮件的 From) 设置为 SMTP 用户名,这在某些情况下会导致发件被拒绝。 # 我没有找到单独设置发件人地址的方法,已经提交 Issue SMTP_PASSWORD= # SMTP 密码,根据你的邮件提供商的指引设置 SMTP_HOST= # 例如 smtp.gmail.com SMTP_PORT= # SMTP 端口,例如 465 TWILIO_ACCOUNT_SID= # 不需要设置 TWILIO_AUTH_TOKEN= # 不需要设置 TWILIO_SERVICE_SID= # 不需要设置 NOTESNOOK_CORS_ORIGINS= # 不需要设置 NOTESNOOK_APP_PUBLIC_URL=https://app.notesnook.com # 换成你自己的 APP 域名,如 https://notes.example.io MONOGRAPH_PUBLIC_URL=http://localhost:6264 # 换成你的 Monograph 域名,如 https://mono.example.io AUTH_SERVER_PUBLIC_URL=http://localhost:8264 # 换成你的身份服务器域名 https://auth.example.io ATTACHMENTS_SERVER_PUBLIC_URL=http://localhost:9000 # MinIO 地址和端口,可以不用域名 MINIO_ROOT_USER= # 不需要设置 MINIO_ROOT_PASSWORD= # 不需要设置设置完直接启动即可:docker compose up -d4反向代理配置1)Nginx 和 Certbot 的配置参考这里:https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2603896363server { listen 80; server_name auth.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name auth.domain.com; ssl_certificate /etc/letsencrypt/live/auth.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/auth.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:8264; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # Notes Server - With WebSocket server { listen 80; server_name notes.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name notes.domain.com; ssl_certificate /etc/letsencrypt/live/notes.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/notes.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:5264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Events Server - With WebSocket server { listen 80; server_name events.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name events.domain.com; ssl_certificate /etc/letsencrypt/live/events.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/events.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:7264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Monograph Server - With Cache server { listen 80; server_name mono.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name mono.domain.com; ssl_certificate /etc/letsencrypt/live/mono.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mono.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:6264; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_valid 200 60m; add_header X-Cache-Status $upstream_cache_status; expires 1h; add_header Cache-Control "public, no-transform"; } }2)Caddy 的配置参考这里:https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2763248500notes.example.io { reverse_proxy localhost:5264 } mono.example.io { reverse_proxy localhost:6264 } events.example.io { reverse_proxy localhost:7264 } auth.example.io { reverse_proxy localhost:8264 }正常情况下访问 能看到 Monograph 的默认页面就成功了。https://mono.example.io5在 Notesnook 客户端自定义服务器1)下载 Notesnook 的客户端,进入 Settings -> Servers,填写以下端点:同步服务器 URL:https://notes.example.io身份验证服务器 URL:https://auth.example.io事件服务器 URL:https://events.example.io专论服务器 URL:https:mono.example.io2)然后就可以输入你的邮箱注册账户了~需要注意的是,与 Vikunja 和 Vaultwarden 不同,Notesnook 的邮件验证不是可选项,所以需要填写可以接收到邮件的地址。如果需要关闭注册,可以在自己注册完后修改.env ,加入 DISABLE_ACCOUNT_CREATION=1。
2025年04月03日
35 阅读
0 评论
0 点赞
2025-03-30
天翼云电脑不休眠的方法之最小化到系统托盘
简单说就是用官方客户端自己连自己,再通过向日葵、ToDesk等连接。但自己连自己的时候会有以下几个问题:在云电脑里打开客户端连接自己会造成无限镜像,卡爆了手快把客户端最小化到任务栏,但是一不小心还是会点开,甚至关掉研究了一下午终于解决了这个痛点,借用工具把窗口隐藏到系统托盘。1 下载 zTasker 一键式效率倍增器2 新建一个复合任务,配置如下图(用的最新版客户端,进程名称可能与老版本不同)只要执行一次就可以把云电脑客户端最小化到系统托盘了,之后再也不会影响了。目前已平安度过一个半小时,还没有被关鸡.
2025年03月30日
53 阅读
0 评论
0 点赞
2025-03-29
白嫖在线观影协作工具——使用serv00安装Synctv
1. 介绍SyncTV 是一款功能强大的在线观影协作工具。它允许您与远方的朋友或家人同步观看电影、电视节目和直播内容。其主要亮点包括:同步观看功能,确保每个人都在同一时间点观看。实时聊天和弹幕互动,增强社交体验。提供代理服务,绕过地理限制,获取更流畅的观影体验。支持各种视频和直播源,内容丰富。官方演示地址:演示地址2.准备工作1.下载cloudflaredmkdir -p ~/domains/cloudflared && cd ~/domains/cloudflared wget https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-latest.7z && 7z x cloudflared-freebsd-latest.7z && rm cloudflared-freebsd-latest.7z && mv -f ./temp/* ./cloudflared && rm -rf temp2.cf设置 tunnel 复制token(http://localhost:你放行的端口)3.在cloudflared文件夹内运行tunnelnano cloud.sh编辑sh./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token 你的token保存退出后(依次ctrl+o 、 enter 、 ctrl+x)chmod +x cloud.sh4下载synctvmkdir -p ~/domains/synctv && cd ~/domains/synctv` wget https://github.com/synctv-org/synctv/releases/download/v0.9.13/synctv-freebsd-amd64 && mv synctv-freebsd-amd64 synctv && chmod +x synctvnano start.sh#!/bin/sh # 如果不希望被使用 http://ip:port 的方式访问,取消注释下一行 # export SYNCTV_SERVER_LISTEN=127.0.0.1 # 把下一行的最末的PORT改成自己放行的端口 export SYNCTV_SERVER_PORT=你放行的端口 ./synctv server保存并退出chmod +x start.sh5启动shcd ~ && nano qd.sh编辑cd domains && nohup ./cloud.sh > cloud.log 2>&1 & cd domains && nohup ./start.sh > start.log 2>&1 &保存并退出chmod +x qd.sh3.运行输入sh qd.sh就可以访问你的tunnel域名了。
2025年03月29日
32 阅读
0 评论
0 点赞
1
2
...
10