0%

1. 上传文件到ECS服务器

你可以使用SCP或SFTPxx。配置好公钥后,文件上传到你的ECS服务器路径上。以SCP为例:

1
scp /path/to/yourfile.html username@your-ecs-ip:/path/to/server/directory
  • /path/to/yourfile.html 是你本地文件的路径。
  • username 是你在ECS服务器上的用户名。
  • your-ecs-ip 是你的ECS服务器的IP地址。
  • /path/to/server/directory 是你希望在ECS服务器上存放文件的路径。

安装和配置Web服务器

在ECS服务器上使用有sudo权限的用户进行操作,安装一个Web服务器,比如Nginx或Apache。这里我是基于CentOS的Nginx:

1
2
sudo yum install epel-release
sudo yum install nginx

启动Nginx并设置其开机自启动:

1
2
sudo systemctl start nginx
sudo systemctl enable nginx

浏览器输入你的服务器ip,如果安装成功会显示:

1
Welcome to HTTP Server Test Page!
阅读全文 »

问题描述:在编写系统程序中,出现bug导致系统CPU负载或者跑满了。导致客户端ssh无法链接上来。

解决办法:优化出问题的程序,设定CPU阔值,超过重启。

监控与重启:

创建监控脚本

1.创建脚本文件: 在根目录下创建一个新的脚本文件,例如 cpu_monitor.sh。

1
2
3
sudo nano /cpu_monitor.sh
# 或者
sudo vim /cpu_monitor.sh

2.编写以下脚本内容,THRESHOLD=9090代表CPU阔值上限为90%,超过就要重启。

1
2
3
4
5
6
7
8
#!/bin/bash
THRESHOLD=90
CPU_USAGE=$(mpstat 1 1 | awk '/Average/ {print 100 - $12}')

if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "CPU usage is above $THRESHOLD%. Restarting server..."
sudo reboot
fi

3,保存退出后,执行授予权限:

1
sudo chmod +x /cpu_monitor.sh
1
sudo crontab -e

添加cron代码内容,每分钟检测一次:

1
* * * * * /cpu_monitor.sh

测试

安装 stress-ng

1
2
sudo yum install epel-release
sudo yum install stress-ng

查看服务器为几线程:

1
nproc

使用 stress-ng 设置 CPU 负载,如下第一个2代表两个线程,96代表是CPU负载接近96%,20s是定时器时长。

1
stress-ng --cpu 2 --cpu-load 96 --timeout 20s

等待一段时间 服务器重启就是成功了。

基础代码

{your-pixel-id-goes-here}替换为实际的pixelID,将以下代码放在网页的<head></head>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '{your-pixel-id-goes-here}');
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id={your-pixel-id-goes-here}&ev=PageView&noscript=1"/>
</noscript>
<!-- End Facebook Pixel Code -->

如果有其他事件上报,例如ViewContent,在基础代码的fbq('track', 'PageView');行后添加该事件上报:

1
2
fbq('track', 'PageView');
fbq('track', 'ViewContent'); // 新添加的事件

记录一个批量重命名文件bat代码。该脚本主要功能是遍历当前目录中的所有文件,并将符合特定模式的文件名进行重命名,将类似 ASMR Rainbow Jelly-720 X 1280-2024-07-04-930d17d3fe662399f0ca12104d604fa5 重命名为 ASMR Rainbow Jelly-720 X 1280,舍弃-2024-07-04-930d17d3fe662399f0ca12104d604fa5日期和bash部分。

完整脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@echo off
chcp 65001 > nul 2>&1
setlocal enabledelayedexpansion

REM 遍历当前目录中的所有文件
for %%f in (*.*) do (
set "filename=%%f"
set "extension=%%~xf"

REM 判断是否为批处理文件,跳过
if /i "!extension!"==".bat" (
echo 跳过批处理文件: !filename!
) else (
REM 分割文件名
for /f "tokens=1,2,3,4 delims=-" %%a in ("!filename!") do (
set "part1=%%a"
set "part2=%%b"
set "part3=%%c"
set "part4=%%d"

REM 检查日期部分是否在指定年份范围内
if "!part3!" neq "" (
if "!part3!" gtr "1900" if "!part3!" lss "2100" (
set "new_filename=!part1!-!part2!"
) else (
set "new_filename=!filename!"
)
) else (
set "new_filename=!filename!"
)

REM 如果新旧文件名相同,则输出无需重命名信息
if "!filename!"=="!new_filename!" (
echo !filename!:不需重命名
) else (
REM 尝试重命名文件
ren "!filename!" "!new_filename!" > nul 2>&1
if !errorlevel! equ 0 (
echo !filename! 更名为 !new_filename!
) else (
echo !filename!重命名失败
)
)
)
)
)

echo 批量更名完成,bat from CRF %TIME% !!
pause

脚本解析

初始化部分

1
2
3
@echo off
chcp 65001 > nul 2>&1
setlocal enabledelayedexpansion
  • @echo off:关闭命令回显。
  • chcp 65001 > nul 2>&1:将代码页设置为 UTF-8,防止出现乱码。
  • setlocal enabledelayedexpansion:启用延迟变量扩展,允许在 for 循环中使用 ! 来引用变量。
    阅读全文 »

ECS服务配置

服务器配置:
i-7xvatqiyl3pikzz7pz2t运行中(2核(vCPU) 2GiB) AliyunLinux

添加私钥

在本地电脑使用以下命令查看并公钥内容:

1
cat ~/.ssh/id_rsa.pub

执行以下1或2完成添加公钥操作。
1.打开ECS后台远程链接,编辑 authorized_keys 文件:

1
编辑 authorized_keys 文件。

按Esc建输入:wq保存退出。

附:如果你第一次使用没有正常关闭,执行一下操作

1
2
# 尝试使用 ps 命令查看正在运行的 Vim 进程
ps aux | grep vim

找到相关的 Vim 进程,并使用 kill 命令终止它们。

1
kill -9 <process_id>

2.登录ECS管理控制台。在左侧导航栏,网络与安全 > 密钥对 > 添加复制出来的公钥内容 命名为test

在左侧导航栏,选择实例与镜像 > 实例。

在操作列中,找到购买的ESC实例…> 实例属性 > 绑定密钥对,选择test, 确定重启。

阅读全文 »

在Node.js中,fs模块提供了对文件系统的访问功能,我们可以利用它来实现配置文件的读取和写入操作。正好用到,就记录一下。

准备工作

确保你的项目目录已经安装了做了npmpnpmyarn等node相关初始化,存在node_modules文件夹,这样就可以使用fs

1
const fs = require('fs');

接下来就是定义路径,我是用到年月来定义路径,并放在当前路径的storeConfigs下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const path = require('path');
const date = getDate();

// 文件夹路径 ./storeConfigs/${date.year}/${date.month}
const folderPath = path.resolve(__dirname, 'storeConfigs', `${date.year}`, `${date.month}`);

// 用date.day来定义文件名 ./storeConfigs/${date.year}/${date.month}/${date.day}
const aFilePath = path.resolve(folderPath, `${date.day}`);


// 获取当前日期
function getDate() {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = currentDate.getMonth() + 1;
const day = currentDate.getDate();
return { year: year, month: month, day: day };
}
阅读全文 »

在构建应用程序时,部署API是一个关键的步骤。API部署允许其他应用程序或用户与您的服务进行交互,并访问所需的功能和数据。本文将介绍一个示例,展示如何使用Node.js和Express框架来部署一个简单的API。

准备工作

  • 安装Node.js:用于运行JavaScript代码的运行时环境。
    1
    2
    sudo apt update
    sudo apt install nodejs
  • 安装npm(Node Package Manager):用于管理和安装Node.js模块。
    1
    sudo apt install npm

创建API脚本

编写脚本

在服务器想要存放API脚本的目录下,创建API脚本(这里我用的是server.js),其中{ TemplateName, site }为请求API传递的json参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const express = require('express');
const cors = require('cors');
const { exec } = require('child_process');
const { updateHostConfigs } = require('./configManager');

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());
app.use(cors());

app.post('/deploy', (req, res) => {
const { TemplateName, site } = req.body;
if (!TemplateName || !site) {
console.log({ message: 'TemplateName或site未定义' });
res.status(200).json({ message: '拒绝请求,缺乏必要参数!' });
} else {
// 执行deploy.bat脚本的API端点
const command = `bash deploy.sh ${TemplateName} ${site}`;
console.log(`接收到请求指令:${command}`);
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`执行命令时出错:${error.message}`);
}

console.log(`命令执行成功:${stdout}`);
res.status(200).json({ message: '部署脚本成功执行' });
});
}
});

// 启动服务器
app.listen(PORT, () => {
console.log(`API服务器正在运行,监听端口:${PORT}`);
});
阅读全文 »

当您使用多个Node.js版本和多个包管理器时,管理和切换它们可能会变得复杂。为了解决这个问题,开发者社区提供了一些工具来帮助我们轻松地管理Node.js版本和包管理器。两个常用的工具是NVM(Node Version Manager)和NRM(NPM Registry Manager)。本文将介绍它们的使用方法和主要功能。

操作系统:Windows

NVM(Node Version Manager)

什么是NVM?

NVM是一个用于管理Node.js版本的工具。它允许开发者在同一台机器上同时安装和切换不同的Node.js版本。无论是在开发环境中测试不同版本的应用程序,还是在维护多个项目时,NVM都能提供便利。

Windows安装NVM

在终端中执行以下命令下载安装nvm-windows

1
https://github.com/coreybutler/nvm-windows
阅读全文 »