一键安装脚本# 登录root sudo -i # 更新 apt update # 升级 apt upgrade # 按照工具curl和vim apt install -y curl vim # 官方脚本, 指定使用Aliyun加速, root权限执行 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 查看安装的docker版本 docker --version普通用户授权docker权限# 注意登录用户身份 sudo usermod -aG docker $USER # 需要登出再重新登录才生效(实测需要重启生效) # 没有生效前 id 与 id $USER 显示不一致 id $USER 或 cat /etc/group | grep docker # 查看 newgrp - docker # 更新用户组 很重要(临时生效) docker ps # 测试docker命令是否可以使用sudo正常使用(可选)配置国内源# 配置aliyun镜像加速 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://docker.1ms.run", "https://docker.m.daocloud.io"] } EOF systemctl daemon-reload systemctl restart docker测试源是否能用# 测试镜像拉取&容器运行 docker run hello-world安装docker compose参见官方文档: https://docs.docker.com/compose/install/linux/#install-using-the-repository针对linux平台, 仓库安装脚本如下# Debian/Ubuntu sudo apt-get update sudo apt-get install docker-compose-plugin # RPM sudo yum update sudo yum install docker-compose-plugin # 验证 docker compose version docker --version docker info按照portainer管理工具参考链接https://docs.portainer.io/start/install-ce/server/docker/linux# 1. 拉取镜像 docker pull portainer/portainer-ce:latest # 2.创建磁盘卷(可选) docker volume create portainer_data # 3. 创建容器 # 端口组合二选一即可, 粘贴代码前注意先删除 自#之后的注释, 避免格式问题 docker run -d --name portainer --restart=always \ -p 8000:8000 -p 9443:9443 \ # https使用, 仅使用http的话可以尝试注释掉 -p 9000:9000 \ # 使用传统的http端口 -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer-ce:latest汉化版本作者地址：https://hub.docker.com/r/6053537/portainer-cedocker volume create portainer_data docker run -d --name portainer-zh --restart=always \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data 6053537/portainer-ce:latest以上摘抄至https://zoe.red/2024/174.html ，感谢大佬
配置文件docker-compose.yml使用docker-compose创建项目，docker-compose.yml内容如下：services: mariadb: image: linuxserver/mariadb container_name: mariadb environment: - PUID=1000 - PGID=1001 - MYSQL_ROOT_PASSWORD=110119asdF! - MYSQL_DATABASE=typecho - MYSQL_USER=typecho - MYSQL_PASSWORD=TypechoPass123! - TZ=Asia/Shanghai volumes: - /vol2/1000/docker/MariaDB/config:/config ports: - 33306:3306 networks: - mynet restart: unless-stopped adminer: image: adminer:latest container_name: adminer environment: - ADMINER_DEFAULT_SERVER=mariadb ports: - 38079:8080 networks: - mynet depends_on: - mariadb restart: unless-stopped typecho: image: joyqi/typecho:nightly-php8.2-apache container_name: typecho-server # user: "1000:1001" restart: always environment: - TYPECHO_SITE_URL=http://192.168.199.20 - TYPECHO_DB_ADAPTER=Pdo_Mysql - TYPECHO_DB_HOST=mariadb - TYPECHO_DB_PORT=3306 - TYPECHO_DB_NAME=typecho - TYPECHO_DB_USER=typecho - TYPECHO_DB_PASSWORD=TypechoPass123! ports: - 38080:80 networks: - mynet depends_on: - mariadb volumes: - /vol2/1000/docker/Typecho/usr:/app/usr # - /vol2/1000/docker/Typecho/uploads:/app/usr/uploads # - /vol2/1000/docker/Typecho/config.inc.php:/app/config.inc.php networks: mynet: name: mynet 以上yml文件的原始文件有问题，注释掉那三行后，出现/app/usr/uploads/权限问题，加入以下命令解决# 进入容器检查上传目录权限 docker exec typecho-server ls -la /app/usr/uploads/ # 在容器内直接设置权限（使用 root 权限） docker exec -u root typecho-server chown -R www-data:www-data /app/usr/uploads/ docker exec -u root typecho-server chmod -R 777 /app/usr/uploads/ # 验证权限 docker exec typecho-server ls -la /app/usr/uploads/ # 测试写入权限 docker exec typecho-server touch /app/usr/uploads/test_file.txt docker exec typecho-server ls -la /app/usr/uploads/然后我就问了一下ChatGPT和Deepseek为什么会这样，它的回答如下：ChatGPT的分析从你提供的内容来看，解决成功的原因是你通过手动调整了容器内 /app/usr/uploads/ 目录的 权限问题，这导致了最初的 500 错误 和 权限拒绝 问题。关键点分析：权限问题原本 Typecho 容器启动时，尝试写入 /app/usr/uploads/ 和其他目录（比如 /app 目录），但是容器中的默认用户（通常是 www-data）没有足够的权限写入这些目录。在你没有挂载这些目录之前，镜像内部自带的目录结构是完好的，但一旦你挂载了宿主机的目录，特别是像 uploads 这样的目录，它可能默认是宿主机上 root:root 权限，导致容器无法正确写入。通过命令修改权限解决问题docker exec -u root typecho-server chown -R www-data:www-data /app/usr/uploads/ docker exec -u root typecho-server chmod -R 777 /app/usr/uploads/chown -R www-data:www-data：把 /app/usr/uploads/ 目录的拥有者和组改成容器内运行的默认用户（www-data），这确保了 Typecho 进程能访问这些文件。chmod -R 777：把权限设置为可读写执行，确保容器内的进程（如 Apache 或 PHP）有足够权限进行文件操作。通过 ls 和 touch 命令确认修改你通过 ls 命令检查了 /app/usr/uploads/ 目录，确认权限修改成功。使用 touch 命令尝试创建一个文件 test_file.txt，并成功创建，进一步确认了容器内的写入权限问题已解决。总结原因：权限问题：因为宿主机上的挂载目录（如 /vol2/1000/docker/Typecho/usr）默认权限是 root:root，而容器的 PHP/Apache 是以 www-data 用户身份运行，导致容器无法写入这些目录。你通过手动修改权限后，解决了容器与宿主机之间的权限问题，使得 Typecho 能够正常操作这些目录。防止未来出现类似问题：确保正确的权限设置 如果以后继续使用挂载卷，确保挂载的目录具有正确的权限。你可以在挂载前设置权限：sudo chown -R 1000:1001 /vol2/1000/docker/Typecho/usr sudo chmod -R 777 /vol2/1000/docker/Typecho/uploads这样在启动时，容器就能自动访问这些目录。不直接使用 777 权限 虽然 777 可以解决权限问题，但它会让文件对所有用户可读写。建议只给容器运行用户（如 www-data）提供权限：sudo chown -R www-data:www-data /vol2/1000/docker/Typecho/uploadsDocker 用户配置 如果你要使用挂载卷，建议通过 docker-compose.yml 中的 user 配置明确指定容器内的用户，确保宿主机和容器的用户一致，避免权限不匹配的问题。Deepseek的分析成功原因分析1. 移除了有问题的配置您注释掉了以下有问题的配置：yaml# user: "1000:1001" # ← 这行阻止了容器内初始化脚本以root权限运行 # - /vol2/1000/docker/Typecho/uploads:/app/usr/uploads # ← 这会导致重复挂载 # - /vol2/1000/docker/Typecho/config.inc.php:/app/config.inc.php # ← 可能覆盖重要文件2. 正确的挂载策略现在只挂载了：yamlvolumes: - /vol2/1000/docker/Typecho/usr:/app/usr这样：容器内的 /app/usr 目录被持久化到宿主机但容器仍然可以以自己的用户（包括root）运行初始化脚本不会覆盖其他核心文件3. 权限修复的关键步骤您执行的命令解决了根本问题：bash# 将uploads目录的所有权改为Apache运行用户 docker exec -u root typecho-server chown -R www-data:www-data /app/usr/uploads/ # 设置完全可读写权限 docker exec -u root typecho-server chmod -R 777 /app/usr/uploads/为什么之前会失败？用户配置冲突：user: "1000:1001" 让容器以非root用户运行，但初始化脚本需要root权限来复制文件和设置权限挂载覆盖：单独挂载uploads目录可能导致路径冲突或权限问题所有权不匹配：宿主机目录的所有权（zhang:Users）与容器内Apache用户（www-data）不匹配现在的健康状态从您的测试结果看：✅ /app/usr/uploads/ 目录存在且可访问✅ 所有权正确设置为 www-data:www-data✅ 权限设置为 777（完全可读写）✅ 能够成功创建测试文件 test_file.txt建议的最终配置保持当前的简化配置：yamltypecho: image: joyqi/typecho:nightly-php8.2-apache container_name: typecho-server restart: always environment: - TYPECHO_SITE_URL=http://192.168.199.20 - TYPECHO_DB_ADAPTER=Pdo_Mysql - TYPECHO_DB_HOST=mariadb - TYPECHO_DB_PORT=3306 - TYPECHO_DB_NAME=typecho - TYPECHO_DB_USER=typecho - TYPECHO_DB_PASSWORD=TypechoPass123! ports: - 38080:80 networks: - mynet depends_on: - mariadb volumes: - /vol2/1000/docker/Typecho/usr:/app/usr # 只挂载这个安装完成后的操作安装完成后，可以考虑恢复更安全的权限：bash# 设置更安全的权限（但保持可写） docker exec -u root typecho-server chmod -R 755 /app/usr/ docker exec -u root typecho-server chmod -R 775 /app/usr/uploads/现在您可以刷新 Typecho 安装页面，应该可以正常完成安装了！
要实现Ubuntu 的远程桌面，主要方法是在Ubuntu 上安装和配置 xrdp 服务器，然后使用Windows 的“远程桌面连接”工具通过RDP 协议进行连接。操作步骤包括在Ubuntu 终端中执行 sudo apt update 和 sudo apt install xrdp 安装软件，接着开放防火墙的3389 端口。最后，在Windows 中输入Ubuntu 的IP 地址和用户名密码即可连接。在Ubuntu 上进行设置安装xrdp：:打开终端（Ctrl+Alt+T）。执行以下命令更新软件包列表并安装xrdp：代码sudo apt update sudo apt install xrdp启动并设置xrdp 服务：:启动xrdp 服务：代码sudo systemctl start xrdp设置服务开机自启。代码sudo systemctl enable xrdp开放防火墙端口：:确保防火墙允许RDP 流量通过（默认端口为3389）：代码sudo ufw allow 3389 sudo ufw enable # 如果防火墙未启用查看Ubuntu IP 地址：:在终端输入 ip address 或 hostname -I 来查找设备的IP 地址，以便从Windows 进行连接。在Windows 上进行连接打开远程桌面连接：:在Windows 搜索框中输入“远程桌面连接”并打开该应用。输入连接信息：:在“计算机”字段中，输入您在Ubuntu 系统上找到的IP 地址。进行连接：:点击“连接”。在出现的登录界面中，输入您的Ubuntu 用户名和密码，然后点击“确定”或“OK”。连接成功后，您就可以像操作本地系统一样在Windows 中远程控制您的Ubuntu 桌面了。﻿参考教程：https://www.cnblogs.com/xxllx/p/17730861.htmlhttps://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/use-remote-desktop?tabs=azure-clihttps://blog.csdn.net/u010522887/article/details/138137107
在 Ubuntu 上安装 Docker 和 Docker Compose 是一个常见的操作。以下是基于最新稳定版本的详细步骤（适用于 Ubuntu 18.04 及以上版本，包括 20.04, 22.04, 24.04）。第一步：安装 Docker1. 更新系统包列表bash深色版本sudo apt update2. 安装必要的依赖包bash深色版本sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release3. 添加 Docker 的官方 GPG 密钥bash深色版本curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg4. 添加 Docker 的 APT 软件源bash深色版本echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null注意：$(lsb_release -cs) 会自动获取你的 Ubuntu 版本代号（如 jammy, focal, noble 等）。5. 更新 APT 包索引bash深色版本sudo apt update6. 安装 Docker Enginebash深色版本sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这会安装 Docker 引擎、CLI、containerd 和官方插件（包括 docker-compose 插件）。7. 验证 Docker 是否安装成功bash深色版本sudo docker --version输出应类似：深色版本Docker version 24.0.7, build afdd53b8. （可选）让当前用户无需 sudo 使用 Dockerbash深色版本sudo usermod -aG docker $USER注意：执行后需重新登录或重启终端，使用户组变更生效。第二步：安装 Docker Compose（如果未通过插件安装）从 Docker 20.10+ 开始，推荐使用 docker-compose-plugin，它允许你直接使用 docker compose 命令（注意中间是空格，不是短横线）。✅ 推荐方式：使用插件（已安装）bash深色版本docker compose version如果上一步已安装 docker-compose-plugin，你应该能看到版本信息。使用方式：docker compose up, docker compose ps, docker compose down 等。❌ 传统方式（不推荐，仅作备选）如果你需要独立的 docker-compose 二进制文件（旧方式）：bash深色版本# 下载最新版 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 # 验证 docker-compose --version注意：这种方式已逐渐被 docker compose 插件取代。第三步：启动并启用 Docker 服务bash深色版本# 启动 Docker 服务 sudo systemctl start docker # 设置开机自启 sudo systemctl enable docker第四步：测试运行bash深色版本docker run hello-world如果看到欢迎信息，说明安装成功。常见问题权限问题：确保用户已加入 docker 组，并重新登录。源错误：检查 Ubuntu 版本代号是否支持（如 noble 是 24.04）。网络问题：国内用户可考虑使用镜像源（如阿里云、中科大源）。总结工具推荐命令Dockerdocker --versionDocker Composedocker compose version（注意是空格）✅ 建议使用 docker compose（插件形式），而非旧的 docker-compose（带短横线）。如有特定版本需求，可指定安装版本，例如：bash深色版本apt install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy祝你安装顺利！一些问题的解决办法拉取错误的解决办法，类似如下错误Unable to find image 'linuxserver/mariadb:latest' locally docker: Error response from daemon: Head "https://registry-1.docker.io/v2/linuxserver/mariadb/manifests/latest": EOF.说明 Docker 无法从 Docker Hub 拉取镜像，根本原因是： 网络问题，你的路由器无法正常访问 registry-1.docker.io（Docker Hub）解决方案：步骤1，使用国内镜像加速器添加 Docker 镜像加速器（如阿里云、网易、腾讯等）# 编辑或创建 Docker 配置文件 mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://hub-mirror.c.163.com", "https://reg-mirror.qiniu.com" ], "insecure-registries": [], "max-concurrent-downloads": 3, "data-root": "/var/lib/docker" } EOF步骤2，确保 /var/lib/docker 目录存在mkdir -p /var/lib/docker步骤3， 重启 Docker 服务/etc/init.d/docker restart步骤4，检查状态/etc/init.d/docker status如果看到 running，说明成功了！步骤5，验证 Docker 是否正常docker info你应该能看到：Registry Mirrors: https://mirror.ccs.tencentyun.com https://hub-mirror.c.163.com https://reg-mirror.qiniu.com说明镜像加速已生效验证 daemon.json 是否合法运行以下命令检查文件内容：cat /etc/docker/daemon.json输出应该是：{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://hub-mirror.c.163.com", "https://reg-mirror.qiniu.com" ], "insecure-registries": [], "max-concurrent-downloads": 3, "compress": true, "data-root": "/var/lib/docker" }
1，修改PVE地址进入PVE>_Shell，输入以下命令vi /etc/network/interfaces找到以下信息，按说明修改auto vmbr0 iface vmbr0 inet static address 192.168.200.6/24 # 这是PVE的地址，改为你需要地址即可 gateway 192.168.200.7 # 这是网管的地址，改为主路由地址或者旁路由科学地址 bridge-ports enp1s0 bridge-stp off bridge-fd 0按i键修改，修改后内容如下auto vmbr0 iface vmbr0 inet static address 192.168.199.6/24 # 从192.168.200.6改为192.168.199.6 gateway 192.168.199.7 # 我改为了我的旁路由科学地址 bridge-ports enp1s0 bridge-stp off bridge-fd 0按esc返回，输入以下命令保存退出:wq假如修改的时候出问题，客人输入:q!不保存强制退出，加！是强制退出的意思假如使用笔记本输入，配合Fn键使用2，该web登录地址输入以下命令vi /etc/issue找到以下信息，按说明修改https://192.168.200.6:8006/ # 这是PVE的web地址，改为你需要地址即可，我改为了192.168.199.6:8006按esc返回，输入以下命令保存退出:wq3，修改host输入以下命令vi /etc/hosts找到下边信息192.168.200.6 pve.lan pve # 这是PVE的host地址，改为你需要地址即可，我改为了192.168.199.6按esc返回，输入以下命令保存退出:wq
在爪云创建应用部署VPS应用名为vps，拉取镜像ghcr.io/vevc/ubuntu:25.7.14，cpu给0.5，memory给512m，开发22端口，给TCP协议配置环境变量SSH_USER=zhang SSH_PASSWORD='ubuntu!23'填加家目录的存储空间/home/zhang以上配置完成部署来使运行完成后复制TCP协议，取域名部分来配置SSH工具tcp://tcp.ap-southeast-1.clawcloudrun.com:46430 /* 远程主机选择域名tcp.ap-southeast-1.clawcloudrun.com，端口选择46430，指定用户名用环境变量里自建的zhang */登录后先使家目录初始化ls -l /home sudo chown -R $USER:$USER /home/$USER然后终端字体颜色美化、ls -l 命令别名设置等curl -sk -o ~/.bashrc https://raw.githubusercontent.com/vevc/ubuntu/refs/heads/main/.bashrc curl -sk -o ~/.profile https://raw.githubusercontent.com/vevc/ubuntu/refs/heads/main/.profile当用ls命令的时候发现多了一个文件夹lost+found，运行以下命令移除即可rm -rf lost+found/注意事项需要长期保存的数据，请一定存放在用户家目录，重要数据定期备份通过 apt install 安装的应用重启后会丢失（需要在构建镜像时安装）查询家目录存储信息df -h使用 supervisor 管理容器进程，实现应用开机自启、自动保活、cron 规则持久化1，准备配置文件创建文件夹mkdir ~/boot # 家目录文件可持久化保存supervisord初始化，复制下边内容进入ssh，回车即可cat > /home/$USER/boot/supervisord.conf << EOF [supervisord] nodaemon=true logfile=/tmp/supervisord.log logfile_maxbytes=5MB logfile_backups=3 loglevel=info [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true [program:cron] command=/usr/sbin/cron -f autostart=true autorestart=true [program:init] command=/home/$USER/boot/init.sh autostart=true startsecs=0 ; init.sh 开机自启仅运行一次 autorestart=false startretries=0 user=$USER [program:http-server] command=python3 -m http.server 8080 autostart=true autorestart=true user=$USER EOF查看内容cat ~/boot/supervisord.conf输出user=zhang就是正常，进行下一步脚边初始化cat > /home/$USER/boot/init.sh << EOF #!/usr/bin/env sh (crontab -l 2>/dev/null; echo "* * * * * /home/$USER/cron.sh") | crontab - EOF chmod +x /home/$USER/boot/init.sh然后查看脚边具体内容cat ~/boot/init.sh输出 #!/usr/bin/env sh (crontab -l 2>/dev/null; echo "* * * * * /home/zhang/cron.sh") | crontab -表示定时认为规则添加成功，每分钟执行一次2，更新容器启动参数进入爪云点击项目的update，添加下边参数Arguments: ["supervisord", "-c", "/home/zhang/boot/supervisord.conf"]（注意路径中的用户名）添加内容如下，不要弄错["supervisord", "-c", "/home/zhang/boot/supervisord.conf"]这里意思是容器启动的时候取执行supervisord，并加载配置文件supervisord.conf完成后点击update，正常running状态重新登录SSH然后检查状态ps aux检查定时任务crontab -l然后查询日志是否有输出cat cron.log我的输出错误，暂不检查原因，先进行下一步3,添加supervisorctl登录ssh工具进入boot文件夹找到supervisord.conf双计打开，添加以下内容[unix_http_server] file=/var/run/supervisor.sock chmod=0700 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface查询supervisorctl状态看是否有异常sudo supervisorctl statussupervisorctl 常用命令sudo supervisorctl status sudo supervisorctl restart cron sudo supervisorctl update http-server sudo supervisorctl help sudo supervisorctl help stop sudo supervisorctl # 交互模式部署easytier1，安装脚边到vpscd ~ wget -O easytier-linux-x86_64.zip https://github.com/EasyTier/EasyTier/releases/download/v2.2.4/easytier-linux-x86_64-v2.2.4.zip unzip easytier-linux-x86_64.zip mv easytier-linux-x86_64 easytier rm easytier-linux-x86_64.zip cd easytier快速使用~/easytier/easytier-core~/easytier/easytier-core --hostname claw-cloud-vps -i 10.8.8.99 -l ws://0.0.0.0:11011 --network-secret 110119asd --no-tun创建配置文件cat > /home/$USER/easytier/config.toml << EOF hostname = "claw-cloud-vps" ipv4 = "10.8.8.99" listeners = ["ws://0.0.0.0:11011/"] rpc_portal = "0.0.0.0:15888" [network_identity] network_name = "default" network_secret = "110119asd" [flags] no_tun = true EOF执行配置文件cat ~/easytier/config.toml验证配置文件~/easytier/easytier-core -c ~/easytier/config.toml假如正常，但这些是前台运行的，让它在后台运行进行下一步用supervisord来管理easytier使用 Supervisor 管理并启动，把下边内容添加到boot目录内的supervisord.conf内[program:easytier] command=/home/zhang/easytier/easytier-core -c /home/zhang/easytier/config.toml autostart=true autorestart=true user=zhang保存后更新添加easytier使生效sudo supervisorctl update easytier检验easytier是否生效sudo supervisorctl status登录爪云添加一个11011的https协议端口复制域名https://ycmphtwbzkxk.ap-southeast-1.clawcloudrun.com配置客户端Windows 版本下载：https://github.com/EasyTier/EasyTier/releases/download/v2.2.4/easytier-windows-x86_64-v2.2.4.zip其他版本下载：https://github.com/EasyTier/EasyTier/releases/tag/v2.2.4公司电脑配置解压下载好的easytier，进入目录文件夹，创建文件config.toml,粘贴下边内容进去hostname = "company-pc" ipv4 = "10.8.8.2" dhcp = false listeners = [] mapped_listeners = [] exit_nodes = [] rpc_portal = "0.0.0.0:15888" [network_identity] network_name = "default" network_secret = "110119asd" [[peer]] uri = "wss://ycmphtwbzkxk.ap-southeast-1.clawcloudrun.com:443" [flags]用管理员进入cmd，记录easytier的目录，输入下边命令启动easytiereasytier-core.exe -c config.toml查询节点状态看是否添加成功easytier-cli.exe peer安装 Windows 系统服务，实现开机自启NSSM 工具下载地址：https://nssm.cc/download管理员进入CMD，粘贴下边内容安装服务nssm install EasyTier "D:\Program Files\easytier\easytier-core.exe" nssm set EasyTier AppParameters "-c config.toml"查看或编辑服务nssm edit EasyTier启动服务nssm start EasyTier卸载服务nssm remove EasyTier安装完成后在前端cmd启动的进程里用contrl+c键关闭进程，进入windows的“服务”里双击Easytier启动服务，然后重启电脑测试是否开机自启动以上内容教程地址：https://www.youtube.com/watch?v=suc84vGW0cQ 视频教程https://vevc.dpdns.org/archives/8.html 文字教程设计的网址：Claw cloud 注册地址：https://console.run.claw.cloud/signin?link=TSWVWVN3G294容器 VPS 项目地址：https://github.com/vevc/ubuntuEasyTier 官网及项目地址：https://easytier.cnhttps://github.com/EasyTier/EasyTier
宽度防溢出原始代码/* 自定义bbtalk的宽度当aside隐藏时自适应recent-posts的宽度 */ div#content-inner.layout { display: flex; max-width: 1400px; } div#recent-posts.recent-posts { max-width: 1400px; flex: 1; } div#main_top.main_top { width: calc(100% - 0%); /* initial width when aside is visible */ } @media (max-width: 1300px) { div#main_top.main_top { width: 100%; /* adjust width when aside is hidden */ } } /* Hide aside for demonstration */ div#aside-content.aside-content.hidden { display: none; } /* Adjust .recent-post-items width when aside is hidden */ div#recent-posts.recent-posts.nc.adjust { width: 77%; }解决思路我帮你分析了一下，你这个 .recent-posts 超出屏幕边界的原因，很可能是 父容器和子容器的宽度计算叠加，再加上 max-width 和 width 的混用，导致在某些情况下总宽度超过了视口（viewport）。父容器 #content-inner.layout你给它 max-width: 1400px，但它本身是 display: flex，如果子元素宽度写死（比如 77%）+ 另一个子元素的宽度（哪怕是 0%），可能会超出。.recent-posts 的宽度冲突你同时给了 max-width: 1400px 和 width: 77%（在 .nc.adjust 时），这会让它在某些屏幕宽度下计算结果大于父容器宽度。box-sizing 影响如果 .recent-posts 或父容器有 padding / border，在 box-sizing: content-box 下会额外增加宽度，导致溢出。flex 子项默认最小宽度在 flex 布局中，子项的 min-width 默认是 auto，会根据内容撑开，可能突破父容器。你可以这样改，保证它不会超出屏幕边界：div#content-inner.layout { display: flex; max-width: 100%; /* 让它跟随屏幕宽度 */ box-sizing: border-box; overflow-x: hidden; /* 防止横向滚动条 */ } div#recent-posts.recent-posts { flex: 1; max-width: 100%; /* 避免超过父容器 */ box-sizing: border-box; } div#recent-posts.recent-posts.nc.adjust { width: 100%; /* 或者用 flex: 1; 让它自适应 */ } div#main_top.main_top { flex: 1; /* 用 flex 代替 calc 宽度计算 */ min-width: 0; /* 防止内容撑开 */ } 核心思路父容器用 max-width: 100%，不要固定 1400px，这样在小屏下不会超出。子容器用 flex: 1 而不是百分比宽度，让它自动分配空间。加 min-width: 0，防止 flex 子项被内容撑破。用 box-sizing: border-box，让 padding 和 border 计入宽度计算。如果你想保留 1400px 的最大宽度，但又不想超出，可以这样：div#content-inner.layout { display: flex; max-width: 1400px; margin: 0 auto; /* 居中 */ box-sizing: border-box; } div#recent-posts.recent-posts { flex: 1; min-width: 0; } 我建议你先试 min-width: 0 + flex: 1 这个组合，很多 flex 溢出问题都是它引起的。 如果你愿意，我可以帮你直接改成 既保留 1400px 最大宽度，又在小屏下自适应 的完整 CSS，这样就不会再出现超出的问题。目标保留最大内容宽度 1400px（居中显示）。小屏下自适应，不产生横向溢出。修复 .recent-posts 在 flex 布局中被内容撑破的情况。/* 1) 全局安全网：边框盒模型 + 去除默认外边距 */ html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body { margin: 0; } /* 2) 容器：最大宽度 1400px，左右内边距形成安全边距，小屏自适应 */ div#content-inner.layout { display: flex; width: 100%; max-width: 1400px; margin: 0 auto; /* 居中 */ padding: 0 16px; /* 两侧安全边距，避免贴屏 */ gap: 24px; /* 主区与侧栏间距 */ overflow-x: hidden; /* 防止偶发横向滚动 */ } /* 3) 主区 recent-posts：弹性自适应，禁止被内容撑破 */ div#recent-posts.recent-posts { flex: 1 1 auto; /* 占满剩余空间 */ min-width: 0; /* 关键：允许内容在容器内换行/收缩 */ max-width: 100%; } /* 4) 顶部主容器（如果存在）：不要用 calc，转为弹性适配 */ div#main_top.main_top { flex: 1 1 auto; min-width: 0; /* 同样防止溢出 */ width: auto !important; /* 清除旧的 width: calc(...) 影响 */ } /* 5) 侧栏隐藏时：直接移出布局 */ div#aside-content.aside-content.hidden { display: none !important; } /* 6) 覆盖旧规则：以前 77% 会导致在某些宽度下溢出，统一改为自适应 */ div#recent-posts.recent-posts.nc.adjust { width: 100% !important; /* 或者删除该选择器，保持上面的 flex 行为 */ max-width: 100%; min-width: 0; } /* 7) 小屏断点：栈式布局，组件全宽 */ @media (max-width: 1024px) { div#content-inner.layout { flex-direction: column; gap: 16px; padding: 0 12px; /* 略收窄安全边距 */ } div#recent-posts.recent-posts, div#main_top.main_top { width: 100% !important; max-width: 100%; } } /* 8) 图片与内嵌媒体防溢出 */ img, video, canvas, iframe { max-width: 100%; height: auto; display: block; } /* 9) 文章卡片内部可滚区域（如有复杂代码块/表格） */ div#recent-posts.recent-posts .card, div#recent-posts.recent-posts .post-item { min-width: 0; /* 防止子项 min-content 尺寸撑破布局 */ overflow-wrap: anywhere; /* 长单词/URL 断行 */ } 说明核心修复点是给 flex 子项加上 min-width: 0，并取消百分比宽度叠加（例如旧的 77%）。这能从根源解决 recent-posts 被内容撑出屏幕的问题。保留了 max-width: 1400px + margin: 0 auto 的居中策略，同时通过 width: 100% 和左右 padding 实现小屏自适应与安全边距。使用一个断点将布局切到纵向栈式。你可以把 1024px 调整为你主题常用的断点（如 1200px 或 992px）。修改后的代码/* 自定义bbtalk的宽度当aside隐藏时自适应recent-posts的宽度 */ div#content-inner.layout { display: flex; max-width: 1400px; } div#recent-posts.recent-posts { min-width: 0; /* 只是改了这里，防止 flex 子项被内容撑破 */ flex: 1; } div#main_top.main_top { width: calc(100% - 0%); /* aside 可见时的初始宽度 */ } @media (max-width: 1300px) { div#main_top.main_top { width: 100%; /* aside 隐藏时调整宽度 */ } } /* 隐藏 aside 进行演示 */ div#aside-content.aside-content.hidden { display: none; } /* 隐藏 aside 时调整 .recent-post-items 宽度 */ div#recent-posts.recent-posts.nc.adjust { width: 77%; }
登录爪云选择美国区创建app，不赘述创建的app名称随便命名，例如hellow-hui仓库用jonssonyan/h-ui:latest设置如下图第一个端口设置8081，第二个设置20000-40000之间的，选择UDP然后创建存储空间/h-ui/bin和/h-ui/data，创建完成后部署即可完成后进入命令界面然后分别输入以下命令cd / && ls -lacd h-ui增加opensslapk update && apk add openssl利用openssl创建证书和密钥，注意CN=后边的地址改成爪云生产的udp地址openssl req -x509 -newkey rsa:4096 -keyout hy2server.key -out hy2server.crt -days 99999 -nodes -subj "/CN=udp.us-east-1.clawcloudrun.com"查看密钥是否已经生成ls -la进入file manager下载密钥到本机自定义域名，不赘述。之后登录H-UI面板配置监听端口，用自定义的UDP端口上传证书和密钥，打开开关，选择最新版本回到H-UI首页复制节点,如图示这样修改，然后粘贴到V2RAYN里，跳过证书验证改为true即可如下图示修改：假如设置了自定义域名，把改动的位置改为自定义域名也可.
Alibaba PC Safe Service是什么？ Alibabaprotect是优酷客户端附带阿里巴巴插件引起的，此进程不仅会占用大量内存和cpu性能，还会在后台悄悄的监控你的上网过程，然后给你推送相关的广告。而且Alibabaprotect非常难删除，删掉后重启电脑又会自动出现。 彻底删除Alibaba PC Safe Service的方法 1. win+s打开搜索框，输入服务（切记以管理员方式运行），找到Alibaba PC Safe Service——>属性，然后启动类型设置为手动，再把恢复那里全部改成无操作 ——>确定。 2. win+s打开搜索框，输入命令提示符（切记以管理员方式运行），键入 sc delete AlibabaProtect，回车就OK了，这时你会发现服务仍然在运行，而且文件夹仍然无法删除，这时关机重启就行了。 3. 开机后，打开任务管理器没有发现Alibaba PC Safe Service进程，说明成功关闭了，这时你就可以删除Alibaba PC Safe Service了。