Openlist部署教程
文章摘要
Openlist 是 Alist 的理想替代方案,具有共享家庭相册、团队协作、个人备份、跨平台观影和学习资料库等功能。用户可以通过 Zeabur 部署 Openlist,并获得每月 5 美元的额度。部署步骤包括打开模板、注册账号、选择部署方式、绑定域名、获取默认密码和登录并改密。同时,Openlist 支持美化和自定义,用户可以添加音乐播放器、烟花特效和一言 API 等功能。
自 Alist 项目被收购后,为了延续其开源精神,Openlist 应运而生,成为 Alist 的理想替代方案。
更棒👍的是,Zeabur每月赠送 5刀💵额度,恰好足够运行 Openlist!因此,强烈推荐大家部署一套 Openlist 🤓。
以下是关于Openlist的介绍:
仓库: [OpenListTeam/OpenList](https://github.com/OpenListTeam/OpenList)
为什么选择openlist?
Openlist 适合普通人的使用场景:
1. 共享家庭相册:生成一次性的外链,朋友点开就能看照片,不用担心被压缩或流量不够。
2. 团队协作:大家共用一个“云文件夹”,统一管理权限,不用为每个平台单独注册账号。
3. 个人备份:把重要文件同时备份到阿里云盘和 Google Drive,万一出问题,一键就能恢复。
4. 跨平台观影:电影、剧集上传到网盘,播放器直接读取链接,播放流畅不卡顿。
5. 学习资料库:教材、PDF 等大文件上传一次,手机电脑随时能看或下载,方便又省事。
部署教程:
1.先在Zeabur上打开Openlist的[template(模版)](https://zeabur.com/zh-CN/templates/Y3CSXM)
2.注册Zeabur账号(需要+86手机号)
3.选择共享容器部署(这里推荐腾讯云的US,晚高峰表现优秀)
4.自己按照教程添加一个域名
5.在日志中查找密码,用户名为admin,登入账号
6更改密码!!!(*3)
恭喜你的网站上线🎉
2.24提醒:zeabur将于3/15关闭创建,抓紧上车
日期 | 变更 |
|---|---|
2026/2/21 | 创建项目时默认导向专属主机选项,仍可切换回共享集群 |
2026/3/15 | 停止在共享集群上创建新项目 |
2026/4/1 | 停止在共享集群的既有项目中创建新服务 |
关于美化:

自定义头部:
<!-- 引入自定义字体 -->
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/lxgw-wenkai-webfont/1.7.0/lxgwwenkai-regular.min.css">
<style>
/* 移除原生视频控件 */
video::-webkit-media-controls {
display: none;
}
/* 设置背景图片样式 */
body {
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
background-position: center;
}
/* 加了个深色遮罩,爱护你的眼睛 */
body.hope-ui-dark {
background-color: rgb(32, 36, 37);
background-image: linear-gradient(rgba(32, 36, 37, 0.7), rgba(32, 36, 37, 0.7)), url('https://i.pximg.org/img-original/img/2025/08/16/19/18/16/133961035_p0.jpg');
}
/* 在此处的url()里修改背景图片地址 */
body.hope-ui-light {
background-image: url('https://i.pximg.org/img-original/img/2025/08/16/17/30/08/133957035_p0.png');
}
/* 统一站点公告的样式 */
.hope-ui-light .hope-c-PJLV-ikJQsXT-css {
background: rgba(255, 255, 255, 0.8) !important;
backdrop-filter: blur(0) !important;
}
.hope-ui-dark .hope-c-PJLV-ikJQsXT-css {
background: rgb(32, 36, 37) !important;
backdrop-filter: blur(0) !important;
}
/* 自定义字体 */
* {
font-family: "LXGW WenKai", sans-serif;
}
</style>
<!-- Font6,自定义底部使用的图标和字体文件-->
<link href="https://npm.elemecdn.com/font6pro@6.0.1/css/all.min.css" rel="stylesheet">自定义内容
<!-- 修正部分区域的透明 -->
<style>
.hope-ui-light,
.hope-ui-dark {
--hope-colors-background: transparent;
}
</style>
<script type="module">
// v6
// 提供用来监听代码控制的 url 变化的事件
(() => {
const wrapHistoryMethod = (type) => {
const orig = history[type];
return function (...args) {
const rv = orig.apply(this, args);
const event = new CustomEvent(type, { detail: args });
window.dispatchEvent(event);
return rv;
};
};
history.pushState = wrapHistoryMethod('pushState');
history.replaceState = wrapHistoryMethod('replaceState');
})();
class Beautifier {
/**
* Beautifier 类用于美化页面背景色
*
* 其提供了3个方法:
* - observe: 开始监听页面变化并美化背景色
* - disconnect: 停止监听页面变化
* - undo: 恢复页面背景色到默认状态
*
* 可以通过window.beautifier访问实例对象
*
*/
static ignoredSelectors = [
'.hope-tooltip', // 提示小标签及其装饰
'.hope-tooltip__arrow',
'.hope-checkbox__control',// 复选框
'.hope-modal__overlay', // 模态框遮罩
'.hope-drawer__overlay', // 抽屉遮罩
'.hope-select__option', // 下拉选项
'.monaco-editor *', // 代码编辑器
'button:not(.hope-menu__trigger)', // 除目录外按钮
'svg' // SVG 图标
];
static getSelector(mainSelector) {
return `${mainSelector} :not(${Beautifier.ignoredSelectors.join('):not(')})`;
}
static lightSelector = Beautifier.getSelector('.hope-ui-light');
static darkSelector = Beautifier.getSelector('.hope-ui-dark');
static lightBgColor = 'rgba(255, 255, 255, 0.8)';
static darkBgColor = 'rgb(32, 36, 37)';
static specificPrefix = 'rgba(132, 133, 141,';
constructor() {
this.observer = null;
}
/**
* @param {'light'|'dark'} theme
*/
#rewriteStyle(theme) {
let selector = theme === 'light' ? Beautifier.lightSelector : Beautifier.darkSelector;
let bgColor = theme === 'light' ? Beautifier.lightBgColor : Beautifier.darkBgColor;
document.querySelectorAll(selector).forEach(element => {
const computedStyle = getComputedStyle(element);
if (computedStyle.backgroundColor !== 'rgba(0, 0, 0, 0)' &&
!computedStyle.backgroundColor.startsWith(Beautifier.specificPrefix)) {
element.style.backgroundColor = bgColor;
element.setAttribute('data-beautified', 'true');
}
});
}
#beautify() {
if (!location.pathname.startsWith('/@manage') && !location.pathname.startsWith('/@login')) {
this.#rewriteStyle('light');
this.#rewriteStyle('dark');
}
}
observe() {
this.observer = new MutationObserver(this.#beautify.bind(this));
this.observer.observe(document.body, {
childList: true,
subtree: true
});
this.#beautify();
}
disconnect() {
if (this.observer) {
this.observer.disconnect();
}
}
undo() {
this.disconnect();
document.body.querySelectorAll('[data-beautified]').forEach(element => {
element.style.backgroundColor = '';
element.removeAttribute('data-beautified');
});
}
}
const beautifier = new Beautifier();
window.beautifier = beautifier;
beautifier.observe();
// 一个愚蠢到有点无敌的修复机制,不过工作良好
(() => {
function fixLogin(pathname) {
if (pathname.startsWith('/@login')) {
beautifier.undo();
}
else {
beautifier.disconnect();
beautifier.observe();
}
}
['popstate', 'pushState', 'replaceState'].forEach(eventType => {
addEventListener(eventType, () => {
fixLogin(location.pathname);
});
});
})();
</script>
<!--音乐播放器-->
<!--网易云-->
<meting-js fixed="true" volume=0.2 autoplay="true" theme="#409EFF" list-folded="true" server="netease" type="playlist" id="17523884381"></meting-js>
<br />
</div>
<!--一言API-->
<script src="https://v1.hitokoto.cn/?encode=js&select=%23hitokoto" defer></script>
<!-- 烟花特效 -->
<script src="https://cdn.jsdelivr.net/gh/kamanfaiz/Nezha-Dash-UI@main/js/fireworks.js"></script>
<!-- 网页音乐播放优化 -->
<script>
window.initMuscPlus = false;
window.initMuscEle = false;
window.$q = window.$q || function(val) { return document.querySelector(val) }
window.$qa = window.$qa || function(val) { return Array.from(document.querySelectorAll(val)) }
;(function(){
let style = document.createElement('style')
style.innerHTML = `.music-plus .aplayer-lrc-current { font-weight: bold; transform: scale(0.95) !important; }
.music-plus .aplayer .aplayer-lrc { position: fixed; top: 20px; left: 0; right: 0; width: 88%; max-width: 1000px; margin: 0 auto; background: #fff; padding: 50px 0; transform: scale(1.3);z-index: 999; }
.music-plus .aplayer .aplayer-lrc p { color: #333; opacity: 0.8; transform: scale(0.9); }
.music-control { position: absolute; right: 4px; top: 4px; display: flex; align-items: center; }
.music-control i { cursor: pointer; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; font-size: 14px; border-radius: 50%; background: #ccc; margin-left: 4px; font-style: normal; }
@media screen and (min-width: 1600px) {
.music-plus .aplayer .aplayer-lrc { left: 0; right: auto; width: 400px; height: 80px; padding: 100px 0; top: 120px; }
}
`
document.body.appendChild(style)
})();
let intIns = setInterval(() => {
console.log('setInterval initMuscEle...')
if (!window.initMuscEle) {
initData()
} else {
console.log('setInterval initMuscEle success...')
clearInterval(intIns)
intIns = null
}
}, 500)
function initData() {
let stack = document.querySelector('.footer .hope-stack')
if (!stack) return;
window.initMuscEle = true;
let span = document.createElement('span')
span.innerHTML = '|'
stack.appendChild(span)
let a = document.createElement('a')
a.style = `padding: var(--hope-space-1_5); cursor: pointer; `
a.innerHTML = '音乐加强'
a.onclick = changeMusic
stack.appendChild(a)
document.addEventListener('keydown', function(e) {
if (e.ctrlKey) {
const type = ['4', '['].includes(e.key) ? 1 : ['6', ']'].includes(e.key) ? 3 : ['5', '\\'].includes(e.key) ? 2 : null
if (type) {
e.preventDefault()
e.stopPropagation()
musicMove(type)
}
}
})
}
function changeMusic() {
let lrcWarp = document.querySelector('.aplayer .aplayer-lrc')
if (!lrcWarp) return alert('没有找到歌词容器')
if (!window.initMuscPlus || !$q('.music-control')) {
let control = document.createElement('div')
control.className = 'music-control'
control.innerHTML = `<i onclick="musicMove(1)" title="CTRL+[ 上一曲">◄</i>
<i onclick="musicMove(2)" title="CTRL+] 上一曲">◼</i>
<i onclick="musicMove(3)" title="CTRL+\\ 暂停">►</i>`
document.querySelector('.aplayer-body').append(control)
}
window.initMuscPlus = true
let cls = document.body.className
if (cls.includes('music-plus')) {
document.body.className = document.body.className.replace(' music-plus', '')
} else {
document.body.className += ' music-plus'
}
}
function musicMove(type) {
if (type == 2) {
return $q('.aplayer-pic').click()
}
let list = $qa(`.aplayer-list li`)
let ind = list.findIndex(item => item.classList.contains('aplayer-list-light'))
let index = type == 1 ? ind - 1 : type == 3 ? ind + 1 : ind
index = index < 0 ? list.length - 1 : index > list.length - 1 ? 0 : index
list[index].click()
}
</script>
<!--去掉底部Powered by Openlist--->
<style>
.footer span,.footer a:nth-of-type(1){
display:none;
}
</style>元信息
<div style="text-align: center; margin: 0 auto; max-width: 800px; padding: 20px;">
<!-- 图片:强制居中 -->
<img
src="https://images2018.cnblogs.com/blog/1475041/201809/1475041-20180911162634872-512854858.gif"
alt="小猫编程动图"
style="display: block; margin: 10px auto; max-width: 80%; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1);"
>
<!-- 社交图标:增强型居中方案 -->
<div style="
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 12px;
margin: 30px auto;
padding: 0 10px;
width: 100%;
">
<a href="https://twitter.com/LunarGossip" target="_blank" rel="noopener noreferrer" style="flex-shrink: 0;">
<img src="https://img.shields.io/badge/💬_LunarGossip-1DA1F2?style=flat-square&logo=x&logoColor=white" alt="Twitter" style="max-height: 28px;">
</a>
<a href="https://www.youtube.com/@hetw24" target="_blank" rel="noopener noreferrer" style="flex-shrink: 0;">
<img src="https://img.shields.io/badge/🎬_He–TW-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube" style="max-height: 28px;">
</a>
<a href="https://fuwari.hetw24.dpdns.org/post/openlist%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B" target="_blank" rel="noopener noreferrer" style="flex-shrink: 0;">
<img src="https://img.shields.io/badge/📚_OpenList教程-00A1E9?style=flat-square&logo=feishu&logoColor=white" alt="飞书文档" style="max-height: 28px;">
</a>
<a href="https://github.com/hetw24" target="_blank" rel="noopener noreferrer" style="flex-shrink: 0;">
<img src="https://img.shields.io/badge/✍🏻_hetw24-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub" style="max-height: 28px;">
</a>
</div>
<!-- 文艺文字:居中优雅显示 -->
<p style="
font-family: 'Ma Shan Zheng', 'Noto Sans SC', sans-serif;
font-size: 1.4rem;
color: #5c5c5c;
margin: 30px 0;
line-height: 1.8;
letter-spacing: 1px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
">
<strong><span style="color: Cyan;">淡看云烟随风去,笑拥晨光自怡然</span></strong>
</p>
<div id="customize" style="">
</a >
</span>
</span>
<center class="dibu">
<div style="font-size: 13px; font-weight: bold;">
<span class="nav-item">
<a class="nav-link" href="https://fuwari.hetw24.dpdns.org/" target="_blank">
<i class="fas fa-edit" style="color:#409EFF" aria-hidden="true">
</i>
He-TWの博客 |
</a >
</span>
<span class="nav-item">
<a class="nav-link" href="https://panel.hetw24.dpdns.org/" target="_blank">
<i class="fa-solid fa-folder-gear" style="color:#409EFF" aria-hidden="true">
</i>
He-TWの导航
</a >
</span>
</p>
<!--备案-->
<span class="nav-item">
<a class="nav-link" href="https://zh.moegirl.org.cn/%E7%BB%AB%E5%9C%B0%E5%AE%81%E5%AE%81">
<i class="fa-solid fa-shield-check" style="color:#409EFF;" aria-hidden="true">
</i>
ICP备0721号
</a >
</span>
</p>
<center class="dibu">
<div style=" line-height: 20px;font-size: 11pt;font-weight: bold;">
<span>
<span style="color: rgb(13, 109, 252); font-weight: bold;" id="hitokoto">
<a href="#" id="hitokoto_text">
"人生最大的遗憾,就是在最无能为力的时候遇到一个想要保护一生的人."
</a>
</span>
</span>
<p style="margin-left: 10rem;font-size: 10pt; color: #eda3ff;">
<small>
—— He-TW
</small>总结:
1. 打开模板
2. 注册账号
3. 选择部署方式
4. 绑定域名
5. 获取默认密码
6. 登录并立即改密
