首页
归档
关于
友情链接
Search
1
clash for windows允许局域网连接,TAP和TUN模式
99,284 阅读
2
使用emby打造个人影视媒体库
21,766 阅读
3
解决kodi的emby插件无法找到文件...相对路径、绝对路径问题
10,464 阅读
4
Ubuntu to go/Linux to go/将linux系统安装到u盘或移动硬盘
8,161 阅读
5
魔改版rclone挂载世纪互联onedrive
4,991 阅读
技术
软件
文章
其他
登录
Search
标签搜索
sql
代理
sqlserver
vps
onedrive
软件
Oracle
magisk
onelist
世纪互联rclone
世界x流大学.com
transmission
Transmission Remote GUI
pt
ftp
emby插件
emby for kodi插件
qBittorrent
emby
nfo
旁逸斜出
累计撰写
35
篇文章
累计收到
155
条评论
首页
栏目
技术
软件
文章
其他
页面
归档
关于
友情链接
搜索到
35
篇与
who
的结果
2024-06-16
在docker中安装frp
frp是一个好用的内网穿透项目:https://github.com/fatedier/frp如果不使用docker安装frp,可以参考官方教程:https://gofrp.org/zh-cn/docs/setup/如果用docker安装,可以方便管理,不用使用那些自启动脚本之类的使用这个docker镜像来安装:https://hub.docker.com/r/snowdreamtech/frps下面均采用linux和可以访问https://hub.docker.com/的服务器来安装安装dockerwget -qO- get.docker.com | bash docker -v #查看docker版本 systemctl enable docker # 设置开机自动启动修改Docker配置(可选)以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘:cat > /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true } EOF然后重启 Docker 服务:systemctl restart docker安装Docker-compose(可选)Compose 是用于定义和运行多容器 Docker 应用程序的工具sudo curl -L "https://github.com/docker/compose/releases/download/2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version #查看docker-compose版本{collapse}{/collapse-item}{collapse-item label="docker-compose更新"}cd /root/data/docker_data/frps docker-compose down cp -r /root/data/docker_data/fprs /root/data/docker_data/frps.archive # 其实就是备份一下frps.ini这个文件 docker-compose pull docker-compose up -d docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像{/collapse-item}{/collapse}安装frps{collapse}{/collapse-item}{collapse-item label="不使用docker-compose"}sudo -i mkdir -p /root/data/docker_data/frps cd /root/data/docker_data/frps touch frps.toml vim frps.toml #输入下面的配置,仅参考 bindPort = 1443 #服务端监听端口 auth.method = "token" #服务端连接身份认证,默认token auth.token = "dsafja3fvz25ernca" #服务端token密码 transport.tls.force = false #是否只接受启用了TLS的客户端连接 #frp服务仪表板配置 #dashboard端口,启动成功后可通过浏览器访问如http://ip:9007 webServer.port = 9007 webServer.addr = "0.0.0.0" webServer.user = "admin1" webServer.password = "youareadmin1"#拉取frps镜像 docker pull snowdreamtech/frps 启动frps docker run --restart=always --network host -d -v ./frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps{/collapse-item}{/collapse}sudo -i mkdir -p /root/data/docker_data/frpscd /root/data/docker_data/frps vim docker-compose.yml #输入下面的命令 version: '3.8' #此数字需要根据安装的docker-compose版本而定 services: frps: restart: always network_mode: host volumes: - './frps.toml:/etc/frp/frps.toml' container_name: frps image: snowdreamtech/frpstouch frps.toml vim frps.toml #输入下面的配置,仅参考 bindPort = 1443 #服务端监听端口 auth.method = "token" #服务端连接身份认证,默认token auth.token = "dsavmlr949rnca" #服务端token密码 transport.tls.force = false #是否只接受启用了TLS的客户端连接 #frp服务仪表板配置 #dashboard端口,启动成功后可通过浏览器访问如http://ip:9007 webServer.port = 9007 webServer.addr = "0.0.0.0" webServer.user = "admin1" webServer.password = "youareadmin1" #启动frps docker-compose up -d #docker ps 会显示正在运行的docker容器,frps会显示下面类似的 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9a1aa562935 snowdreamtech/frps "/usr/bin/frps -c /e…" 2 hours ago Up 2 hours frps 需要根据自己的服务器放行相应的端口#以ufw为例 sudo ufw allow 9007/tcp sudo ufw allow 1443/tcp sudo ufw reload安装frpcfrpc根据情况在nas或其他设备上安装(依然选择snowdreamtech/frpc),下面是一份客户端配置参考,文件名frpc.toml# frpc.toml transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true serverAddr = "xxx.xxx.xxx.xxx" #frps所在的设备IP serverPort = 1443 # 公网服务端通信端口 auth.token = "dsavmlr949rnca" # 令牌,与公网服务端保持一致 [[proxies]] name = "web" type = "tcp" localIP = "127.0.0.1" # 需要暴露的服务的IP localPort = 8989 # 将本地9000端口的服务暴露在公网的6060端口 remotePort = 8989 # 暴露服务的公网入口,依然需要在服务端放行这个端口参考:1.https://blog.laoda.de/archives/frp-with-nginx-proxy-manager?cid=4423#73-%E5%AE%89%E8%A3%85nginxproxymanager2.https://gofrp.org/zh-cn/docs/setup3.https://hub.docker.com/r/snowdreamtech/frps
2024年06月16日
223 阅读
2 评论
0 点赞
2023-12-16
v2ray打开Tun模式
v2ray下载链接:https://github.com/2dust/v2rayN/releases本文以V6.31为例1.以管理员身份运行应用Windows右键快捷方式,以管理员身份运行(还可以在快捷方式上右键——属性——高级——勾选用管理员身份运行——确定,这样以后直接用快捷方式打开就默认以管理员方式运行)2.打开Tun模式打开启动Tun模式按钮
2023年12月16日
1,704 阅读
1 评论
4 点赞
2023-10-19
印象中的音乐
音乐对于影视剧的重要程度毋庸置疑,即便像我这种没什么音乐细胞的人,也记得一些场景。娄烨导演的电影《风中有朵雨做的云》,讲述了社会发展过程中,因钱、因权、因情、因恨发生的一桩故事。故事结局,影片中的主人公各自落了个悲催的结果。当片尾歌曲《一场游戏一场梦》兀自响起,观众突然清醒过来:可不就是一场游戏一场嘛,是可悲呢,还是可惜呢,就留给您听着歌自己体会了。 http://music.163.com/song?id=158924台湾电影《大佛普拉斯》非常辛辣和残忍地对比展现了社会贫富的巨大差距。当片尾曲《有无》响起,虽然歌词听不懂,但似乎有一种大佛看透尘世确仍保着对众生地关怀。http://music.163.com/song?id=484056998贾樟柯的电影一直有非常鲜明的时代声音,《三峡好人》当中的小男孩站在船头,扯着嗓子唱《老鼠爱大米》,当时不懂导演想表达什么,确也记忆深刻。上高中时,每天都睡眠不足。下午吃完饭去上晚自习那会儿一天中经常犯困的时间之一,去了会先进行听力练习,广播里每次都会放《Trouble Is A Friend》,每当明快的旋律想起,就会觉得困意消散了很多。直到现在听起这个,总是会想起当初的时光。突然发现这些音乐总是跟具体的事物关联在了一起,好像单纯听音乐这件事也变得不那么纯粹了,哈哈,大概是缺乏音乐细胞并且想象力不足吧。
2023年10月19日
110 阅读
2 评论
0 点赞
2022-11-28
C#AutoResetEvent和ManualResetEvent介绍
AutoResetEvent和ManualResetEvent是c#用来线程同步的。AutoResetEvent参考:https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.autoresetevent?view=net-7.0Set():将事件设置为已发送信号状态,对于AutoResetEvent来说允许一个正在等待的线程继续执行。如果没有线程在等待,将保持无限期有信号状态。WaitOne():处于无信号状态时,阻塞当前线程直到接收到了信号量如果线程在处于信号状态时AutoResetEvent调用WaitOne,则线程不会阻塞。AutoResetEvent立即释放线程并返回到无信号状态。也就是说如果没有线程在WaitOne,先执行了Set,会导致后调用的第一次WaitOne失效不阻塞,第二次调用WaitOne阻塞会生效using System; using System.Threading; namespace AutoResetEvent_Examples { class MyMainClass { const int numIterations = 100; static AutoResetEvent myResetEvent = new AutoResetEvent(false); static int number; static void Main() { //定义线程并启动,MyReadThreadProc方法接收到信号量后读取当前线程的名字和number并打印 Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc)); myReaderThread.Name = "ReaderThread"; myReaderThread.Start(); for(int i = 1; i <= numIterations; i++) { Console.WriteLine("Writer thread writing value: {0}", i); number = i; //Signal that a value has been written. //调用Set()后MyReadThreadProc()从WaitOne()继续执行 myResetEvent.Set(); //Give the Reader thread an opportunity to act. Thread.Sleep(1); } //Terminate the reader thread. myReaderThread.Abort(); } static void MyReadThreadProc() { while(true) { //The value will not be read until the writer has written // at least once since the last read. myResetEvent.WaitOne(); Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number); } } } }官网拷贝的代码,只有当Main()中的for循环调用myResetEvent.Set(),MyReadThreadProc()才会收到信号来读取当前线程的名字,否则就会一直停在myResetEvent.WaitOne()而不会继续向后执行。ManualResetEvent参考:https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.manualresetevent?view=net-7.0Set():将事件设置为已发送信号状态,对于ManualResetEvent来说允许所有正在等待的线程继续执行Reset():设置事件无信号,使能够继续阻塞线程using System; using System.Threading; public class Example { // mre is used to block and release threads manually. It is // created in the unsignaled state. private static ManualResetEvent mre = new ManualResetEvent(false); static void Main() { Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n"); //定义三个线程 for(int i = 0; i <= 2; i++) { Thread t = new Thread(ThreadProc); t.Name = "Thread_" + i; t.Start(); } Thread.Sleep(500); Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" + "\nto release all the threads.\n"); Console.ReadLine(); //给信号使ThreadProc()中的WaitOne()之后的代码执行 mre.Set(); Thread.Sleep(500); Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" + "\ndo not block. Press Enter to show this.\n"); Console.ReadLine(); for(int i = 3; i <= 4; i++) { Thread t = new Thread(ThreadProc); t.Name = "Thread_" + i; t.Start(); } //ManualResetEvent在调用Set()之后,WaitOne()并不会阻塞线程,要想阻塞线程,需要调用Reset()使没有信号,才能够继续阻塞线程 Thread.Sleep(500); Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" + "\nwhen they call WaitOne().\n"); Console.ReadLine(); //调用Reset()后继续阻塞线程 mre.Reset(); // Start a thread that waits on the ManualResetEvent. Thread t5 = new Thread(ThreadProc); t5.Name = "Thread_5"; t5.Start(); Thread.Sleep(500); Console.WriteLine("\nPress Enter to call Set() and conclude the demo."); Console.ReadLine(); mre.Set(); // If you run this example in Visual Studio, uncomment the following line: Console.ReadLine(); } private static void ThreadProc() { string name = Thread.CurrentThread.Name; Console.WriteLine(name + " starts and calls mre.WaitOne()"); mre.WaitOne(); Console.WriteLine(name + " ends."); } } /* Start 3 named threads that block on a ManualResetEvent: Thread_0 starts and calls mre.WaitOne() Thread_1 starts and calls mre.WaitOne() Thread_2 starts and calls mre.WaitOne() When all three threads have started, press Enter to call Set() to release all the threads. Thread_1 ends. Thread_0 ends. Thread_2 ends. When a ManualResetEvent is signaled, threads that call WaitOne() do not block. Press Enter to show this. Thread_3 starts and calls mre.WaitOne() Thread_3 ends. Thread_4 starts and calls mre.WaitOne() Thread_4 ends. Press Enter to call Reset(), so that threads once again block when they call WaitOne(). Thread_5 starts and calls mre.WaitOne() Press Enter to call Set() and conclude the demo. Thread_5 ends. */ 简单总结一下二者区别:1.AutoResetEvent调用Set只给一个正在WaitOne的线程信号使之继续执行,ManualResetEvent调用Set会给所有正在WaitOne的线程信号使之继续执行2.在调用Set后ManualResetEvent将保持有信号状态,WaitOne将失效,不再进行线程阻塞,需要重新阻塞的话要调用Reset,但AutoResetEvent(在已经有线程WaitOne的情况下)会自动返回到无信号状态。
2022年11月28日
161 阅读
0 评论
0 点赞
2022-08-09
解决Windows环境变量太大问题
解决Windows环境变量太大问题修改系统环境变量时提示如下错误,弹出该窗体环境变量无法编辑: 解决方案下载Rapid Environment Editor,地址:https://www.rapidee.com/en/download 安装好后右键以管理员身份运行,添加或者编辑指定的环境变量即可 参考:https://blog.csdn.net/COCO56/article/details/102425383
2022年08月09日
446 阅读
0 评论
0 点赞
1
2
...
7