TCP完成简易GET

咕咕咕,这段时间主要是期中考试…还关注了几天黑五…然后拖到今天才写完…

这是第一个,用仅TCP实现GET功能

import socket
import ssl
s=ssl.wrap_socket(socket.socket())
s.connect(('www.bilibili.com', 443))
s.send('GET / HTTP/1.1\r\n'.encode())
s.send('Host: www.bilibili.com\r\n'.encode())
s.send('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\r\n'.encode())
s.send('Connection: close\r\n\r\n'.encode())
response=b""
while 1:
    temp = s.recv(1024)
    if temp:
        response+=temp
    else:break
s.close()
response=response.decode("utf8").split("\r\n\r\n")[1]
f = open('bilibili.html','w',encoding='utf-8')
f.write(response)
f.close()

这样就行了,很简单的,就是输出出来的文件会有点奇怪:

有些地方UTF-8无法解析,谁来救救我…

参考了许多大佬的文章,在此一并感谢

Python爬取网易云歌手信息

这个同样是作业…

早写完了,鸽了好久才发出来…

首先是根据指定歌手id获取歌手名和简介

import requests
import re
def spider(id):
    url="https://music.163.com/m/artist?id="+id
    headers={"user-agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"}
    response=requests.get(url,headers=headers)
    response=response.text
    singer=re.findall(r'<meta name="keywords" content="(.*?)" />',response)
    introduce=re.findall('"briefDesc":"(.*?)"',response)
    result=dict(zip(singer,introduce))
    print(result)
id=input('请输入歌手id:\n')
spider(id)

我发现移动版的网易云更好搞,不需要cookie啥的,只要有个UA就能获取成功…

然后稍微处理一下就能取得信息了…

然后是获取所有亚洲男歌手id和姓名

import requests
import re
def spider(id):
    url="https://music.162.com/discover/artist/cat?id=1001&initial="+str(id)
    headers={"user-agent": "Mozilla/4.0 (Windows NT 10.0; Win64; x64; Cortana 1.11.6.17763; 10.0.0.0.17763.805) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"}
    response=requests.get(url,headers=headers)
    response=response.text
    singer=re.findall(r'<a href="/artist\?id=(.*?)" class="nm nm-icn f-thide s-fc-1" title="(.*?)的音乐"',response)
    singer=dict(singer)
    return singer
list={64,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0}
singers=spider(-2)
for id in list:
    singers=dict(singers,**spider(id))
print(singers)

这个也很简单…UA用的Cortana的…虽然不知道有什么用…

就这样吧,这次的没什么难度

华为云两款2X4G鸡比较

我曾在今年7月多上了华为云的双核4G1M学生机,当时是s2.large.2而且只有广州数据中心,今天,我再次进入华为云的学生优惠页,发现我居然还能买2x4g学生机,活动内容基本一样,但这次不同的是,型号变成了t6.large.2,而且有上海、北京可选(现在还有云数据库可供选购),因为我腾讯和阿里的机子都在上海,所以这次我上了北京的年付车

首先,说一下s2.large.2和t6.large.2的区别

t6.large.2
s2.large.2

可以看出,t6有性能限制,超过基准就要算CPU积分,积分用完就会强制限制到基准(积分啥的我完全搞不懂)

直接放跑分结果把,虽然不是在一个地区,但应该还是有参考性的

这是s2的,性能还过得去,就是不知道为什么speedtest跑不动
------------------------------------------------------------------------
Benchmark Run: Tue Oct 29 2019 19:52:14 - 12:20:51
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       33486251.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3802.8 MWIPS (13.2 s, 7 samples)
Execl Throughput                               4723.8 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        859295.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          226276.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2355875.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1570786.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  89506.2 lps   (10.0 s, 7 samples)
Process Creation                              10460.1 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   7195.0 lpm   (60.3 s, 2 samples)
Shell Scripts (8 concurrent)                   1553.7 lpm   (60.0 s, 2 samples)
System Call Overhead                        2015708.8 lps   (10.0 s, 7 samples)
 
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   33486251.2   2869.4
Double-Precision Whetstone                       55.0       3802.8    691.4
Execl Throughput                                 43.0       4723.8   1098.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     859295.0   2169.9
File Copy 256 bufsize 500 maxblocks            1655.0     226276.3   1367.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    2355875.5   4061.9
Pipe Throughput                               12440.0    1570786.9   1262.7
Pipe-based Context Switching                   4000.0      89506.2    223.8
Process Creation                                126.0      10460.1    830.2
Shell Scripts (1 concurrent)                     42.4       7195.0   1696.9
Shell Scripts (8 concurrent)                      6.0       1553.7   2589.6
System Call Overhead                          15000.0    2015708.8   1343.8
                                                                   ========
System Benchmarks Index Score                                        1349.2
 
------------------------------------------------------------------------
Benchmark Run: Tue Oct 29 2019 12:20:51 - 12:49:32
2 CPUs in system; running 2 parallel copies of tests
 
Dhrystone 2 using register variables       65907398.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     7605.8 MWIPS (13.2 s, 7 samples)
Execl Throughput                               9185.6 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1147725.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          303610.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       3320440.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3039240.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 499038.8 lps   (10.0 s, 7 samples)
Process Creation                              22374.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  11306.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1647.2 lpm   (60.0 s, 2 samples)
System Call Overhead                        3151873.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   65907398.7   5647.6
Double-Precision Whetstone                       55.0       7605.8   1382.9
Execl Throughput                                 43.0       9185.6   2136.2
File Copy 1024 bufsize 2000 maxblocks          3960.0    1147725.8   2898.3
File Copy 256 bufsize 500 maxblocks            1655.0     303610.9   1834.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    3320440.7   5724.9
Pipe Throughput                               12440.0    3039240.7   2443.1
Pipe-based Context Switching                   4000.0     499038.8   1247.6
Process Creation                                126.0      22374.7   1775.8
Shell Scripts (1 concurrent)                     42.4      11306.6   2666.6
Shell Scripts (8 concurrent)                      6.0       1647.2   2745.3
System Call Overhead                          15000.0    3151873.1   2101.2
                                                                   ========
System Benchmarks Index Score                                        2429.5

Superbench
----------------------------------------------------------------------
 Superbench.sh -- https://www.oldking.net/350.html
 Mode  : Standard    Version : 1.1.5
 Usage : wget -qO- git.io/superbench.sh | bash
----------------------------------------------------------------------
 CPU Model            : Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
 CPU Cores            : 2 Cores @ 2394.454 MHz x86_64
 CPU Cache            : 35840 KB 
 OS                   : CentOS 7.6.1810 (64 Bit) KVM
 Kernel               : 5.3.7-1.el7.elrepo.x86_64
 Total Space          : 3.2 GB / 40.0 GB 
 Total RAM            : 233 MB / 3938 MB (745 MB Buff)
 Total SWAP           : 0 MB / 0 MB
 Uptime               : 0 days 1 hour 55 min
 Load Average         : 0.00, 0.00, 0.16
 TCP CC               : bbr
 ASN & ISP            : AS55990, Huawei Cloud Service
 Organization         : Huawei Cloud Service
 Location             : Guangzhou, China / CN
 Region               : Guangdong
----------------------------------------------------------------------
 I/O Speed( 1.0GB )   : 166 MB/s
 I/O Speed( 1.0GB )   : 157 MB/s
 I/O Speed( 1.0GB )   : 179 MB/s
 Average I/O Speed    : 167.3 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency     
 Speedtest.net    2.28 Mbit/s       84.12 Mbit/s        43.286 ms  
 Wuhan     CT     1.95 Mbit/s       71.59 Mbit/s        -          
----------------------------------------------------------------------
 Finished in  : 6 min 1 sec
 Timestamp    : 2019-10-29 13:42:05 GMT+8
 Results      : /root/superbench.log
----------------------------------------------------------------------
这是t6的,性能要差点,但也过得去,ip貌似是广播上海的
------------------------------------------------------------------------
Benchmark Run: Tue Oct 29 2019 12:21:24 - 12:49:30
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       33006253.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3927.5 MWIPS (9.8 s, 7 samples)
Execl Throughput                               4615.3 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        670588.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          183666.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1806455.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1057433.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  75775.1 lps   (10.0 s, 7 samples)
Process Creation                               9376.1 lps   (30.4 s, 2 samples)
Shell Scripts (1 concurrent)                   7090.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1458.5 lpm   (60.0 s, 2 samples)
System Call Overhead                         928061.5 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   33006253.8   2828.3
Double-Precision Whetstone                       55.0       3927.5    714.1
Execl Throughput                                 43.0       4615.3   1073.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     670588.1   1693.4
File Copy 256 bufsize 500 maxblocks            1655.0     183666.3   1109.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    1806455.5   3114.6
Pipe Throughput                               12440.0    1057433.7    850.0
Pipe-based Context Switching                   4000.0      75775.1    189.4
Process Creation                                126.0       9376.1    744.1
Shell Scripts (1 concurrent)                     42.4       7090.6   1672.3
Shell Scripts (8 concurrent)                      6.0       1458.5   2430.8
System Call Overhead                          15000.0     928061.5    618.7
                                                                   ========
System Benchmarks Index Score                                        1118.3

------------------------------------------------------------------------
Benchmark Run: Tue Oct 29 2019 12:49:30 - 13:17:34
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables       66023784.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     7831.6 MWIPS (9.8 s, 7 samples)
Execl Throughput                               8116.9 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1067156.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          279506.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2916760.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2090724.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 419397.7 lps   (10.0 s, 7 samples)
Process Creation                              14908.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  10863.4 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1540.2 lpm   (60.0 s, 2 samples)
System Call Overhead                        1620902.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   66023784.7   5657.6
Double-Precision Whetstone                       55.0       7831.6   1423.9
Execl Throughput                                 43.0       8116.9   1887.6
File Copy 1024 bufsize 2000 maxblocks          3960.0    1067156.4   2694.8
File Copy 256 bufsize 500 maxblocks            1655.0     279506.3   1688.9
File Copy 4096 bufsize 8000 maxblocks          5800.0    2916760.0   5028.9
Pipe Throughput                               12440.0    2090724.8   1680.6
Pipe-based Context Switching                   4000.0     419397.7   1048.5
Process Creation                                126.0      14908.3   1183.2
Shell Scripts (1 concurrent)                     42.4      10863.4   2562.1
Shell Scripts (8 concurrent)                      6.0       1540.2   2566.9
System Call Overhead                          15000.0    1620902.1   1080.6
                                                                   ========
System Benchmarks Index Score                                        2038.8

Superbench
----------------------------------------------------------------------
 Superbench.sh -- https://www.oldking.net/350.html
 Mode  : Standard    Version : 1.1.5
 Usage : wget -qO- git.io/superbench.sh | bash
----------------------------------------------------------------------
 CPU Model            : Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz
 CPU Cores            : 2 Cores @ 2200.000 MHz x86_64
 CPU Cache            : 30976 KB 
 OS                   : CentOS 7.6.1810 (64 Bit) KVM
 Kernel               : 5.3.7-1.el7.elrepo.x86_64
 Total Space          : 3.2 GB / 40.0 GB 
 Total RAM            : 239 MB / 3938 MB (674 MB Buff)
 Total SWAP           : 0 MB / 0 MB
 Uptime               : 0 days 0 hour 57 min
 Load Average         : 9.54, 7.40, 4.25
 TCP CC               : bbr
 ASN & ISP            : AS55990, Huawei Cloud Service
 Organization         : Huawei Cloud Service
 Location             : Shanghai, China / CN
 Region               : Shanghai
----------------------------------------------------------------------
 I/O Speed( 1.0GB )   : 182 MB/s
 I/O Speed( 1.0GB )   : 156 MB/s
 I/O Speed( 1.0GB )   : 156 MB/s
 Average I/O Speed    : 164.7 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency     
 Speedtest.net    1.80 Mbit/s       84.02 Mbit/s        47.467 ms  
 Fast.com         0.00 Mbit/s       0.8 Mbit/s          -           
 Wuhan     CT     1.85 Mbit/s       84.62 Mbit/s        -          
 Hangzhou  CT     1.56 Mbit/s       78.70 Mbit/s        -          
 Lanzhou   CT     1.75 Mbit/s       48.04 Mbit/s        -          
 Shanghai  CU     1.58 Mbit/s       93.58 Mbit/s        -          
 Heifei    CU     1.94 Mbit/s       64.39 Mbit/s        -          
 Xizang    CM     1.55 Mbit/s       70.12 Mbit/s        -          
----------------------------------------------------------------------
 Finished in  : 6 min 25 sec
 Timestamp    : 2019-10-29 13:24:13 GMT+8
 Results      : /root/superbench.log
----------------------------------------------------------------------

在测试过程中,后台显示s2最高跑到了94%的CPU占用率,而t6最高只有80%,积分也用了不少…

说不清楚是变坑了还是怎么样…

如何做一个假wei斯

这个其实也是在完成作业时的副产品,之所以选择百度就是因为便宜还有易于开发

一、获取百度SDK

首先,你需要拥有一个百度账号(估计都有吧,这年代还有人不用百度云?)

然后,登陆 https://console.bce.baidu.com/ai/#/ai/speech/overview/index 创建应用,接口默认即可

点击查看应用详情,获取 AppID,API Key,Secret Key

安装Python SDK

pip install baidu-aip

无pip也可在应用页下载SDK手动安装,解包后执行

python setup.py install

二、安装依赖

这部分没pip的只有自己想办法了…

除SDK外,还需安装playsound,pyaudio,scipy,numpy

第一个用于播放合成出来的语音

后面三个主要用在录音环节

依次执行

pip install 包名

如果pyaudio无法安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio 下载对应包

pip install 包名.whl

即可完成安装

另外,还需对playsound进行修改,否则循环时会一直占用音频文件,导致无法写入

请参考 python下playsound模块解除占用

三、码代码

我们分成四个部分来完成

第一部分:语音识别

参考官方文档,我们首先需要将之前获得的APP_IDAPI_KEYSECRET_KEY 填入

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

再参照文档中的示例

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件
client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
    'dev_pid': 1536,
})

这个示例是将目录下的audio.pcm上传识别

因此,能想到,如果有什么方法能自动录音,判断我们已经停止说话,然后将文件上传识别,那么这个模块就已经完善

然而,我对这个自动录音想的太过简单,最终,录音部分通过对python录音程序提供的源码进行修改实现

大佬的源码非常完善,我们只需要对其中几个参数进行修改即可,录音阈值可以按环境进行适度调整,为了美观,可以将其中的两个print进行修改

删除源码的最后两行,保存为record.py

录音模块便制作完成

将其import后就可以直接调用了,我们可以直接recording(‘in.wav’)完成录音

再看回百度这边,client.asr调用后会返回一个dict,处理起来非常方便,只需dict.get(‘result’)就可以获取到[‘内容’]形式的结果

我通过对字符串的简单处理去除了[‘和’]

questionall = client.asr(get_file_content('in.wav'), 'pcm', 16000, {'dev_pid': 1536, }) # 此部分实现语音识别,返回值在questionall内
questional = str(questionall.get('result'))
    lens = int(len(questional))
    ques = questional[2:lens - 2]str(questionall.get('result')) # 此部分将结果提取并转为字符串
lens = int(len(questional)) # 获取字符串长度
ques = questional[2:lens - 2] # 只保留内容到ques

第二部分:调用机器人

因为懒,我直接用了一个百度出来的机器人http://api.qingyunke.com/ 说实话,还蛮好的

我们通过GET来获取回答,信息已存入message中,需注意,message必须urlencode,否则可能报错

r=requests.get('http://api.qingyunke.com/api.php?key=free&appid=0&msg='+message)

结果为一个dict和json都会报错的东西(大概是我太蔡了),所以我只能再次进行字符串处理

answer=str(r.json()) # 转为字符串
lens=int(len(answer)) # 计算长度
ans=answer[26:lens-2] # 保留结果

第三部分:语音合成

同样,根据官方文档

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

所以我们只需把‘你好百度’换成我们需要的文字即可,可以修改参数来优化语音

播放语音通过playsound(‘out.mp3’)实现

第四部分:逻辑主体

这里主要是逻辑方面的编写,你们自己看着办吧…

比如一阵机械的嘘寒问暖之后,开始循环,直到识别到关键字退出或进行指定回答…

最终节:出来吧,假wei斯

唔,我还是直接贴代码吧,不想写了,安装完依赖后,直接执行应该能得到一个假wei斯吧…(记得替换APP_ID啥的,record.py必须在同目录下)

from aip import AipSpeech
import requests
import urllib.parse
from record import recording
from playsound import playsound

# 认证部分
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 录音并调用SDK进行语音识别,输出并返回结果
def voice():
    recording('in.wav')
    questionall = client.asr(get_file_content('in.wav'), 'pcm', 16000, {'dev_pid': 1536, })
    questional = str(questionall.get('result'))
    lens = int(len(questional))
    ques = questional[2:lens - 2]
    print('.',end='')
    print(ques)
    ques = urllib.parse.quote(ques)
    return ques

# 根据给入的文字调用SDK输出并播放音频
def voiceout(message):
    result  = client.synthesis(message, 'zh', 1, {'vol': 5,})
    if not isinstance(result, dict):
        with open('out.mp3', 'wb') as f:
            f.write(result)
    playsound('out.mp3')

# 向机器人发送信息并对返回值处理
def ai(message):
    r=requests.get('http://api.qingyunke.com/api.php?key=free&appid=0&msg='+message)
    answer=str(r.json())
    lens=int(len(answer))
    ans=answer[26:lens-2]
    return ans

# 程序主体
print('欢迎使用聊天机器人')
ainame=input('给你的机器人取个名字吧\n')
name=input('你叫什么名字?\n')
print(ainame,':你好',name,',说些什么吧')
voiceout('你好,'+name+',说些什么吧')
i=1;
while i==1:
    print(name,':',end='')
    requ=voice()
    requ=urllib.parse.unquote(requ)
    if '再见' in requ or '晚安' in requ or '退出' in requ or '拜拜' in requ:
        i=0
    anse=ai(requ)
    if anse=='未获取到相关信息':
        anse='听不清,请再说一遍'
    print(ainame,':',anse)
    voiceout(anse)
print('谢谢使用!')
voiceout('谢谢使用!')

最后,再次感谢百度SDK,聊天机器人录音脚本playsound修改等教程或服务的作者或开发者

利用Docker一键安装WordPress

同样,这也是社团任务…

这次,我选用Centos8来进行

配置Docker及系统环境

首先,安装Docker

推荐使用自动脚本安装(省事,快捷),通过mirror选项更换国内源

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

启用Docker

systemctl enable docker
systemctl start docker

开启v4转发(不开就没法关防火墙…容器也可能连不了外网)

vi /etc/sysctl.conf
#在其中添加
net.ipv4.ip_forward=1
#重启网络生效
systemctl restart network

关闭防火墙及SELinux(也是因为懒)

#停止firewalld服务
systemctl stop firewalld
#禁止firewalld自起
systemctl disable firewalld
#临时关闭SELinux
setenforce 0
#永久关闭SELinux
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled

使用YAML一键构建

建立一个wordpress.yml文件

vi wordpress.yml

在其中键入(3.1版语法)

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

以上根据官方文档修改

一键安装

docker stack deploy -c stack.yml wordpress

安装完成后可通过http://swarm-iphttp://localhost, or http://host-ip访问

附1:

我是使用DaoCloud一键构建的,但由于平台只支持YAML 2.0,因此,我修改了上方代码,形成下方代码(适用于DaoCloud,别的不清楚)

wordpress:
  image: wordpress
  ports:
  - 80:80
  environment:
  - WORDPRESS_DB_HOST=db
  - WORDPRESS_DB_USER=wordpress
  - WORDPRESS_DB_PASSWORD=password
  - WORDPRESS_DB_NAME=wordpress
  restart: always
  links:
  - db
  volumes:
  - wordpress:/var/www/html
db:
  image: mariadb
  restart: always
  environment:
  - MYSQL_DATABASE=wordpress
  - MYSQL_USER=wordpress
  - MYSQL_PASSWORD=password
  - MYSQL_RANDOM_ROOT_PASSWORD='1'
  volumes:
  - db:/var/lib/mysql

附2:

还顺便研究了下Minecraft的Docker一键部署(同样2.0版)

minecraft:
  image: index.docker.io/itzg/minecraft-server:20190824  //有新版本自行更换
  privileged: false
  restart: always
  ports:
  - 25575:25575  //推荐更改此端口,这个为控制端口
  - 25565:25565
  volumes:
  - /data:/data
  environment:
  - EULA=TRUE  //不同意不能部署

详见 https://hub.docker.com/r/itzg/minecraft-server

如何在Ubuntu下手撸LNMP并安装WordPress

前言&Centos8上的失败尝试

手撸LNMP,这个对我来说久远的记忆…(自从用了LNMP一键脚本后,除了特殊环境和省时间外我就没再亲自做了…更何况后来发现更好用的面板)上次手撸LNMP还是高二…(R1D上哦,教程什么的等寒假回家了再说吧) 这次由于社团要求,我首先想到了在Centos8环境进行,毕竟用作服务器似乎Centos好点?… 开始安装后,我首先执行了

yum install nginx php mariadb mariadb-server 

然后初始化数据库mysql_secure_installation,初始化结束后,开始配置nginx和php 由于Centos自带php、nginx默认使用sock,所以不需要其他设置就能通过PHP info验证… 但当我将探针放上去却频繁报错…(搞了1天,日志什么的都看了,没法解决,而且网上似乎也没解决方案…)所以我决定将Centos环境换成Ubuntu18.04

LNMP环境安装

先更新软件源

sudo apt update

安装nginx,php,mariadb

sudo apt install nginx php-fpm php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip php-mysql mariadb-server mariadb-client 

配置nginx

首先,设置nginx自起并启动

sudo systemctl start nginx.service
sudo systemctl enable nginx.service 

这里使用多站点配置方案

sudo vi /etc/nginx/sites-available/wordpress

将以下内容贴入(仅启用了http)

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name _;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;        
    }

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass             unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

启用配置文件

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

重载nginx

sudo systemctl reload nginx

可用sudo nginx -t检查语法错误

配置数据库

同样,启用数据库

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

初始化数据库

sudo mysql_secure_installation

初始化后,进入数据库

mysql -u root -p

新建数据库

CREATE DATABASE xxx DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
xxx为数据库名,自行修改

创建用户管理该数据库

GRANT ALL ON xxx.* TO 'xxxuser'@'localhost' IDENTIFIED BY 'password';
xxx为刚才数据库名,xxxuser为用户,password为用户密码,自行修改

刷新权限并退出

FLUSH PRIVILEGES;

安装Wordpress

cd /var/www/html/wordpress
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
mv wordpress/* .
rm -rf wordpress
sudo chown -R www-data:www-data /var/www/html/wordpress

进入127.0.0.1或localhost即可载入wordpress安装程序

安装到此结束

参考文献较杂较多,在此无法列出,见谅

这是用Makedown写的哟,最近有学Makedown哟

Surface Book の 奇幻之旅

为了方便做笔记以及提高生产力,我决定采购一台支持笔书写的平板用于学习,在进行深思熟虑后(排除一堆国产杂牌,排除某果),我选择了信仰苏菲,平衡了性能与预算后,我选择购入一台Book丐版展示机(买笔买拓展坞还是花了好多…)

Book预装的是已经濒临抛弃的1703,因此给系统升个级是必须操作,排除咖喱系统1903,1803和1809便是最佳选择,考虑网友对1809的文件夹创建卡顿颇有微词,我从msdn上下载了1803的最新补丁版

此处省略万字升级过程,按安装程序装的去就是了,记得装完再更新一下…

由于学习需要,我需要对苏菲进行Win10 X Linux

参考 https://www.jianshu.com/p/3d74e90af751 内容

我对C盘进行了30G压缩并制作了Elementaryos(基于Ubuntu18.04,又有超帅界面,骚年你还犹豫什么)启动盘

修改启动顺序,关闭TPM与Secure Boot后,需要输入BitLocker解锁码(咋没人提这个呢,一定要解密,一定要解密,不然你会被每切一次系统就要输一次解锁码烦死),并且需要重置pin,然后Win10这边就莫问题了

将制作好的启动U盘插入苏菲,系统会自动引导,之后按Ubuntu安装套路安装就行了

安装完成后,需进行驱动安装 https://github.com/jakeday/linux-surface (把脚本跑一遍,然后装上内核即可)

至此,这篇对小白极不友善的教程结束

告别Vultr…

Vultr是我接触比较早的服务商(大概就在17年吧,那时日本2.5刀还有货),因为较为合理的定价(日本5刀还行),有保障的性能(unixbench常年1300),便捷的快照,稳定的服务,所以我一直用到了现在

但如今各大亚太主机商定价大幅下跌(据我所拥有的主机定价来说,1G内存月付最低可至日本2刀,香港5刀,甚至有1点多刀的香港CN2),vu对我而言再也香不起来了

Vultr日本 11:10实测(5刀/月)
AWS Lightsail日本11:10实测(3块/月)
某主机商IIJ日本11:10实测(2刀/月)
某主机商CMI香港11:10实测(5刀/月)
某主机商CN2香港11:10实测(5刀/月)

vu日本网络常年爆炸,加之我的站点也多数迁至虚拟主机,从一开始的建站主力,到现在日常吃灰,在我眼里,vu早已失去了曾经的价值,虽然前后加起来我在vu也花去了100多刀,出于情怀,我还是一直续费到了今天,但如今,秉持节流原则,我决定不再续费vu日本,从前几日开始,我就在进行文件转移,oneindex,小鸡探针,vu上最后留下的网站也悉数转移

但当我真按下Destroy,看着空空的Products页,还是有些不舍

就这样吧…

R1D,从入门到入土

闲来无事,被 无限搁置 的几年前因断电导致硬盘gg的R1D修复项目重新被我想起,鉴于NAS征用了原先的HDD,且考虑到该盘极差的面对断电能力,于是窝在马云家购入一个120G SSD用作主盘

一、刷机

本部分参照网络,只做摘录(我的R1D几年前就刷了,哪记得那么多)

1.打开SSH

必须升为开发版才能开启SSH,链接

下载开启SSH工具包,详见官网

这里只介绍官方方法,其他办法见 http://blog.sina.com.cn/s/blog_680965aa0102yfx1.html

2.备份

小心驶得万年船,翻车了有备份也能翻回来

原理不做解释,详情

下载脚本

然后复制到U盘,在U盘上执行 ./backup.sh 即可

3.刷tomato

先下载固件: https://bitbucket.org/tsynik/tomato-arm/downloads/

以及工具包:http://pan.baidu.com/s/1cMhaKA (内含backup.sh)

在后台记录下MAC

用工具包内的cfe编辑器编辑 cfe_stock.bin ,按图示修改

保存为 cfe.bin

将cfe.bin文件以及工具包里的flash-cfe.sh放到U盘,插入待用

SSH连接路由,cd到U盘,执行 ./flash-cfe.sh

更换完成后,取下U盘,妥善保存备份

确定刷机后门存在

nvram set boot_wait=on && nvram set wait_time=10 && nvram commit && nvram show |grep wait

返回 boot_wait=on wait_time=10 即为成功

关闭路由,将电脑连接路由,设置网卡如下

 固定IP:192.168.1.2
 子网掩码:255.255.255.0
 网关:192.168.1.1

将路由通电,电脑访问192.168.1.1

选择之前下载的固件即可刷机

等待路由灯变蓝代表刷机成功,将网卡改回自动

管理账号及密码默认admin

二、玩法

这是我今天实际操作的部分

以下操作大多在SSH中进行

1.安装TT软件中心

有硬盘的请参照以下部分

刚买的硬盘默认没有分区,我们需要先

fdisk -l

可以发现一个盘没有分区,然后

fdisk /dev/sda #具体是sd什么自行更改
n #新建分区
p #主分区
1 #分区1
接下来默认即可
w #写入

新分区需要进行格式化才能使用,如果数据不要也可执行

mkfs.ext4 -n /dev/sda1 #自行修改

然后在后台可直接挂载

如果你要保留数据(推荐备份出来)以上均无需操作

接下来

mkdir -p /mnt/sda1/jffs #建立目录
mount -o bind /mnt/sda1/jffs /jffs #挂载到/jffs
eval `/usr/bin/wget -q -O - https://ttsoft.ngrok.wang/softcenter/ttsoft` #安装软件中心
注意事项:软件中心会修改你原来默认端口为9527,然后反代原来的端口,意思就是:使用默认端口才能正常访问软件中心,9527是访问系统默认端口,不能使用软件中心,如果原来的默认端突然进不去了,可以尝试9527进入重启路由试试。
因为很多人执行以上的命令完成后发现左侧的菜单栏并没有显示软件中心的字样以为没有安装成功,其实不然,你可以安装完后打开这个链进行验证http://192.168.1.1/#soft-center.asp  如果能成功进入到这个软件中心的界面那就是安装成功了。 

之后到这里进行设置http://192.168.1.1/#admin-scripts.asp

在初始化第一行加入

service usb start
mount -o bind /mnt/sda1/jffs /jffs

至此,软件中心安装完成,可以重启验证(每次访问均要手动输入http://192.168.1.1/#soft-center.asp

无硬盘安装,参照 https://koolshare.cn/thread-162086-1-1.html

2.安装Entware

执行以下命令

mkdir -p /mnt/sda1/opt #建立目录
mount -o bind /mnt/sda1/opt /opt #挂载到/opt
wget http://bin.entware.net/armv7sf-k2.6/installer/generic.sh #下载安装脚本
chmod +x generic.sh #赋予执行权限
./generic.sh #执行

该网站由Cloudflant加速,出现网络错误可自行搭建反代

将此文本粘贴到USB设置中的“挂载后运行”框

#!/bin/sh
/opt/etc/init.d/rc.unslung start

将此文本粘贴到“卸载前运行”框

#!/bin/sh
/opt/etc/init.d/rc.unslung start

在管理脚本页的初始化一栏添加

mount -o bind /mnt/sda1/opt /opt

Entware安装完成,之后可使用opkg自行探索

咕咕咕…

8.25 补充

今天看到极御云安全有提供免费CDN,于是对entware官方源进行了反代,CDN服务器位于洛杉矶(将于下月切换至国内),尚未测试是否对速度有增益(反正对于我这垃圾移动体验极好)

修改/opt/etc/opkg.conf

vi /opt/etc/opkg.conf

将其中bin.entware.net换为entware.yes1.cn,wq保存,执行

opkg update

即可,如安装脚本都无法下载,亦进行如上替换

另:提供上海堡垒资源一份(找了半天…)自行下载