We use podman to simplify the deployment.
First, put these files on your linux machine:
/etc/containers/systemd/vtstats-database.container
[Unit]Description=vtstats postgresql database
[Container]Image=docker.io/groonga/pgroonga:latest-debian-15
Exec=-c shared_preload_libraries='pg_stat_statements' -c pg_stat_statements.max=10000 -c pg_stat_statements.track=all
ContainerName=vtstats-database
IP=10.88.0.10
AutoUpdate=local
Network=podman
LogDriver=journald
EnvironmentFile=/path/to/your/vtstats.env
Volume=/path/to/your/postgres:/var/lib/postgresql/data
[Service]Restart=always
TimeoutStartSec=900
[Install]WantedBy=multi-user.target default.target/etc/containers/systemd/vtstats-api.container
[Container]Image=ghcr.io/vtstats/server:latest
Exec=api
ContainerName=vtstats-api
IP=10.88.0.11
AutoUpdate=registry
Network=podman
LogDriver=journald
EnvironmentFile=/path/to/vtstats.env
[Service]Restart=always
TimeoutStartSec=900
[Install]WantedBy=multi-user.target default.target/etc/containers/systemd/vtstats-worker.container
[Container]Image=ghcr.io/vtstats/server:latest
Exec=worker
ContainerName=vtstats-worker
IP=10.88.0.12
AutoUpdate=registry
Network=podman
LogDriver=journald
EnvironmentFile=/path/to/vtstats.env
[Service]Restart=always
TimeoutStartSec=900
[Install]WantedBy=multi-user.target default.target/path/to/vtstats.env
# serverSERVER_HOSTNAME=SERVER_ADDRESS=# databasePOSTGRES_PASSWORD=POSTGRES_USER=POSTGRES_DB=DATABASE_URL=# youtubeYOUTUBE_PUBSUB_SECRET=YOUTUBE_API_KEYS=INNERTUBE_API_KEY=INNERTUBE_CLIENT_NAME=INNERTUBE_CLIENT_VERSION=# bilibiliBILIBILI_COOKIE=# telegramTELEGRAM_BOT_TOKEN=TELEGRAM_SECRET_TOKEN=# discordDISCORD_APPLICATION_ID=DISCORD_APPLICATION_PUBLIC_KEY=DISCORD_BOT_TOKEN=# s3S3_PUBLIC_URL=S3_HOST=S3_REGION=S3_BUCKET=S3_KEY_ID=S3_ACCESS_KEY=# admin apiADMIN_USER_EMAIL=GOOGLE_CLIENT_ID=# twitchTWITCH_CLIENT_ID=TWITCH_CLIENT_SECRET=TWITCH_WEBHOOK_SECRET=Then start the database and run migration
sudo systemctl daemon-reload
sudo systemctl start vtstats-database
sudo podman run -it -e DATABASE_URL=YOUR_DATABASE_URL ghcr.io/vtstats/server:latest database-migrateFinally, start the api server and job worker:
sudo systemctl start vtstats-api
sudo systemctl start vtstats-worker
# check status
sudo systemctl status 'vtstats-*'# view log
sudo journalctl -u vtstats-api --since '1 min ago' -fsudo podman pull ghcr.io/vtstats/server:latest
sudo podman run -it -e DATABASE_URL=YOUR_DATABASE_URL ghcr.io/vtstats/server:latest database-migrate
sudo podman auto-update/etc/grafana-agent.yaml
server:
log_level: infometrics:
wal_directory: /tmp/agentglobal:
scrape_interval: 60sremote_write:
- url: your-urlconfigs:
- name: webscrape_configs:
- job_name: webstatic_configs:
- targets: ["10.88.0.11:9000"]
- name: workerscrape_configs:
- job_name: workerstatic_configs:
- targets: ["10.88.0.12:9000"]logs:
configs:
- name: journalclients:
- url: your-urlpositions:
filename: /tmp/agent/positions.yamlscrape_configs:
- job_name: journaljournal:
json: falsemax_age: 6hpath: /var/log/journalrelabel_configs:
- action: keepsource_labels: ["__journal__systemd_unit"]regex: .*vtstats.*
- source_labels: ["__journal__systemd_unit"]target_label: unitpipeline_stages:
- json:
drop_malformed: trueexpressions:
level: leveltimestamp: timestampmessage: message
- timestamp:
source: timestampformat: RFC3339Nano
- labels:
level:
- output:
source: messageintegrations:
node_exporter:
enabled: true