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:
(准备安装)#安装前先卸载操作系统默认安装的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
(安装源)#添加 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
(docker安装)#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status docker
(安装其余补齐工具)
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
添加公钥:
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
启动 v2rayA
sudo systemctl start v2raya.service
最后在localhost:2173端口工作。
19.使用Apache2部署webdav
更新安装包列表,安装Apache和密码管理工具:
sudo apt update
sudo apt install apache2 apache2-utils -y
WebDAV 功能需要 dav
和 dav_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