Atheos v601 Docker Compose 部署指南
Docker Compose 部署 Atheos v601 实测:官方 latest 镜像(PHP 7.4/开发线)与自建钉版镜像(PHP 8.1/v601)选型对照、四挂载持久化、controller.php 网关登录验证与 .htaccess 安全实测。
Atheos v601 Docker Compose 部署指南
目标:用一份
docker-compose.yml在 Linux 主机上把 Atheos v601(PHP 8.1 + Apache)跑起来,完成初始化、登录验证与数据持久化核对。本文全部命令与回显已在 Ubuntu 26.04.1 LTS(x86_64)+ Docker 29.9.2 实测通过(实测日期 2026-10-27),演示账号admin/q1w2e3r4。
一、环境信息
- 宿主机:Ubuntu 26.04.1 LTS(x86_64),Docker Engine 29.9.2,Docker Compose v5.6.1
- 应用镜像:
atheos:v601(基于php:8.1-apache自建钉版镜像,792MB;PHP 8.1.34 + Apache/2.4.65) - Atheos 版本:v601(2025-01-10 发布,容器内
.version文件实测为{"version":601}) - Compose 项目名:
atheos-v601-stack(显式name:声明,防并行环境互删) - 端口映射:宿主机
8130→ 容器80(HTTP) - 持久化:宿主机
./data、./workspace两个目录 +config.php、php.ini两个文件挂载
二、镜像选型说明
Atheos 有官方 Docker Hub 镜像,但实测后推荐自建钉版镜像,对照如下(查询/实测日期 2026-10-27):
| 维度 | 官方镜像 hlsiira/atheos:latest | 自建镜像 atheos:v601(本文方案) |
|---|---|---|
| 可用标签 | 仅 latest 一个标签(实查 Docker Hub API) | 自定义,本文钉 v601 |
| 构建来源 | GitHub Actions 每次 push 到 main 自动构建推送(仓库 .github/workflows/docker-build.yml 实证) | 本地 Dockerfile,源码钉死 v601 tag |
| 镜像内 PHP 版本 | PHP 7.4.33(实测 php -v 回显) | PHP 8.1.34(实测回显) |
| 对应代码线 | main 开发线(.version 为 611,非稳定发布) | v601 稳定发布(2025-01-10) |
| 镜像体积 | 718MB | 792MB |
⚠️ 注意:官方镜像只发
latest、跟随 main 分支滚动构建,且基座仍是 PHP 7.4(官方支持已 EOL);要部署稳定发布版 v601 并获得 PHP 8.1 运行时,自建钉版镜像是目前唯一可靠途径。下文部署步骤按自建方案展开,仅需官方镜像时可直接把 compose 中image:换成hlsiira/atheos:latest(功能验证步骤相同)。
自建镜像实测回显(容器内):
$ docker exec atheos-v601-web cat /var/www/html/.version
{"version":601}
$ docker exec atheos-v601-web php -v | head -1
PHP 8.1.34 (cli) (built: Dec 29 2025 23:35:29) (NTS)
$ docker exec atheos-v601-web apache2 -v | head -1
Server version: Apache/2.4.65 (Debian)
三、前置条件
- Docker Engine ≥ 24 与 Docker Compose v2(本文实测 29.9.2 / v5.6.1):
$ docker version --format 'Server: {{.Server.Version}}' Server: 29.9.2 $ docker compose version Docker Compose version v5.6.1 - 宿主机 8130 端口空闲(
ss -ltn | grep 8130无输出);占用则改 compose 端口映射 - 磁盘余量 ≥ 2GB(镜像 792MB + 构建中间层)
- 构建镜像需访问 GitHub(下载 v601 源码包);网络受限时走代理,见「十、常见问题」Q1
四、部署步骤
4.1 准备项目目录
mkdir -p /opt/atheos-v601 && cd /opt/atheos-v601
mkdir -p data workspace # 持久化目录,属主后续由容器内 www-data 接管
4.2 编写 Dockerfile 并构建钉版镜像
Dockerfile(钉死 v601 源码包,补 zip 扩展,开启 Apache rewrite 与 .htaccess):
FROM php:8.1-apache
# Atheos 必需扩展:zip / mbstring / openssl(官方 php 镜像已内置 mbstring/openssl,补 zip)
RUN apt-get update \
&& apt-get install -y --no-install-recommends libzip-dev unzip git \
&& docker-php-ext-install zip \
&& rm -rf /var/lib/apt/lists/*
# 钉版:官方 v601 源码包(2025-01-10 发布)
ADD https://github.com/Atheos/Atheos/archive/refs/tags/v601.tar.gz /tmp/atheos-v601.tar.gz
RUN tar -xzf /tmp/atheos-v601.tar.gz -C /tmp \
&& cp -r /tmp/Atheos-601/. /var/www/html/ \
&& rm -rf /tmp/atheos-v601.tar.gz /tmp/Atheos-601 \
&& touch /var/www/html/config.php \
&& chown -R www-data:www-data /var/www/html \
&& a2enmod rewrite \
&& sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf
EXPOSE 80
构建并核对:
$ docker build -t atheos:v601 .
# ...(网络下载 v601.tar.gz 后分层构建,全程约 2-4 分钟)
$ docker images atheos:v601 --format '{{.Repository}}:{{.Tag}} {{.Size}}'
atheos:v601 792MB
⚠️ 注意:Dockerfile 中
sed 's/AllowOverride None/AllowOverride All/g'不可省略——Atheos 用根目录.htaccess拦截对data/、README.md等敏感路径的直接下载,Apache 默认AllowOverride None会让.htaccess整体失效(实测对照见「十、常见问题」Q2)。
4.3 准备挂载的配置文件
config.php(Atheos 主配置,完整参数含义见专栏《Atheos v601 配置参数详解》):
<?php
// PATH TO ATHEOS
define("BASE_PATH", __DIR__);
// BASE URL TO ATHEOS (without trailing slash)
define("BASE_URL", "localhost");
// Add an install domain to the page title
define("DOMAIN", "");
define("THEME", "dark blue");
// SESSION LIFETIME IN SECONDS (e.g. 7200 = 2 hours)
define("LIFETIME", false);
// TIMEZONE
define("TIMEZONE", "Asia/Shanghai");
// DEVELOPMENT MODE
define("DEVELOPMENT", false);
// EXTERNAL AUTHENTICATION
// define("AUTH_PATH", "/path/to/customauth.php");
// SECURITY HEADERS, SET TO FALSE TO DISABLE ALL
define ("HEADERS", serialize(array(
"Strict-Transport-Security: max-age=31536000; includeSubDomains; preload",
"X-Frame-Options: SAMEORIGIN",
"X-XSS-Protection: 1; mode=block",
"X-Content-Type-Options: nosniff",
"Referrer-Policy: no-referrer",
"Feature-Policy: sync-xhr 'self'",
"Access-Control-Allow-Origin: *"
)));
// ** DO NOT EDIT CONFIG BELOW **
// PATHS
define("COMPONENTS", BASE_PATH . "/components");
define("LIBRARIES", BASE_PATH . "/libraries");
define("PLUGINS", BASE_PATH . "/plugins");
define("DATA", BASE_PATH . "/data");
define("WORKSPACE", BASE_PATH . "/workspace");
define("UPDATEURL", "https://www.atheos.io/update");
define("MARKETURL", "https://www.atheos.io/market/json");
define("GITHUBAPI", "https://api.github.com/repos/Atheos/Atheos/releases/latest");
php.ini(上传到 IDE 的代码文件常超 2MB,务必调大 PHP 上传限制):
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
4.4 编写 docker-compose.yml 并启动
docker-compose.yml:
name: atheos-v601-stack
services:
atheos:
image: atheos:v601
container_name: atheos-v601-web
hostname: atheos-web
restart: unless-stopped
ports:
- "8130:80"
environment:
TZ: Asia/Shanghai
volumes:
- ./data:/var/www/html/data
- ./workspace:/var/www/html/workspace
- ./config.php:/var/www/html/config.php
- ./php.ini:/usr/local/etc/php/conf.d/atheos.ini:ro
启动与状态核对(实测回显):
$ docker compose up -d
Network atheos-v601-stack_default Creating
Network atheos-v601-stack_default Created
Container atheos-v601-web Creating
Container atheos-v601-web Created
Container atheos-v601-web Starting
Container atheos-v601-web Started
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
atheos-v601-web atheos:v601 "docker-php-entrypoi…" atheos 22 seconds ago Up 21 seconds 0.0.0.0:8130->80/tcp, [::]:8130->80/tcp
$ curl -s http://localhost:8130/ | grep -oE '<title>[^<]*</title>'
<title>Atheos IDE</title>
4.5 Web 初始化向导
首次访问 http://<宿主机IP>:8130/ 进入安装向导(依赖自检通过后)按表单填写:
- 用户名:
admin,密码:q1w2e3r4(演示账号) - 时区:
Asia/Shanghai,主题:dark blue - 初始项目名:
demo(向导会自动在workspace/下建同名目录)
向导字段与逐屏说明同裸机安装一致,见专栏《Ubuntu 22.04 安装 Atheos v601 指南》「七、初始化安装(Web 安装向导)」。
4.6 登录验证(接口级实测)
Atheos 前端所有请求经根目录 controller.php 网关分发(target=组件&action=动作),用 curl 做登录实测:
$ curl -s -c cookies.txt -X POST http://localhost:8130/controller.php \
-d 'target=user&action=authenticate&username=admin&password=q1w2e3r4'
{"username":"admin","lastLogin":"2026-10-27 17:43:06","text":"Successfully authenticated.","status":200}
返回 status:200 即登录成功,会话 Cookie 写入 cookies.txt,浏览器打开 http://<宿主机IP>:8130/ 即进入 IDE 主界面。
💡 说明:直接 POST
/components/user/controller.php会报Fatal error: Call to undefined function SESSION()——组件控制器不自带引导,且.htaccess本就 403 拦截/components/*.php直连,所有调用必须走根controller.php网关。
五、数据持久化说明
Atheos 是无数据库的平面文件应用,全部状态落在两个目录,必须持久化:
| 容器路径 | 内容 | 宿主机挂载 |
|---|---|---|
/var/www/html/data | 用户/项目/会话/日志(JSON 平面文件,含密码 bcrypt 哈希) | ./data |
/var/www/html/workspace | 用户代码项目文件 | ./workspace |
初始化完成后 ./data 实测落盘内容:
$ ls -la data/
drwxr-xr-x 5 www-data www-data 4096 Oct 27 17:43 .
drwxr-xr-x 4 root root 4096 Oct 27 17:43 ..
-rw-r--r-- 1 www-data www-data 405 Oct 27 17:42 analytics.db.json
drwxr-xr-x 2 www-data www-data 4096 Oct 27 17:42 cache
drwxr-xr-x 2 www-data www-data 4096 Oct 27 17:43 log
-rw-r--r-- 1 www-data www-data 22 Oct 27 17:42 projects.db.json
drwxr-xr-x 2 www-data www-data 4096 Oct 27 17:43 users
-rw-r--r-- 1 www-data www-data 391 Oct 27 18:15 users.json
$ cat data/projects.db.json
{
"demo": "demo"
}
$ cat data/users.json
{
"admin": {
"password": "$2y$10$KDMAMQWs9bLIV9tkEdKIP.S5HcgmuqQub7m9.p9maC7WMb5m38tqW",
"resetPassword": false,
"activeProject": "demo",
"creationDate": "2026-10-27 09:42:55",
"lastLogin": "2026-10-27 18:15:49",
"permissions": [
"configure",
"read",
"write"
],
"userACL": "full"
}
}
⚠️ 注意:挂载目录内文件属主会被容器改为
www-data(uid 33),宿主机直接编辑需sudo;删除数据须同时清data/与workspace/,仅删其一会导致登录后项目列表与磁盘不一致。
六、环境变量表
Atheos 本体是 PHP 平面文件应用,不读环境变量做配置(全部应用配置在 config.php,见第七节),compose 中可用环境变量仅有运行时层面的:
| 变量 | 作用 | 默认值 | 本文取值 |
|---|---|---|---|
TZ | 容器系统时区(Debian 基座生效) | UTC | Asia/Shanghai |
PHP_UPLOAD_MAX_FILESIZE 等 | php 基座镜像不支持 env 覆盖 ini,须用挂载 php.ini | — | 见 4.3 |
💡 技术拓展:与常见的「12-Factor 环境变量配置」应用不同,Atheos(继承自 Codiad)采用「单文件常量配置」模式——
define()常量写在config.php,运行时common.php加载。同类 PHP 应用里,phpList/Mailman 走 ini/php 配置文件,Nextcloud 走config.php+occ命令行覆写,Atheos 没有 CLI 覆写通道,改配置=改文件+重启容器(或静置等下次请求,PHP 无状态热读)。
七、配置文件挂载说明
| 宿主机文件 | 容器路径 | 模式 | 说明 |
|---|---|---|---|
./config.php | /var/www/html/config.php | rw | 主配置(初始化向导会回写 BASE_URL 等字段,故不能只读) |
./php.ini | /usr/local/etc/php/conf.d/atheos.ini | ro | PHP 运行参数,php 基座镜像自动加载 conf.d/*.ini |
挂载后容器内实测生效:
$ docker exec atheos-v601-web php -i | grep -E 'upload_max_filesize|memory_limit'
memory_limit => 256M => 256M
upload_max_filesize => 64M => 64M
⚠️ 注意:
config.php不能只读挂载——Web 初始化向导与「系统设置」保存时会回写该文件(如BASE_URL按首次访问域名落盘);只读会导致初始化提交后配置不生效且无明显报错。
八、等价 docker run
不用 Compose 时的等价命令(参数一一对应):
docker run -d \
--name atheos-v601-web \
--hostname atheos-web \
--restart unless-stopped \
-p 8130:80 \
-e TZ=Asia/Shanghai \
-v /opt/atheos-v601/data:/var/www/html/data \
-v /opt/atheos-v601/workspace:/var/www/html/workspace \
-v /opt/atheos-v601/config.php:/var/www/html/config.php \
-v /opt/atheos-v601/php.ini:/usr/local/etc/php/conf.d/atheos.ini:ro \
atheos:v601
九、常用运维命令
# 查看日志(Apache access/error 合并输出到 stdout)
docker compose logs -f --tail 100
# 进容器排障
docker exec -it atheos-v601-web bash
# 改 config.php / php.ini 后重启生效
docker compose restart
# 备份(无数据库,两目录即全量)
tar -czf atheos-backup-$(date +%F).tar.gz data/ workspace/ config.php
# 升级到新版(改 Dockerfile 中 tag 后重建并滚动替换)
docker compose up -d --build
十、常见问题
Q1:构建镜像时 ADD https://github.com/... 超时失败?
GitHub 直连不稳定时给 Docker 构建配代理:
docker build --build-arg http_proxy=http://192.168.1.62:7897 \
--build-arg https_proxy=http://192.168.1.62:7897 \
-t atheos:v601 .
注意 ADD <URL> 走的是 Docker 守护进程网络,--build-arg 代理对其不生效;守护进程侧需在 /etc/systemd/system/docker.service.d/http-proxy.conf 配代理后 systemctl restart docker。也可先用 curl -L 把 v601.tar.gz 下载到构建目录,把 ADD <url> 改为 COPY atheos-v601.tar.gz /tmp/。
Q2:浏览器直接访问 http://<IP>:8130/data/users.json 能下到用户哈希?
这是 .htaccess 未生效的典型症状(Apache AllowOverride None)。本文 Dockerfile 已 sed 修正,实测防护生效回显:
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8130/data/users.json
403
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8130/README.md
403
若返回 200,检查镜像是否开启 rewrite 模块与 AllowOverride All(docker exec atheos-v601-web a2query -m rewrite 应回 rewrite (enabled by site administrator))。
Q3:workspace/ 下的项目文件能被直接访问吗?
分后缀:.htaccess 内置规则拦截 txt|yml|md|xml|json,但 .html/.js/.css 等代码文件可直接匿名下载(实测 workspace/demo/hello.html 返回 200)。公网部署务必在入口加认证(反向代理 Basic Auth)或追加 Apache 加固配置,把 /workspace 整目录拒绝:
<Directory /var/www/html/workspace>
Require all denied
</Directory>
写入 atheos-harden.conf 后加挂载 - ./atheos-harden.conf:/etc/apache2/conf-enabled/atheos-harden.conf:ro 并 docker compose restart。
Q4:初始化提交后白屏或仍回向导页?
多为 data/ 目录不可写:确认宿主机 ./data 存在且容器内属主为 www-data(docker exec atheos-v601-web ls -la /var/www/html/data);手工修正 docker exec atheos-v601-web chown -R www-data:www-data /var/www/html/data /var/www/html/workspace。
Q5:官方 hlsiira/atheos:latest 与本文镜像能互换吗?
数据格式兼容(同为 JSON 平面文件),image: 互换后 up -d 即可;但官方镜像为 PHP 7.4 + main 开发线代码(.version 611),与 v601 存在界面/接口差异,生产不建议混用,迁移前按第九节备份。
十一、参考链接
- GitHub 仓库:
https://github.com/Atheos/Atheos(v601 Release:https://github.com/Atheos/Atheos/releases/tag/v601) - 官方镜像:
https://hub.docker.com/r/hlsiira/atheos;镜像构建仓库:https://github.com/Atheos/Atheos-Docker - 官网与文档:
https://www.atheos.io、https://github.com/Atheos/Atheos/blob/main/docs/DOCUMENTATION.md - 专栏文档:《Atheos v601 介绍与选型指南》《Ubuntu 22.04 安装 Atheos v601 指南》