本文将部署一个“2026 赛博马年祝福页”包含全屏黑客帝国流光特效、鼠标点击烟花
效果展示:

6.2 和 第七大步 立🐎更新ing
一、加SWAP(新手忽略)
注意:此步骤新手可直接跳过,直接进行第二步
若服务器内存 ≤ 1G 可添加 swap虚拟内存,一般为内存的 1-2 倍即可
设置 SWAP 可以用脚本:
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
填写18后,选择1,填写2048或者1024,然后回车
二、更新工具
2.1、切换到 root 用户
sudo -i
2.2、升级 packages
apt update -y
2.3、安装常用的工具
apt install wget curl sudo vim git -y
三、安装 Docker 环境(非大陆)
此步为非大陆vps安装docker的步骤,
大陆服务器的 三、四 步骤请划至最下面 1.7、补充
3.1、安装
wget -qO- get.docker.com | bash
3.2、查看 docker 版本
docker -v
3.3、设置开机自动启动
systemctl enable docker
四、安装 Docker-compose(非大陆)
4.1、安装 compose 插件
apt install docker-compose-plugin -y
4.2、查看版本
docker compose version #查看 docker compose 版本
4.3、修改 Docker 配置(可选,新手忽略并跳过此步)
增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘
cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}
EOF
4.4、重启docker
systemctl restart docker
五、安装项目(赛博马年·特供版)
5.1、创建目录
mkdir -p /root/data/docker_data/horse_year
5.2、进入目录
cd /root/data/docker_data/horse_year
5.3、创建网络环境(关键)
为了防止出现 network not found 报错,我们需要先手动建立一个专用网络。
docker network create halo_network
5.4、编写网页源文件
这里我们将创建一个 index.html。包含了:黑客帝国代码雨、自动打字机效果等等
nano index.html
在 nano 中粘贴以下HTML全部代码:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>2026 System Override</title>
<style>
body { margin: 0; overflow: hidden; background: #000; color: #0F0; font-family: 'Courier New', monospace; }
canvas { display: block; }
#overlay {
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
text-align: center; z-index: 10; pointer-events: none; width: 100%;
}
h1 { font-size: 4rem; text-shadow: 0 0 20px #0F0; margin: 0; }
p { font-size: 1.5rem; color: #fff; text-shadow: 0 0 10px #fff; margin-top: 20px; }
.geng { color: #ff0055; font-weight: bold; font-size: 2rem; animation: shake 0.5s infinite; }
@keyframes shake { 0% { transform: translate(1px, 1px); } 50% { transform: translate(-1px, -1px); } 100% { transform: translate(1px, -1px); } }
</style>
</head>
<body>
<canvas id="c"></canvas>
<div id="overlay">
<h1 id="title">SYSTEM HACKED...</h1>
<p id="msg"></p>
</div>
<script>
// --- 1. 黑客帝国代码雨 (装X核心) ---
var c = document.getElementById("c");
var ctx = c.getContext("2d");
c.width = window.innerWidth;
c.height = window.innerHeight;
var chinese = "马到成功2026OFFER全拿代码无BUG不挂科发财暴富早日退休";
chinese = chinese.split("");
var font_size = 14;
var columns = c.width/font_size;
var drops = [];
for(var x=0; x<columns; x++) drops[x] = 1;
function draw() {
ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
ctx.fillRect(0, 0, c.width, c.height);
ctx.fillStyle = "#0F0"; // 黑客绿
ctx.font = font_size + "px arial";
for(var i=0; i<drops.length; i++) {
var text = chinese[Math.floor(Math.random()*chinese.length)];
ctx.fillText(text, i*font_size, drops[i]*font_size);
if(drops[i]*font_size > c.height && Math.random() > 0.975) drops[i] = 0;
drops[i]++;
}
}
setInterval(draw, 33);
// --- 2. 自动打字机效果 (文案区) ---
const titleEl = document.getElementById('title');
const msgEl = document.getElementById('msg');
const mainTitle = "⚠️ 2026 马年警告 ⚠️";
// 这里修改你的祝福语,支持HTML标签
const messages = [
"正在加载新年运势...",
"检测到【绝世好运】...",
"以前是以前,现在是变态...",
"不是,哥们,<span class='geng'>我踏马来了!</span>", // 你的虎哥梗
"祝你:代码一写就通,考研一战成硕!",
"发疯文学载入中:马年不努力,只能开夏利?错!",
"马年不摆烂,地球也就是个巨大的草台班子!"
];
let msgIndex = 0;
function typeWriter(text, element, callback) {
let i = 0;
element.innerHTML = "";
let timer = setInterval(() => {
if (i < text.length) {
// 处理HTML标签不被打断
if(text.charAt(i) === '<') {
let tagEnd = text.indexOf('>', i);
element.innerHTML += text.substring(i, tagEnd+1);
i = tagEnd + 1;
} else {
element.innerHTML += text.charAt(i);
i++;
}
} else {
clearInterval(timer);
if(callback) setTimeout(callback, 2000);
}
}, 100);
}
// 启动逻辑
setTimeout(() => {
titleEl.innerText = mainTitle;
titleEl.style.color = "#ff0055"; // 换个骚粉色
function playNextMsg() {
if(msgIndex < messages.length) {
typeWriter(messages[msgIndex], msgEl, playNextMsg);
msgIndex++;
} else {
msgIndex = 3; // 循环播放梗
playNextMsg();
}
}
playNextMsg();
}, 2000);
// --- 3. 屏幕自适应 ---
window.onresize = function() {
c.width = window.innerWidth;
c.height = window.innerHeight;
};
</script>
</body>
</html>
按 Ctrl+O 回车保存,按 Ctrl+X 退出。
5.5、配置 docker-compose
nano docker-compose.yml
5.6、nano输入:
services:
horse-site:
image: nginx:alpine
container_name: horse_2026
restart: always
ports:
- "8888:80" # 外部访问端口,可修改
volumes:
- ./index.html:/usr/share/nginx/html/index.html
networks:
- halo_network
networks:
halo_network:
external: true
5.7、启动项目(防报错版)
为了防止 Docker 服务未启动导致报错,我们先强制唤醒 Docker,再启动项目。
systemctl enable docker && systemctl start docker && docker compose up -d
5.8、完成
此时打开浏览器,访问 http://你的vps的ip:8888。
效果展示:
- 背景:黑客帝国代码雨,滚动播放“暴富”、“OFFER”、“不挂科”。
- 弹幕:屏幕中央自动打字,播放“我踏马来了”等
5.9、如何修改文案(装X指南)
如果想改祝福语,无需重启,只需执行:
nano index.html
找到 const messages = [...] 修改中文内容,保存后刷新网页即刻生效。
六、域名访问
通过ip+端口让别人访问,总担心隐私泄露?可以通过反向代理后让别人直接通过你的域名访问你的网站
比如我的名字叫rckin我就可以购买一个 rckin.com 的域名,别人点击一下就能访问了,也不用担心ip暴露
6.1、购买域名
推荐前往namesilo 购买,点击链接购买我可以拿到一点分成,感谢各位小伙伴的支持
购买教程:点击链接滑动到视频第3步即可:哔哩哔哩 ,YouTube
6.2、域名托管到cloud flare
等待更新ing(看视频)
6.3、安装 NPM
购买完域名和让域名在全球传播之后,我们终于可以回到Ubuntu了
现在开始安装 Nginx Proxy Manager 进行反向代理
6.3.1、创建文件夹目录
mkdir -p /root/data/docker_data/npm
6.3.2、进入文件夹
cd /root/data/docker_data/npm
6.3.3、配置
nano docker-compose.yml
6.3.4、nano输入:
services:
app:
image: jc21/nginx-proxy-manager:2.11.3 #如需升级,请手动修改版本号并重新 docker compose pull
restart: unless-stopped
ports:
- '80:80' # 保持默认即可,不建议修改左侧的80
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 保持默认即可,不建议修改左侧的443
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
💡 Nano 编辑器小贴士:
- 粘贴内容: 在终端点击鼠标右键,或使用快捷键
Shift + Insert。- 保存修改: 按
Ctrl + O,然后按Enter确认文件名。- 退出编辑器: 按
Ctrl + X。- 注意: 如果你对文件做了改动,退出时会询问是否保存,输入
y(Yes) 即可。
6.3.5、配置启动
docker compose up -d
6.3.6、浏览器访问
此时我们就可以通过浏览器 http://改为你的vps的ip:81 访问 NPM 面板了
⚠️ 补充(小白暂时别看这句话):生产环境建议不要长期对公网暴露 81 管理端口,域名配置完成后可关闭,可将'81:81'改为'127.0.0.1:81:81',后续访问NPM可通过走 SSH 隧道:ssh -L 81:127.0.0.1:81 root@你的VPS_IP,然后再浏览器http://localhost:81 。
七、开始反向代理
通过 http://你的vps的ip:81 访问你的NPM面板后
7.1、登录
默认登录账号密码:
默认Email: admin@example.com #记得改
默认Password: changeme #记得改
7.2、添加代理主机
7.3、添加域名,开启ip代理
7.4、启动https协议,添加证书
评论区