ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

一键部署 acg-faka 发卡系统

一键部署 acg-faka 发卡系统 一条命令在一台干净的 Linux 服务器上把 acg-faka异次元店铺系统 跑起来。脚本会自动装 Docker、拉上游源码、构建应用镜像nginx PHP-FPM、拉起 MySQL 与 Redis、顺手修掉一个会让安装向导失败的权限坑最后打印安装向导地址和运维命令。适合这样的场景不想手动配 LNMP 和伪静态服务器在国内download.docker.com与 GitHub 都时通时不通希望装完就能进向导而不是先花两小时排网络问题。脚本帮你做了什么环境检查校验 root、识别发行版与架构、检查磁盘内存不足 4GB 且没有 swap 时自动加 2GB swap否则构建 PHP 扩展容易被 OOM 杀掉装 Docker依次探测五个软件源腾讯云内网 / 腾讯云公网 / 阿里云 / 中科大 / 官方要求gpg和dists/codename/Release都能取到才采用装完自动配 Docker Hub 加速并限制容器日志大小拉源码先花 15 秒探测 GitHub通就git clone保留.git日后能git pull不通就依次尝试 5 个国内加速代理下载 tarball生成配置写.env非 amd64 架构自动把 MySQL 换成mariadb:10.6MySQL 5.7 没有 arm64 官方镜像构建加速补丁给上游Dockerfile注入「apt 强制 IPv4 国内 Debian 源」和「Composer 国内源」已打过则跳过构建并启动docker compose up -d --build失败自动重试一次随后修正密钥文件权限等待健康检查轮询容器健康状态最多 4 分钟再请求一次首页打印访问地址与数据卷环境要求项目要求系统Linux需 systemdUbuntu / Debian 已实测权限root或sudo内存建议 ≥ 2GB低于 4GB 且无 swap 时脚本自动补 2GB磁盘建议 ≥ 5GB 可用镜像与构建缓存约 3~4GB端口8080可改需空闲并在云厂商安全组放行实测环境Ubuntu 22.04.5 LTSx86_642 vCPU / 2GB 内存。从零开始到站点可访问约9~12 分钟其中一半以上时间花在容器内编译 PHP 扩展。快速开始第一步下载并执行curl-fsSL-o/tmp/acgfaka.sh https://raw.githubusercontent.com/shubaocai/sbc-acgfaka/main/install_acgfaka.shsudobash/tmp/acgfaka.shraw.githubusercontent.com在国内时通时不通可以换 jsDelivrcurl-fsSL-o/tmp/acgfaka.sh https://cdn.jsdelivr.net/gh/shubaocai/sbc-acgfakamain/install_acgfaka.shsudobash/tmp/acgfaka.sh也可以 clone 下来跑gitclone https://github.com/shubaocai/sbc-acgfaka.gitcdsbc-acgfakasudobashinstall_acgfaka.sh第二步走安装向导浏览器打开http://服务器IP:8080/三步走完步骤要做什么1. 环境检测页面自动检测全绿直接下一步2. 数据库什么都不用改密码框留空直接点「下一步」3. 管理员填邮箱、昵称、登录密码完成安装数据库密码在首次启动时随机生成、写进 Docker 卷acg_secrets向导直接读取既不用你想密码密码也不经过浏览器。第三步进后台http://服务器IP:8080/admin会跳到/admin/authentication/login用刚才填的邮箱和密码登录带验证码。打不开基本都是云厂商安全组没放行 8080去控制台加入站规则即可。踩坑记录脚本里那些看起来啰嗦的分支每一条都是被真实网络环境教出来的。下面 5 个坑按踩到的顺序记一遍。坑 1download.docker.com被 TLS reset装 Docker 第一步是取官方 GPG 公钥结果连着三次都是curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to download.docker.com:443同一时刻五个国内镜像腾讯云内网、腾讯云公网、阿里云、中科大、清华全部返回 200。所以脚本改成按顺序探测而且不只是取 GPG还要求能拿到对应发行版代号jammy/bookworm的Release文件才算可用——避免手滑选到一个没有该发行版目录的源formin$DOCKER_MIRRORS;doifcurl-fsSL--connect-timeout8-m30--retry2$m/gpg-o/tmp/docker.gpg\curl-fsS-m20-o/dev/null$m/dists/$CODENAME/Release;thenMIRROR_BASE$m;breakfidone实测命中第一个源腾讯云内网就装好了 Docker整个过程不到 40 秒。想手动指定DOCKER_APT_MIRRORhttps://mirrors.aliyun.com/docker-ce/linux/ubuntu。坑 2容器里没有 IPv6apt-get update卡了 8 分半第一次构建镜像时卡在 Dockerfile 的第一层 apt 上8 分 39 秒没有任何输出负载 0.00。看起来像死机其实是主机解析 deb.debian.org → 2a04:4e42:8c::644 IPv6 地址 容器里 ip -6 addr → 只有 ::1 没有 IPv6 出口容器默认只有 IPv4而 Debian 官方源同时有 AAAA 记录apt 会去连 IPv6 地址然后一直等超时。跑到宿主上测deb.debian.org只要 1.5 秒谁也想不到问题出在协议栈上。修法是构建时注入两行只在构建阶段生效printf Acquire::ForceIPv4 true;\n /etc/apt/apt.conf.d/99force-ipv4 sed -i s|deb.debian.org|mirrors.cloud.tencent.com|g; s|security.debian.org|mirrors.cloud.tencent.com|g \ /etc/apt/sources.list /etc/apt/sources.list.d/*.sources加完之后同一层 apt 只花了约 2 分钟。坑 3GitHub 时通时断git clone还会无限挂住有一轮git clone连续失败两次第三次切到gitclone.com之后挂了 8 分钟进程在select()上干等没有任何超时。原因是 git 默认没有停滞多久就放弃的设定。现在的做法是三层保险exportGIT_TERMINAL_PROMPT0exportGIT_HTTP_LOW_SPEED_LIMIT1000GIT_HTTP_LOW_SPEED_TIME30# 低速 30 秒自动断开timeout15gitls-remote$REPO_URLHEAD/dev/null21# 先探 15 秒# 通了 → git clone不通 → 依次尝试 5 个加速代理下载 tarball顺带实测了一下各条线路同一个时刻ghfast.top的 tarball13.8MB / 3.8 秒最快gh-proxy.com、codeload.github.com、ghproxy.net也都通而github.moeyy.xyz、ghproxy.cc已经挂了。这类代理寿命都不长所以脚本按列表顺序试全试完才报错。坑 4向导报Access denied for user acg172.18.0.4 (using password: NO)安装向导第 2 步数据库填好点下一步红色报错注意最后那句using password: NO——它是在用空密码连库。翻源码看逻辑$file$get(ACG_DB_PASSWORD_FILE);// /secrets/mysql_appif($file!is_readable($file)){// ← 这一句在 php-fpm 里是 false$passwordtrim(file_get_contents($file));}if($password){$password$get(ACG_DB_PASSWORD);}生成密码的secrets-init.sh写死了chmod 600root:root而 php-fpm 是以www-data跑的于是is_readable()为 falseACG_DB_PASSWORD环境变量也是空最后拿空密码去连。验证方式很简单dockerexec-uwww-data acg-faka-app php-r\$fgetenv(ACG_DB_PASSWORD_FILE); var_dump(is_readable($f));# 修复前bool(false) 修复后bool(true)脚本第 6 步会自动按 compose 标签找到acg_secrets卷并把两个密钥文件改成 644卷只读挂给 app 和 mysql 两个容器有 docker 权限的人本来就能读它放宽没有实际损失。权限修好后用向导自己的接口测一次就能看到它已经越过数据库这一步curl-s-XPOST-duse_builtin1http://127.0.0.1:8080/install/submit# {code:0,msg:管理员邮箱格式不正确} ← 报的是下一步的校验说明连库已通过坑 5向导停在「导入语言包」不动这次不是网络问题是前端被自己的保护机制误导。上游submit()的顺序是SQL::import(...);// 导数据库setConfig(...database.php);// 写配置file_put_contents(/kernel/Install/Lock,);// ① 先写安装锁try{$this-importLanguagePacks();}catch(...){}// ② 再导语言包失败不报错return$this-json(200,安装完成);而submit()第一行就是装过就拒绝if(file_exists(BASE_PATH./kernel/Install/Lock)){thrownewJSONException(您已经安装过了…);}第一次请求其实已经干完了活数据库 30 张表、语言包 en/ja/zh-tw 各 4153 条共 12459 条都在页面进度条还在等浏览器又发了一次请求拿到的是「您已经安装过了」前端不认识这个返回就永远停在「导入语言包」。处理方式关掉向导页直接访问/admin登录即可。想重跑向导就删掉安装锁cd/opt/acg-fakadockercomposeexecapprm-f/data/install/Lock时间都花在哪了阶段耗时说明装 Docker~40 秒走国内镜像源拉源码~15 秒GitHub 直连探测通过拉基础镜像~40 秒php:8.2-fpm/mysql:5.7/redis:7.2-alpine构建第 1 层aptnginx、supervisor、certbot、mariadb、redis~2 分钟加了 ForceIPv4 之后之前卡 8 分半构建第 2 层编译 PHP 扩展36 分钟gd / zip / bcmath / opcache / pdo_mysql pecl redis2 核满载构建第 3 层composer 装依赖12 分钟走国内 Composer 镜像起容器 MySQL 初始化3060 秒所以首次约 9~12 分钟镜像和构建缓存还在时重跑脚本大约1 分钟所有层命中缓存只剩打 tag 起容器 健康检查。想彻底重来用docker compose down -v但注意这条命令会连数据卷一起删。常用环境变量变量说明默认ACG_PORT对外端口8080ACG_DIR安装目录/opt/acg-fakaSKIP_DOCKER_INSTALL已装 Docker 时跳过安装0USE_MARIADB用mariadb:10.6替代mysql:5.7非 amd64 自动为1REGISTRY_MIRRORDocker Hub 加速地址留空不配置腾讯云DOCKER_APT_MIRROR指定 Docker 软件源自动探测五源CN_DEBIAN_MIRROR/COMPOSER_MIRROR构建时使用的 Debian / Composer 源腾讯云ACG_TARBALL_URLS源码下载源按顺序尝试5 个国内加速代理换端口的写法sudoACG_PORT9090bashinstall_acgfaka.sh用sudo传环境变量记得加-E否则变量会被 sudo 丢掉。日常运维cd/opt/acg-fakadockercomposeps# 查看状态dockercompose logs-fapp# 实时看日志dockercompose restart app# 重启应用dockercompose down# 停止数据卷保留dockercompose up-d--build# 更新代码后重建# 数据库备份dockercomposeexec-Tmysqlsh-c\exec mysqldump -uroot -p$(cat /secrets/mysql_root) --databases acg_fakaacg-$(date%F).sql# 站点数据卷备份配置、上传、插件、模板、安装锁dockerrun--rm-vacg_data:/data-v$PWD:/backupalpine\tarczf /backup/acg-data-$(date%F).tar.gz-C/data.数据不在安装目录里全在四个命名卷acg_data、acg_mysql、acg_redis、acg_secrets。换机器或重装前记得把前两个备份出来。合规提示acg-faka 是 MIT 协议的开源项目作者在仓库 README 中明确声明本程序初衷是提供学习和研究机会未取得合法资质严禁用于任何商业用途尤其是禁止利用本程序搭建平台进行商品销售。部署与使用前请自行确认合规性。MIT License © 2026 鼠宝财 项目地址https://github.com/shubaocai/sbc-acgfaka
返回列表