先是指定版本version: '3'现在已被废除，不需要写了然后指定 service每个service 都指定build字段或者image字段看是从dockerfile上构建镜像还是从拉取镜像服务的名称直接缩进一格就好container_name指定容器名称ports指定开放的端口depends_on指定该服务需要在哪些服务启动之后启动environment指定环境变量volumes指定数据卷就是数据和容器内数据的映射 比如将容器内的某个文件夹保存在宿主机内的某个地方 也可以用docker的数据卷做持久化，在最外层需要多一个volumes字段，缩进一格放数据卷名称 在配置mysql的时候可以将sql文件映射到容器内/docker-entrypoint-initdb.d目录映射好之后，容器启动会自动运行目录里面的sql文件。需要注意的是只有在首次创建数据库的时候会执行。所有如果对mysql做了持久化，就是将容器内/var/lib/mysql的东西映射到了本地或者数据卷，后面再次启动就不会执行，除非将持久化的内容删了，然后重新创建mysql环境变量环境变量优先级：environment:MYSQL_ROOT_PASSWORD: root123 # root密码（必需） MYSQL_DATABASE: # 创建的数据库名 MYSQL_USER: # 创建的用户名 MYSQL_PASSWORD: # 用户密码 容器间通信需要使用networks来指定一个网络，和volume一样最后在配置url的时候将localhost或者127.0.0.1变成对应的服务名。但是好像不用network指定网络也行。不过就是确实需要对应为服务名就是了。更正：可能是windows上的docker比较新，可以不指定network就默认为一个network，但是我部署到linux上的时候，ubuntu上装的一个docker compose就不支持，加上networks字段之后才正常工作如果就是容器内自己用的话像是mysql，redis这种的端口应该就不用暴露出去，因为暴露出去是给宿主机用的。如果只是容器之间用的话就不暴露也行。可以使用环境变量的方式配置application.propertiess里面的配置。将字段改为全大写，点变为短下划线即可。最后使用docker compose up -d来后台启动如果想要重新构建镜像可以使用docker compose build后面可以跟上对应的服务名表示单独构建某一个镜像使用docker compose down来停止和删除容器等于 stop + rm示例：services: qiannian: build: ./qiannian ports: - "8080:8080" depends_on: - mysql - redisL networks: - qiannian_network ocr: build: ./ocr networks: - qiannian_network aiservice: build: ./ai_service networks: - qiannian_network mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: qiannian networks: - qiannian_network volumes: - qiannian_mysql:/var/lib/mysql - ./qiannian/script.sql:/docker-entrypoint-initdb.d/script.sql redisL: image: redis:6.2-alpine container_name: redis networks: - qiannian_network volumes: qiannian_mysql: networks: qiannian_network: driver: bridge
选用的基础镜像python:3.11python:3.11-slimpython:3.11-alpinealpine对PaddlePaddle不兼容复制文件到 /app 文件夹下面docker里面每一行命令都是基于前一个命令执行之后的容器文件新开一个容器使用WORKDIR可以将后面的容器目录cd到该目录后面opencv系统依赖# 安装OpenCV依赖的系统库 RUN apt-get update && apt-get install -y \ libgl1 \ libglib2.0-0 \ libsm6 \ libxext6 \ libgomp1 \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libwebp-dev \ && rm -rf /var/lib/apt/lists/*关键依赖解释：libgl1 - OpenGL支持（GUI功能）libglib2.0-0 - GLib库libsm6, libxext6, libxrender-dev - X11图形库libgomp1 - OpenMP并行计算libgtk-3-dev - GTK库（GUI界面）libavcodec-dev, libavformat-dev, libswscale-dev - 视频编解码库libjpeg-dev, libpng-dev, libtiff-dev, libwebp-dev - 图像格式支持最小化安装（如果不需要GUI功能）：RUN apt-get update && apt-get install -y \ libgl1 \ libglib2.0-0 \ libsm6 \ libxext6 \ libgomp1 \ && rm -rf /var/lib/apt/lists/*可以先创建虚拟环境，然后用然后安装一下需要的包，最好使用pip freeze > requirements.txt保存下依赖之后在dockerfile里面可以在copy完之后将依赖下载一下最后可以使用CMD命令作为启动容器的默认命令，来起一个程序使用docker build -t name:tag .来构建镜像使用docker images来查看镜像使用docker run -d -p port:port --name name image:tag来启动镜像常用参数：-d：后台运行-p 8000:8000：端口映射（主机端口:容器端口）--name my-container：给容器命名-v /host/path:/container/path：挂载目录-e ENV_VAR=value：设置环境变量示例：FROM python:3.11-slim COPY . /app WORKDIR /app # 安装opencv依赖系统库 RUN apt-get update && apt-get install -y \ libgl1 \ libglib2.0-0 \ libsm6 \ libxext6 \ libgomp1 \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libwebp-dev \ && rm -rf /var/lib/apt/lists/* RUN pip install -r requirements.txt EXPOSE 18689 CMD ["python", "ocr_service.py"]FROM python:3.11-slim COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 7373 CMD ["python", "main.py"]
先是看下pom.xml里面的java版本，然后选择基础镜像有# 官方OpenJDK镜像（推荐） FROM openjdk:17-jdk-slim FROM openjdk:11-jdk-slim FROM openjdk:8-jdk-slim # Eclipse Temurin（更好的性能） FROM eclipse-temurin:17-jdk FROM eclipse-temurin:11-jdk可以使用多阶段构建如果源路径为文件夹，复制的时候不是直接复制该文件夹，而是将文件夹中的内容复制到目标路径。使用FROM maven:3.8.5-openjdk-17 AS builder作为构建jar包时的镜像https://hub.docker.com/_/maven/tags这里可以搜索一下tag，主要就是看下jdk版本。后面使用FROM openjdk:17-jdk-slim作为运行环境两个镜像分隔，可以使最后的的最终镜像大小变小可以使用COPY --from=builder复制前一阶段的文件如果使用springboot插件需要删除<skip>true</skip>这个会使SpringBoot插件跳过打包过程导致没有main-class，运行jar包时报错no main manifest attribute, in /app/xxx.jar示例：FROM maven:3.8.5-openjdk-17 AS builder COPY . ./app WORKDIR /app RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim COPY --from=builder /app/target/xxx-0.0.1-SNAPSHOT.jar /app/xxx.jar EXPOSE 8080 CMD ["java", "-jar", "/app/xxx.jar"]
后端有点问题一直拖到现在，学长在摸鱼，我也闲着无聊先去看下。主要是python脚本没有跑起来。看下原来的代码在哪个地方用到python我发现之前上传的是我有改过的，可能是因为我有部分的地方改过所以导致了用不了服务器上面是没有安装python3.11的，所以得装一个python3.11问了一下gpt，直接就是下了源码然后编译，目前来看还算是比较顺利离线安装的依赖版本和本地的python版本一致因为我电脑上的是3.12，服务器上需要的是3.11所以之前本地打包的依赖服务器的安装不了现在得先在本地启一个3.11的虚拟环境然后在虚拟环境下再来下载这些依赖先是用scoop安装一下python311scoop bucket add versions scoop install versions/python311然后创建一个虚拟环境python311 -m venv py311env然后激活虚拟环境（我用的是git bash）source py311env/Scripts/activate之后再下载依赖mkdir my_pkgs cd my_pkgs pip download pandas scikit-learn keras numpy openpyxl matplotlib mysql-connector-python然后打包成tar，在服务器上解压，再用pip安装pip3 install --no-index --find-links=. pandas scikit-learn keras numpy openpyxl matplotlib mysql-connector-python有点尴尬，忘记了电脑是windows，下的依赖只能是windows用不能给linux用现在是打算用wsl重复一下上面的步骤wsl上面需要还是手动编译一个python3.11先要安装一下编译的依赖：sudo su # 获取权限 sudo apt-get update # 随文章进行而更新，依赖应该是全的 sudo apt-get install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget然后就是编译安装cd /opt wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz # 下载python tar -xzf Python-3.11.9.tgz cd Python-3.11.9 # 安装编译依赖（如果有权限，可以让管理员预装） # CentOS: yum groupinstall "Development Tools" # Debian/Ubuntu: apt-get install build-essential # 编译并安装到自定义目录（不要覆盖系统 Python 2.7） sudo ./configure --prefix=/opt/python3.11 --enable-optimizations sudo make -j$(nproc) # 编译时间较长 sudo make install配置环境变量：# 加入环境变量 echo 'export PATH=/opt/python3.11/bin:$PATH' >> ~/.bashrc source ~/.bashrc # 验证版本 python3 --version目前来说还算顺利后面下载依赖的时候不知道为什么还是下的3.12的版本，可能pip直接安装是这样的？不懂，还是得建一个虚拟环境试下创建虚拟环境失败，其实之前编译的时候有问题，但是我直接给忽略了，现在看来应该是编译出问题了，感觉wsl好像什么都没有。问了一个gpt报错，说是因为少了依赖，先下完依赖之后再更新还是得建一个虚拟环境，不过python的安装倒是顺利，不错。目前好像是因为说内网的那个linux的版本比较老，一些包不支持，所以得专门下载低版本去安装希望顺利可以先查看一下支持哪些平台python3 -m pip debug --verbose然后对于某一个包可以指定平台下载，例如：pip download \ --only-binary=:all: \ --platform manylinux2014_x86_64 \ --python-version 311 \ --implementation cp \ --abi cp311 \ Pillow==10.0.1目前都挺顺利的，但是到了要运行的时候发现内部少了Python 标准库模块 ctypes应该是编译的问题，问了一下gpt说是服务器少了libffi 开发依赖所以现在是先让那边的管理员看能不能解决，或者干脆帮忙装一下python3.11，唉。至少可以先停一会儿了。后面因为连不了网，他们那边也是没有解决方法，只能是我这里继续。我查了一下linux版本是Centos7，然后网上找了一个rpm的包https://ftp.iij.ad.jp/pub/linux/centos-vault/centos/7.7.1908/cr/x86_64/Packages/https://ftp.iij.ad.jp/pub/linux/centos-vault/centos/7.7.1908/cr/x86_64/Packages/libffi-devel-3.0.13-19.el7.x86_64.rpm本地安装了一下这个依赖，然后再重新编译，目前貌似没有什么问题，一切顺利sudo yum install ./*.rpm装好了之后，重新编译python3之后又运行了一遍脚本，然后补装了一个库，总归是可行了。之后就是把服务重新启动一下，过一两天看下数据库的数据，如果没有问题的话，这个就解决了，可喜可贺，可喜可贺。
在 Linux 上安装了 etcd 后，可以通过以下几种方式查看它的状态：方法一：使用 etcdctl 工具etcdctl 是 etcd 的命令行工具，可以用于查看集群状态、成员信息等。1. 查看 etcd 版本etcdctl version2. 设置环境变量（如果你是使用默认配置）export ETCDCTL_API=33. 查看健康状态etcdctl endpoint health如果 etcd 正常运行，会返回类似：127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.233ms4. 查看成员列表etcdctl member list5. 查看集群状态etcdctl endpoint status --write-out=table方法二：使用 systemd 查看服务状态如果你是使用 systemd 安装/启动的 etcd，可以使用：systemctl status etcd也可以用：journalctl -u etcd -f实时查看日志输出。方法三：查看进程和监听端口查看是否有 etcd 进程运行：ps aux | grep etcd查看 etcd 是否监听了默认端口 2379：ss -tunlp | grep 2379方法四：通过 HTTP API（如果你开放了接口）例如：curl http://localhost:2379/health返回：{"health":"true"}说明服务正常。
在 Bash 脚本中，if...then...fi 是最基础也是最常用的条件语句结构，类似于其他语言中的 if...else 结构。🧱 基本语法格式if 条件 then 命令1 命令2 fi✅ 示例：if [ -f /etc/passwd ] then echo "文件存在" fi这个例子判断 /etc/passwd 是否存在并且是个普通文件。✨ 加上 else 的格式：if 条件 then 命令1 else 命令2 fi示例：if [ "$USER" = "root" ] then echo "你是超级用户" else echo "你不是 root 用户" fi🌈 多条件：if...elif...else...fiif 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi示例：if [ "$1" = "start" ] then echo "开始服务" elif [ "$1" = "stop" ] then echo "停止服务" else echo "未知命令" fi🧠 条件表达式说明（最常用）：表达式含义[ -f FILE ]文件存在且是普通文件[ -d DIR ]目录存在[ -z STRING ]字符串长度为 0[ STRING1 = STRING2 ]两个字符串相等[ NUM1 -eq NUM2 ]两个整数相等[ NUM1 -lt NUM2 ]NUM1 小于 NUM2[ 条件 ] && [ 条件 ]多个条件 "并且"❗注意事项：方括号两边一定要留空格，如 [ "$USER" = "root" ]（否则报错）fi 是 if 的结束标志（fi 是 if 反过来）🔧 小脚本示例：#!/bin/bash read -p "请输入一个数字: " num if [ "$num" -gt 100 ]; then echo "大于 100" elif [ "$num" -eq 100 ]; then echo "等于 100" else echo "小于 100" fi
grep 是 Linux 系统中非常强大且常用的命令行工具，用于在文件中搜索指定的字符串或正则表达式。其名称来自 "global regular expression print"，意思是全局正则表达式打印。基本语法：grep [选项] '模式' 文件名常用选项：选项说明-i忽略大小写-v反向匹配，显示不包含匹配内容的行-r 或 -R递归搜索目录中的所有文件-n显示匹配行的行号-l只列出包含匹配内容的文件名-c统计匹配的行数--color=auto高亮显示匹配的部分（大多数 Linux 发行版默认启用）使用示例：在文件中查找字符串grep "hello" file.txt查找 file.txt 文件中包含 "hello" 的行。忽略大小写grep -i "hello" file.txt查找不包含某字符串的行grep -v "error" log.txt递归查找目录中匹配内容grep -r "main" ./src查找支持正则表达式grep "^start" file.txt匹配以 "start" 开头的行。小技巧：可以与 pipe (|) 命令结合使用，从其他命令的输出中筛选信息：dmesg | grep usb与正则表达式配合，处理文本非常灵活。grep -qgrep -q 是 grep 命令的一个非常实用的选项，意思是 安静模式（quiet / silent），它不会输出任何匹配结果，只通过返回码（退出状态码）来表示是否匹配成功。✅ 功能说明：当使用 q 选项时，grep 不会在终端显示任何匹配的文本。它仅通过退出码来判断是否有匹配行。🔢 退出状态码说明：退出码含义0找到匹配项1未找到匹配项2出现错误（如文件不存在等）🧪 使用示例：判断一个文件是否包含某个字符串：if grep -q "error" log.txt; then echo "日志中包含错误" else echo "日志中未发现错误" fi 配合 && 或 || 使用：grep -q "success" result.txt && echo "任务成功" grep -q "fail" result.txt || echo "任务未失败"
rewrite ^/(?!.well-known)(.*)$ /index.php?/$1 last;放到 /usr/local/nginx/conf/rewrite 中https://github.com/qkqpttgf/OneManager-phpps：怕我忘记所以记一下
拉取镜像docker pull mysql:latest想要比较稳定的版本可以用5.7或者8.0 （或者8.4?） 比如mysql:5.7 或mysql:8.0部署镜像docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest docker run启动一个新的 Docker 容器。-p 端口映射--name 为这个容器指定一个名称-v 将当前工作目录挂载到容器内的目录 $PWD表示当前目录，可以根据需要自行修改-e 设置环境变量-d 以后台模式运行容器（detached mode），容器启动后不会阻塞当前的终端，会在后台运行。mysql:latest 指定使用最新版本的 MySQL 官方镜像。如果没有本地镜像，Docker 会从 Docker Hub 拉取最新的 MySQL 镜像。使用由于 mysql 的安全策略，现在还不能使用 root/123456 来访问数据库 运行下面命令来进入容器docker exec -it mymysql /bin/bash这条命令的作用是在已经运行的容器内启动一个交互式 Bash Shell，让你直接进入容器内部进行操作。docker exec exec 命令用于在一个已经处于运行状态的容器中执行新的命令。-it-i：交互式（interactive），让命令在前台保持对键盘输入的监听。 -t：伪终端（pseudo-TTY），为容器内的进程分配一个伪终端，方便进行命令行操作。 /bin/bash 指定要在容器中执行的命令，这里是 Bash Shell。执行后会打开一个终端会话环境，可以在容器内输入各种 Shell 命令。之后运行以下命令进去mysqlmysql -uroot -p123456-u 表示用户-p 表示密码创建root用户和权限授予步骤 1：创建用户或修改用户密码如果用户不存在，使用 CREATE USER 创建用户并设置密码CREATE USER 'root'@'%' IDENTIFIED BY 'root'; CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root'; CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';如果用户已存在，使用 ALTER USER 修改用户密码ALTER USER 'root'@'%' IDENTIFIED BY 'root'; ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'root'; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';步骤 2：授予权限GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;步骤 3：刷新权限（可选）在 MySQL 8.0 及更高版本中，GRANT 语句会自动刷新权限，因此通常不需要手动执行 FLUSH PRIVILEGES;。但如果你进行了其他权限表的直接修改，可以使用：FLUSH PRIVILEGES;
安装VMware使用直链下载然后使用激活码的形式：https://github.com/201853910/VMwareWorkstation或者选择使用免费的个人授权：https://www.cnblogs.com/EthanS/p/18211302安装ubuntu下载镜像：https://ubuntu.com/download/desktop安装vmware新建虚拟机，选择使用下载的镜像然后根据提示输入信息后会自动安装使用ping测试ubuntu打开终端 安装 net-toolssudo -i #切换到root用户 sudo apt update sudo apt install net-tools安装完成之后运行：ifconfig找到网卡（第一串内容）找到inet的标识，后面跟着的就是ip地址在windows下ping一下这个ip地址，如果可以ping通就表示成功了。安装 SSH 服务OpenSSH 是 Ubuntu 默认的 SSH 服务实现，可以使用以下命令安装：sudo apt install openssh-server -y安装完之后就可以通过ip来ssh连接虚拟机了安装dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun设置开机自启systemctl start docker systemctl enable docker配置镜像https://cmd2.openbase.store/（ps：太惨了，找个镜像需要找挺久）安装docker-composesudo apt install docker-compose
由于某种不可抗力，在serv00自动重启之后pm2 list会自动还原成没有应用存在的情况。我的解决办法就是把.pm2文件夹下面的dump.pm2文件放到其他地方，然后再建立软链接，确保pm2读取时文件的位置不变mv ~/.pm2/dump.pm2 /home/xxx/opt/dump.pm2 ln -s /home/xxx/opt/dump.pm2 ~/.pm2/dump.pm2
配置【开启权限】第一步需要做的就是开启可以运行自己应用的权限。Additional services -> Run your own applications -> Enabled 如果不开启这一项，自己的用户目录下的所有文件都无法添加可执行权限。【进入SSH】通过注册邮箱里收到的信息，用任意一个shell客户端登录，就可以看到下面的信息。 ____ ___ ___ / ___| ___ _ ____ __/ _ \ / _ \ ___ ___ _ __ ___ \___ \ / _ \ '__\ \ / / | | | | | |/ __/ _ \| '_ ` _ \ ___) | __/ | \ V /| |_| | |_| | (_| (_) | | | | | | |____/ \___|_| \_/ \___/ \___(_)___\___/|_| |_| |_| Revolutionary Free Hosting =[ Basic account info ]= Username: xxx Plan: FREE Expiration date: 2034-03-13 02:18:41安装PM2PM2 是一款非常优秀的node.js进程管理工具。可以通过SSH用下面的指令一键安装。bash <(curl -s https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/install-pm2.sh)使用pm2，请直接用路径调用：~/.npm-global/bin/pm2，例如~/.npm-global/bin/pm2 list 就可以看到自己添加的应用。安装 v2ray （可以直接看②）① 查看系统回到之前登录的 ssh 界面输入 uname -a 查看服务器系统FreeBSD s2.serv00.com 13.2-RELEASE-p10 FreeBSD 13.2-RELEASE-p10 #4 releng/13.2-n254661-a839681443b6-dirty: Tue Feb 20 23:03:40 CET 2024 root@pkg0.admin.net.pl:/usr/obj/usr/src/amd64.amd64/sys/devil amd64我这儿返回的是这样的，FreeBSD amd64② 下载 v2raycd ./domains/ mkdir v2ray cd v2ray wget https://github.com/v2fly/v2ray-core/releases/download/v5.14.1/v2ray-freebsd-64.zip #选择对应系统的版本下载v2ray(可以不用看)由于没有 root 权限，我们无法使用官方提供的一键安装脚本，只能自行手动安装。前往 https://github.com/v2fly/v2ray-core/releases 找到你的系统版本所对应的 v2ray 版本我这个服务器的系统是 FreeBSD amd64，那么我就找的是 freebsd-64.zip右键这个 zip 地址，复制下载连接。然后回到 ssh 中，输入代码等待下载完成之后，ls 查看当前目录文件，可以看到这个 zip 包已经在这个目录里了。③ 配置 v2ray还是在刚刚的 v2ray 目录下unzip v2ray-freebsd-64.zip #这边换成你刚刚下载的对应的zip包然后等待解压完成，再执行 ls 命令时能看到很多个文件./v2ray version先验证下能否正常启动V2Ray 5.14.1 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.22.0 freebsd/amd64) A unified platform for anti-censorship.我这边正确的返回版本号了，如果提示其他异常的话，请检查一下下载的 v2ray 版本是否是你服务器系统所适配的版本。./v2ray uuid这边生成一个 uuid 后面配置的时候会用到④ 配置 config在serv00的管理页面上开启一个端口，Port reservation -> Add port添加一个TCP的端口号。再在File Manager 里面找到v2ray的文件下的config.json文件，把里面内容替换为下面内容。其中port和id需要改动。{ "log": { "loglevel": "warning" }, "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "ip": [ "geoip:private" ], "outboundTag": "block" } ] }, "inbounds": [ { "listen": "0.0.0.0", "port": xxxx, //你的端口 "protocol": "vless", "settings": { "decryption":"none", "clients": [ { "id": "你的uuid" } ] }, "streamSettings": { "network": "tcp" } } ], "outbounds": [ { "protocol": "freedom", "tag": "direct" }, { "protocol": "blackhole", "tag": "block" } ] } ⑤ 启动 v2raypm2 start ./v2ray --name my-v2ray -- run ~/.npm-global/bin/pm2 save启动本地代理接着去你的代理客户端软件中手动添加vless配置即可：KeyValue地址Panel 中 WWW Websites 选项卡里的你的 Domain name端口你放行的端口用户 IDuuid上表没有给出的可以不填。自动化听说serv00会不定时重启机器，所以我们把PM2添加开机自启。而且serv00每三个月内必须要有一次登录面板或者SSH连接，不然会删号，也可以通过一个脚本解决问题，接下来我会详细说明。自动续期新建 auto-renew.sh 脚本：cat > auto-renew.sh << EOF #!/bin/bash while true; do sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 "exit" & sleep 259200 #30天为259200秒 done EOF我是新建了一个opt目录，在opt目录下创建这个脚本。另外记得把其中的密码、用户名、ssh的地址修改为你自己的。给 auto-renew.sh添加可执行权限：chmod +x auto-renew.sh使用PM2启动：~/.npm-global/bin/pm2 start ./auto-renew.sh这样就会每隔一个月自动执行一次SSH连接，自己SSH自己进行续期。自动启动在serv00的管理页面上找到Cron jobs选项卡，使用Add cron job功能添加任务，Specify time选择After reboot，即为重启后运行。Form type选择Advanced，Command写：/home/你的用户名/.npm-global/bin/pm2 resurrect添加完之后，在SSH窗口保存PM2的当前任务列表快照：~/.npm-global/bin/pm2 save这样每次serv00不定时重启任务时，都能自动调用PM2读取保存的任务列表快照，恢复任务列表。如果在保存了任务列表快照后又改变了任务PM2的任务列表，需要重新执行pm2 save以更新任务列表。参考链接：serv00免费10年虚拟主机安装PM2和Vless非 root 用户自建 v2ray 梯子 (serv00-vmess)
创建 systemd 服务文件首先，创建一个新的 systemd 服务文件：sudo nano /etc/systemd/system/syncthing.service添加以下内容到服务文件[Unit] Description=Syncthing - Open Source Continuous File Synchronization Documentation=https://docs.syncthing.net/ After=network.target [Service] User=your_username ExecStart=/opt/syncthing/syncthing -no-browser Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target请将 your_username 替换为实际的用户名。重新加载 systemd 配置sudo systemctl daemon-reload启用并启动 Syncthing 服务sudo systemctl enable syncthing sudo systemctl start syncthing检查 Syncthing 状态使用以下命令来检查 Syncthing 是否正在运行：systemctl status syncthing或者，如果你使用了 init.d：sudo service syncthing status
清华大学镜像站：deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free中科大镜像站：deb https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free deb https://mirrors.ustc.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free阿里云镜像站：deb http://mirrors.aliyun.com/debian/ buster main contrib non-free deb http://mirrors.aliyun.com/debian-security buster/updates main deb http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free deb http://mirrors.aliyun.com/debian/ buster-backports main contrib non-free上海交大镜像站：deb https://mirror.sjtu.edu.cn/debian/ buster main contrib non-free deb https://mirror.sjtu.edu.cn/debian/ buster-updates main contrib non-free deb https://mirror.sjtu.edu.cn/debian/ buster-backports main contrib non-free deb https://mirror.sjtu.edu.cn/debian-security/ buster/updates main contrib non-free
问题：The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY F8D2585B8783D481解决方法：手动导入公钥获取并导入公钥： 你可以使用 apt-key 命令手动导入缺少的公钥。下面是获取并导入缺少公钥的命令：sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED0E7B82643E131 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F8D2585B8783D481更新包列表： 导入公钥后，更新包列表：sudo apt-get update
b站24小时不间断直播安装ffmpegapt-get install ffmpeg -ysh脚本#!/bin/bash # 视频文件夹路径 video_folder="/xxx" # 获取视频文件列表 video_files=("$video_folder"/*.mp4) num_videos=${#video_files[@]} current_video_index=0 while true; do # 获取当前视频文件路径 current_video="${video_files[$current_video_index]}" # 获取视频时长（单位：秒） video_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$current_video") # 推流当前视频到Bilibili直播 ffmpeg -re -i "$current_video" -c:v libx264 -preset veryfast -b:v 1000k -maxrate 1000k -bufsize 2000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 96k -ac 2 -ar 44100 -f flv "rtmp://your_bilibili_push_url" & # 获取推流进程的PID ffmpeg_pid=$! # 等待视频推流结束 sleep "$video_duration" # 终止推流进程 kill $ffmpeg_pid # 自动播放下一个视频 current_video_index=$(( (current_video_index + 1) % num_videos )) # 可选：在每次推流后等待一段时间，以便给服务器一些休息时间 sleep 5 done
使用软链接来修改docker的默认存储位置
使用软链接来修改docker的默认存储位置默认情况下Docker的存放位置为：/var/lib/docker可以通过下面命令查看具体位置：sudo docker info | grep "Docker Root Dir"首先停掉Docker服务：systemctl stop docker #或者service docker stop然后移动整个/var/lib/docker目录到目的路径：mv /var/lib/docker /home/work/docker_root ln -s /home/work/docker_root /var/lib/docker这时候启动Docker时发现存储目录依旧是/var/lib/docker，但是实际上是存储在数据盘。
PortainerPortainer 是一款轻量级的应用，它提供了图形化界面，用于方便地管理Docker环境，包括单机环境和集群环境。安装拉取Portainer的Docker镜像；docker pull portainer/portainer运行Portainer容器；docker run -p 9000:9000 -p 8000:8000 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /mydata/portainer/data:/data \ -d portainer/portainer访问地址：ip:9000使用app templates相当于应用商店吧，有很多模板，里面的源是github要科学上网images拉取镜像，但是拉取镜像的过程看不到，只能是知道正在拉，我的评价是不如直接在命令行输入docker pull管理镜像，选择images里面列出的镜像点进去可以选择分享和删除containers点击add container 可以添加容器，点进去之后里面有一个必填的image，就是填拉取的镜像已经拉取过的把下面的always pull image 关掉。就是说其实是可以不用特地到images里面去拉取镜像，可以在要用的时候自己拉取。还是这个页面往下有一个network ports configuration 把public all exposed network ports to random host ports 打开或者点击 publish a new network port 来映射端口在最后面的advanced container settings 里面env 可以添加环境变量Volumes 里添加文件夹映射。点击 map additional volume 按钮。container 写入容器中文件夹位置，然后选择 Bind 选项。在 host 中填入服务器上挂载的文件夹位置。quick actions里面第一个标是log点进去可以查看日志，这个确实比较方便，比如是在安装青龙面板的时候，好像会一直占用一个控制器，这个就相当于是后台自己在跑，然后也方便去看哪里出了问题第二个图标是Inspect可以用来看容器的详细信息，包括id，存放的位置和log文件位置在NetworkSettings这里可以看容器运行的ip，用在例如openwrt的docker版本看ip第三个图标是Stats可以看内存和cpu的使用情况下面还会标出pid第四个是Console按钮，可以进入到容器中去执行命令，比进入到MySQL容器中去执行登录命令Registries点击add registry添加的镜像仓库，在registry provider里选择custom registry下面的name随便写一个，registry url填url这样在拉取镜像的时候，就可以选择从其他镜像仓库拉取了。
在 armbian 上安装 xfce 和 VNC 做远程桌面配置 xfce 和 VNC安装xfce和vncapt update apt install xrdp -y apt install dbus-x11 -y安装好之后reboot一下。apt install xfce4 xfce4-goodies -y apt install tigervnc-standalone-server -y sudo apt-get install tigervnc-common -y初始化VNC：vncserver输入两次密码然后会询问你是否创建仅观看（View-only）的密码，输入仅观看密码登录到VNC的用户只能观看远程桌面不能进行控制，可以创建也可以直接输入“n”跳过。设置好后杀掉创建出来的VNC进程：vncserver -kill :1创建xstartupnano ~/.vnc/xstartup键入如下内容：#!/bin/bash xrdb $HOME/.Xresources startxfce4给这个文件加运行权限：chmod +x ~/.vnc/xstartup测试是否可用：vncserver -localhost no-localhost no ,为可远程连接，此时可以在另一台设备上用vnc连一下试试。windows vnc下载：https://www.realvnc.com/en/connect/download/viewer/vnc上输入ip:5901端口号回显的日志文件名决定，如果为“xxx:1.log”，则输入5901。如果回显的日志文件为“xxx:2.log”，则需要放行5902端口；如果为“xxx:3.log”，则需要放行5903端口，以此类推。测试好了直接kill掉就行：vncserver -kill :1中文显示为▯的问题安装字体：apt install fonts-wqy-zenhei -y然后kill掉所有xfce进程和vnc进程再重新开。安装火狐浏览器sudo apt-get install firefox-esr -y设置VNC开机启动修改启动脚本vim /etc/rc.local添加以下内容su - root -c "/usr/bin/vncserver -depth 24 -geometry 1920x1080 :1 &"
用x-ui搭建节点需要的原料：1. vpsssh连接vpsssh root@ip -p 22这个是看cmd，有的可以有的不行。我电脑的cmd不行，但是我用的第三方的cmd可以，这个软件叫做cmder。不想装的话也可以用xshell或者finalshell。安装x-ui面板：bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/956bf85bbac978d56c0e319c5fac2d6db7df9564/install.sh) 0.3.4.4vmess + ws点击添加入站协议选择vmess，端口任意（如果想要套cdn，可以选择80, 8080, 8880, 2052, 2086, 2095）点一下添加用户旁边的加号，网络选择ws选择好之后会有一个路径把usr1中id的第一段填到 / 之后例如：填a365152f填完之后点击添加在v2rayN客户端添加节点点击操作选择二维码点击复制打开v2rayN键盘按ctrl+v或者点击左上角服务器选择从剪贴板导入批量URL
玩客云使用Cloudflare的Argo隧道内网穿透#获取程序 wget https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-arm #修改权限 chmod +x cloudflared-linux-arm #登录cloudflare账户 ./cloudflared-linux-arm tunnel login #创建隧道 ./cloudflared-linux-arm tunnel create wky #创建网站cname记录 ./cloudflared-linux-arm tunnel route dns wky wky.example.com #运行隧道 ./cloudflared-linux-arm tunnel run --url localhost:80 wky运行隧道这一步如果要一直运行可以创建一个tmux窗口然后在窗口里运行如果连不上，可以试一下用v2raya连一下代理
Hysteria 是一个强大、快速、抗审查的代理工具。官方文档 :link:https://v2.hysteria.network/zh/服务器相关指令#一键安装Hysteria2 bash <(curl -fsSL https://get.hy2.sh/) #生成自签证书 openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=bing.com" -days 36500 && chown hysteria /etc/hysteria/server.key && chown hysteria /etc/hysteria/server.crt #启动Hysteria2 systemctl start hysteria-server.service #重启Hysteria2 systemctl restart hysteria-server.service #查看Hysteria2状态 systemctl status hysteria-server.service #停止Hysteria2 systemctl stop hysteria-server.service #设置开机自启 systemctl enable hysteria-server.service #查看日志 journalctl -u hysteria-server.serviceHysteria配置信息 （复制到vps后回车）cat << EOF > /etc/hysteria/config.yaml listen: :443 #监听端口 tls: cert: /etc/hysteria/server.crt key: /etc/hysteria/server.key auth: type: password password: 123456 #设置认证密码 masquerade: type: proxy proxy: url: https://bing.com #伪装网址 rewriteHost: true EOFv2rayN使用配置 （hysteria插件下载：url,需要放到xx\bin\hysteria文件夹里面）server: ip:443 auth: 123456 bandwidth: up: 20 mbps down: 50 mbps tls: sni: bing.com insecure: true #使用自签时需要改成true socks5: listen: 127.0.0.1:1080 http: listen: 127.0.0.1:8080ip改为vps的ipsing-box 安卓端使用配置 singbox 下载 url{ "dns": { "servers": [ { "tag": "cf", "address": "https://1.1.1.1/dns-query" }, { "tag": "local", "address": "223.5.5.5", "detour": "direct" }, { "tag": "block", "address": "rcode://success" } ], "rules": [ { "geosite": "category-ads-all", "server": "block", "disable_cache": true }, { "outbound": "any", "server": "local" }, { "geosite": "cn", "server": "local" } ], "strategy": "ipv4_only" }, "inbounds": [ { "type": "tun", "inet4_address": "172.19.0.1/30", "auto_route": true, "strict_route": false, "sniff": true } ], "outbounds": [ { "type": "hysteria2", "tag": "proxy", "server": "ip", "server_port": 443, "up_mbps": 20, "down_mbps": 50, "password": "123456", "tls": { "enabled": true, "server_name": "bing.com", "insecure": true } }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], "route": { "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "geosite": "cn", "geoip": [ "private", "cn" ], "outbound": "direct" }, { "geosite": "category-ads-all", "outbound": "block" } ], "auto_detect_interface": true } }ip需要修改
我的世界服务器搭建安装JavaJava有很多个版本，如果你玩的是最新几个版本的我的世界，需要安装Java OpenJDK 17apt install openjdk-17-jre-headless -y命令中的软件名带有jre-headless的词，这是一种简化版的Java OpenJDK 17安装普通版apt install openjdk-17-jdk -y如果服务器安装不了可以试着搜索支持的jdk版本apt search openjdk我的armbian只支持jdk11安装我的世界服务器端程序下载：我的世界的官方网站如果Minecraft网站弹出一个对话框建议你去网易，这种情况只要点击对话框底部的Stay on minecraft.net即可wget https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar注意最新的几个版本的我的世界对服务器系统内存配置有较高要求，一般需要20美元每月的VPS才能成功搭建，而2015前那些历史版本的我的世界只需要5美元每月的VPS就能搭建。如果你玩的是历史版本的我的世界，可以到mcversions.net找到相应版本的链接。重命名mv server.jar server_1.19.jar配置和运行我的世界服务器启动java -Xms1024M -Xmx1024M -jar server_1.19.jar nogui第一次使用这个指令时系统会提示有错误，提示必须同意用户协议，这并不是真的错误，而是我的世界故意设计的，目的是为了引导用户阅读它的用户协议。以上的指令虽然提示有错误，但创建了两个新文件，一个是用户协议eula.txt，一个是配置文件server.properties，用来设置游戏模式、难度等属性。为使我的世界程序能够正式运行，需要同意它的用户协议，方法是编辑修改eula.txt内容。vi eula.txt界面会切入到用户协议的内容页面，内容如下所示。#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). #Thu Jun 30 10:28:12 UTC 2022 eula=false“eula=false”, false改为true编辑配置文件vi server.properties文件内容会像下面显示的一样。#Minecraft server properties #Thu Jun 30 10:28:37 UTC 2022 enable-jmx-monitoring=false rcon.port=25575 level-seed= gamemode=survival enable-command-block=false enable-query=false generator-settings={} level-name=world motd=A Minecraft Server query.port=25565 pvp=true generate-structures=true difficulty=easy network-compression-threshold=256 max-tick-time=60000 require-resource-pack=false use-native-transport=true max-players=20 online-mode=true enable-status=true allow-flight=false broadcast-rcon-to-ops=true view-distance=10 server-ip= resource-pack-prompt= allow-nether=true server-port=25565 enable-rcon=false sync-chunk-writes=true op-permission-level=4 prevent-proxy-connections=false hide-online-players=false resource-pack= entity-broadcast-range-percentage=100 simulation-distance=10 rcon.password= player-idle-timeout=0 force-gamemode=false rate-limit=0 hardcore=false white-list=false broadcast-console-to-ops=true spawn-npcs=true spawn-animals=true function-permission-level=2 level-type=default text-filtering-config= spawn-monsters=true enforce-whitelist=false resource-pack-sha1= spawn-protection=16 max-world-size=29999984difficulty (难度) – 设置游戏的难度，默认是easy简单，共有peaceful容易、easy简单、normal普通、hard困难几个选项，如像把游戏改难一点，可以把easy改成normal或hard，反之可以改成最简单的peaceful。gamemode (游戏模式) – 设置游戏的模式，默认是生存模式，可供设置的选项有survival生存模式、creative创造模式、 adventure冒险模式、spectator旁观模式。pvp – 设置玩家之间能否对打，默认是true，如果改成false，玩家之间将不能互相攻击伤害对方。max-players（最多玩家数量）– 设置最多玩家数量。如果不是正版账号，需要将online-mode=true改为false正式启动我的世界服务器程序编辑完eula.txt后就可以正式启动我的世界服务器端程序了，方法是再次使用上面用到的那个java指令，但要按自己需求调整参数：java -Xms2G -Xmx4G -jar server_1.19.jar nogui相比第一次使用这个指令，这次正式启动游戏程序需要把Xms和Xmx参数改成自己需要的，Xms设置的是服务器启动时的RAM的大小，-Xms2G就是把服务器启动时的RAM设成2G，单位是M或G都可以，如果采用M，就输入Xms2048M。Xmx设置的是服务器运行时允许使用的最大RAM的值，-Xmx4G就是限制游戏最多使用4G的RAM。具体设置多少要看自己选择的服务器RAM大小有多少，如果选择的是只有1G或2G的服务器就不能设这么高。指令中的-jar后面跟随的就是要运行的jar文件名称，就是我们上面下载的jar文件，如果没有重命名，就得把命令中的server_1.19.jar改成server.jar，如果你下载的是其他版本的我的世界服务器jar文件或命名成了其他名称，就改成相应的名称。指令中的nogui就是要求服务器不要启动图形用户界面，因为服务器不需要图形用户界面。写在后面：不同版本的客户端需要对应版本的服务器才可以连的上，不同版本的服务器配置文件略有不同，大致上都一样，2015年以前版本的服务器没有 用户协议eula.txt
Armbian安装aria2下载器aria2是一个跨平台的快速而且可靠的下载工具，支持HTTP(S)、FTP、SFTP、BitTorrent、Metalink 等协议。Github上或项目主页查阅aria2的官方文档。安装apt install aria2配置创建aria2文件夹mkdir /etc/aria2创建aria2.sessiontouch /etc/aria2/aria2.session这个文件主要是用来保存下载任务会话的，也就是退出aria2后，下次启动可以直接从这里读取上一次没完成的下载任务。创建aria2.confaira2的各种设置都会放在aria2.conf这里。命令如下：vi /etc/aria2/aria2.conf在aria2.conf中输入如下内容：## 文件保存相关 ## # 文件保存目录 dir=/home/naonao/Downloads # 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M disk-cache=32M # 断点续传 continue=true # 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc # 预分配所需时间: none < falloc ? trunc < prealloc # falloc和trunc则需要文件系统和内核支持 # NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项 file-allocation=trunc ## 下载连接相关 ## # 最大同时下载任务数, 运行时可修改, 默认:5 #max-concurrent-downloads=100 # 同一服务器连接数, 添加时可指定, 默认:1 # 官方的aria2最高设置为16, 如果需要设置任意数值请重新编译aria2 max-connection-per-server=16 # 整体下载速度限制, 运行时可修改, 默认:0（不限制） #max-overall-download-limit=0 # 单个任务下载速度限制, 默认:0（不限制） #max-download-limit=0 # 整体上传速度限制, 运行时可修改, 默认:0（不限制） #max-overall-upload-limit=0 # 单个任务上传速度限制, 默认:0（不限制） #max-upload-limit=0 # 禁用IPv6, 默认:false # disable-ipv6=true # 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M # 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载 min-split-size=10M # 单个任务最大线程数, 添加时可指定, 默认:5 # 建议同max-connection-per-server设置为相同值 split=256 ## 进度保存相关 ## # 从会话文件中读取下载任务 input-file=/etc/aria2/aria2.session # 在Aria2退出时保存错误的、未完成的下载任务到会话文件 save-session=/etc/aria2/aria2.session # 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0 save-session-interval=60 ## RPC相关设置 ## # 启用RPC, 默认:false enable-rpc=true # 允许所有来源, 默认:false rpc-allow-origin-all=true # 允许外部访问, 默认:false rpc-listen-all=true # RPC端口, 仅当默认端口被占用时修改 # rpc-listen-port=6800 # 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项 rpc-secret=yourpassword # 启动SSL # rpc-secure=true # 证书文件, 如果启用SSL则需要配置证书文件, 例如用https连接aria2 # rpc-certificate= # rpc-private-key= ## BT/PT下载相关 ## # 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true follow-torrent=true # 客户端伪装, PT需要 peer-id-prefix=-TR2770- user-agent=Transmission/2.77 # 强制保存会话, 即使任务已经完成, 默认:false # 较新的版本开启后会在任务完成后依然保留.aria2文件 #force-save=false # 继续之前的BT任务时, 无需再次校验, 默认:false bt-seed-unverified=true # 保存磁力链接元数据为种子文件(.torrent文件), 默认:false # bt-save-metadata=true # 单个种子最大连接数, 默认:55 0表示不限制 bt-max-peers=0 # 最小做种时间, 单位:分 # seed-time = 60 # 分离做种任务 bt-detach-seed-only=true来自:https://www.cnblogs.com/likecs/p/11582984.html官方手册退出保存即配置完毕。启动执行下面的命令启动aria2，后面的路径是配置文件所在位置：aria2c --conf-path=/etc/aria2/aria2.conf如果没有提示任何错误信息（注意，warn和notice都不算，只有出现error才是错误），那就按ctrl+c停止上面的语句，运行此句：aria2c --conf-path=/etc/aria2/aria2.conf -D-D是后台运行的意思。（注意，这里复制时--conf-path前面的是两个“-”，直接复制可能会出问题）设置自启cd /opt touch aria.sh echo "aria2c --conf-path=/etc/aria2/aria2.conf -D" >>aria.sh chmod +x aria.sh vi /etc/rc.local #将 /opt/aria.sh 写到第一行安装和配置AriaNG部署AriaNGAriaNG是aria2的Web UI，要想使用AriaNG，首先要配置好nginx环境下载：Github解压到你的网站目录配置AriaNGAriaNG其实不需要怎么配置，因为AriaNG只是一个WebUI。需要注意的是。如果在aria.conf中配置了密钥，需要在如下位置输入：至此，aria2的基本配置就完成了。Aria2进阶配置配置权限问题vi /etc/aria2/aria2.sh#!/bin/sh chmod -R 777 /xxx/xxx （这个目录是Aria2的下载目录）chmod +x /etc/aria2/aria2.sh在aria2.conf里加一句：on-download-complete=/etc/aria2/aria2.sh
frp 的搭建——内网穿透frp 是一个专注于内网穿透的高性能的反向代理应用，支持 TCP、UDP、HTTP、HTTPS 等多种协议，且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。下载 release找到合适的版本 我的vps是amd64 玩客云是armv7 （下载arm版）查看linux版本：uname -m下载：cd /opt mkdir frp cd ./frp wget https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_arm.tar.gz tar -xf frp_0.51.2_linux_arm.tar.gz 使用：服务器端：赋予执行权限cd ./frp_0.51.2_linux_arm chmod +x frps 编辑配置文件vi frps.inifrps.ini 内容[common] bind_port = 7000 vhost_http_port = 8080启动：./frps -c ./frps.ini客户端：赋予执行权限cd ./frp_0.51.2_linux_arm chmod +x frpc 编辑配置文件vi frpc.inifrpc.ini 内容[common] server_addr = x.x.x.x server_port = 7000 [web] type = http local_port = 80 custom_domains = www.yourdomain.com "[web]"这个方括号内是可以随便修改，关键是下面的type = http不要改server_port 要和 bind_port 一致server_addr 填服务器地址local_port 填本地要对外开放的端口custom_domains 是服务器端要重定向至frp的域名启动：./frpc -c ./frpc.ini其他示例：官方文档
微力同步微力同步是一款可让您在多个设备上同步文件的应用程序。安装：curl http://www.verysync.com/shell/verysync-linux-installer/go-installer.sh > go-installer.sh chmod +x go-installer.sh ./go-installer.sh命令执行完成后访问http://IP:8886就可以进入管理页面。食用方式：http://www.verysync.com/manual/users/start.html#connect和syncthing很类似，但是使用体验其实我觉得比syncthing要好，说先就是在服务端的安装，有官方的一键脚本，然后就是客户端的软件都是免翻就可以下载和使用的，这点点个赞。
linux下安装Transmission安装Transmission运行下面的命令安装TRapt-get update apt install transmission transmission-daemon配置Transmission首先要停用transmission-daemon服务service transmission-daemon stop一定要注意，配置前必须停用transmission-daemon这个服务，如果不停用该服务，你后续所做的一切配置都不会保存。编辑配置文件运行如下命令编辑配置文件：vim /etc/transmission-daemon/settings.json一般情况下只需要修改以下几项：默认下载路径找到下面这一项，后面的路径是默认下载的路径，你可以改成你想要的路径"download-dir": "/home/share/downloads" 设置好后，不要忘记执行一下赋权命令，使下载目录可以读写，以免发生不必要的错误：chmod -R 777 /home/share/downloads配置WebUI按照下面的进行设置即可"rpc-authentication-required": true "rpc-enabled": true "rpc-password: "这里改成你自己的密码" "rpc-username":"改成你自己的用户名" "rpc-whitelist-enabled": false 不启用白名单，防止登不上参考官方文档以及各参数的中英对照常用命令：service transmission-daemon start #启动TR service transmission-daemon stop #关闭TR service transmission-daemon status #查看TR运行状态 systemctl enable transmission-daemon #设置TR开机自启 systemctl disable transmission-daemon #关闭TR开机自启 webui端口：9091美化WebUI点这里下载美化后的UI源码，下载后解压，找到src文件夹/usr/share/transmission/web把原来的index.html改成index.original.html，然后把刚刚src下的四个项目全部拖到这个目录里。
给玩客云挂载硬盘后续不知道为什么永久挂载不行。我的意思是我照着教程改了没有用★永久挂载vim /etc/fstab #用vim打开文件在最后填入/dev/sda1(你的硬盘目录) /mydisk(要挂载的目录) ext4 defaulta 0 0*这一步不要填错了要仔细所以我直接写了一个文件guaz.sh只有一行就是mount /dev/sda1 /mnt/sda1给个权限：chmod -R 777 /opt/guaz.sh然后写入/etc/rc.local ,这才可以armbian系统，开机自启动 - Hekyのblog
给玩客云挂载有文件的硬盘就是为什么我会小丑就是不知道有文件的硬盘要怎么挂载然后就瞎搞，这次事情充分的说明了Google的重要性https://askubuntu.com/questions/910078/structure-needs-cleaning-error-cannot-mount-partition这个是谷歌上查到的解决方法，其实概况一下一共就两个命令sudo fsck.ext4 -y /dev/sdaX #“X”替换成编号 sudo e2fsck /dev/sdaX #同理
linux创建新用户sudo useradd -m aaa #创建用户名为aaa的用户sudo passwd aaa #输入用户aaa的密码设置给予的权限sudo vi /etc/sudoers找到user privilege这一行设置命令解释器sudo vi /etc/passwd将文件拉倒最后修改解释器类型删除用户sudo userdel -r aaa
手贱把玩客云搞死机了重新刷机太久没有碰这台机器了，这次是因为在给我的资源库也就是保留地添加bt站的时候，觉得bt站的资源如果不开一个迅雷会员根本下不动，所以想到了pt，就想到了以前拿来当小鸡的玩客云，只不过有一个问题，我在设置硬盘的挂载的时候因为挂不上，手贱直接改了fstab ，然后就杯具了，ssh连不上了，就有了这篇博客重新刷机本来想直接刷系统就好，尝试过但是不行，应该要先刷一下旧系统balenaEtcher上次给电脑刷ubuntu也是用的他现在是刷进去了，然后u盘一插就可以了之前说过的fing用来看ip，然后用finalshell连上就好给 Armbian换国内源vi /etc/apt/sources.list来自Armbian换国内源 - 麦克斯和雪莉的部落阁 (haibara.cn)清华源官网：https://mirrors.tuna.tsinghua.edu.cn/Debian源直达链接：https://mirrors.tuna.tsinghua.edu.cn/help/debian/中科大源官网：https://mirrors.ustc.edu.cn/Debian源直达链接：https://mirrors.ustc.edu.cn/help/debian.htmlbuster版本：# 默认注释了源码镜像以提高 apt update 速度，如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free修改armbian.listarmbian.list在/etc/apt/sources.list.d/目录vi /etc/apt/sources.list.d/armbian.list删掉原有的内容，然后根据自己的Armbian版本（stretch/buster/其他）替换成以下内容：buster版本：deb https://mirrors.tuna.tsinghua.edu.cn/armbian buster main buster-utils buster-desktop如果你是其他版本，请将上面链接中表示版本的stretch/buster等字眼对应替换成你的版本如bullseye等。改DNS在/etc/resolv.conf 里面改成下面几个中的一个就好DNSPod（腾讯）DNS： 119.29.29.29 百度DNS： 180.76.76.76 阿里DNS： 223.5.5.5 / 223.6.6.6 114 DNS： 114.114.114.114 Google DNS： 8.8.8.8之后就是下软件 transmission、samba、syncthing在我做完这些操作的时候发现恩山论坛上已经有直刷包了，淦玩客云-Armbian23.05-直刷包-内核6.1-迅雷玩客云、京东云等各种云设备-恩山无线论坛 - Powered by Discuz! (right.com.cn)不过我懒得升级，所以就这样吧。在我准备发的时候，刚好刷完，但是还是出现了问题，我之所以还是勤勤恳恳的先刷旧版就是因为ssh的时候刚连上就断开，我一开始以为是我的问题，后来第二遍刷的时候还是这样，我想到了换一个软件试一试，用了putty，好家伙这个就可以，我现在想明白了，为什么当初那些教程里都是用putty我就在想明明其他的shell软件要比他方便，现在知道了，但是我的时间也无了，哎很难想象我当时第一次接触玩客云的时候是抱着什么样的热忱才会投入到这么麻烦的工程，这次快是因为我链接什么都保存的好好的，而且还有很多经验，可是当时我并没有，所以以前的我真nb
Ubuntu/Debian 使用ntpdate同步网络时间之前在一篇博客有提到过玩客云的armbian安装青龙面板在玩客云上使用青龙面板：拉取镜像docker pull whyour/qinglong:2.10.13创建容器docker run -tid --name qinglong -p 5700:5700 --restart always whyour/qinglong:2.10.13然后就可以通过http://ip:5700访问面板了后来发现用不了，之前在做节点的时候有看到过一个软件ntpdate这个软件是用来同步网络时间用的，我猜青龙面板用不了是因为时间不同步，后来同步了时间就可以了1.打开终端输入以下命令安装ntpdate工具。sudo apt-get install ntpdate2.再输入命令设置系统时间与网络时间同步。sudo ntpdate cn.pool.ntp.org3.最后输入命令将时间更新到硬件上即可。sudo hwclock --systohc玩客云在最后一步会报错不过应该不影响提示No usable clock interface found.有解决方法，我懒得搞，放个链接PCF8523 RTC: hwclock: Cannot access the Hardware Clock via any known method. · Issue #2115 · raspberrypi/linux (github.com)
Debian/Ubuntu 放行端口安装iptables（通常系统都会自带，如果没有就需要安装）apt-get update apt-get install iptables例如要放行8888端口iptables -I INPUT -p tcp --dport 8888 -j ACCEPT然后保存放行规则iptables-save设置完就已经放行了指定的端口，但重启后会失效，下面设置持续生效规则；安装iptables-persistentapt-get install iptables-persistent保存规则持续生效netfilter-persistent save netfilter-persistent reload设置完成后指定端口就会持续放行了
Debian / Ubuntu安装v2rayAv2rayA 的功能依赖于 V2Ray 内核，因此需要安装内核。安装 V2Ray 内核V2Ray 的官方脚本V2Ray 安装参考：https://github.com/v2fly/fhs-install-v2rayv2rayA 提供的镜像脚本（推荐）curl -Ls https://mirrors.v2raya.org/go.sh | sudo bash安装后可以关掉服务，因为 v2rayA 不依赖于该 systemd 服务。sudo systemctl disable v2ray --now安装 v2rayA添加公钥wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/v2raya.asc添加 V2RayA 软件源echo "deb https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list sudo apt update安装 V2RayAsudo apt install v2raya开放端口需要安装 iptables、iptables-persistentiptables -I INPUT -p tcp --dport 2017 -j ACCEPT iptables-save netfilter-persistent save netfilter-persistent reload通过ip:2017访问例如： http://localhost:2017启动 v2rayA / 设置 v2rayA 自动启动从 1.5 版开始将不再默认为用户启动 v2rayA 及设置开机自动。启动 v2rayAsudo systemctl start v2raya.service设置开机自动启动sudo systemctl enable v2raya.service重置密码v2raya --reset-password
手动搭建一个vless+tcp+tls节点需要的原料：1. 节点一枚申请ssl证书wget -N https://gitlab.com/rwkgyg/acme-script/raw/main/acme.sh && bash acme.sh(一键脚本)给证书权限 # Xray 默认以 nobody 用户运行，证书权限适配 chown -R nobody.$cert_group /{证书的文件夹}/*安装xraybash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install获取uuidxray uuid修改/usr/local/etc/xray/里的config文件{ "log": { "loglevel": "warning" }, "routing": { "domainStrategy": "AsIs", "rules": [ { "type": "field", "ip": [ "geoip:private" ], "outboundTag": "block" } ] }, "inbounds": [ { "listen": "0.0.0.0", "port": {{端口}}, "protocol": "vless", "settings": { "decryption":"none", "clients": [ { "id": "uuid" } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "alpn": "http/1.1", "certificates": [ { "certificateFile": "xxx/cert.crt",//证书地址，下同 "keyFile": "xxx/private.key" } ] } } } ], "outbounds": [ { "protocol": "freedom", "tag": "direct" }, { "protocol": "blackhole", "tag": "block" } ] }在v2rayN客户端添加节点，选择添加vless服务器别名：随便填地址：填域名端口：填端口id：填uuidtls：选择tls没有提到的不动，点击确定。
debian安装docker首先，安装一些必要的软件包：apt update apt upgrade -y apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates然后加入 Docker 的 GPG 公钥和 apt 源：curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list国内机器可以用清华 TUNA的国内源：curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list然后更新系统后即可安装 Docker CE：apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin此时可以使用 docker version 命令检查是否安装成功：root@debian ~ # docker version Client: Docker Engine - Community Version: 24.0.2 API version: 1.43 Go version: go1.20.4 Git commit: cb74dfc Built: Thu May 25 21:52:17 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 24.0.2 API version: 1.43 (minimum version 1.12) Go version: go1.20.4 Git commit: 659604f Built: Thu May 25 21:52:17 2023 OS/Arch: linux/amd64 Experimental: true containerd: Version: 1.6.21 GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8 runc: Version: 1.1.7 GitCommit: v1.1.7-0-g860f061 docker-init: Version: 0.19.0 GitCommit: de40ad0
Ubuntu下crontab的安装和使用一、安装安装：apt-get install cron 启动：service cron start 重启：service cron restart 停止：service cron stop 检查状态：service cron status 查询cron可用的命令：service cron 检查Cronta工具是否安装：crontab -lcrontab命令：1.编辑/创建命令[root@localhost]# crontab -e当系统不存在crontab文件时，输入此命令即为创建，已存在文件即为编辑。2.查看当前所有定时任务[root@localhost]# crontab -l3.删除当前所有定时任务[root@localhost]# crontab -r编辑/var/spool/cron/crontabs目录下面的root文件直接在下面加上时间规则和所要执行文件的地址例如：* * * * * /usr/local/xxxx/xxx当执行定时任务出现错误时，默认将信息存储到相应用户下面的文件中/var/log/mail/${user}
玩客云刷机需要用到的东西：玩客云一台，一条双usb线，一个u盘第一步刷底包把usb线的一端插到离hdmi接口近的那一个usb接口，另一个连电脑然后用镊子短接图示的两个接口或者是用手摁住复位键，如果不想拆机的话就用取卡针捅着复位接口然后接上电源，就可以看到下面这张图然后刷入底包 ,即 update.img之后就是要先将旧的系统(armbian5.88.img)刷到u盘上，刷完之后将u盘插到离网口近的那个usb口。等他闪灯，不闪了之后，就可以把u盘拔下来。之后废物利用再给u盘刷上WKY-Armbian_20.12_5.9.0同样的操作再来一遍就可以了之后就是ssh连接用户名 root 密码 1234刷入emmc（闪存）：cd /boot/install #进入/boot/install目录 sudo ./install.sh #运行install.sh其他：★内网穿透ssh远程登陆cd /opt/ #进入/opt目录mkdir cpolar #创建cpolar空文件夹进入官网复制下载链接(要ARM的)wget 【复制的链接】 #下载内网穿透工具unzip 【下载的.zip压缩包】 #解压压缩包(也可以删掉解压完成的压缩包用 rm -rf 【压缩包】)./cpolar authtoken 【您的token】 #绑定您的token./cpolar service install #下载cpolar服务./systemctl start cpolar #启动cpolar服务./systemctl enable cpolar #开机自启cpolar服务./systemctl status cpolar #查看cpolar服务状态官网查看地址和端口即可ssh远程登陆★挂载硬盘(临时)lsblk 或lsblk -f查看挂载情况fdisk /dev/sda1(这里填你的硬盘目录) #给硬盘分区mkfs -t ext4 /dev/sda1 #格式化硬盘选择ext4文件系统mount /dev/sda1 【要挂载的目录】 #分区挂载到指定目录★永久挂载vim /etc/fstab #用vim打开文件在最后填入/dev/sda1(你的硬盘目录) /mydisk(要挂载的目录) ext4 defaulta 0 0*这一步不要填错了要仔细用到的文件链接：https://pan.baidu.com/s/1Pp-Z0tyMus5vd8i03HXBAg?pwd=2fhx 提取码：2fhx写在后面:这个教程我之前就一直想出,但是一直没有写,今天看到备忘录上有就草草写一下,算是和玩客云告别了,感谢它曾经带给我一段美好的
warpwrap简介：支持 chatGPT，解锁奈飞流媒体避免 Google 验证码或是使用 Google 学术搜索可调用 IPv4 接口，使青龙和V2P等项目能正常运行由于可以双向转输数据，能做对方VPS的跳板和探针，替代 HE tunnelbroker能让 IPv6 only VPS 上做的节点支持 TelegramIPv6 建的节点能在只支持 IPv4 的 PassWall、ShadowSocksR Plus+ 上使用网上流行的warp的几个版本包括：https://github.com/fscarmen/warphttps://github.com/P3TERX/warp.shhttps://gitlab.com/ProjectWARP/warp-go/-/tree/master/https://github.com/yonggekkk/warp-yghttps://gitlab.com/Misaka-blog/warp-script以 https://github.com/fscarmen/warp 为例进行演示。1、首次运行wget -N https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh [option] [lisence]2、再次运行warp [option] [lisence]3、参数参考github主页，我这里来一个极简演示：wget -N https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh 4
armbian系统，开机自启动armbian系统，开机启动脚本rc.local 默认是不启动，不管在里面添加了什么脚本都是不管用的，需要按如下方法开启 方法： 命令vi修改，也可以winscp修改vi /lib/systemd/system/rc.local.service在最后添加下面三行内容[Install] WantedBy=multi-user.target Alias=rc-local.service然后就可以在/etc/rc.local 中添加需要的开机启动脚本，脚本要写在exit 0的前面 。以下是找的原理 armbian（我使用5.62 5.64版本） 使用的是systemd管理系统，不是使用initd管理系统，systemd 默认读取 /etc/systemd/system 下的配置文件，该目录下的文件会链接/lib/systemd/system/下的文件 执行 ls /lib/systemd/system 你可以看到有很多启动脚本，其中就有我们需要的 rc.local.service 打开脚本内容：# This file is part of systemd. # # systemd is free software; you can redistribute #it and/or modify it # under the terms of the GNU Lesser General Public #License as published by # the Free Software Foundation; either version 2.1 #of the License, or # (at your option) any later version. # This unit gets pulled automatically into multi-#user.target by # systemd-rc-local-generator if #/etc/rc.local is executable. [Unit] Description=/etc/rc.local Compatibility ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes一般正常的启动文件主要分成三部分 [Unit] 段: 启动顺序与依赖关系 [Service] 段: 启动行为,如何启动，启动类型[Install] 段: 定义如何安装这个配置文件，即怎样做到开机启动 可以看出，/etc/rc.local 的启动顺序是在网络后面，但是显然它少了 Install 段，也就没有定义如何做到开机启动，所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段:[Install] WantedBy=multi-user.target Alias=rc-local.service 转自：开启armbian系统的开机启动脚本rc.local-斐讯无线路由器以及其它斐迅网络设备-恩山无线论坛 - Powered by Discuz! (right.com.cn)
重建服务器 复盘2023/3/5重建了服务器，然后现在就是用的debian然后没有手装lnmp而是用lnmp.org的一键安装包，不得不说挺好用的。本来是想用xray一键安装包来安装的，但是可以换端口的都不支持debian（还是说我没有找到？）其他的都是要80端口，就和本来的冲突了，我还因此不得不重新装一遍lnmp好在只有30分钟还好。其他的就是后来还是只用普通的v2ray一键安装包，不是很想去折腾然后手动安装。lnmp 安装脚本： wget http://soft.vpser.net/lnmp/lnmp1.8.tar.gz -cO lnmp1.8.tar.gz && tar zxf lnmp1.8.tar.gz && cd lnmp1.8 && ./install.sh lnmpv2ray 安装脚本：source <(curl -sL https://multi.netlify.app/v2ray.sh) --zh安装 Curl 依赖包yum update -y && yum install curl -y #CentOS/Fedora apt-get update -y && apt-get install curl -y #Debian/Ubuntu此时，Xray服务并没有被安装，你需要输入管理命令“Xray”，这时候系统会提示你“检测到本机没安装xray, 正在自动安装..”，请稍等片刻，即可完成。一键安装脚本升级命令(保留配置文件更新)source <(curl -sL https://multi.netlify.app/v2ray.sh) -k一键安装脚本卸载命令source <(curl -sL https://multi.netlify.app/v2ray.sh) --remove一键安装脚本的V2Ray管理命令行参数v2ray [-h|--help] [options] -h, --help 查看帮助 -v, --version 查看版本号 start 启动 V2Ray stop 停止 V2Ray restart 重启 V2Ray status 查看 V2Ray 运行状态 new 重建新的v2ray json配置文件 update 更新 V2Ray 到最新Release版本 update.sh 更新 multi-v2ray 到最新版本 add 新增mkcp + 随机一种 (srtp|wechat-video|utp|dtls|wireguard) header伪装的端口(Group) add [wechat|utp|srtp|dtls|wireguard|socks|mtproto|ss] 新增一种协议的组，端口随机,如 v2ray add utp 为新增utp协议 del 删除端口组 info 查看配置 port 修改端口 tls 修改tls tfo 修改tcpFastOpen stream 修改传输协议 cdn 走cdn stats v2ray流量统计 iptables iptables流量统计 clean 清理日志 log 查看日志xray管理程序使用方法与v2ray管理程序基本一致，请根据提示操作即可。bbr加速脚本：卸载内核wget -N --no-check-certificate "https://github.000060000.xyz/tcp.sh" && chmod +x tcp.sh && ./tcp.sh或wget -N "https://github.000060000.xyz/tcp.sh" && chmod +x tcp.sh && ./tcp.sh不卸载内核wget -N --no-check-certificate "https://github.000060000.xyz/tcpx.sh" && chmod +x tcpx.sh && ./tcpx.sh或wget -N "https://github.000060000.xyz/tcpx.sh" && chmod +x tcpx.sh && ./tcpx.sh安装中 提示Abort kernel removal? 选择No一键安装LNMP环境后，默认会安装Nginx，MySQL和PHP，相应的软件安装目录如下：Nginx 目录: /usr/local/nginx/MySQL 目录 : /usr/local/mysql/MySQL数据库所在目录：/usr/local/mysql/var/PHP目录 : /usr/local/php/默认网站目录 : /home/wwwroot/default/Nginx日志目录：/home/wwwlogs/同样，LNMP默认的配置文件目录如下：Nginx主配置(默认虚拟主机)文件：/usr/local/nginx/conf/nginx.conf添加的虚拟主机配置文件：/usr/local/nginx/conf/vhost/域名.confMySQL配置文件：/etc/my.cnfPHP配置文件：/usr/local/php/etc/php.iniphp-fpm配置文件：/usr/local/php/etc/php-fpm.conf一般维护站点需要用到的命令如下：重启nginx/mysql/php：lnmp nginx/mysql/php restart重启所有：lnmp restart添加站点：lnmp vhost add添加数据库：lnmp database add查看帮助：lnmpLNMP 1.2或更高版本下需要执行：chattr -i /网站目录/.user.ini 后才能完整删除网站目录。3月18日更新docker安装：sudo apt install docker-ce安装青龙云面板：拉取镜像docker pull whyour/qinglong:latest创建容器： docker run -dit \ -v $PWD/ql/config:/ql/config \ -v $PWD/ql/log:/ql/log \ -v $PWD/ql/db:/ql/db \ -v $PWD/ql/repo:/ql/repo \ -v $PWD/ql/raw:/ql/raw \ -v $PWD/ql/scripts:/ql/scripts \ -v $PWD/ql/jbot:/ql/jbot \ -p 5700:5700 \ --name qinglong \ --hostname qinglong \ --restart unless-stopped \ whyour/qinglong:latest先复制第一行，再复制其他如果是finalshell 直接在输入框的上方输入青龙云面板基础命令：#重启青龙容器 docker restart 你的容器名 #更新青龙 docker exec -it qinglong ql update #更新青龙并编译 docker exec -it qinglong ql restart #拉取自定义仓库 docker exec -it qinglong ql repo https://ghproxy.com/https://github.com/whyour/hundun.git "quanx" "tokens|caiyun|didi|donate|fold|Env" #拉取单个脚本 docker exec -it qinglong ql raw https://ghproxy.com/https://raw.githubusercontent.com/moposmall/Script/main/Me/jx_cfd.js #删除7天前的所有日志 docker exec -it qinglong ql rmlog 7 #启动bot docker exec -it qinglong ql bot #导出互助码 docker exec -it qinglong ql code #通知测试 docker exec -it qinglong notify test test #立即执行脚本 docker exec -it qinglong task test.js now #并行执行脚本 docker exec -it qinglong task test.js conc时间规则：*/5 * * * * ? #每隔 5 秒执行一次 0 */1 * * * ? #每隔 1 分钟执行一次 0 0 2 1 * ? * #每月 1 日的凌晨 2 点执行一次 0 15 10 ? * #MON-FRI 周一到周五每天上午 10：15 执行 0 15 10 ? 6L #2002-2006 2002 年至 2006 年的每个月的最后一个星期五上午 10:15 执行 0 0 23 * * ? #每天 23 点执行一次 0 0 1 * * ? #每天凌晨 1 点执行一次 0 0 1 1 * ? #每月 1 日凌晨 1 点执行一次 0 0 23 L * ? #每月最后一天 23 点执行一次 0 0 1 ? * L #每周星期天凌晨 1 点执行一次 0 26,29,33 * * * ? #在 26 分、29 分、33 分执行一次 0 0 0,13,18,21 * * ? #每天的 0 点、13 点、18 点、21 点都执行一次 0 0 10,14,16 * * ? #每天上午 10 点，下午 2 点，4 点执行一次 0 0/30 9-17 * * ? #朝九晚五工作时间内每半小时执行一次 0 0 12 ? * WED #每个星期三中午 12 点执行一次 0 0 12 * * ? #每天中午 12 点触发 0 15 10 ? * * #每天上午 10:15 触发 0 15 10 * * ? #每天上午 10:15 触发 0 15 10 * * ? * #每天上午 10:15 触发 0 15 10 * * ? #2005 2005 年的每天上午 10:15 触发 0 * 14 * * ? #每天下午 2 点到 2:59 期间的每 1 分钟触发 0 0/5 14 * * ? #每天下午 2 点到 2:55 期间的每 5 分钟触发 0 0/5 14,18 * * ? #每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发 0 0-5 14 * * ? #每天下午 2 点到 2:05 期间的每 1 分钟触发 0 10,44 14 ? 3 WED #每年三月的星期三的下午 2:10 和 2:44 触发 0 15 10 ? * MON-FRI #周一至周五的上午 10:15 触发 0 15 10 15 * ? #每月 15 日上午 10:15 触发 0 15 10 L * ? #每月最后一日的上午 10:15 触发 0 15 10 ? * 6L #每月的最后一个星期五上午 10:15 触发 0 15 10 ? * 6L #2002-2005 2002 年至 2005 年的每月的最后一个星期五上午 10:15 触发 0 15 10 ? * 6#3 #每月的第三个星期五上午 10:15 触发安装oneindex:项目：https://github.com/Mintimate/OneindexM这个项目其实不好只有一个主题可以用其他的主题都是有问题的，关键是能用的就是最基本的那个：如果可以的话其实是可以用原来的项目。Onedrive国际版本，到Microsoft Azure App registrations世纪互联版本OneDrive，到Microsoft Azure.cn App registrations受支持的帐户类型：如图：选择任何组织目录的账号和个人重定向 URI：这里填入我建立的API： https://tool.mintimate.cn/oneindexM/设置权限在获取应用机密前，我们需要设置权限，点击：API权限-Microsoft Graph:依此勾选：offline_accessFiles.ReadFiles.Read.All伪静态：if (!-f $request_filename) { set $rule_0 1$rule_0; } if (!-d $request_filename) { set $rule_0 2$rule_0; } if ($rule_0 = "21") { rewrite ^/(.*) /?/$1 last; }typecho插件商店：https://github.com/typecho-fans/plugins/releases/download/plugins-S_to_Z/TeStore.zip需要设置文件可读写
replit白嫖节点教程2023/05/1更新https://replit.com/@ygkkkk?tab=repls点击上面的链接点击红框框住的地方点击fork之后等他自己加载，创建项目完成后点击run项目地址：https://github.com/yonggekkk/Replit-XrayReplit（https://repl.it）是一个基于浏览器的云端协同开发平台，可用于构建开发环境、实时协作、托管网络应用等。Replit提供可创建动态或者静态网站的容器，并会自动生成免费https域名（格式为：项目名.用户名.repl.co）。Replit官方文档：https://docs.replit.com/注册注册地址 https://repl.it搭建v2ray浏览器登录自己的Replit账号，新窗口打开https://replit.com/@hifeng/v2rayN?v=1fork这个项目，仅需点击Use Template，然后给项目取个名字，然后Use Template就行了。点击run在左侧的Files菜单中，程序自动创建url.txt文件，文件包括vmess和vless节点连接，直接导入软件即可replit每隔一段时间就会休眠，所以当节点不可用的时候，可以登录一下replit，重新开启容器
海洋CMS自动采集脚本（sh脚本）2023版第一步：获取脚本代码。【1】下面是自动采集脚本代码，我们需要修改代码里面的3项后才可以使用。#!/bin/bash ######################################################## # 程序名称: 海洋CMS自动采集脚本 # 版本信息：seacmsbot-2023 # 发布链接: https://blog.heky.tk/index.php/archives/301/ # 使用方法：直接复制代码到宝塔计划任务shell脚本内容里添加每小时任务使用 # 更新时间：2023/1/16 ########################################################## #请修改下面的网站域名及管理目录 web_site="http://网站域名/管理目录/admin_reslib2.php" #请修改下面项内容为"admin_reslib2.php"里设置的访问密码(默认为系统设置的cookie密码) web_pwd="8888e82e85bd4540f0defa3fb7a8e888" #下面项内容为资源站每日采集链接地址列表，请自行修改,每行一条,可添加多个，前后需添加引号。 #每日采集链接获取方法:选择"后台-采集-资源库列表",复制资源站右边的"采集每天"的链接地址,去掉?前面的内容。 web_api=( '?ac=day&rid=1&url=https://api.iokzy.com/inc/ldg_seackm3u8s.php' '?ac=day&rid=2&url=http://www.zdziyuan.com/inc/s_ldgm3u8_sea.php' ) #模拟用户浏览器ua,如果脚本运行错误，请自行百度浏览器ua并自行修改 web_ua="Mozilla/5.0 (Linux; Android 4.4.4; HM NOTE 1LTEW Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 MicroMessenger/6. 0.0.54_r849063.501 NetType/WIFI" #采集单页 function get_content() { echo "正在采集第$page页..." #echo " get_content: --->url:--->$1" cResult=$(curl --connect-timeout 10 -m 20 -k -s -L -A "$web_ua" "$1" ) echo $cResult | grep -q "采集" #echo -e "$1\n$cResult" if [ "$?" = "0" ]; then next_content "$cResult" else echo -e "采集失败,请检查设置!\n失败链接-->$1\n返回信息-->$cResult\n采集结束，共0页" fi } #采集下页 function next_content() { #统计数据 Result=$(echo "$1" | tr " " "\n") a=$(echo "$Result" | grep -c "采集成功") b=$(echo "$Result" | grep -c "更新数据") c=$(echo "$Result" | grep -c "无需更新") d=$(echo "$Result" | grep -c "跳过") echo "采集成功-->已更$c部,新增$a部,更新$b部,跳过$d部" let add+=$a let update+=$b let none+=$c let jmp+=$d #检测并采集下页 next_url=${1##*location.href=\'} next_url=${next_url%%\'*} #echo $next_url if [ "${next_url:0:1}" = "?" ] then let page++ get_content "$web_site$next_url" else echo "采集结束，共$page页" fi } #脚本入口 echo "海洋CMS自动采集脚本开始执行 版本：v1.2" starttime=$(date +%s) update=0 #更新 add=0 #新增 none=0 #无变化 jmp=0 # 跳过 for url in ${web_api[@]}; do if ! -z $url then web_param="$web_site$url&password=$web_pwd" page=1 echo "开始采集：$url" get_content $web_param fi done endtime=$(date +%s) echo "============================" echo "入库-->$add部" echo "更新-->$update部" echo "跳过-->$jmp部(未绑定分类或链接错误)" echo "今日-->$[none+add+update]部" echo "============================" echo "全部采集结束,耗时$[endtime - starttime]秒"第二步：修改脚本【2】根据上面提供的代码内容复制到记事本或是其他html编辑器来对应修改①请修改下面的网站域名及管理目录web_site="http://网站域名/管理目录/admin_reslib2.php"这个是需要修改成你的“网站域名”和“海洋cms后台的管理目录”。域名大家都能理解，后台的管理目录这个对于新手来说需要多讲两句，首先你要能登录你的后台才可以知道你的后台目录。举例说明：假如我的后台登录地址是 mytheme.cn/xxxx/那么这里的“xxxx”就是后台的管理目录，得到了管理目录我们直接填写到代码里即可。②请修改下面项内容为"admin_reslib2.php"里设置的访问密码(默认为系统设置的cookie密码)web_pwd="8888e82e85bd4540f0defa3fb7a8e888"这个修改需要到海洋cms系统后台得到我们的cookie密码进行替换才可以，具体步骤：系统-网站设置-cookie密码。得到自己网站的cookie密码后替换即可。③下面项内容为资源站每日采集链接地址列表，请自行修改,每行一条,可添加多个，前后需添加引号。\#每日采集链接获取方法:选择"后台-采集-资源库列表",复制资源站右边的"采集每天"的链接地址,去掉?前面的内容。web_api=( '?ac=day&rid=1&url=https://api.iokzy.com/inc/ldg_seackm3u8s.php' '?ac=day&rid=2&url=http://www.zdziyuan.com/inc/s_ldgm3u8_sea.php' )这个是代码里需要修改的最后一项，里面是代码里默认提供的2个采集链接地址，我们需要获取自己的采集链接地址添加到里面。第三步：宝塔定时任务设置。直接复制代码到宝塔计划任务shell脚本，内容里添加每小时任务使用。如果没有使用宝塔面板可以 把修改好的代码，另存为"cms.sh"(你想叫其他名字也可以) ，上传到vps文件夹中例如"/opt"，然后执行以下代码chmod +x opt/cms.sh echo "* */1 * * * opt/cms.sh">>/etc/crontab service crond start就可以了
mysql 忘记密码找回利用mysql自带的用户debian-sys-maint进行重置密码，只有Debian或Ubuntu服务器才有，存在于/etc/mysql/debian.cnf文件中打开/etc/mysql/目录下的debian.cnf文件，里面包括用户名和密码sudo vim /etc/mysql/debian.cnf使用文件中提供的用户名和密码进入mysqlmysql -u debian-sys-maint -p选择mysql数据库use mysql;更新root用户的密码ALTER USER 'root'@'localhost' IDENTIFIED BY '你要修改的密码';ps:数据库密码更换以后，如何重新设置Typecho？修改文件 config.inc.php
syncthing服务器（linux）端的安装教程查看自己的linux版本dpkg --print-architecture打开链接下载对应版本的文件（科学上网）链接上传到服务器解压tar zxf xxx.tar.gz打开可执行文件cd /opt #打开对应目录 ./syncthing需要开放端口22000，8384，8385使用教程请自行百度碎碎念：rpm安装默认目录：数据文件：/var/lib/mysql/配置文件模板：/usr/share/mysqlmysql客户端工具目录：/usr/bin日志目录：/var/log/pid，sock文件目录：/tmp/在一通作死的尝试后服务器成功被我搞坏我得到两个启示遇到问题先reboot遇到问题先reboot现在是第三次重装服务器有点小难受，看着之前的积累就这样的无了，哎。其实静下心来想，也没有什么人来看我的博客，这样的结局或许是最好的吧。好吧，救活了，就是在重装完mysql后nginx的配置可能会变。然后我也重装了，然后服务器就奔溃了，404然后就是万能reboot这次service nginx status 是active在运行了就是打开网址都是跳到默认网址。我后面想了一下应该是软链接的问题，毕竟配置还在。就把原来的软链接删掉，然后重新建立软链接。ok了复活了这次主要还是mysql的事。一直reboot也是治标不治本，赶紧重装了一下倒还好。及时止损。
Samba——ubuntu安装apt-get update apt-get install samba编辑smb.conf配置文件vim /etc/samba/smb.conf在末尾添加上如下代码后保存并退出[share] path = /home/share/shared // 这里需要修改成你的用户名和共享文件夹名 available = yes browseable = yes public = yes writable = yes 创建root用户密码:smbpasswd -a root输入你的共享访问密码重启SMB服务,完成配置service smbd restart三、共享的访问方法开发端口：sudo ufw allow 139 sudo ufw allow 445共享设置完成,使用电脑访问共享，win系统电脑端：开始--运行 输入 \\移动端：安装应用 es文件浏览器(广告多)网络——局域网——添加
安装： # Ubuntu 或 Debian sudo apt-get install tmux # CentOS 或 Fedora sudo yum install tmux # Mac brew install tmux启动：tmux new -s <session-name>分离会话：先按下Ctrl+b再按下d输入以下代码查看tmux窗口列表：tmux ls接入会话：tmux attach -t <session-name>杀死会话:tmux kill-session -t <session-name>切换会话：tmux switch -t <session-name>重命名会话：tmux rename-session -t <session-name> <new-name>快捷键：Ctrl+b d：分离当前会话。Ctrl+b s：列出所有会话。Ctrl+b $：重命名当前会话。
使用Nginx Web服务器时，服务器块（类似于Apache中的虚拟主机）可用于封装配置详细信息，并在一台服务器中托管多个域。我们将建立一个名为example.com的域，但我们可以用自己的域名替换它。前提准备创建一个对应的目录sudo mkdir -p /var/www/example.com/html使用$USER环境变量分配目录的所有权：sudo chown -R $USER:$USER /var/www/example.com/html sudo chmod -R 755 /var/www/example.com创建一个服务器块sudo nano /etc/nginx/sites-available/example.com将以下内容copy进文件：server { listen 80; listen [::]:80; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } }在sites-enabled目录新建一个链接，让 Nginx 在启动过程中会读取这个目录：sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/为避免可能由于添加其他服务器名称而引起的哈希存储区内存问题，有必要调整/etc/nginx/nginx.conf文件中的单个值。打开文件：sudo nano /etc/nginx/nginx.conf找到server_names_hash_bucket_size指令并删除#符号：... http { ... server_names_hash_bucket_size 64; ... } ...完成后保存并关闭文件。测试以确保我们在 Nginx 文件中的改动没有任何问题：sudo nginx -t如果没有任何问题，请重新启动 Nginx：sudo systemctl restart nginxNginx现在已经可以按照刚刚我们配置的方式来工作啦。当用户通过http://example.com域名访问我们的服务器时，Nginx会将它指向我们刚刚创建的Html页面。
第一步：安装java推荐是java11sudo apt update sudo apt install openjdk-11-jdk安装完成后可以通过以下指令来检测：java -version输出类似下面这样：openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)第二步：下载安装包上传，并安装安装包下载:release点击图片中mcl-2.1.0.zip上传时可以是上传整个zip包也可以是解压后上传区别就是是否在服务器内解压，在服务器解压需安装unzip安装unzip:apt install unzip如果报错可以先输入：apt update然后再尝试上传的目录可以随意我是在/usr目录下新建文件夹mcl:mkdir mcl将文件上传并解压后 cd 到目录下输入代码：cd /'目录路径' #不需要单引号 chmod +x mcl #给文件mcl执行权限 ./mcl #运行文件mcl安装第三步：安装必要插件mirai-api-http-v21)安装和第二步一样下载源码：release将下载好的文件放入 mcl/plugins 文件夹启动 mcl 完成自动更新和启动2)配置mirai-api-http-v2打开 MCL/config/net.mamoe.mirai-api-http/setting.yml若无此文件请检查 mcl 是否被成功添加并且添加后启动过一次 mcl，若没有请完成前文所述步骤再进行此步骤内容如下adapters: - http - ws debug: false enableVerify: true verifyKey: 1234567890 # 你可以自己设定 singleMode: false cacheSize: 4096 # 可选, 缓存大小, 默认4096. 缓存过小会导致引用回复与撤回消息失败 adapterSettings: ## 详情看 http adapter 使用说明 配置 http: host: localhost port: 23456 # 端口 cors: [*] ## 详情看 websocket adapter 使用说明 配置 ws: host: localhost port: 23456 # 端口 reservedSyncId: -1 # 确保为 -1, 否则 WebsocketAdapter(Experimental) 没法正常工作.第四步：配置自动登入在启动mcl的情况下在mcl控制台输入/autoLogin add <你的QQ号> <你的QQ密码>提示一下代码则表示添加成功已成功添加 '<你的QQ号>'如果要手机和mirai同时在线可以在前面的步骤完成并在启动的mcl控制台输入以下代码/autoLogin setConfig <你的QQ号> protocol IPAD只有在重启之后生效第五步：登入QQ执行./mcl启动mirai-console如果直接显示Event: BotOnlineEvent(bot=Bot(<你的QQ号>))，并有收到新消息，那么恭喜你，你已经完成了mirai的配置了 若显示如下输出或出现有如下内容的弹窗：需要滑动验证码，完成后请输入ticket url:http://xxx.xxx.xxx在电脑上打开浏览器，输入程序提供的url，应当会出现滑动认证的画面，此时先不要进行认证推荐chrome单击 F12 键，会出现一个DevTool，找到上方选项卡，点击Network选项，再点击下方的Fetch/XHR选项完成滑动验证，此时在DevTool界面中应会出现新的请求，找到其中名为cap_union_new_verify选项卡，点击其中的Preview选项卡，在其中找到ticket的值填入mcl并回车gif演示：-这个时候终端会显示另外一串url，复制并在电脑浏览器上打开，网页上会提示你验证，选择第一个扫码验证，验证成功之后，关掉网页，在终端控制台上按下回车键此时就会显示Event: BotOnlineEvent(bot=Bot(<你的QQ号>))，并有收到新消息恭喜你，你已经完成了mirai的搭建了在以后的每一次登入不需要重复以上步骤，即可自动登入，如果是要删除bot的QQ可以输入以下代码：/autoLogin remove <你的QQ号>mirai插件下载：MiraiForum文章参考：SAGIRI BOT Docs
vim是linux上的编辑器获取：sudo apt-get install vim命令：1、查看文件cat 文件名2、编辑vim 文件名按键盘的i进入编辑模式下面会有个提示-- INSERT -- 按Esc退出编辑模式3、退出先按shift+:然后输入q(不保存)/wq(保存)/q!(强制退出)
一：/usr/local/etc/nginx/nginx.conf （配置文件路径） /usr/local/var/www （服务器默认路径） /usr/local/Cellar/nginx/1.6.2 （貌似是安装路径） 二：nginx -V 查看nginx版本及安装的本地位置 nginx -v 查看nginx版本（此方法依然可以检测是否安装某一软件，如git,hg等） 三：/nginx/sbin/nginx #没有提示表示启动成功 /nginx/sbin/nginx -t #检查语法 /nginx/sbin/nginx -s reload #重启四：/nginx/conf/nginx.conf文件参数对应意思：worker_processes 1; #worker进程数量 events { #事件区块开始 worker_connections 1024; #每个worker进程支持的最大连接数 } http { #http区块开始 include mime.types; #Nginx支持的媒体类型库文件包含 default_type application/octet-stream; #默认的媒体类型 sendfile on; #开启高效传输模式 keepalive_timeout 65; #连接超时 server { #server区块开始，表示一个独立的主机站点 listen 80; #提供服务的端口，默认80 server_name www.toyixin.cn; #提供服务的域名主机号 location / { #第一个location区块开始 root html/www; #站点根目录，相对于nginx安装目录 index index.html index.html; #默认的首页文件多个用空格分开 } error_page 500 502 503 504 /50x.html; #出现对应的http状态码时，使用50x.html回应客户 location = /50x.html { #location区块开始，访问50x.html root html; #指定对应的站点目录位html } } }
1.安装sudo apt-get install ufw 2.启用sudo ufw enable sudo ufw default deny 运行以上两条命令后，开启了防火墙，并在系统启动时自动开启。关闭所有外部对本机的访问，但本机访问外部正常。3.开启/禁用sudo ufw allow|deny [service] 打开或关闭某个端口，例如：sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口 sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口 sudo ufw allow 53 允许外部访问53端口(tcp/udp) sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口 4.查看防火墙状态sudo ufw status 5.根据端口删除规则先查询规则号：sudo ufw status numbered 然后再根据号来删除sudo ufw delete 2 在开启ufw前就可以用ufw指令建议先开发端口22、80端口22是ssh端口不开放ssh链接不上端口80是nginx/apache服务器端口不开放则网站打不开其他端口开放：有使用应用例如宝塔（默认端口8888）需要先开放端口否则不能访问面板/不能运行