资讯详情

Dawarich 使用 Docker 自托管部署指南:从 docker-compose 快速安装到生产配置调优

📅 2026/9/15 20:15:52 | 华诺云谱 👁 阅读
Dawarich 使用 Docker 自托管部署指南:从 docker-compose 快速安装到生产配置调优
Dawarich 使用 Docker 自托管部署指南从 docker-compose 快速安装到生产配置调优【免费下载链接】dawarichYour favorite self-hostable alternative to Google Timeline (Google Location History)项目地址: https://gitcode.com/GitHub_Trending/da/dawarich导读本文是 Dawarich一款可自托管的 Google Timeline / Google Location History 替代品的 Docker 部署实战指南以仓库文档 docs/How_to_install_Dawarich_using_Docker.md 为主体结合仓库内的 docker/docker-compose.yml、.env.example 以及各容器入口脚本源码展开。读完本文你将掌握如何用一条docker compose up命令在自有服务器上拉起 Dawarich 全栈Web 应用、Sidekiq 后台任务、Redis、PostGIS 数据库理解每个服务与配置项的作用并学会调整端口、资源限制、时区、数据库凭据等关键参数完成生产化部署。前提条件先安装 Docker官方文档明确要求开始之前你需要先在系统上安装 Docker。推荐使用 Docker Compose v2docker compose子命令语法当前仓库的 docker/docker-compose.yml 未声明旧式version字段可直接被 Compose v2 解析。Docker 的安装方式与你的操作系统相关此处不再赘述但请确保docker与docker compose两条命令在你的终端中均可用docker --version docker compose version快速部署复制 docker-compose.yml 并一键启动官方文档给出的快速安装方式非常简单在服务器上创建一个专用文件夹将仓库根目录本项目内实际路径为 docker/docker-compose.yml中docker-compose.yml的完整内容复制到该文件夹在该文件夹内运行docker compose upDocker 会拉取镜像、创建网络与数据卷并按依赖顺序启动全部服务。首次启动需要下载 Redis、PostGIS 以及freikin/dawarich应用镜像耗时取决于网络状况。当命令执行成功、所有容器进入运行状态后即可通过 http://127.0.0.1:3000 打开 Dawarich 的 Web 界面。注意仓库根目录本身并未放置docker-compose.yml官方文档中“项目根目录”指发布包内的根位置在当前仓库中该文件位于 docker/docker-compose.yml直接复制该文件即可无需自行编写。另外 docs/synology/docker-compose.yml 提供了面向 NAS 场景的简化变体可作为对照参考。默认登录凭据第一次访问登录页面时使用文档给出的默认账号邮箱demodawarich.app密码safepassword默认种子账号由容器入口脚本执行rails db:seed时写入详见下文“首次启动发生了什么”登录后请立即修改密码并将默认演示数据替换为你自己的位置数据。深入解析 docker-compose.yml四个服务组成的全栈架构docker/docker-compose.yml 定义了 4 个服务、1 个自定义网络dawarich与 5 个命名数据卷。理解每个组件的职责是后续调优的前提。1. dawarich_redis缓存与后台任务队列dawarich_redis: image: redis:7.4-alpine command: redis-server --save 900 1 --save 300 10 --appendonly no volumes: - dawarich_shared:/dataRedis 同时承担 Sidekiq 任务队列与 Rails 缓存。它通过--save指令做了持久化兜底900 秒内至少 1 次写、300 秒内至少 10 次写即触发 RDB 快照--appendonly no关闭 AOF。dawarich_shared:/data将 Redis 数据落在共享卷上。健康检查用redis-cli incr ping探测实例活性。2. dawarich_dbPostGIS 数据库PostgreSQL 空间扩展Dawarich 是典型的地理位置应用数据库必须支持空间计算因此镜像直接选用postgis/postgis:17-3.5-alpinePostgreSQL 17 PostGIS 3.5dawarich_db: image: postgis/postgis:17-3.5-alpine # image: imresamu/postgis:17-3.5-alpine # If youre on ARM architecture, use this image instead shm_size: 1G environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} POSTGRES_DB: ${POSTGRES_DB:-dawarich_development}要点ARM 架构如 Apple Silicon、树莓派请改用被注释的imresamu/postgis:17-3.5-alpine镜像这是 compose 文件注释里官方明确给出的建议shm_size: 1G提高/dev/shm容量避免 PostgreSQL 并行查询时共享内存不足数据库账号、密码、库名均可用环境变量覆盖默认值分别为postgres/password/dawarich_development健康检查使用pg_isready应用容器只有在数据库健康后才启动。3. dawarich_appRails Web 应用Pumadawarich_app: image: freikin/dawarich:latest ports: - ${DAWARICH_APP_PORT:-3000}:3000 entrypoint: web-entrypoint.sh command: [bin/rails, server, -p, 3000, -b, ::]应用容器以 docker/web-entrypoint.sh 为入口启动 Puma 服务器监听 3000 端口并绑定::同时支持 IPv4/IPv6。宿主机端口默认也是 3000可通过DAWARICH_APP_PORT环境变量改绑例如改到8080DAWARICH_APP_PORT8080 docker compose up。容器还挂载了多个卷dawarich_public静态资源、dawarich_watched监控导入目录、dawarich_storageActive Storage 文件。健康检查通过请求应用自带的/api/v1/health端点并校验返回 JSON 中的status: ok来判断存活。4. dawarich_sidekiq后台任务执行器dawarich_sidekiq: image: freikin/dawarich:latest entrypoint: sidekiq-entrypoint.sh command: [sidekiq]Sidekiq 负责处理导入解析、反向地理编码、轨迹/访问点生成、统计计算等耗时任务仓库app/jobs/下可见大量此类 Job。它与 Web 容器共享镜像但入口换成 docker/sidekiq-entrypoint.sh并通过depends_on确保数据库、Redis、Web 应用全部健康后才启动。健康检查以pgrep -f sidekiq验证进程存在。服务间依赖与启动顺序Compose 文件中显式声明了健康检查级别的依赖condition: service_healthy确保启动顺序为dawarich_db、dawarich_redis→dawarich_app→dawarich_sidekiq。这是 Dawarich 首次启动能自动化建库、迁移并注入演示数据的关键保障。首次启动发生了什么入口脚本源码解读官方文档只描述了“运行docker compose up”这一步但仓库源码揭示了这一命令背后完整的一键初始化链路。docker/web-entrypoint.sh 在启动 Puma 之前会依次执行解析DATABASE_URL若设置了形如postgres://user:passhost:5432/dbname的连接串脚本会自动拆解为DATABASE_HOST/PORT/USERNAME/PASSWORD/NAME等离散变量清理残留 PID 文件删除tmp/pids/server.pid避免异常退出后端口被“僵尸 PID”占用导致无法重启同步静态资源镜像构建时预编译的资产位于public_dist启动时整体拷贝到持久卷public/保证升级镜像后前端资源及时更新建库调用createdb尝试创建DATABASE_NAME指定的数据库并用psql轮询等待数据库就绪执行迁移与种子bundle exec rails db:migrate # 结构迁移 bundle exec rake data:migrate # 数据迁移db/data_schema.rb bundle exec rails db:seed # 写入默认账号 demodawarich.app最后才exec bundle exec $启动 Rails 服务器。也就是说你不需要手动执行任何建库、迁移或初始化命令容器首次启动即自动完成demodawarich.app / safepassword正是由db:seed步骤写入的。关键环境变量一览开箱即用与生产化调优docker/docker-compose.yml 中所有environment均以${VAR:-default}形式支持外部覆盖完整模板见仓库 .env.example。以下是部署时最值得关注的变量环境变量默认值说明DAWARICH_APP_PORT3000宿主机映射端口映射为${DAWARICH_APP_PORT:-3000}:3000RAILS_ENVproduction容器内默认以生产模式运行DATABASE_HOST/DATABASE_PORTdawarich_db/5432数据库连接地址默认指向 compose 网络内的服务名DATABASE_USERNAME/DATABASE_PASSWORD/DATABASE_NAMEpostgres/password/dawarich_development数据库凭据生产环境务必修改REDIS_URLredis://dawarich_redis:6379Redis 连接串SECRET_KEY_BASECHANGE_MERails 密钥生产部署必须改为随机值可用bundle exec rails secret生成见 .env.example 注释APPLICATION_HOSTSlocalhost,::1,127.0.0.1允许访问的 Host 列表绑定域名后需加入你的域名TIME_ZONEEurope/London应用默认时区APPLICATION_PROTOCOLhttp使用 HTTPS 反向代理时应改为httpsWEB_CONCURRENCY1Puma worker 数家庭实例 1 个即可显著降低空闲内存compose 注释明确说明BACKGROUND_PROCESSING_CONCURRENCY3Sidekiq 并发线程数大导入时可临时调高SELF_HOSTEDtrue自托管模式标识STORE_GEODATAtrue是否存储地理原始数据PROMETHEUS_EXPORTER_ENABLEDfalse是否启用 Prometheus 指标导出LOG_MAX_SIZE/LOG_MAX_FILE100m/5json-file 日志轮转上限APP_CPU_LIMIT/APP_MEMORY_LIMIT0.50/4Gdeploy.resources.limits对应用容器的 CPU/内存上限OTP_ENCRYPTION_*空启用两步验证2FA时必需的三把密钥默认被注释修改方式在 compose 文件所在目录创建.env文件写入KEYvalue或在命令前以内联变量方式传入Compose 会自动读取。.env.example中还有 SMTP 邮件、反向地理编码服务商Photon/Nominatim/Geoapify/LocationIQ、路线视频保留策略等可选项按需启用。数据持久化五个命名卷各司其职docker compose down不会删除数据但docker compose down -v会。生产环境请妥善保管以下由 compose 底部定义的命名卷volumes: dawarich_db_data: # PostgreSQL 数据文件挂载到 /var/lib/postgresql/data dawarich_shared: # Redis 数据与跨容器共享文件/var/shared dawarich_public: # 预编译静态资源升级镜像时由入口脚本自动同步 dawarich_watched: # 监控导入目录tmp/imports/watched投放文件实现免操作导入 dawarich_storage: # Active Storage 用户上传文件导出包、视频、海报等建议定期对dawarich_db_data做备份dawarich_storage中的导出/媒体文件也应纳入备份策略。若需在不同宿主机间迁移直接迁移这些卷即可。常见调整场景修改对外端口DAWARICH_APP_PORT8080 docker compose up绑定自定义域名 HTTPS设置APPLICATION_HOSTS与APPLICATION_PROTOCOLhttps并用 Nginx/Caddy 反向代理参见 docs/how_to_setup_reverse_proxy.mdARM 设备将数据库镜像换成imresamu/postgis:17-3.5-alpine镜像构建层面对 amd64/arm64 均有支持docker/Dockerfile 中为两类架构分别适配了 jemalloc 与 maplibre 渲染库armv7 下服务端海报渲染不可用低内存主机保持WEB_CONCURRENCY1并可通过APP_MEMORY_LIMIT收紧上限镜像本身已启用 YJIT 与 jemalloc 内存优化启用 2FA取消注释并填写OTP_ENCRYPTION_PRIMARY_KEY、OTP_ENCRYPTION_DETERMINISTIC_KEY、OTP_ENCRYPTION_KEY_DERIVATION_SALT三把密钥以非 root 用户运行按 compose 注释设置PUID/PGID环境变量而非user:指令入口脚本会自动修正卷属主并以该用户重启进程。部署完成之后导入你的位置数据Web 界面就绪后即可开始使用。Dawarich 支持导入 Google 导出包、OwnTracks、Overland、GPX/KML/TCX 等多种数据来源仓库app/services/下可看到对应解析实现。其中“从照片提取地理数据”是常用功能详细步骤见 docs/How_to_extract_geodata_from_photos.md数据导入后可继续参考 docs/how_to_setup_reverse_proxy.md 配置域名访问。其他部署方式与延伸阅读Docker Compose 是官方推荐的最轻量自托管方式仓库还提供了另外两条部署路径与中文版本文档可按环境选用docs/How_to_install_Dawarich_on_Synology.md群晖 NAS 图形化安装配套 compose 见 docs/synology/docker-compose.ymldocs/How_to_install_Dawarich_in_k8s.mdKubernetes 集群部署中文版安装文档docs/zh-CN/How_to_install_Dawarich_using_Docker.md项目总体介绍与功能清单见 README.md。结语Dawarich 的 Docker 部署链路设计得相当自动化docker compose up一条命令即可完成“拉镜像 → 建库 → 迁移 → 种子数据 → 启动 Web 与 Sidekiq”的全部流程首次访问 http://127.0.0.1:3000 使用默认账号demodawarich.app / safepassword登录即可。生产化部署时请务必重点处理三件事修改数据库密码、替换SECRET_KEY_BASE、设置正确的APPLICATION_HOSTS与APPLICATION_PROTOCOL。在此基础上再根据你的硬件条件调整WEB_CONCURRENCY、内存上限与日志轮转参数即可获得一个稳定、私有的 Google Timeline 替代方案。【免费下载链接】dawarichYour favorite self-hostable alternative to Google Timeline (Google Location History)项目地址: https://gitcode.com/GitHub_Trending/da/dawarich创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。