分类目录归档:云乞讨

为容器添加openssh-server服务,制作镜像,轻松运行若干可以随意折腾的容器Linux系统 2021-8-9

需求描述

有时候,我们需要测试一个简单的业务,需要一个Linux环境,运行完业务测试后,就可以删除这个环境

这样的一个需求,一般,我们可以通过主机的虚拟化平台来进行,比如用vmware virtualbox创建一个虚机,本次实践,使用docker进行虚拟化的Linux容器,更方便

素主机系统# docker -v
Docker version 19.03.12, build 48a66213fe
宿主机系统# docker run -it --name myLinux  debian:10  /bin/bash #执行一个容器
宿主机系统# docker run -it --name myLinux  ubuntu:16.04  /bin/bash  # 或者执行Ubuntu的

容器# apt-get update
容器# apt-get install openssh-server vim gcc make wget curl iptables ipset cron python3 python3-pip
容器# mkdir -p /var/run/sshd
容器# /usr/sbin/sshd -D &   //启动ssh服务
容器# passwd    //设置一个密码
容器# vi /etc/ssh/sshd_config  //修改SSH配置文件
PermitRootLogin yes
容器# cd /root ; mkdir -p ./sh ./src ./data ./log
容器# vi /root/.vimrc
set mouse-=a
容器# source .vimrc
容器# vi /root/sh/run.sh
#!/bin/bash
#  START
echo " + start SERVICEs"
/usr/sbin/sshd -D 
# /etc/init.d/cron start 
echo " + started SERVICEs"
#  END
容器# chmod +x /root/sh/run.sh
容器# apt-get install locales   //语言环境
容器# /usr/sbin/dpkg-reconfigure locales
Locales to be generated: 158 486
Generating locales (this might take a while)...
  en_US.UTF-8... done
  zh_CN.UTF-8... done
1. None  2. C.UTF-8  3. en_US.UTF-8  4. zh_CN.UTF-8
Default locale for the system environment: 3
容器# exit
宿主机系统# docker commit -m="LinuxVM" -a "Dasmz" myLinux mserver:1.0
宿主机系统# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mserver             1.0                 953b83715bb6        11 seconds ago      348MB
宿主机系统# docker run -d -p 31001:22 -p 31011:443 -p 41011:41011 --cap-add=NET_ADMIN --cpus=0.5 --name vm01 mserver:1.0 /root/sh/run.sh
// 22 SSH
// 443 HTTPS
// 41011 NORMAL-Port
// 2021-9-6 VM01 用于提供IP地址查询的API

宿主机系统# docker run -d -p 31002:22 -p 31012:443 -p 41012:41012 --cap-add=NET_ADMIN --cpus=0.5 --name vm02 mserver:1.0 /root/sh/run.sh
// 31002 - 22 SSH
// 31012 - 443 HTTPS
// 41012 - 41012 NORMAL-Port
// 2021-9-6 VM02 这台,目前用来跑其他测试。




// 冗余的信息
宿主机系统# docker run -d -p 31002:22 -p 31012:5000 --cpus=0.5 -m 500M --name vm02 mserver:1.2 /root/sh/run.sh
宿主机系统# docker run -d -p 31003:22 -p 31013:5000 --cpus=0.5 -m 500M --name vm03 mserver:1.2 /root/sh/run.sh
宿主机系统# docker run -d -p 31004:22 -p 31014:5000 --cpus=0.5 -m 500M --name vm04 mserver:1.2 /root/sh/run.sh
宿主机系统# docker run -d -p 31005:22 -p 31015:5000 --cpus=0.5 -m 500M --name vm05 mserver:1.2 /root/sh/run.sh
客户端# 登录vm01 安装好flask之后
宿主机系统# docker commit -m="Debian10-FLASK" -a "Dasmz" vm01 mflask:1.0
宿主机系统# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
mflask              1.0                 3cd442bde067        About a minute ago   725MB
mserver             1.0                 953b83715bb6        2 hours ago          348MB
宿主机系统# docker run -d -p 31005:22 -p 31006:5000 --cpus=0.5 -m 500M --name vm03 mflask:1.0 /root/sh/run.sh
宿主机系统# docker run -d -p 31007:22 -p 31007:5000 --cpus=0.5 -m 500M --name vm04 mflask:1.0 /root/sh/run.sh

Donate
云乞讨

记一次httpd的服务故障 2021-8-5

故障日志

[Wed Aug 04 03:12:36.144770 2021] [core:warn] [pid 18096] (101)Network is unreachable: AH00056: connect to listener on [::]:80
[Wed Aug 04 03:12:37.146003 2021] [core:warn] [pid 18096] (101)Network is unreachable: AH00056: connect to listener on [::]:80
[Wed Aug 04 03:12:38.147256 2021] [core:warn] [pid 18096] (101)Network is unreachable: AH00056: connect to listener on [::]:80
[Wed Aug 04 03:39:31.909103 2021] [suexec:notice] [pid 19740] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Aug 04 03:39:32.086015 2021] [core:emerg] [pid 19740] (28)No space left on device: AH00023: Couldn't create the proxy mutex 
[Wed Aug 04 03:39:32.086130 2021] [proxy:crit] [pid 19740] (28)No space left on device: AH02478: failed to create proxy mutex
[Wed Aug 04 03:39:32.086151 2021] [:emerg] [pid 19740] AH00020: Configuration Failed, exiting
[Wed Aug 04 08:57:24.015367 2021] [suexec:notice] [pid 27344] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Aug 04 08:57:24.191822 2021] [core:emerg] [pid 27344] (28)No space left on device: AH00023: Couldn't create the proxy mutex 
[Wed Aug 04 08:57:24.191917 2021] [proxy:crit] [pid 27344] (28)No space left on device: AH02478: failed to create proxy mutex
[Wed Aug 04 08:57:24.191937 2021] [:emerg] [pid 27344] AH00020: Configuration Failed, exiting
[Wed Aug 04 09:02:36.935796 2021] [suexec:notice] [pid 27501] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Aug 04 09:02:37.097374 2021] [core:emerg] [pid 27501] (28)No space left on device: AH00023: Couldn't create the proxy mutex 
[Wed Aug 04 09:02:37.097485 2021] [proxy:crit] [pid 27501] (28)No space left on device: AH02478: failed to create proxy mutex
[Wed Aug 04 09:02:37.097506 2021] [:emerg] [pid 27501] AH00020: Configuration Failed, exiting
[Wed Aug 04 09:04:16.897034 2021] [suexec:notice] [pid 27652] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Aug 04 09:04:17.058253 2021] [core:emerg] [pid 27652] (28)No space left on device: AH00023: Couldn't create the proxy mutex 
[Wed Aug 04 09:04:17.058380 2021] [proxy:crit] [pid 27652] (28)No space left on device: AH02478: failed to create proxy mutex
[Wed Aug 04 09:04:17.058400 2021] [:emerg] [pid 27652] AH00020: Configuration Failed, exiting

处理办法

[root@server httpd]# ipcs -s | wc -l
129
[root@server httpd]# cat /proc/sys/kernel/msgmni
3649
[root@server httpd]# cat /proc/sys/kernel/sem
250 32000 32 128
[root@server httpd]# ipcrm -a
[root@server httpd]# ipcs -s | awk -v user=apache ‘$3==user {system(“ipcrm -s “$2)}’
[root@server httpd]# ipcs -s | wc -l
4
[root@server httpd]# cat /proc/sys/kernel/msgmni
3649
[root@server httpd]# cat /proc/sys/kernel/sem
250 32000 32 128
[root@server httpd]#

ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。httpd长久的使用,没有释放资源,造成重启httpd服务的失败,清理一下就可以了。

Donate
云乞讨

记一次服务器故障记录-网络配置错误 2021-8-3

故障描述

故障的表现为,此服务器,从外部无法登录,无法ping通

处理办法

从控制台,发现可以跳进输入账号密码的界面,输入root账号和密码

// 输入last命令,查看登录记录,发现昨日凌晨,服务器有重启

last记录
// ping检测网络通断,发现网络不通
root@server:~# ping 8.8.8.8
// ip addr查看网卡信息,发现网卡上面没有IP信息
root@server:~# ip addr
// 检查静态的网卡初始化信息配置 /etc/network/interfaces
root@server:/etc/network# cat interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens3
iface ens3 inet static
address 45.*.*.130
netmask 255.255.255.0
gateway 45.*.*.1
root@server:/etc/network# 

// 发现故障点,在配置文件中,可用网卡的名字配置错误,应该为ens3被错配置为eth0,修改一下,重启网络服务即可
root@server:~# systemctl restart networking

// 2021-9-22 补充
root@server:~# chattr +i /etc/network/interfaces

// 比较奇怪的一个错误,遇到网卡名称配置错误

Donate
云乞讨

注册美区APPID步骤指南 2021-8-2

– 2022-12-10 已确认,教程正常可用,增补视频操作指南师范在附录

需求描述

手机上,时常还是需要一个美区的APPID的,下面分步骤介绍Windows电脑端进行美区APPID注册的过程

1. 需求是,注册美区的APPID,故需要开启一个全局的代理,代理的IP信息,务必是美国。仅注册APPID时候,需要全局模式,日常请用常规的PAC/配置分流模式。

  • Windows 的V2rayN客户端,全局模式,在系统代理的“全局模式”或者“自动配置系统代理”,看软件版本略微不同。
  • 苹果iOS的shadowrocket客户端,全局模式,在连接开关的下方的全局路由,这个选项选择“代理”
  • 安卓Android的V2rayNG/SagerNet客户端,全局模式,在左上角设置里,预定义规则里,“全局”
全局

登录一些查看IP的网站,验证IP是否为美国的

查看IP地址的网站1 https://whatismyipaddress.com/

查看IP地址的网站2 https://ipinfo.io/

检测IP归属地区

2. 确认使用美国IP的情况下,打开苹果的网站 https://appleid.apple.com/ ,点击”Create Your Apple ID”

3. 填写信息

填写信息

大致的填写内容如下

Harold Finch
United States
12302000 // 月日年格式,表示2000年12月30日
你的邮箱 (推荐使用Gmail/Hotmail/iCloud的邮箱)
初始密码 (推荐使用较为复杂的密码)
初始密码 (推荐使用较为复杂的密码)
手机号可以其他地区的(可CN号码,最好有非CN的号码)
获取验证码
勾掉三个”邮件推荐推送”,”软件音乐推荐”,”新闻推荐”
填写验证码
点击继续

特别注意,如果是需要下载付费APP的,务必注册地址,最好在美国的5个免税州,信息在下方的第10章节

4. 信息验证

验证邮箱信息,在你填写的邮箱的收件箱中,可以查看到

Email Code

验证手机信息,在你手机的短信中,可以查看到验证码

SMS CODE

5. 成功注册一个美区账号

成功注册

6. 手机上登录,同意服务协议,激活账号

APPID, Login in iPhone

如果,只是需要一个美区的APPID,注册工作就完成了,你就可以欢快使用刚刚注册的APPID了。

= = = = = = = = = = = = = 分割线 = = = = = = = = = = = = = =

= = = = = = = = = = = = = 分割线 = = = = = = = = = = = = = =

= = = = = = = = = = = = = 分割线 = = = = = = = = = = = = = =

如果需要下载一些需要支付的APP,继续往下面看

7. 添加礼品卡,礼品卡可以淘宝购买

add gift card or other payment

10. 购买想要的软件,如果提示账单地址信息,务必选择填写一个美国的5个免税州的地址,这样可以避免购买APP软件时候额外的消费税

免税州信息

2022-8-21 更新博客,增加对于不同平台全局模式的描述

附录1、Youtube视频,示范注册操作

DONE v20210802

Donate
云乞讨

苹果iOS使用shadowrocket手册指南 2021-8-1

1、打开苹果手机iPhone,或平板电脑iPad设备

iPhone iPad

2、打开AppStore

AppStore

3、点击头像

头像

4、拉到最下方,点击退出登录

退出登录

5、退出登录后,点击登录,选择使用已有账号登录,输入账号,输入密码,点击登录,点击完成

6、如果APPID有两步验证,联系账号所有者获取两步验证的6位认证数字。

如果没有两步验证,登录时候,出现两步验证选项时候,选择“其他选项”,选择“不升级”。

7、登录后,搜索shadowrocket下载(软件的描述为 Rule based proxy utility的是对的,其余的是假的)

Download Shadowrocket

8、下载完成后,打开shadowrocket,点击下方第二个配置,点击中间位置的default.conf,点击编辑配置

编辑Default.conf配置文件

点击添加规则,修改选项为DIRECT,域名位置添加qpic.cn 点击保存

add rules
增加qpic规则

点击添加规则,修改选项为DIRECT,域名位置添加qlogo.cn 点击保存

增加qlogo规则

9、点击设置,翻页到倒数第四个,点击订阅,打开“打开时更新”和“自动后台更新”

设置
自动更新

10、点击首页,点击屏幕右上角的+号,类型选择subscribe,URL内填入订阅地址,备注填入自定义的名称,例如123(备注随意填写),点击完成

add sub
add a sub address and remark

11、添加订阅完成后,可以看到服务器线路,点击一个服务器,点击上方“未连接”位置的开关即可打开VPN

connect to a server

备注1,第一次使用时候,出现权限提醒,点击同意,输入手机密码确认一下即可。

12、在safari或其他浏览器中,如果可以打开 https://www.youtube.com即说明成功

open https://www.youtube.com in safari

13、

完成后,务必及时在AppStore里面,退出登录刚刚的APPID,登录回自己的APPID

完成后,务必及时在AppStore里面,退出登录刚刚的APPID,登录回自己的APPID

完成后,务必及时在AppStore里面,退出登录刚刚的APPID,登录回自己的APPID

重要的事情说三遍

DONE

更新日期: 2021-8-1

Debian 10系统上,安装部署最新版本的Python3 2021-7-27

需求描述

Debian 10系统上,安装部署最新版本的Python3,以使用最新的特性

Python官网 https://www.python.org/

2021-7-27 时候,官网最新的版本为Python 3.9.6,下载链接 https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz

https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz

root@server:~# apt-get update
root@server:~# apt-get install gcc make wget
root@server:~# cd ./src
root@server:~# wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz
root@server:~# tar -xJf Python-3.9.6.tar.xz
root@server:~# cd ./Python-3.9.6    
root@server:~# ./configure
root@server:~# make
root@server:~# make install
root@server:~# rm /usr/bin/python3
root@server:~# ln -s /usr/local/bin/python3 /usr/bin/python3
root@server:~# /usr/local/bin/python3 
Python 3.9.6 (default, Jul 26 2021, 22:17:56) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

DONE 完成
Donate
云乞讨

Debian 10系统上,安装并配置vsftpd服务,及进阶配置 2021-7-26

需求描述

Debian 10系统上,安装并配置vsftpd服务,这个属于一个比较基础的内容

# apt-get update   //更新
# apt-get install vsftpd  //安装vsftpd
# cd /etc  
# cp vsftpd.conf  bak.vsftpd.conf.20210726   //备份配置文件
# vi vsftpd.conf   //修改配置文件
* anonymous_enable=NO   // 禁止匿名FTP
* local_enable=YES   // 允许本地用户
* write_enable=YES   // 允许写入
* local_umask=022    // 权限掩码 

# vi /etc/ftpusers  //修改禁止访问FTP的本地用户清单
* 注释掉root

# systemctl restart vsftpd  //重启服务

使用root账号从其他机器ftp登录即可

比如在Win平台上,在资源地址栏里,输入ftp://xx.xx.xx.xx,输入用户名,输入密码,登录后,可轻松复制文件。

Win登录ftp服务器示例

备注1,一般情况下,不要使用root账号为直接登录FTP服务器的默认账号

也可以使用ftp的客户端软件,进行文件传输,可以保存密码,不用每次登录都输入密码

推荐使用winscp软件 官网下载 https://winscp.net/eng/download.php

winscp客户端安装

如果只是个人内网使用,那么如上的内容已经足够了,下面介绍进阶部分的内容。

呀呀呀呀呀呀呀呀呀呀呀 – 咕咕咕咕咕咕咕咕咕咕咕
– – – 内容分割线 – – –
呀呀呀呀呀呀呀呀呀呀呀 – 咕咕咕咕咕咕咕咕咕咕咕

进阶章节1,配置一个单独可用的ftp账号,禁止root账号登录ftp,划分独立的磁盘空间给FTP使用

# mkdir -p /var/www/html    //创建一个ftp账号的目录
# useradd -U -s '/bin/sh' -d '/var/www/html' aftpuser    //创建一个FTP账号
# chown aftpuser:aftpuser /var/www/html    //权限
# passwd aftpuser  //修改密码

从宿主机划分100G磁盘到ftp的服务器, 将该磁盘格式化后,挂载到/var/www/html的FTP目录

增加100G空间到服务器VPS
完成增加100G的scsi 1磁盘到VPS
添加磁盘完成后,系统内可以看到对应大小的磁盘空间

使用LVM方式对新增加的分区进行格式化,参考文章链接 https://dasmz.com/?p=101

Refer : 动态分区LVM方式挂载两块新增的硬盘到系统 2021-05-18

配置增加的100G磁盘为LVM动态方式挂载
创建文件系统,并挂载
配置启动时候挂载
root@PVE-Debian-FTP-SAMBA:/var/www/html# cat /etc/ftpusers 
root
// 确保root在/etc/ftpusers 即可禁止root登录ftp server

这样,我们就有了一个100G空间的FTP Server服务器,且可以支持扩容

Donate
云乞讨

基于Mozilla的send,搭建简单的文件资料分享平台,从此跟用微信发文件的行为告别 2021-7-21

需求描述

日常,需要发送文件,图片,压缩包,链接等内容给朋友,大家常用的肯定是QQ/Wechat,这其实如同吉利公司老板说的,其实很不具备隐私,而且,想用微信发送超过100MB的文件,就直接被拒绝,无奈。

那么有什么简单可靠的分享资料的方式呢,哈哈,Mozilla的send的项目正适合你。

需要的资源

  1. 云服务器 x1
  2. Node.js环境 x1
  3. Git可访问 x1

安装部署步骤如下

Mozilla的send是基于Node.js 12.x开发的,故而需要先安装Node.js

Node.js官方网站 https://nodejs.org/

安装Node.js相对简单,直接参考Node.js官方的Github页面,里面包含多平台的简单脚本安装方式,进行对应系统版本的安装 https://github.com/nodesource/distributions

# 我这里是Debian 9 系统,则对应安装Node.js 12.X的步骤为
root@debian:~# apt-get update
root@debian:~# apt-get install curl apt-transport-https ca-certificates gnupg2 software-properties-common git wget 
root@debian:~# curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
root@debian:~# apt-get update
root@debian:~# apt-get install -y nodejs

root@debian:~# nodejs -v
v12.22.2
root@debian:~# 

在安装完成Node.js之后,部署Mozilla/send

项目地址https://github.com/mozilla/send

下载send的源包,https://github.com/mozilla/send/archive/refs/tags/v3.0.22.tar.gz

// 下载,解压,安装
root@debian:~# wget https://github.com/mozilla/send/archive/refs/tags/v3.0.22.tar.gz
root@debian:~# tar -zxvf v3.0.22.tar.gz
root@debian:~# cd /send-3.0.22
root@debian:~# npm install   // 需要比较久的时间
root@debian:~# npm audit fix   // 执行上一步,如果有失败,则运行该命令补充
// root@debian:~# npm run prod
root@debian:~# /usr/bin/node /usr/bin/npm run prod

困了,先睡觉,未完待续……

基于stairspeedtest-reborn的WEB页面方式,来进行代理检测 2021-7-21

需求描述
自己编写的编号P2FA项目的爬虫程序已经采集到三万多个V2ray代理了,循环检测,输出,使用的时候,需要检测一下代理的速度,手机客户端检测非常不便捷,这个时候,就可以使用到WEB页面的检测方式,来进行代理检测

采集的代理数量
采集的代理数量 2021-7-21

基于免费代理制作成的订阅,由于检测机制的不密集,常会出现,检测时候可用,实际想要用的时候,不可用,而且,手机上无法感知真实的服务器速度,这个时候,通过WEB方式检测线路,然后直接手机上使用即可。

本次,基于Github上的stairspeedtest-reborn项目,Linux环境,进行WEB部署。

本次部署到Debian 9 x64云主机上,下载对应到系统平台版本的 stairspeedtest-reborn-v0.7.1-release

# 下载
root@debian:~# wget https://github.com/tindy2013/stairspeedtest-reborn/releases/download/v0.7.1/stairspeedtest_reborn_linux64.tar.gz
# 解压
root@debian:~# tar -zxvf stairspeedtest_reborn_linux64.tar.gz
# 进入工作目录
root@debian:~# cd stairspeedtest
# 修改配置文件 pref.ini
修改test_file_urls项的内容为自定义的测速文件,一般3个不同地域的服务器,每个10MB左右的文件足够
# 修改启动项文件 webgui.sh 
修改默认端口到一个其他端口,一般不推荐用默认端口
# 启动
root@debian:~# nohup ./webgui.sh &

在上述的服务端启动后,在自己的本机的浏览器输入服务器的地址,即可访问

StairSpeedtes的页面

输入自己的订阅地址自定义组名,点击提交即可

执行完成后,页面自动刷新,输出一个表格,输出一个图片

完成测速的截图

可以看到,在自己修改了配置文件后,本次测速,只用了220MB的总流量,比较节约。免费节点的速度,也就如图,白嫖真快乐。

有了这样的神器,再也不用担心,手机上选择时候的困境了。

Dasmz的StairSpeedtest演示站点 http://125.3.8.244:1333/gui.html

备注1,一般不要使用别人提供的测速站点,会泄漏你自己的订阅地址

备注2,公网环境,诚挚建议把站点用HTTPS封装一下,保证数据安全

Donate
云乞讨

备份博客服务器的MySQL数据库 备份网站的资料 2021-7-13

需求描述
备份本博客网站的数据库,数据资料,备份频率1次/天,服务器源站位于美国,备份数据异地容灾,传输到中国一份,传输到日本服务器一份。
数据实现一主,两备份副本,即便主网站完全崩溃,可以实现,快速的数据恢复,网站重建。

博客网站的备份,分为两部分,数据库部分和网站文件部分。

备份脚本已上传Github,运行在源站服务器上

https://github.com/fdmove/BlockADS/blob/main/BackBlog.sh

预览

#!/bin/sh
# START
mkdir -p /root/sh /root/backup
v_date=`date '+%Y%m%d'`
DB_USER='root'
DB_PASS='DBPASS'
DB_NAME='DBNAME'
DB_HOST='127.0.0.1'

# 备份数据库
mysqldump -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} --databases ${DB_NAME} > /root/backup/Backup.myBlog.mysqldump.${v_date}.SQL

# 备份网站的文件
v_blog='dasmz.com'
cd /var/www/
tar -zcvf /root/backup/Backup.${v_blog}.${v_date}.tar.gz ${v_blog}

# 删除旧的备份
cd /root/backup
find . -name *.tar.gz -type f -ctime +90 -print | xargs rm 
find . -name *.SQL    -type f -ctime +90 -print | xargs rm

# END

备注1 依据服务器磁盘大小,选择保留的数据量

备注2 实际情况下,个人博客网站,一般一主一备就足够了,单体数据量全量和增量都比较小,不需要高密度备份

源站服务器,cron任务

# 备份数据库 和 网站的文件  20210713
10 0 * * * /root/sh/BackBlog.sh > /root/log/BackBlog.log

备份的文件在源站服务器生成后,可以用一些sync工具,定时同步到其他备份节点的磁盘上。

Donate
云乞讨