centos 使用tinyproxy搭建 http代理服务

作者: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

Dockerfile多阶段构建镜像

作者:matrix 发布时间:2024-07-06 分类:Golang Linux

在构建GOdocker镜像时,都需要安装很多开发环境和依赖包,如果正常打包完整环境为镜像完全没有必要。因为运行时只需要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镜像。

根据现有的libjpeg依赖修复ImportError

作者: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'

开发环境配置本地自签SSL证书

作者: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就可以了。 完美~~

利用mDNS协议使用局域网local域名服务

作者:matrix 发布时间:2024-06-05 分类:Linux

Multicast DNSmDNS)协议是一种用于网络设备自动发现的技术。通过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/

docker入门使用命令

作者: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 

VIM命令收集

作者:matrix 发布时间:2022-05-31 分类:Linux

意识到vim命令是多么的强大,遂单独整理一份。

打开文件

$ vi ./file1

打开后定位到指定文本位置

$ vi ./file1 +/keywords

+表示追加后续操作命令
/keywords 表示自上而下搜索关键字keywords

进入文本编辑模式

i

进入命令行模式

esc键退出编辑模式,输入:进入命令行模式

退出

输入:q 退出 加!表示强制操作

搜索

/ 进入搜索,输入关键字回车 n 查找下一个

删除

删除/剪切 当前行:dd

清空所有行::%d 或者 :1,$d

% 匹配所有行
1,$ 匹配1到末尾行
d表示删除

移动 类似删除操作

  1. 光标落在上一行使用 dd 删除当前行;
  2. 再使用 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

图片5489-VIM命令收集

参考:

https://blog.csdn.net/weixin_37657720/article/details/80645991

https://www.jianshu.com/p/c1ad434723ed

http://www.cnblogs.com/chenlogin/p/6245958.html

GIT撤销修改

作者: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