Ackee: cookieless web analytics on your own server
Visitor metrics without Google Analytics, without cookies and without a consent banner. It is the first thing worth installing on a new VPS: it comes up fast and confirms the server is working.
Short answer
Ackee is an open source, self-hosted web analytics tool that uses no cookies and stores no personal data, so in most cases you do not need a consent banner. It installs with Docker Compose in a couple of minutes, is very light, and shows visits, pages, referrers and devices. In exchange, it has no funnels or advanced segmentation.
- Last verified
- May 30, 2026
- Tested with
- Ackee 3.x con Docker Compose y MongoDB 6
Antes de empezar necesitas
- A VPS with Docker and Docker Compose
- A subdomain for the dashboard, for example metrics.yourdomain.com
- Access to your site's code to paste the script
Measuring visits should not cost your readers their privacy. Ackee is the minimum answer to that problem: it counts what you need to know and stores nothing that identifies anyone.
It is also the tool I recommend installing first on a new server. It is small, it starts in seconds, and if it works, it confirms that Docker, the proxy and DNS are all set up correctly.
1. Create the configuration file
mkdir -p /opt/ackee && cd /opt/ackee
nano docker-compose.yml
Paste this:
services:
ackee:
image: electerious/ackee
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
WAIT_HOSTS: mongo:27017
ACKEE_MONGODB: mongodb://mongo:27017/ackee
ACKEE_USERNAME: admin
ACKEE_PASSWORD: change_this_password
depends_on:
- mongo
mongo:
image: mongo:6
restart: unless-stopped
volumes:
- ackee-data:/data/db
volumes:
ackee-data:
2. Start the containers
docker compose up -d
Wait a few seconds: Ackee waits for MongoDB to respond before starting. Check with docker compose logs -f ackee that the server-ready message appears.
3. Publish the dashboard with HTTPS
Point your subdomain at the server and configure the reverse proxy towards 127.0.0.1:3000. If you use Cloudflare, leave the encryption mode on Full (strict) so the leg between Cloudflare and your server is encrypted too.
4. Connect your site
Log into the dashboard with the username and password you set, create a domain and copy the snippet it gives you. It goes right before the closing </body>:
<script async src="https://metricas.yourdomain.com/tracker.js"
data-ackee-server="https://metricas.yourdomain.com"
data-ackee-domain-id="YOUR_DOMAIN_ID"></script>
Open your site in a private window and in less than a minute you should see the first visit.
Common mistakes
Seeing no visits at all. It is almost always CORS: data-ackee-server has to match exactly the URL the script is served from, including the https://.
Counting your own visits. Ackee lets you ignore your own browser from the dashboard settings. Turn it on the first day or your numbers will be inflated for weeks.
Forgetting the MongoDB backup. The ackee-data volume is your entire history. Without a backup, a container recreated with -v wipes it.
Frequently asked questions
Do I really not need a cookie banner?
Ackee uses no cookies and stores no personal identifiers, which is what triggers the requirement under most privacy frameworks. Even so, the legal responsibility depends on your jurisdiction and on the other scripts your site loads. If you have advertising pixels, you still need the banner because of them.
How does it compare with Google Analytics?
Ackee covers the basics: visits, most viewed pages, referrers, browser, operating system and screen. It has no funnels, cohorts, attribution or ad integration. If your daily decision fits in 'what got read and where did they come from', it is more than enough.
Do ad blockers block it?
Less than they block Google Analytics, because the script is served from your own domain. It is not immune: some lists include known Ackee paths. Serving it from your own subdomain reduces the problem considerably.
What database does it use?
MongoDB. It is the only heavy dependency of the install and it is worth backing up: all your historical metrics live there.


