Tự host LinkAce bookmark manager trên VPS thay Pocket

Chia sẻ bài viết

Mục lục
TL;DR
  • LinkAce là bookmark manager open source thay thế Pocket, Raindrop, Instapaper.
  • Docker Compose deploy trong 5 phút, dùng MySQL hoặc SQLite.
  • Full-text search, tag, folder, link checker, Wayback Machine archive tự động.
  • Browser extension Chrome/Firefox/Safari để save link 1 click.
  • VPS 2GB chạy thoải mái 50000+ bookmark, chi phí 199k/tháng.

Pocket bị Mozilla mua rồi quên, Raindrop free chỉ 3 collection, Instapaper UI cũ. Dev solo và knowledge worker VN cần bookmark manager tự host: data của mình, không bị shutdown bất ngờ, không export khó khăn. LinkAce là câu trả lời.

LinkAce viết bằng PHP 8 Laravel, UI clean, có browser extension, mobile app PWA. Mọi feature core đều miễn phí, không có gate paywall. Self-host trên Cloud VPS 2GB là vừa đẹp - dùng cá nhân hoặc team nhỏ 5-10 người.

Bài này hướng dẫn full setup: cài Docker, deploy LinkAce qua Compose, cấu hình nginx + SSL, import data từ Pocket export, dùng browser extension. Test trên Cloud VPS TND 2GB Ubuntu 24.04.

1. Vì sao chọn LinkAce thay các tool khác?

ToolSelf-hostFree tierSearchExtension
LinkAceCó (open source)FullFull-text
PocketKhôngLimited (5 archive)Tag only
RaindropKhông3 collectionFull (paid)
WallabagFullFull-text
ShaarliFullBasicBookmarklet

LinkAce vs Wallabag: cả 2 đều tốt. LinkAce UI mới hơn, có dashboard analytics. Wallabag mạnh ở Read-it-later (offline reading). Chọn LinkAce nếu muốn bookmark organizer, Wallabag nếu cần reader.

2. Cài Docker và Docker Compose

# Cài Docker trên Ubuntu 24.04
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

# Compose plugin
sudo apt install -y docker-compose-plugin

docker --version
docker compose version

3. Tạo docker-compose.yml cho LinkAce

mkdir -p /opt/linkace && cd /opt/linkace
nano docker-compose.yml
# /opt/linkace/docker-compose.yml
services:
  app:
    image: linkace/linkace:simple
    container_name: linkace
    restart: unless-stopped
    ports:
      - "127.0.0.1:8082:80"
    volumes:
      - ./backups:/app/storage/app/backups
      - ./logs:/app/storage/logs
    environment:
      DB_CONNECTION: mysql
      DB_HOST: db
      DB_PORT: 3306
      DB_DATABASE: linkace
      DB_USERNAME: linkace
      DB_PASSWORD: random_strong_password
      APP_URL: https://links.yourdomain.com
      APP_KEY: # tạo bằng lệnh php artisan key:generate
    depends_on:
      - db

  db:
    image: mariadb:11
    container_name: linkace-db
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: linkace
      MARIADB_USER: linkace
      MARIADB_PASSWORD: random_strong_password
      MARIADB_ROOT_PASSWORD: another_strong_root_password
    volumes:
      - ./db:/var/lib/mysql

4. Generate APP_KEY và start container

# Tạo APP_KEY ngẫu nhiên
docker run --rm linkace/linkace:simple php artisan key:generate --show
# Copy output dạng base64:xxxx... vào APP_KEY trong compose

docker compose pull
docker compose up -d

docker compose logs -f app | head -50

Khi log báo "Application started", LinkAce sẵn sàng ở port 8082. Test local trước:

curl -I http://127.0.0.1:8082
# HTTP/1.1 200 OK

5. Cài Caddy reverse proxy + SSL tự động

sudo apt install -y caddy
sudo nano /etc/caddy/Caddyfile
links.yourdomain.com {
    reverse_proxy 127.0.0.1:8082
    encode gzip

    # Tăng upload size cho import
    request_body {
        max_size 100MB
    }
}

sudo systemctl reload caddy

Trỏ DNS A record links.yourdomain.com -> IP VPS. Caddy auto cấp Let Encrypt SSL trong 30 giây. Truy cập https://links.yourdomain.com - LinkAce setup wizard hiện ra.

6. Setup wizard - tạo admin user

LinkAce wizard hỏi 3 bước:

  • Database test - tự pass nếu compose đúng.
  • App settings - tên app, timezone (Asia/Ho_Chi_Minh).
  • Admin user - email, password, name.

Sau khi xong, login bằng admin email. Dashboard hiện 0 link, sẵn sàng thêm bookmark đầu tiên.

7. Import bookmark từ Pocket/Raindrop/HTML

LinkAce hỗ trợ import từ nhiều nguồn. Export bookmark từ Pocket:

  • Pocket: vào getpocket.com/export, download HTML file.
  • Raindrop: settings -> Backups -> export HTML/CSV.
  • Browser bookmark: Chrome -> bookmarks -> export HTML.
# Trong LinkAce UI:
# Settings -> Import & Export -> Import Links
# Upload file HTML, chọn format
# Click Start Import - chờ 30s-5 phút tùy số lượng

# Hoặc CLI import nhanh hơn cho file lớn:
docker compose exec app php artisan links:import-html /app/storage/import.html

8. Cài browser extension

LinkAce có extension Chrome, Firefox, Safari. Cài từ store:

  • Chrome Web Store: search "LinkAce".
  • Firefox: addons.mozilla.org/firefox/addon/linkace/.
  • Safari: macOS App Store.

Sau khi cài, mở extension settings:

Instance URL: https://links.yourdomain.com
API Token: tạo trong LinkAce -> Profile -> API Tokens

Test: vào 1 trang web bất kỳ, click icon LinkAce -> Save Link. Trang sẽ được archive với title, description, tag tự động extract.

9. Auto archive với Wayback Machine

LinkAce có thể tự động submit link lên Wayback Machine để archive copy backup. Cấu hình:

  • Settings -> Backups -> Enable Wayback Archive.
  • Mỗi link được save sẽ trigger Wayback API.
  • Link broken sau này vẫn xem được bản gốc tại web.archive.org.

10. Link checker - tìm bookmark broken

LinkAce check link broken định kỳ. Setup cron trong container:

# Thêm vào docker-compose.yml
services:
  cron:
    image: linkace/linkace:simple
    container_name: linkace-cron
    restart: unless-stopped
    command: /bin/sh -c "while :; do php /app/artisan schedule:run; sleep 60; done"
    environment:
      <<: *common-env  # giống env app
    depends_on:
      - db

docker compose up -d cron

LinkAce sẽ check link 1 lần/ngày, mark broken nếu HTTP 404/500/timeout. Dashboard hiện badge red bên cạnh link broken.

11. Backup định kỳ ra S3

# Cron daily backup MySQL + storage
cat > /usr/local/bin/linkace-backup.sh <<'SH'
#!/bin/bash
set -e
cd /opt/linkace
TS=$(date +%Y%m%d-%H%M)

# Dump MySQL
docker compose exec -T db mariadb-dump -u root -p$ROOT_PWD linkace | gzip > /tmp/linkace-$TS.sql.gz

# Tar storage
tar -czf /tmp/linkace-storage-$TS.tar.gz backups logs

# Upload S3 (rclone đã config)
rclone copy /tmp/linkace-$TS.sql.gz r2:my-bucket/linkace/
rclone copy /tmp/linkace-storage-$TS.tar.gz r2:my-bucket/linkace/

# Cleanup
rm /tmp/linkace-$TS.*
SH
chmod +x /usr/local/bin/linkace-backup.sh

# Crontab
echo '0 2 * * * /usr/local/bin/linkace-backup.sh' >> /etc/crontab

12. Tips và tricks dùng LinkAce

  • Tag hierarchy: dùng dấu / như tech/ai/llm, lists tự sort theo tree.
  • Markdown notes: mỗi link có thể đính kèm note markdown dài, render trên detail page.
  • Public list: share 1 list public với URL riêng, không cần login.
  • RSS feed: mỗi list/tag có RSS, subscribe trong Feedly để theo dõi.
  • API REST: tích hợp với n8n, Zapier qua API token, automation flow.
  • Dark mode: Profile -> Theme -> Dark, đẹp mắt cho dev đêm hôm.
Cloud VPS cho vibe coder

Self-host bookmark manager riêng - data của bạn, mãi mãi

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. VPS 2GB chỉ 199k/tháng đủ chạy LinkAce + browser extension + 50000 bookmark.

Xem 8 cấu hình Cloud VPS →

FAQ

LinkAce có miễn phí hoàn toàn không?

Có. LinkAce open source MIT license, không có gate paywall, không có tier paid. Mọi feature đều free khi self-host. Chỉ tốn chi phí VPS chạy.

VPS RAM tối thiểu bao nhiêu để chạy LinkAce?

Khoảng 1GB RAM là đủ cho cá nhân với 10000 bookmark. VPS 2GB chạy thoải mái cho team 5-10 user và 50000+ bookmark. MariaDB ăn nhiều RAM nhất (~400MB).

Có app mobile cho LinkAce không?

Không có native app, nhưng PWA mobile responsive tốt. Add to Home Screen từ Safari/Chrome để dùng như app, có offline cache cho list mới xem.

Import 10000 link từ Pocket mất bao lâu?

Khoảng 5-15 phút tùy network. LinkAce fetch metadata (title, favicon, OG image) từng link nên hơi chậm. Disable fetch trong settings để import nhanh hơn 5x.

Có thể share bookmark với team không?

Có. LinkAce hỗ trợ multi-user. Admin tạo user trong settings. Mỗi user có bookmark riêng, list public/private/shared. Permission control theo list level.

LinkAce có search semantic AI không?

Phiên bản hiện tại có full-text search MySQL, chưa có semantic AI. Có thể tích hợp Meilisearch hoặc Elasticsearch qua plugin. Roadmap có AI search trong v2.

2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666