ArchiSteamFarm (ASF) Steam trading-card farming bot with web IPC UI, using Docker Compose.
Last updated: Oct 2026
ArchiSteamFarm (ASF) logs in to one or more Steam accounts and idles your games to collect the trading cards you are entitled to, without you running Steam. It also handles redeeming keys and other account chores. The optional IPC web UI (ASF-ui) lets you manage bots from a browser.
Why you'd want it: Collect Steam trading cards automatically on an always-on server instead of leaving a gaming PC running.
| Item | Value |
|---|---|
| Stack folder | /opt/stacks/archisteamfarm |
| Category | Gaming |
| Main image | justarchi/archisteamfarm:released |
| Services | 1 |
| Web UI | http://<SERVER_IP>:30019 (IPC, optional) |
| Official docs | https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Docker |
.env/.secret files from Docker Folders and EnvironmentFolder layout:
/opt/stacks/
├── _shared/
│ ├── .env # shared, non-secret settings
│ └── .secret # passwords, tokens and keys (chmod 600, never commit)
└── archisteamfarm/
└── compose.yaml
/opt/appdata/archisteamfarm/ # persistent application data
/opt/stacks/archisteamfarm/compose.yaml:
---
services:
asf:
image: justarchi/archisteamfarm:released
container_name: archisteamfarm
hostname: archisteamfarm
env_file:
- /opt/stacks/_shared/.env
- /opt/stacks/_shared/.secret
logging:
driver: json-file
options:
max-file: ${DOCKERLOGGING_MAXFILE:-10} # Max number of log files
max-size: ${DOCKERLOGGING_MAXSIZE:-200k} # Max file size
volumes:
- /opt/appdata/archisteamfarm/config:/app/config
- /opt/appdata/archisteamfarm/logs:/app/logs
ports:
- 30019:1242 # Optional: only needed if you use ASF's IPC feature
restart: unless-stopped
Compose reads these from the shared files with --env-file. Replace every <PLACEHOLDER> with your own value.
/opt/stacks/_shared/.env:
PUID=1000
PGID=1000
TZ=<TZ>
DOCKERLOGGING_MAXFILE=10
DOCKERLOGGING_MAXSIZE=200k
| Variable | File | Purpose | Example |
|---|---|---|---|
PUID |
.env |
User ID the container runs as (see Docker Folders) | 1000 |
PGID |
.env |
Group ID the container runs as | 1000 |
TZ |
.env |
Time zone in tz database format, e.g. America/New_York | <TZ> |
DOCKERLOGGING_MAXFILE |
.env |
Number of rotated container log files to keep | 10 |
DOCKERLOGGING_MAXSIZE |
.env |
Maximum size of each container log file | 200k |
| Host port | Container port | Protocol | Service | Purpose |
|---|---|---|---|---|
| 30019 | 1242 | tcp | asf |
Optional: only needed if you use ASF's IPC feature |
| Host path | Container path | Service | Purpose |
|---|---|---|---|
/opt/appdata/archisteamfarm/config |
/app/config |
asf |
Bot and ASF configuration |
/opt/appdata/archisteamfarm/logs |
/app/logs |
asf |
ASF logs |
No limits are set. This app is light, so add deploy.resources.limits only if you need to cap it.
sudo mkdir -p /opt/stacks/archisteamfarm /opt/appdata/archisteamfarm
sudo chown -R $USER: /opt/stacks/archisteamfarm
/opt/stacks/_shared/.env and /opt/stacks/_shared/.secret (chmod 600 .secret)./opt/stacks/archisteamfarm/compose.yaml.cd /opt/stacks/archisteamfarm
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret config --quiet
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret up -d
docker compose logs -f./opt/appdata/archisteamfarm/config.config/MyBot.json with {"Enabled": true, "SteamLogin": "<STEAM_USER>", "SteamPassword": "<STEAM_PASSWORD>"}, or add the bot from the web UI.config/IPC.config so Kestrel listens on http://*:1242, and set an IPCPassword in ASF.json.docker attach archisteamfarm lets you type the code, Ctrl+P Ctrl+Q to detach).Tip: create a small wrapper such as
alias dc='docker compose --env-file /opt/stacks/_shared/.env --env-file /opt/stacks/_shared/.secret'so every stack uses the same env files.
cd /opt/stacks/archisteamfarm
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret pull
docker compose --env-file ../_shared/.env --env-file ../_shared/.secret up -d
docker image prune -f
Back up /opt/appdata/archisteamfarm before major upgrades. Watchtower can automate updates for stateless apps.
docker compose ps and docker compose logs --tail=100.IPC.config as above./app/config./opt/appdata/archisteamfarm private and out of Git.:?err): run the config command above to see which variable is not set in your env files.Educational example. Review every path, port and credential before you deploy, and never publish your .secret file.