PassNAT LogoPassNAT

走过的路全存自己 NAS:飞牛部署 Dawarich 位置轨迹库,出门也能翻

作者

小编

发布时间

Curving abstract shapes with an orange and blue gradient

项目介绍

Dawarich 是一个开源的位置轨迹库,可以看作 Google 时间线的自托管替代:手机、手表导出的轨迹丢进来,地图上就能回看走过的路,按年、按月统计走过多少公里、去过哪些城市。数据全存在自己家里,不交给任何地图软件。

项目源码:Freika/dawarich

官方文档:Dawarich Docs

部署安装

下面用飞牛 Docker Compose 部署,再通过 帕斯内网穿透 把它开放到公网,出门在外也能翻。

一、先把公网地址拿到手

Dawarich 有个特别的地方:编排里的 APPLICATION_HOSTS 必须填你实际访问它的地址。填错不是打不开页面,而是页面能看、表单提交全被拒——所以先把隧道建好,拿到地址再部署。

飞牛应用中心搜 PassNAT,装上内网穿透插件并打开;创建隧道,类型选 HTTP,域名自己起一个,本地地址留默认,端口填 3496(跟下面编排里对上);按电源通电,把公网地址记下来。

二、在飞牛 Docker 新建 Compose 项目

打开 Docker,切到 Compose,点新增项目。项目名称填 dawarich;路径挑一个空文件夹(我在「我的文件」下建了 mytrail-demo,里面建 dawarich-app);来源选「创建 docker-compose.yml」,把下面这段整个贴进去:

1services:
2 dawarich_redis:
3 image: redis:7.4-alpine
4 command: redis-server --save 900 1 --save 300 10 --appendonly no
5 volumes:
6 - dawarich_shared:/data
7 restart: always
8
9 dawarich_db:
10 image: postgis/postgis:17-3.5-alpine
11 shm_size: 1G
12 volumes:
13 - dawarich_db_data:/var/lib/postgresql/data
14 - dawarich_shared:/var/shared
15 environment:
16 POSTGRES_USER: postgres
17 POSTGRES_PASSWORD: ChangeMe_DbPass
18 POSTGRES_DB: dawarich_development
19 restart: always
20
21 dawarich_app:
22 image: freikin/dawarich:latest
23 volumes:
24 - dawarich_public:/var/app/public
25 - dawarich_watched:/var/app/tmp/imports/watched
26 - dawarich_storage:/var/app/storage
27 - dawarich_db_data:/dawarich_db_data
28 ports:
29 - "3496:3000"
30 stdin_open: true
31 tty: true
32 entrypoint: web-entrypoint.sh
33 command: ['bin/rails', 'server', '-p', '3000', '-b', '::']
34 restart: unless-stopped
35 environment:
36 RAILS_ENV: production
37 REDIS_URL: redis://dawarich_redis:6379
38 DATABASE_HOST: dawarich_db
39 DATABASE_PORT: 5432
40 DATABASE_USERNAME: postgres
41 DATABASE_PASSWORD: ChangeMe_DbPass
42 DATABASE_NAME: dawarich_development
43 APPLICATION_HOSTS: localhost,你的公网地址
44 TIME_ZONE: Asia/Shanghai
45 APPLICATION_PROTOCOL: http
46 SECRET_KEY_BASE: 换成你自己的长随机串
47 RAILS_LOG_TO_STDOUT: "true"
48 SELF_HOSTED: "true"
49 STORE_GEODATA: "true"
50 depends_on:
51 - dawarich_db
52 - dawarich_redis
53
54 dawarich_sidekiq:
55 image: freikin/dawarich:latest
56 volumes:
57 - dawarich_public:/var/app/public
58 - dawarich_watched:/var/app/tmp/imports/watched
59 - dawarich_storage:/var/app/storage
60 stdin_open: true
61 tty: true
62 entrypoint: sidekiq-entrypoint.sh
63 command: ['sidekiq']
64 restart: unless-stopped
65 environment:
66 RAILS_ENV: production
67 REDIS_URL: redis://dawarich_redis:6379
68 DATABASE_HOST: dawarich_db
69 DATABASE_PORT: 5432
70 DATABASE_USERNAME: postgres
71 DATABASE_PASSWORD: ChangeMe_DbPass
72 DATABASE_NAME: dawarich_development
73 APPLICATION_HOSTS: localhost,你的公网地址
74 APPLICATION_PROTOCOL: http
75 SECRET_KEY_BASE: 换成你自己的长随机串
76 RAILS_LOG_TO_STDOUT: "true"
77 SELF_HOSTED: "true"
78 STORE_GEODATA: "true"
79 depends_on:
80 - dawarich_db
81 - dawarich_redis
82 - dawarich_app
83
84volumes:
85 dawarich_db_data:
86 dawarich_shared:
87 dawarich_public:
88 dawarich_watched:
89 dawarich_storage:
90

几处要改成你自己的:口令三处(数据库的 POSTGRES_PASSWORD 和两处 DATABASE_PASSWORD)要填成一样的值;SECRET_KEY_BASE 换成一串长随机串。

最关键的是 APPLICATION_HOSTS:填你刚才拿到的公网地址(只写主机名,不要带 http://),localhost 也留着。这一步填错的症状就是上面说的「页面能开、提交全被拒」,很多人会以为是权限问题,其实是主机校验。

3496 是 NAS 对外的网页端口,容器内是 3000。数据全在具名卷里(dawarich_db_data 等五个),升级迁移都跟着 Docker 卷走。

勾上「创建项目后立即启动」,点确认,等镜像拉完、四个容器都跑起来。第一次启动要跑数据库迁移,多等一会儿。

初始化

浏览器打开公网地址。它自带一个默认账号(README 里的 Default Credentials:demo@dawarich.app / safepassword),登录后第一件事:右上角进 Account settings,把邮箱和口令换成你自己的。隧道一开,别人也可能碰到这个默认口令,这一步别拖。

把轨迹导进来

My data → Imports → New import。支持的格式很多:Google 时间线导出的 Records.json、GPX、GeoJSON、OwnTracks、KML、FIT、TCX、CSV 都行,手表手机导出的 GPX 直接丢进来。

导入是后台任务,状态变 Completed 就进库了,地图上立刻多出走过的轨迹。

看图

Map 页可以同时打开轨迹、热力图、时间线:哪天走了哪条线、走了多远都标着;热力图一眼看出常去的地方。Stats 页按年月统计总里程、去过多少国家多少城市。同一个地址在任何设备的浏览器里都打得开,出门在外照样翻。

让它自己记(可选)

不想手动导入也没关系:Dawarich 有官方 iOS / Android 客户端,也支持 OwnTracks、Overland、GPSLogger、PhoneTrack、Home Assistant 这些上报端。把上报地址指到你的公网地址,位置就会定时发回自己家的 NAS。