Akaunting 3.1 — 自架複式記帳系統¶
Overview¶
Akaunting 是一套開源、網頁式會計系統,採用 PHP/Laravel 框架開發,支援複式記帳(Double-Entry Bookkeeping)。Akaunting 提供發票、付款、收款、客戶管理、供應商管理、銀行帳戶、損益表、資產負債表等功能,適合中小型機構使用。
本條目所描述的 Akaunting 3.1 實例,部署於 benhoweb.com 的 Oracle Cloud Infrastructure(OCI)Ampere A1(ARM64)運算實例上,屬於自架(Self-hosted)服務。部署方式以 Dockhand 作 Git-based stack 管理,所有敏感資料如資料庫密碼、管理員密碼等,不直接寫入 compose 檔案,而是經由 Dockhand 的環境變數與 secrets 注入。
目前服務公開網址為 https://akaunting.benhoweb.com。
Architecture¶
Akaunting 部署採用「單一 ARM64 主機 + 兩個 Docker 容器」的架構:
-
Akaunting 應用程式容器
使用akaunting/akaunting:latest映像,指定platform: linux/arm64,以配合 Oracle Ampere A1 的 ARM64 架構。容器內執行 Akaunting 3.1(對應 Docker Hub 的 latest 版本標籤),並以 named volumeakaunting-data掛載/var/www/html保存程式檔案與上傳檔案。 -
MariaDB 資料庫容器
使用mariadb:11.4映像,同樣指定platform: linux/arm64。此容器作為 Akaunting 的資料庫服務,容器名稱/服務名稱是akaunting-db。Akaunting 透過DB_HOST=akaunting-db在 Docker network 內連接。
兩個容器都位於 Docker 自訂 bridge network cf_network 內。Akaunting 容器固定使用 IPv4 172.21.0.61;資料庫容器則一般配置為 172.21.0.62,避免重新建立容器時 IP 漂移。應用程式與資料庫之間透過 depends_on 與 healthcheck 控制啟動順序。
對外連線方面,Akaunting 容器不開放任何 host port。Cloudflare Tunnel 直接將 akaunting.benhoweb.com 的流量轉發至 172.21.0.61:80。因此主機層面沒有對外暴露的 HTTP 埠,符合「最少暴露面」的安全政策。
Deployment¶
部署工作由 Dockhand 負責。Dockhand 的 stack 定義存放在 Git repository 內,包含 docker-compose.yml、環境變數範本及 secrets 參照。當 Git repository 有新的 commit 或 tag,Dockhand 便會在主機上執行部署:
services:
akaunting:
image: akaunting/akaunting:latest
platform: linux/arm64
restart: unless-stopped
networks:
cf_network:
ipv4_address: 172.21.0.61
volumes:
- akaunting-data:/var/www/html
environment:
AKAUNTING_SETUP: ${AKAUNTING_SETUP:-false}
APP_URL: https://akaunting.benhoweb.com
LOCALE: en-US
DB_HOST: akaunting-db
DB_PORT: "3306"
DB_NAME: akaunting
DB_USERNAME: akaunting
DB_PASSWORD: ${AKAUNTING_DB_PASSWORD}
DB_PREFIX: ${AKAUNTING_DB_PREFIX}
COMPANY_NAME: ${AKAUNTING_COMPANY_NAME}
COMPANY_EMAIL: ${AKAUNTING_COMPANY_EMAIL}
ADMIN_EMAIL: ${AKAUNTING_ADMIN_EMAIL}
ADMIN_PASSWORD: ${AKAUNTING_ADMIN_PASSWORD}
depends_on:
akaunting-db:
condition: service_healthy
資料庫服務的 compose 定義大致如下:
akaunting-db:
image: mariadb:11.4
platform: linux/arm64
restart: unless-stopped
networks:
cf_network:
ipv4_address: 172.21.0.62
volumes:
- akaunting-db-data:/var/lib/mysql
environment:
MARIADB_DATABASE: akaunting
MARIADB_USER: akaunting
MARIADB_PASSWORD: ${AKAUNTING_DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${AKAUNTING_DB_ROOT_PASSWORD}
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
第一次部署時,可將 AKAUNTING_SETUP 設為 true,或者直接提供 COMPANY_NAME、ADMIN_EMAIL、ADMIN_PASSWORD 等環境變數,讓 Akaunting 在容器啟動時自動初始化。Dockhand 的 secrets 功能會確保密碼不會寫入 Git 或 compose 檔案。
Configuration¶
Akaunting 的設定主要由容器環境變數控制。以下是常用的變數:
AKAUNTING_SETUP:控制是否執行網頁安裝程式。預設為false,首次部署時通常設為true。APP_URL:應用程式公開網址,必須為https://akaunting.benhoweb.com。LOCALE:介面語系,目前使用en-US。DB_HOST:資料庫服務名稱,即akaunting-db。DB_PORT:MariaDB 連接埠,固定為3306。DB_NAME:資料庫名稱,為akaunting。DB_USERNAME:資料庫使用者,為akaunting。DB_PASSWORD:由 Dockhand environment 注入,不會以明文儲存於 Git。DB_PREFIX:資料表字首,可由 Dockhand secret 指定,避免共用資料庫時衝突。COMPANY_NAME、COMPANY_EMAIL:Akaunting 初始化時的機構資料。ADMIN_EMAIL、ADMIN_PASSWORD:系統管理員帳號密碼,經 Dockhand secrets 注入。
MariaDB 方面,MARIADB_DATABASE、MARIADB_USER 與 Akaunting 的 DB_NAME、DB_USERNAME 必須一致;MARIADB_ROOT_PASSWORD 只應存放在 Dockhand secret,不應進入 public repository。
Operations¶
日常操作均建議透過 Dockhand 或 docker compose 指令完成。
- 更新 Akaunting:更新 Dockhand repository 中
akaunting/akaunting:latest對應的版本,然後執行 Dockhand deploy。即時操作時,可使用docker compose pull akaunting與docker compose up -d akaunting。 - 查看日誌:
docker compose logs -f akaunting可追蹤 PHP 錯誤、HTTP 請求及資料庫連線紀錄。 - 備份:需要備份兩部分。第一部分是 Akaunting 的 named volume
akaunting-data;第二部分是 MariaDB 資料庫。可使用docker compose exec akaunting-db mariadb-dump -u akaunting -p"$AKAUNTING_DB_PASSWORD" akaunting > akaunting-db.sql匯出 SQL。 - 還原:先恢復
akaunting-datavolume,再將 SQL dump 匯入 MariaDB。操作前應停用 Cloudflare Tunnel 或暫時停止 Akaunting 容器,避免資料不一致。 - 健康檢查:可使用
docker compose ps查看兩個容器是否有Up (healthy)狀態;亦可直接瀏覽https://akaunting.benhoweb.com確認登入頁面正常。
FAQ¶
Q:Akaunting 3.1 是指那個版本?
A:本條目對應 Docker Hub 的 akaunting/akaunting:latest 映像。截至本網站建立紀錄,該映像的穩定版本線為 Akaunting 3.1,故此命名。
Q:為何 Akaunting 不直接對外開 port?
A:按照 benhoweb.com 的安全政策,所有容器不直接暴露 host port。Cloudflare Tunnel 是唯一的入口,只將網域流量轉發到內部容器 IP 172.21.0.61:80。
Q:如果我的服務跑在 Oracle Ampere A1,會比 x86 主機有問題嗎?
A:不會。Akaunting 與 MariaDB 都有提供 ARM64 映像。compose 內明確加入 platform: linux/arm64,確保 Docker 不會誤用其他架構的映像。
Q:Dockhand 如何處理密碼?
A:Dockhand 支援 secrets management。部署時,Dockhand 會把 ${AKAUNTING_DB_PASSWORD}、${AKAUNTING_ADMIN_PASSWORD} 等變數從安全環境中讀取,再注入容器環境。這些秘密不會寫入 Git。
Q:需要定期備份嗎?
A:需要。至少每日備份 MariaDB 的 SQL dump,以及定期備份 akaunting-data volume。若 Akaunting 安裝套件或上傳附件有變更,更要保留 volume 備份。
Related Links¶
- docker
- cloudflare-tunnel
- MariaDB
- oracle-cloud
- dockhand
- litellm
- Self-hosted
Source¶
Coverage auto (container scan)