1.基础指令

超级管理员:sudo su root
系统更新:apt-getupdate && apt-get -y upgrade
修改密码:passwd root
修改服务器时间:sudo timedatectl set-timezone Asia/Shangh(修改至北京时间)
查看当前的服务器的ip:curl ip.sb

2.UTF-8编码问题

部分情况下由于UTF-8编码环境与GBK编码环境不同,导致在这种情况下服务器的终端会发生剧烈抖动,检查服务器是否是UTF-8编码只需要输入locale 指令,关注LANG和LC_ALL 的部分是否出现了utf-8,99%的服务器是默认采用UTF-8的,但仍有一部分ubantu不具备该功能,解决方法如下,在终端下添加环境变量:

# 使用 nano 编辑器
nano ~/.bashrc

在ubantu默认的bash shell下,末尾的几行里插入以下指令:

export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

3.安装wegt,curl(以debian/ubantu为例):

apt install wget -y
sudo apt install curl

4.安装x-ui、3x-ui

x-ui:

bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)

3x-ui:

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

再次打开,输入x-ui即可。

5.安装warp

首次运行:wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh [option] [lisence/url/token]
再次运行:warp [option] [lisence]

6.docker

安装docker:

  1. (准备安装)#安装前先卸载操作系统默认安装的docker,

    sudo apt-get remove docker docker-engine docker.io containerd runc

    #安装必要支持

    sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
  2. (安装源)#添加 Docker 官方 GPG key (可能国内现在访问会存在问题)

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    # 阿里源(推荐使用阿里的gpg KEY)

    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    #添加 apt 源:

    #Docker官方源

    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    #阿里apt源

    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    #更新源

    sudo apt update
    sudo apt-get update
  3. (docker安装)#安装最新版本的Docker

    sudo apt install docker-ce docker-ce-cli containerd.io

    #等待安装完成

    #查看Docker版本

    sudo docker version

    #查看Docker运行状态

    sudo systemctl status docker
  4. (安装其余补齐工具)sudo apt-get install bash-completion

    sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
    source /etc/bash_completion.d/docker.sh

docker-compose的安装

# 下载最新版本的Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s )-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose

7.Halo的安装

创建容器。(halo的具体版本可在官网查询,修改后缀即可,监听的端口也可修改)

docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 -e JVM_OPTS="-Xmx256m -Xms256m" registry.fit2cloud.com/halo/halo:2.20

Halo的更新:(更新的版本均由官网版本决定)

1.停止并删除当前运行中的容器

docker stop halo
docker rm -f halo

2.备份数据

cp -r ~/.halo ~/.halo.1.4.11

3.拉取新的halo镜像:

docker pull halohub/halo:1.4.12

4.创建docker容器:

docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.12

8.宝塔面板的安装脚本

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

宝塔面板的删除脚本:

#下载卸载脚本
wget http://download.bt.cn/install/bt-uninstall.sh
#执行卸载脚本
sh bt-uninstall.sh

9.系统DD脚本(以linux为例)

curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || 

wget -O reinstall.sh $_
bash reinstall.sh

2.DD

bash reinstall.sh dd --img https://example.com/xxx.xz

3.重启到alpine等

bash reinstall.sh alpine --hold=1

4.重启到netboot

bash reinstall.sh netboot.xyz

5.自定义ISO安装

bash reinstall.sh windows \--image-name 'Windows 11 Enterprise LTSC 2024' \--iso'https://drive.massgrave.dev/zhcn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso'

10.哪吒面板

curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh

国内服务器使用镜像

curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh

后续启动面板安装的脚本:

./nezha.sh

11.serv00/ct8的一键脚本

bash <(curl -Ls https://raw.githubusercontent.com/Lyonnado/serv00-play/refs/heads/main/start.sh)

12.2048的docker 安装

拉取镜像:

docker pull quchaonet/2048

创建2048的docker容器:

docker run -d -p 1111:8080 --name 2048 quchaonet/2048:latest

13.Matomo的安装

创建一下安装的目录:

mkdir -p /root/data/docker_data/matomo
cd /root/data/docker_data/matomo

修改docker-compose.yml文件:

nano docker-compose.yml
version: "3"

services:
  db:
    image: mariadb
    command: --max-allowed-packet=64MB
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=Pas3W0rd
    env_file:
      - ./db.env

  app:
    image: matomo
    restart: always
    volumes:
      # - ./config:/var/www/html/config
      # - ./logs:/var/www/html/logs
      - /root/data/docker_data/matomo/matomo/html:/var/www/html
    environment:
      - MATOMO_DATABASE_HOST=db
    env_file:
      - ./db.env
    ports:
      - "8080:80"  # 8080可以更改为别的未使用的端口 lsof -i:8080 可以查看8080端口是否被使用
      - "8443:443" # 8443可以更改为别的未使用的端口 这边后续填到NPM的“Custom location”里

volumes:
  db:
  matomo:

修改db.env文件:

nano db.env
MYSQL_PASSWORD=Pas3W0rd
MYSQL_DATABASE=matomo
MYSQL_USER=matomo

MATOMO_DATABASE_ADAPTER=mysql
MATOMO_DATABASE_TABLES_PREFIX=matomo_
MATOMO_DATABASE_USERNAME=matomo
MATOMO_DATABASE_PASSWORD=Pas3W0rd
MATOMO_DATABASE_DBNAME=matomo
以上数据库内容都应当与自己设定的相同

确定没有问题之后:

docker-compose up -d

最后会部署在8080端口。

14.cloud-clipboard的部署

获取项目代码:

git clone https://github.com/TransparentLC/cloud-clipboard.git
cd cloud-clipboard

构建docker镜像:

docker build -t cloud-clipboard .

运行docker容器:

docker run -d -p 9501:9501 --name cloud-clipboard-app cloud-clipboard

最后在9501端口工作。

15.billionmail的安装脚本

cd /opt && git clone https://github.com/aaPanel/BillionMail && cd BillionMail && bash install.sh

16.Ubantu下的v2rayN

国外服务器:直接输入以下令名即可

sudo apt install -y qv2ray

国内服务器需要添加全局环境变量,使用镜像站进行安装:

export V2RAY_RELEASE_PROXY="https://ghproxy.net/https://github.com/v2fly/v2ray-core/releases/download" && bash <(curl -L https://ghproxy.net/https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

随后新建并修改config文件

sudo nano /etc/v2ray/config.json

例如:

{
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "your-id",
            "alterId": 64
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

启动:

sudo systemctl start v2ray

设置开机自启动:

sudo systemctl enable v2ray

17.Ubantu下安装v2rayA

安装v2ray内核:

curl -Ls https://mirrors.v2raya.org/go.sh | sudo bash
  1. 添加公钥:

wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/v2raya.asc   #添加公钥
echo "deb https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list    #添加v2rayA软件源
sudo apt update    #更新软件源

18.安装 v2rayA

sudo apt install v2raya
  1. 启动 v2rayA

sudo systemctl start v2raya.service

最后在localhost:2173端口工作。

19.使用Apache2部署webdav

更新安装包列表,安装Apache和密码管理工具:

sudo apt update
sudo apt install apache2 apache2-utils -y

WebDAV 功能需要 davdav_fs 两个模块。

# 启用 dav 和 dav_fs 模块
sudo a2enmod dav dav_fs

# 重启 Apache 使模块生效
sudo systemctl restart apache2

创建webdav目录并设置权限

# 创建一个用于 WebDAV 的目录,例如 /var/www/webdav
sudo mkdir -p /var/www/webdav

# 将该目录的所有权交给 Apache 的运行用户 (通常是 www-data)
# 这样 Apache 才有权限读写文件
sudo chown -R www-data:www-data /var/www/webdav

配置apache监听目标端口:

创建新的配置文件:

sudo nano /etc/apache2/sites-available/webdav.conf

填入以下内容:(以53858端口为例)

Listen 53858

<VirtualHost *:53858>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/webdav

    # 将 /webdav 这个 URL 路径别名指向实际的物理目录
    Alias /webdav /var/www/webdav

    <Directory /var/www/webdav>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    <Location /webdav>
        # 开启 WebDAV
        DAV On
        
        # 设置认证方式为基本认证
        AuthType Basic
        AuthName "WebDAV Restricted"
        
        # 指定密码文件的路径
        AuthUserFile /etc/apache2/webdav.passwd
        
        # 要求必须是合法的、在密码文件中存在的用户才能访问
        Require valid-user
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/webdav_error.log
    CustomLog ${APACHE_LOG_DIR}/webdav_access.log combined
</VirtualHost>

创建webdav用户名和密码:

sudo htpasswd -c /etc/apache2/webdav.passwd your_username

这里需要将your_username修改为用户名,随后会进行提示输入密码并确认密码,接着启动新的apache2程序并重启服务:

# 启用我们刚刚创建的 webdav.conf 配置文件
sudo a2ensite webdav.conf

# 重新加载 Apache 配置使其生效
sudo systemctl reload apache2

# 如果 reload 不行,可以尝试 restart
sudo systemctl restart apache2

20.Claude Code系列

基础环境安装:

sudo apt update && sudo apt install curl -y
command -v curl
curl --version
sudo apt install jq -y
command -v jq
jq --version
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
command -v nvm
nvm install --lts
nvm alias default lts/*
node -v
npm -v

添加第三方中转api:

nano claude_proxy.sh

修改并添加部分api的接口信息

#!/bin/bash

# --- 使用说明 ---
#
# 本脚本用于配置 Claude Code (claude.ai/code) 命令行工具,
# 使其通过一个代理服务来访问大语言模型。
#
# ## 功能:
# 1. 检查并安装 Claude Code。
# 2. 自动配置 `~/.claude/settings.json` 文件,设置代理所需的 API 地址和密钥。
# 3. 支持使用 `jq` 或 `python3` 更新 JSON 配置,如果两者都不可用,则会覆盖配置文件。
# 4. 在更新配置前,会自动备份旧的 `settings.json` 文件。
#
# ## 如何使用:
# 1. **修改变量**:
#    - 打开此脚本 (`claude_proxy.sh`)。
#    - 找到 "重点: 需要替换的内容" 部分。
#    - `API_KEY`: 填入你的 API 密钥。
#    - `OPEN_AI_URL`: 填入你的代理服务地址 (例如: "tbai.xin/v1")。
#    - `OPEN_MODEL`: 填入你希望使用的模型名称 (例如: "gemini-1.5-pro")。
#
# 2. **运行脚本**:
#    - 保存修改。
#    - 在终端中执行 `./claude_proxy.sh`。
#
# 3. **完成**:
#    - 脚本会自动完成所有配置。
#    - 现在你可以在命令行中使用 `claude` 命令,它将通过你配置的代理进行通信。
#
# ## 注意:
# - 请确保已安装 Node.js 和 npm,因为脚本可能需要使用 npm 来安装 Claude Code。
# - 脚本会修改你主目录下的 `.claude/settings.json` 文件。
#


## 交互式配置

# 默认值
DEFAULT_WORKER_URL="https://claude-code-proxy.suixifa.workers.dev"
DEFAULT_API_KEY="sk-"
DEFAULT_OPEN_AI_URL="tbai.xin/v1"
DEFAULT_OPEN_MODEL="gemini-2.5-pro"

# 提示用户输入配置
echo "=== Claude Code 代理配置 ==="
echo

read -p "请输入 Worker URL [默认: $DEFAULT_WORKER_URL]: " input_worker_url
WORKER_URL="${input_worker_url:-$DEFAULT_WORKER_URL}"

read -p "请输入 API Key [默认: $DEFAULT_API_KEY]: " input_api_key
API_KEY="${input_api_key:-$DEFAULT_API_KEY}"

read -p "请输入 OpenAI URL (不带http协议) [默认: $DEFAULT_OPEN_AI_URL]: " input_open_ai_url
OPEN_AI_URL="${input_open_ai_url:-$DEFAULT_OPEN_AI_URL}"

read -p "请输入模型名称 [默认: $DEFAULT_OPEN_MODEL]: " input_open_model
OPEN_MODEL="${input_open_model:-$DEFAULT_OPEN_MODEL}"

echo
echo "配置确认:"
echo "Worker URL: $WORKER_URL"
echo "API Key: ${API_KEY:0:10}..." 
echo "OpenAI URL: $OPEN_AI_URL"
echo "模型: $OPEN_MODEL"
echo

read -p "确认配置? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
    echo "配置已取消"
    exit 0
fi

# --- 常量 ---
# 定义脚本所需的常量
readonly CLAUDE_COMMAND="claude"
readonly NPM_PACKAGE="@anthropic-ai/claude-code"
readonly CLAUDE_DIR="$HOME/.claude"
readonly SETTINGS_FILE="$CLAUDE_DIR/settings.json"



readonly BASE_URL="$WORKER_URL/$OPEN_AI_URL/$OPEN_MODEL"
readonly API_KEY_HELPER="echo '$API_KEY'"

# --- 主脚本 ---

# 提示正在检查 Claude Code 是否已安装
echo "Checking for Claude Code installation..."

# 检查 claudecode 命令是否存在
if command -v "$CLAUDE_COMMAND" &> /dev/null; then
    # 如果存在,则打印一条消息
    echo "Claude Code is already installed."
else
    # 如果不存在,则提示开始安装
    echo "Claude Code not found. Installing..."

    # 检查 npm 是否可用
    if ! command -v npm &> /dev/null; then
        # 如果不可用,则打印错误并退出
        echo "Error: npm is not installed. Please install Node.js first."
        exit 1
    fi

    # 使用 npm 安装 Claude Code
    echo "Installing Claude Code via npm..."
    if ! npm install -g "$NPM_PACKAGE"; then
        # 如果安装失败,则打印错误并退出
        echo "Error: Failed to install Claude Code."
        exit 1
    fi

    # 提示安装成功
    echo "Claude Code installed successfully."
fi

# 提示开始配置
echo "Setting up Claude Code configuration..."

# 如果 .claude 目录不存在,则创建它
if [ ! -d "$CLAUDE_DIR" ]; then
    mkdir -p "$CLAUDE_DIR"
fi

# 检查 settings.json 是否已存在
if [ -f "$SETTINGS_FILE" ]; then
    # 如果存在,则提示开始更新
    echo "Settings file exists. Updating API configuration..."

    # 创建配置文件的备份
    cp "$SETTINGS_FILE" "$SETTINGS_FILE.backup"

    # 检查是否安装了 jq 用于操作 JSON
    if command -v jq &> /dev/null; then
        # 使用 jq 修改 JSON 文件
        # 它会备份旧的 API 密钥和 URL,并设置新的值
        jq --arg apiKey "$API_KEY" --arg baseUrl "$BASE_URL" --arg apiKeyHelper "$API_KEY_HELPER" \
           '.env.ANTHROPIC_API_KEY_OLD = .env.ANTHROPIC_API_KEY | .env.ANTHROPIC_BASE_URL_OLD = .env.ANTHROPIC_BASE_URL | .env.ANTHROPIC_API_KEY = $apiKey | .env.ANTHROPIC_BASE_URL = $baseUrl | .apiKeyHelper = $apiKeyHelper' \
           "$SETTINGS_FILE" > "$SETTINGS_FILE.tmp" && mv "$SETTINGS_FILE.tmp" "$SETTINGS_FILE"
    else
        # 如果未找到 jq,则尝试使用 Python
        echo "jq not found, attempting to use Python for modification..."

        # 检查 python3 是否可用
        if command -v python3 &> /dev/null; then
            # 使用 Python 脚本修改 JSON 文件
            python3 -c "
import json
import sys

settings_file = '$SETTINGS_FILE'
api_key = '$API_KEY'
base_url = '$BASE_URL'
api_key_helper = '$API_KEY_HELPER'

with open(settings_file, 'r') as f:
    try:
        data = json.load(f)
    except json.JSONDecodeError:
        # 如果文件为空或无效,则创建一个默认结构
        data = {'env': {}, 'permissions': {'allow': [], 'deny': {}}, 'apiKeyHelper': ''}

# 如果旧值存在,则进行备份
if 'env' in data and 'ANTHROPIC_API_KEY' in data['env']:
    data['env']['ANTHROPIC_API_KEY_OLD'] = data['env'].get('ANTHROPIC_API_KEY')
if 'env' in data and 'ANTHROPIC_BASE_URL' in data['env']:
    data['env']['ANTHROPIC_BASE_URL_OLD'] = data['env'].get('ANTHROPIC_BASE_URL')

# 设置新值
if 'env' not in data:
    data['env'] = {}
data['env']['ANTHROPIC_API_KEY'] = api_key
data['env']['ANTHROPIC_BASE_URL'] = base_url
data['apiKeyHelper'] = api_key_helper

with open(settings_file, 'w') as f:
    json.dump(data, f, indent=2)
"
        else
            # 如果 jq 和 python3 都没有找到,则覆盖配置文件
            echo "Warning: Neither jq nor python3 found. Overwriting settings file."
            cat > "$SETTINGS_FILE" << EOF
{
  "env": {
    "ANTHROPIC_API_KEY": "$API_KEY",
    "ANTHROPIC_BASE_URL": "$BASE_URL"
  },
  "permissions": {
    "allow": [],
    "deny": []
  },
  "apiKeyHelper": "$API_KEY_HELPER"
}
EOF
        fi
    fi

    # 提示更新成功
    echo "Updated existing settings file with new API configuration."
    echo "Original values backed up with _OLD suffix."
else
    # 如果 settings.json 不存在,则创建一个新的
    echo "Creating new settings.json..."
    cat > "$SETTINGS_FILE" << EOF
{
  "env": {
    "ANTHROPIC_API_KEY": "$API_KEY",
    "ANTHROPIC_BASE_URL": "$BASE_URL"
  },
  "permissions": {
    "allow": [],
    "deny": []
  },
  "apiKeyHelper": "$API_KEY_HELPER"
}
EOF
    # 提示创建成功
    echo "Created new settings file."
fi

# 提示配置完成
echo "Configuration complete!"
echo "Settings saved to: $SETTINGS_FILE"

# 测试代理连接
echo
echo "=== 测试代理连接 ==="
echo "正在测试代理连接..."

# 构建测试请求
TEST_URL="$BASE_URL/v1/messages"
TEST_HEADERS="Content-Type: application/json"
TEST_DATA='{
  "model": "'"$OPEN_MODEL"'",
  "max_tokens": 10,
  "messages": [
    {
      "role": "user",
      "content": "Hello"
    }
  ]
}'

# 使用curl测试连接
echo "测试URL: $TEST_URL"
echo "使用curl测试代理连接..."
echo

curl_response=$(curl -s -w "\n%{http_code}" \
  -X POST \
  -H "$TEST_HEADERS" \
  -H "x-api-key: $API_KEY" \
  -d "$TEST_DATA" \
  "$TEST_URL")

# 提取HTTP状态码
http_code=$(echo "$curl_response" | tail -n1)
response_body=$(echo "$curl_response" | sed '$d')

if [ "$http_code" = "200" ]; then
    echo "✅ 代理连接成功!"
    echo "响应: $response_body"
else
    echo "❌ 代理连接失败"
    echo "HTTP状态码: $http_code"
    echo "响应: $response_body"
fi

echo
echo "现在可以使用 'claude' 命令通过代理访问模型了!"

添加脚本权限并准许安装claude code相关软件:

chmod +x ./claude_proxy.sh
./claude_proxy.sh

claude code浏览器可视化:

git clone https://github.com/siteboon/claudecodeui.git
cd claudecodeui
npm install
cp .env.example .env
#根据自己的需要修改.env配置文件
# Development mode (with hot reload)
npm run dev