
Podroid Alpine 部署 1Panel 完整流程记录时间2026-09-30目标环境podroid Alpine 3.24.2 (aarch64)OpenRC init非 systemd安装结果1Panelv2.3.2stable安装目录/opt前置条件1安装 github 开源应用ExTV/Podroid前置条件2启动 Podroid 终端执行 setup-alpine前置条件3安装 nodejs 及 curl、git 等工具前置条件4安装编程智能体npm i -g opencode-ai前置条件5通过 opencode 指挥 AI 安装 1Panel前置条件6在 podroid 中设置宿主机到虚拟机的端口转发0. 环境事实先确认再动手cat/etc/os-release# Alpine Linux v3.24uname-m# aarch64ls-l/sbin/init# - /bin/busybox即 OpenRC没有 systemdls/sbin/openrc-run# 存在 → 安装脚本会走 openrc 分支dockerinfo# Server Version 29.5.3overlayfscgroup v2两个关键判断不能用官方一键脚本。官方入口bash -c $(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)只是下载器真正的发行版判定在解包后的install.sh里。虽然它对 Alpine 没做硬性拒绝但它会顺带拉取离线 Docker 包只认systemd或走get.docker.com只认Debian/RHEL 系在 Alpine 上必然失败。正确做法是手动下载官方 tarball自行控制所有非交互参数。服务托管靠 OpenRC。官方initscript/目录里备好了*.openrc脚本install.sh在没有systemctl时会自动选用它无需自己写 unit。1. 前置检查command-vsystemctl# 必须无输出Alpine 走 openrc 分支command-vopenrc-run# 必须存在dockerinfo/dev/null# 1Panel 的应用商店依赖 Docker必须已就绪df-h/# 留足 10G 以上本次环境中 Docker 29.5.3 已由 podroid 镜像预装故安装时对 Docker 相关提问全部选n。顺带一提若后续要装 vsftpd 之类的社区包需先取消/etc/apk/repositories中community 源的注释并apk update——Alpine 3.24 默认注释掉了 community。2. 获取安装包含完整性校验版本与架构由 quick_start 脚本的规则推导aarch64→linux-arm64。VERSION$(curl-shttps://resource.fit2cloud.com/1panel/package/v2/stable/latest)echo$VERSION# v2.3.2PKG1panel-${VERSION}-linux-arm64.tar.gzBASEhttps://resource.fit2cloud.com/1panel/package/v2/stable/${VERSION}/release# 官方校验和curl-s${BASE}/checksums.txt|grep$PKG# e147b2ad27053eaef25db41779368a28d31ca2aa79221b37ce5ed62b9e5fa054 1panel-v2.3.2-linux-arm64.tar.gz# 下载58MB实测约 120KB/s耗时 8 分钟以上务必后台跑别被 120s 超时打断curl-LOk${BASE}/${PKG}sha256sum$PKG# 必须与上面的值完全一致方可继续包内容1panel-v2.3.2-linux-arm64/ ├── 1panel-core # 主进程 ├── 1panel-agent # agent 进程持有 /etc/1panel/agent.sock ├── 1pctl # 运维命令行 ├── install.sh # 安装器 ├── GeoIP.mmdb # 安装后拷到 $RUN_BASE_DIR/geo ├── lang/ # 多语言包安装后拷到 /usr/local/bin/lang ├── appstore.tar.gz # 可选离线应用商店源 └── initscript/ ├── 1panel-core.service / 1panel-agent.service # systemd ├── 1panel-core.openrc / 1panel-agent.openrc # OpenRC ← Alpine 用这个 ├── *.procd # Procd └── *.init # SysVinit3. 执行安装install.sh读取环境变量做非交互安装等价于逐个回答交互式提问cd/tmp/1panel-v2.3.2-linux-arm64echocn.selected_edition# 选择中文版exportPANEL_NON_INTERACTIVEtrueexportPANEL_LANGzhexportPANEL_INSTALL_DIR/optexportPANEL_PORT10086exportPANEL_ENTRANCEpanelexportPANEL_USERNAMEadminexportPANEL_PASSWORDPodroid1PanelexportPANEL_INSTALL_DOCKERn# Docker 已就绪不装exportPANEL_CONFIGURE_ACCELERATORn# 不改 daemon.jsonbashinstall.sh安装器内部执行顺序main()Check_Root → Prepare_System(查重) → Set_Dir → Install_Docker → Set_Port → Set_Firewall → Set_Entrance → Set_Username → Set_Password → Init_Panel(装二进制配服务启动) → Install_AppStore → Get_Ip → Check_Ready → Show_Result各步骤落地的动作步骤产物init_configure1panel-core/1panel-agent/1pctl拷到/usr/local/bin并 chmod x在/usr/bin建软链1panel、1panel-core、1panel-agent、1pctl用 sed 把端口/入口/账号等写回1pctl头部服务安装无systemctl→ 走openrc-run分支拷*.openrc到/etc/init.d/chmod xrc-update add 1panel-core default、rc-update add 1panel-agent default再/etc/init.d/* startGeoIPmkdir -p /opt/1panel/geo拷入GeoIP.mmdbappstore存在appstore.tar.gz时拷到/opt/1panel/resource/offline/密码装完立刻把1pctl里的ORIGINAL_PASSWORDsed 成**********终端外无法回显就绪探测循环 30 次 ss -tlun成功标志本次实际输出* service 1panel-core added to runlevel default * service 1panel-agent added to runlevel default * Starting 1panel-core ... [ ok ] * Starting 1panel-agent ... [ ok ] [1Panel ... install Log]: 1Panel 服务已成功启动正在继续执行后续配置请稍候...4. 验证rc-service 1panel-core status# * 1panel-core is running [PID xxxx]rc-service 1panel-agent status# * 1panel-agent is running [PID xxxx]ss-lntp|grep10086# LISTEN 0 4096 0.0.0.0:10086 0.0.0.0:* users:((1panel-core,pid3217,fd23))curl-s-o/dev/null-w%{http_code}\nhttp://127.0.0.1:10086/panel# 200rc-update show default|grep1panel# 1panel-agent | default# 1panel-core | default本次验证结果core PID 3217、agent PID 3279 均在运行HTTP 200两服务已入 default runlevel。5. 访问信息与关键路径项值内网入口http://10.0.2.15:10086/panel用户名admin密码Podroid1Panel安装目录/opt/1panel面板二进制/usr/local/bin/1panel-core、1panel-agent、1pctl/usr/bin/下为软链agent socket/etc/1panel/agent.sockcore 与 agent 通信数据库/opt/1panel/db/*.dbSQLitecore/agent/alert/monitor/task/gpu_monitor/xpack日志/opt/1panel/log/1Panel.log、1Panel-Core.log、task/、ssl/OpenRC 脚本/etc/init.d/1panel-core、/etc/init.d/1panel-agentPID 文件/run/1panel-core.pid、/run/1panel-agent.pid1pctl头部保存了全部初始配置密码已被掩码grep-E^(BASE_DIR|ORIGINAL_|LANGUAGE|PANEL_EDITION)/usr/local/bin/1pctl# BASE_DIR/opt# ORIGINAL_PORT10086# ORIGINAL_VERSIONv2.3.2# ORIGINAL_ENTRANCEpanel# ORIGINAL_USERNAMEadmin# ORIGINAL_PASSWORD**********# LANGUAGEzh# PANEL_EDITIONcn6. 日常运维rc-service 1panel-core{start|stop|restart}# 走 OpenRC等价 1pctl 的多数场景rc-service 1panel-agent{start|stop|restart}1pctl status# 服务状态1pctl user-info# 当前账号信息1pctl user-list# 全部账号1pctl username / password / entrance / port# 改账号、密码、入口、端口1pctl listen-ip# 绑定指定 IP1pctl domain / https / ips / mfa / passkey# 域名、HTTPS、证书、双因素1pctl version# v2.3.2 / stable1pctl update# 升级1pctl reset# 重置面板设置1pctl restorefile# 从备份恢复1pctl uninstall# 卸载连同 /opt/1panel1pctlhelp1pctl内部同样会自动判断 init 系统脚本里有systemctl/openrc分支所以在Alpine 上直接用1pctl即可不必手写rc-service。开机自启已由安装器完成无需额外操作。手工确认rc-update show default|grep1panel7. 卸载1pctl uninstall# 交互确认后移除服务、软链与 /opt/1panel彻底清理残留rc-update del 1panel-core default rc-update del 1panel-agent defaultrm-f/etc/init.d/1panel-core /etc/init.d/1panel-agentrm-rf/opt/1panel /etc/1panelrm-f/usr/bin/1panel /usr/bin/1panel-core /usr/bin/1panel-agent /usr/bin/1pctlrm-f/usr/local/bin/1panel-core /usr/local/bin/1panel-agent /usr/local/bin/1pctlrm-rf/usr/local/bin/lang若通过应用商店装过应用/数据库需先在面板里删除否则容器与卷会残留。8. 踩坑记录现象原因处理官方一键脚本在 Alpine 上失败脚本会尝试装离线 Docker 包Install_Docker_Offline里command -v systemctl判断失败即exit 1或走get.docker.com不认 Alpine跳过 quick_start手动下载 tarball用环境变量非交互安装1Panel 服务已成功启动后面板打不开Alpine 默认无firewall-cmd/ufwSet_Firewall全部跳过靠外部放行确认端口未被 nftables/iptables 拦云环境需开安全组端口探测卡住Check_Ready用ss -tlun | grep :$PORT Alpine 的ss来自 iproute2装iproute2-full或确认ss存在面板起不来但rc-service status显示 runningOpenRC 的respawn_max0无限重启进程崩溃时不会置为 failed看journalctl或直接读/opt/1panel/log/1Panel-Core.log公网 IP 每次重启都变容器/虚拟机 DHCP 地址不固定入口地址随之变建议改用内网地址 VPN 访问或在 1Panel 中绑固定 IP9. 安全加固建议本次安装尚未做当前配置是弱口令 明文 HTTP 简单入口公网可达前应至少处理改密码1pctl password避开弱口令规则安装器本身会校验密码强度。改入口1pctl entrance用不易猜的路径替代当前的panel。改端口1pctl port替换10086减少特征扫描命中。启用 HTTPS1pctl https申请证书后强制跳转。限制监听地址1pctl listen-ip 内网IP只在内网网卡上提供服务。外网接入走 VPN不要把面板端口直接暴露在公网。iptables/nftables 放行若前面挂了 nftablesAlpine 默认需显式放行10086/tcpSet_Firewall只认 firewalld/ufw不会碰 nftables。应用商店的容器服务注意端口映射避免与宿主机21/tcp、30000-30100/tcpvsftpd之类的服务冲突。10. 一键复现脚本#!/bin/shset-eVERSION$(curl-shttps://resource.fit2cloud.com/1panel/package/v2/stable/latest)PKG1panel-${VERSION}-linux-arm64.tar.gzBASEhttps://resource.fit2cloud.com/1panel/package/v2/stable/${VERSION}/releasecd/tmp[-f$PKG]||curl-LOk${BASE}/${PKG}EXPECTED$(curl-s${BASE}/checksums.txt|awk-vp$PKG$2p{print $1})ACTUAL$(sha256sum$PKG|awk{print $1})[$EXPECTED$ACTUAL]||{echosha256 校验失败;exit1;}tarzxf$PKGcd1panel-${VERSION}-linux-arm64echocn.selected_editionPANEL_NON_INTERACTIVEtrue\PANEL_LANGzh\PANEL_INSTALL_DIR/opt\PANEL_PORT10086\PANEL_ENTRANCEpanel\PANEL_USERNAMEadmin\PANEL_PASSWORDPodroid1Panel\PANEL_INSTALL_DOCKERn\PANEL_CONFIGURE_ACCELERATORn\bashinstall.sh rc-service 1panel-core status rc-service 1panel-agent status