kv-tiktok/README.md

265 lines
No EOL
5.9 KiB
Markdown

# kv-tiktok
**Self-hosted TikTok viewer** — A clean, ad-free TikTok client you can run on your own NAS or server.
## Features
- **For You Feed** — Video feed from popular TikTok creators
- **Search** — Search videos and users
- **Following** — Track your favorite creators
- **Download** — Download videos directly
- **Autoplay** — Muted autoplay with tap-to-unmute
- **Mobile-friendly** — Responsive design for any screen
- **Docker-ready** — Single container, easy deployment on Synology NAS
- **Object-fit contain** — Videos preserve original aspect ratio with letterboxing
## Architecture
- **Backend**: Python FastAPI with Playwright for TikTok interaction
- **Frontend**: React + Vite (SPA)
- **Platform**: `linux/amd64` (compatible with Synology NAS x86/x64 models)
- **Video source**: CDN-first with fallback proxy, forces full download for playback
## Prerequisites
- Docker and Docker Compose installed
- For Synology NAS: Container Manager (Docker) package installed
- Minimum 2GB RAM recommended for browser automation
## Quick Start
### Clone and Run
```bash
git clone https://github.com/vndangkhoa/kv-tiktok.git
cd kv-tiktok
docker compose up -d --build
```
Access at `http://your-server-ip:8002`
---
## Synology NAS Deployment
### Option 1: Build on NAS via SSH (Recommended)
**Requirements**: SSH access enabled on your NAS (Control Panel → Terminal & SNMP → Enable SSH)
```bash
# SSH into your NAS
ssh admin@your-nas-ip
# Navigate to your shared folder
cd /volume1/docker
# Clone the repository
git clone https://github.com/vndangkhoa/kv-tiktok.git
cd kv-tiktok
# Build and start
docker compose up -d --build
# Watch logs to confirm it's running
docker compose logs -f
```
Once running, access at `http://your-nas-ip:8002`
### Option 2: Build on PC, Deploy via GUI
If your NAS has limited resources:
**Step 1: Build on your PC**
```bash
git clone https://github.com/vndangkhoa/kv-tiktok.git
cd kv-tiktok
docker build -t kv-tiktok:latest .
docker save kv-tiktok:latest -o kv-tiktok.tar
```
**Step 2: Transfer to NAS**
Copy `kv-tiktok.tar` to your NAS using File Station or SCP:
```bash
scp kv-tiktok.tar admin@your-nas-ip:/volume1/docker/
```
**Step 3: Import via Container Manager**
1. Open **Container Manager** on your Synology
2. Go to **Registry****Image****Import**
3. Select `kv-tiktok.tar` from the shared folder
4. Wait for import to complete
**Step 4: Create Container**
1. Go to **Container****Create**
2. Select image: `kv-tiktok:latest`
3. Configure:
| Setting | Value |
|---------|-------|
| Container Name | `kv-tiktok` |
| Port Settings | Local: `8002` → Container: `8002` |
| Memory Limit | Minimum `2GB` |
| Shared Memory | `2GB` |
4. **Volume Settings**: Click **Add Folder**
- Create a folder named `kv-tiktok-cache` in your shared folder
- Mount path: `/app/cache`
5. **Environment Variables**: Click **Add**
- `PYTHONUNBUFFERED` = `1`
- `ADMIN_PASSWORD` = `your_secure_password`
6. **Restart Policy**: Select `unless-stopped`
7. Click **Apply**
**Step 5: Verify**
```bash
# Check container is running
docker ps
# Check logs
docker logs kv-tiktok
```
### Option 3: Via docker-compose (SSH)
```bash
# On your NAS via SSH
cd /volume1/docker/kv-tiktok
docker compose up -d
docker compose logs -f
```
---
## First-Time Setup (TikTok Cookies)
The app requires TikTok session cookies to load the feed.
### Get Your Cookies (Desktop Recommended)
1. Install [Cookie-Editor](https://chrome.google.com/webstore/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) browser extension
2. Go to [tiktok.com](https://www.tiktok.com) and log in to your account
3. Click the Cookie-Editor icon → **Export****Copy** (select "Export as JSON")
4. Save the exported JSON to `cookies.json` file in the project directory
5. Restart the container:
```bash
docker compose restart
```
### Alternative: Setup via Admin Page
1. Start the container and visit `http://your-server-ip:8002/admin`
2. Login with default password: `admin123` (change this!)
3. Follow on-screen instructions to paste cookies
---
## Configuration
### Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `PYTHONUNBUFFERED` | `1` | Real-time Python logging |
| `ADMIN_PASSWORD` | `admin123` | Password for `/admin` page |
### Volumes
| Path | Description |
|------|-------------|
| `/app/cache` | Video cache (LRU, max usage limited by disk space) |
| `/app/cookies.json` | TikTok session cookies (persist across restarts) |
### Health Check
The container includes a health check endpoint. You can verify with:
```bash
curl http://localhost:8002/health
# Expected: {"status":"ok"}
```
---
## Troubleshooting
### Videos Not Loading
```bash
# Check backend health
curl http://localhost:8002/health
# View logs
docker compose logs -f
# Verify cookies exist
cat cookies.json
```
### Container Won't Start
```bash
# Check logs
docker compose logs
# Verify port 8002 is not in use
netstat -tlnp | grep 8002
```
### Out of Memory
Increase memory limits or clear cache:
```bash
# Clear video cache
rm -rf ./cache/*
docker compose restart
```
### Update to Latest Version
```bash
git pull
docker compose up -d --build
```
---
## Project Structure
```
kv-tiktok/
├── backend/
│ ├── api/routes/ # API endpoints
│ ├── core/ # Core services (Playwright, Crawler)
│ └── main.py # FastAPI application
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ └── App.tsx
│ └── package.json
├── Dockerfile # Multi-stage build
├── docker-compose.yml # Container orchestration
└── README.md
```
## Synology NAS Compatibility
Tested on Synology models with x86/x64 processors. For ARM-based models (e.g., DS220+, DS920+), the `linux/amd64` image works via emulation, but performance may be slower.
## License
MIT License