作者:matrix
发布时间:2024-10-31
分类:Linux
tinyproxy可以很轻量化的实现自己的http代理服务
环境: centos
install
$ yum -y install tinyproxy
config
/etc/tinyproxy/tinyproxy.conf 为配置文件
# 设置代理端口
Port 8484
# 允许连接的客户端IP
Allow 127.0.0.1
Allow 101.1.1.1
run
sudo service tinyproxy start
sudo service tinyproxy restart
sudo service tinyproxy stop
error
如果出现启动失败:
[root@VM-0-3-centos tinyproxy]# systemctl status tinyproxy.service
● tinyproxy.service - Startup script for the tinyproxy server
Loaded: loaded (/usr/lib/systemd/system/tinyproxy.service; enabled; vendor preset: disabled)
Active: failed (Result: protocol) since Fri 2022-01-14 03:20:13 CST; 4s ago
Process: 10140 ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf (code=exited, status=0/SUCCESS)
Jan 14 03:20:13 VM-0-3-centos systemd[1]: Starting Startup script for the tinyproxy server...
Jan 14 03:20:13 VM-0-3-centos systemd[1]: Can't open PID file /var/run/tinyproxy/tinyproxy.pid (yet?) after start: No such file...rectory
Jan 14 03:20:13 VM-0-3-centos systemd[1]: Daemon never wrote its PID file. Failing.
Jan 14 03:20:13 VM-0-3-centos systemd[1]: Failed to start Startup script for the tinyproxy server.
Jan 14 03:20:13 VM-0-3-centos systemd[1]: Unit tinyproxy.service entered failed state.
Jan 14 03:20:13 VM-0-3-centos systemd[1]: tinyproxy.service failed.
需要重新修改service启动脚本
/lib/systemd/system/tinyproxy.service
[Unit]
Description=Startup script for the tinyproxy server
After=network.target
[Service]
#Type=forking
Type=simple
#PIDFile=/var/run/tinyproxy/tinyproxy.pid
#ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf -d
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
Docker
除了上面手动安装,其实 docker 方式也很方便。
tinyproxy官方没有提供镜像,这里使用三方
# 8484 端口 && 限制访问者IP
docker run --rm -it --network host -e PORT=8484 -e ALLOWED_NETWORKS="101.1.1.1 127.0.0.1" docker.io/kalaksi/tinyproxy
docker run --rm -it -p 8484:8888 -e ALLOWED_NETWORKS="101.1.1.1 127.0.0.1" docker.io/kalaksi/tinyproxy
# 使用文件配置
docker run --rm -it --network host -v $(pwd)/tinyproxy.conf:/etc/tinyproxy/tinyproxy.conf docker.io/kalaksi/tinyproxy
https://github.com/kalaksi/docker-tinyproxy
https://github.com/StreisandEffect/streisand/issues/1381
https://www.cnblogs.com/hanzhi/articles/10729013.html
Install Tinyproxy on Centos 7
作者:matrix
发布时间:2024-07-06
分类:Golang Linux
在构建GO的docker镜像时,都需要安装很多开发环境和依赖包,如果正常打包完整环境为镜像完全没有必要。因为运行时只需要Golang打包的二进制文件,不需要完整 dev 环境。
Dockerfile多阶段构建就可以完美解决,将构建和运行环境分开,可以最终镜像最小化。 😆 😆 爽~~
# 第一阶段:使用开发环境镜像进行构建,设置别名builder
FROM golang:1.22 AS builder
# 设置工作目录
WORKDIR /app
# 复制所有文件到工作目录
COPY . .
# 编译应用程序
RUN go build -o go-demo .
# 第二阶段:使用小体积的基础镜像 打包最终镜像
FROM alpine:latest
WORKDIR /app
# 从构建阶段复制编译好的可执行文件
COPY --from=builder /app/go-demo .
# 运行可执行文件
CMD ["./go-demo"]
这样就可以确保最终的镜像只包含运行应用所需的最小文件,镜像环境也只是基础的alpine镜像。
作者:matrix
发布时间:2024-06-25
分类:Linux Python
Python的Pillow库(PIL)处理图像时,可能会遇到库依赖问题,例如缺少libjpeg.so.9文件
from PIL import Image
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/work/.local/lib/python3.7/site-packages/PIL/Image.py", line 103, in <module>
from . import _imaging as core
ImportError: libjpeg.so.9: cannot open shared object file: No such file or directory
正常来说是安装libjpeg库来解决 apt-get install libjpeg-dev
/ yum install libjpeg-devel
。但是我这台 CentOS机器之前有这个依赖,还有就是网络问题很麻烦
查找现有的libjpeg库文件
sudo find / -name "libjpeg.so*" 2> /dev/null
比如找到 /home/work/.jjjjbbbo/lib/libjpeg.so.9
方法 1.更新动态链接配置
软链接到系统库目录,并更新动态链接器配置
sudo ln -s /home/work/.jjjjbbbo/lib/libjpeg.so.9 /usr/lib/libjpeg.so.9
sudo ldconfig
说明:
ln -s 用于将找到的 lib 文件软链接到系统目录
ldconfig命令是更新动态链接器运行时绑定
方法 2.配置临时环境变量
不想修改系统配置,可以通过临时环境变量来解决
export LD_LIBRARY_PATH=/home/work/.jjjjbbbo/lib:$LD_LIBRARY_PATH
python3 -c 'from PIL import Image' # 执行测试,没有报错
配置LD_LIBRARY_PATH环境变量后,运行无报错,确认问题解决
验证库是否正确链接
ldd $(which python3)
ldd命令可以查看Python解释器关联的依赖库路径。
还可以通过设置LD_DEBUG=libs
来输出动态链接库加载信息:
LD_DEBUG=libs python3 -c 'from PIL import Image'
作者:matrix
发布时间:2024-06-20
分类:Linux PHP Wordpress
项目地址:https://github.com/FiloSottile/mkcert
本地开发环境有时候需要模拟真实的https环境,那就必须得配置SSL证书了。自签SSL证书就可以搞定,这回尝试用mkcert工具生成和配置自签SSL证书。
安装mkcert
本地是 mac 环境,直接用brew安装
brew install mkcert
信任自签根证书
安装并让系统信任mkcert的自签根证书。
mkcert -install
创建证书
mkcert "*.security.local" localhost 127.0.0.1 ::1
security.local就是我本地开发环境运行的域名
127.0.0.1 ::1 是对应的本地 IPV4 IPV6
创建的证书和私钥文件会保存在当前目录中
配置Nginx
正常配置nginx文件(e.g. /etc/nginx/nginx.conf)
添加内容:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /path/to/localhost.pem;
ssl_certificate_key /path/to/localhost-key.pem;
# ...其余配置保持不变
}
# 可以选择添加一个额外的服务器块来处理 HTTP 到 HTTPS 的重定向
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
说明:
/path/to/localhost.pem
/path/to/localhost-key.pem
这俩路径是证书和密钥文件位置
之后重启或者 reload nginx就可以了。 完美~~
作者:matrix
发布时间:2024-06-05
分类:Linux
Multicast DNS(mDNS)协议是一种用于网络设备自动发现的技术。通过mDNS协议,设备可以在局域网内声明自己的主机名,使其他设备不用配置域名DNS即可直接访问,非常方便~ 在Windows、Linux和Mac系统上,mDNS其实早就普及可用。
局域网中存在一台hostname为aaa的计算机,不管它是Windows还是Linux,用aaa.local可以找到它,这就是mDNS的功能
以 Debian 系统为例,为其创建局域网任何设备都可以访问的local
域名。域名前缀就是机器名 hostname
。我这里的名称是debianhs
Linux
Debian下需要安装avahi才能实现 mDNS 功能。avahi-daemon 可以支持 mDNS 的服务,允许设备在局域网内通过主机名相互发现和通信。
安装
sudo apt update
sudo apt install avahi-daemon
查看状态
sudo systemctl start avahi-daemon # 运行服务
sudo systemctl enable avahi-daemon
sudo systemctl status avahi-daemon # 查看服务状态
root@debianhs:~# systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-06-01 19:27:36 HKT; 1h 51min ago
TriggeredBy: ● avahi-daemon.socket
Main PID: 720 (avahi-daemon)
Status: "avahi-daemon 0.8 starting up."
Tasks: 2 (limit: 4644)
Memory: 888.0K
CPU: 149ms
CGroup: /system.slice/avahi-daemon.service
├─720 "avahi-daemon: running [debianhs.local]"
└─721 "avahi-daemon: chroot helper"
其他系统
Mac系统自带 mDNS 功能,Windows10及最新系统也都包含。
如果 Windows版本较低可以通过安装 Bonjour Print Services (Windows)来满足。
或者你觉得 mDNS 支持依然不能覆盖到局域网的所有设备,当然你可以通过软路由形式 DNS 服务器来解决。so~ 我就是这样双重覆盖?
TIPS
mDNS使用的是 5353 端口
如果局域网下存在重复机器名debianhs
,后续加入的设备域名会自动添加后缀 比如 debianhs-2.local
,机器名不会自动更改
参考:
https://en.wikipedia.org/wiki/.local
https://en.wikipedia.org/wiki/Multicast_DNS
https://datatracker.ietf.org/doc/html/rfc6762
https://blog.beanbang.cn/2019/08/07/locate-hosts-using-mdns/
Windows 10如何ping计算机名之mDNS
https://wiki.noodlefighter.com/%E8%AE%A1%E7%AE%97%E6%9C%BA/linux/linux%E7%9A%84local%E5%9F%9F%E5%90%8D/
作者:matrix
发布时间:2022-06-30
分类:Linux
目前docker在开发和生产环境中经常使用。就算不是RD,你在github中总会看到他的身影。很多程序的demo版本都有提供docker镜像,用起来真的很爽。完全看作轻量级别虚拟机。
详细教程最好是自己网上多寻,这里整理下自己经常用到的命令。
下载镜像
# 搜索线上就像
docker search centos
# 下载到本地
docker pull centos
创建容器
容器是基于镜像创建的
可以根据镜像运行一次性的容器,运行完成后会停止运行,不会被销毁
。
# 运行容器 如果没有则创建
docker run centos
# 创建同时运行 uname -a命令
docker run centos uname -a
# 设定容器名称
docker run --name haha centos
#创建后台运行的容器
docker run --name test --detach/-d centos ping baidu.com
# 创建ssh可交互的容器
docker run --interactive/-i --tty/-t --name ssh centos
docker run -it --name ssh centos
# 创建一次性容器 执行目录挂载。退出之后自行销毁
docker run -it --rm -v ~/localData/讯康/HealthExam_Standard/wwwroot/manager/web:/data/web yha8897/nodejs-demo /bin/bash
# vue一键打包docker
#命令没有bash,命令完成后docker会自行退出,里面的分号;也可以换成&&
docker run -it --rm -v ~/localData/讯康/HealthExam_Standard/wwwroot/manager/web:/data yha8897/nodejs-demo sh -c 'cd /data;npm run build'
说明:
--interactive 可交互
--tty 输出到终端
--detach 后台驻留
查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a/--all
查看容器日志
docker logs [容器name 或者 ID]
# 显示容器输出 类似tail -f
docker logs --follow [容器name 或者 ID]
docker logs -f [容器name 或者 ID]
docker logs -t -f --tail=100 [容器name 或者 ID]
容器ID可以缩写 比如只写前面几个字符。
查看容器启动的进程信息
# 查看容器db1ce9d2a3d0启动的进程信息
$ docker container top db1ce9d2a3d0
停止/重启/删除容器
# 停止
docker stop haha
# 重启
docker restart haha
# 删除
docker rm [容器name 或者 ID]
使用临时容器
docker run --rm -it --name mysql_demo -v ~/Desktop/master-bin.000040:/tmp/master-bin.000040 -p 3308:3308 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7 /bin/bash
清理容器
清理已经不使用(包含退出状态)的所有容器
$ docker system prune -f
清理镜像
清理已经不使用的所有镜像
$ docker image prune -a
作者:matrix
发布时间:2022-05-31
分类:Linux
意识到vim命令是多么的强大,遂单独整理一份。
打开文件
$ vi ./file1
打开后定位到指定文本位置
$ vi ./file1 +/keywords
+
表示追加后续操作命令
/keywords
表示自上而下搜索关键字keywords
进入文本编辑模式
按i
进入命令行模式
按esc
键退出编辑模式,输入:
进入命令行模式
退出
输入:q
退出 加!
表示强制操作
搜索
/
进入搜索,输入关键字回车 n
查找下一个
删除
删除/剪切 当前行:dd
清空所有行::%d
或者 :1,$d
%
匹配所有行
1,$
匹配1到末尾行
d
表示删除
移动 类似删除操作
- 光标落在上一行使用
dd
删除当前行;
- 再使用
p
粘贴删除的行;
粘贴
p
复制
yy
复制单行
复制多行:
1yy
复制当前行
2yy
复制当前到下一行
...
:5,6y
复制5-6行内容
显示行号
输入:set nu
还原 撤销
u
撤销修改
control + r
还原撤销动作
保存退出
:wq!
强制保存且退出
:q!
仅强制退出
:ZZ
保存且退出 (注意是大写的ZZ)
移动光标
$
当前行尾
^
当前行首
A
移动到行尾且编辑
I
移动到行首且编辑
gg
首行
GG
尾行
文件对比
vim支持文件对比 使用-d
模式
$ vi -d ~/Desktop/ocr1.png ~/Desktop/imageCode.png
参考:
https://blog.csdn.net/weixin_37657720/article/details/80645991
https://www.jianshu.com/p/c1ad434723ed
http://www.cnblogs.com/chenlogin/p/6245958.html
作者:matrix
发布时间:2022-04-01
分类:Linux
撤销本地修改
本地代码仅是修改,还未做任何提交(add/commit操作)
$ git checkout file_name_path_1 file_name_path_2 file_name_path_3... #撤销指定文件的修改
$ git checkout . #撤销所有文件的修改
git checkout会直接还原修改的文件到仓库版本
撤销add
$ git reset HEAD file_name_path1 #指定还原文件的add操作
$ git reset HEAD #还原所有文件
撤销commit
已经commit提交,没有push到远端
#修改(替换)掉上次的commit
$ git commit --amend -m "Fix bug #42"
#撤销commit操作(保留修改)
$ git reset HEAD^ #回到上一提交版本
#撤销commit操作(放弃修改)
$ git reset --hard HEAD^
#手动reset 版本id
$ git reset [--soft|--mixed|--hard] COMMIT_ID #COMMIT_ID为需要还原到的正确版本(正确要保留的版本)
--mixed
会保留源码,只是将git commit和index 信息回退到了某个版本.
--soft
保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard
源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
撤销push
还原已提交push的修改,本质是新增commit提交
方法1 还原指定版本的修改:
$ git revert COMMIT_ID #COMMIT_ID为需要撤销的版本(丢弃不要的版本)
$ git push #再执行推送
方法2 硬删除之后的所有提交:
$ git reset --hard COMMID_ID #最近提交需要的版本(删除之后的所有提交)
$ git push -f
http://www.ruanyifeng.com/blog/2019/12/git-undo.html
http://blog.csdn.net/zhangkongzhongyun/article/details/8025288
https://www.cnblogs.com/wuyun-blog/p/10026363.html
https://www.jianshu.com/p/37f3a7e4a193
- 1
- 2
- 3