Prototype web panel for managing a Linux server in Go (single binary).
- Dashboard: CPU / RAM / Disk / Network (via
/proc, ~2s refresh). - Files: directory listing, text preview, download, upload (restricted to a root directory).
- Files: create folders/files, rename, delete (recursive), edit text files.
- Terminal (not interactive yet): run a command and view the output.
- Processes: process list (top by RSS).
go run ./cmd/atlas -config ./atlas.jsonAtlas publishes ready-to-use artifacts in GitHub Releases:
AppImage(x86_64).deb(x86_64/arm64).rpm(x86_64/arm64)tar.gz(x86_64/arm64)install.sh+SHA256SUMS.txt
Install the latest release:
curl -fsSL https://github.com/MrTeeett/Atlas/releases/latest/download/install.sh | bashThe installer can also initialize the config and create an admin user (it will offer random values for port / base_path / password and lets you override them):
curl -fsSL https://github.com/MrTeeett/Atlas/releases/latest/download/install.sh | bash -s -- --freshWhen run from a terminal, it will ask whether you want to set port / base_path / admin password manually (even with curl | bash).
Non-interactive setup via flags:
curl -fsSL https://github.com/MrTeeett/Atlas/releases/latest/download/install.sh | bash -s -- --fresh --port 8080 --base-path /atlas --admin-pass 'change-me-now'Install a specific version:
curl -fsSL https://github.com/MrTeeett/Atlas/releases/download/v0.0.1/install.sh | bash -s -- --version v0.0.1Dev channel (the dev release tag, assets are replaced on every push to main):
curl -fsSL https://github.com/MrTeeett/Atlas/releases/download/dev/install.sh | bash -s -- --version devForce a specific install method:
# auto|appimage|deb|rpm|tar
curl -fsSL https://github.com/MrTeeett/Atlas/releases/latest/download/install.sh | bash -s -- --method tarAfter installing via .deb/.rpm:
sudo systemctl enable --now atlasWhen installed via the release install.sh (as root), it will try to start the atlas service automatically if systemd is available.
Logging:
- Configure in
atlas.json:log_level(debug|info|warn|error|off),log_file,log_stdout. - Admin panel:
Admin→Logs(tail + download).
Update:
- In-app updater:
Settings→Update. - Stable builds update to the latest GitHub Release tag.
- Dev builds update from the
devtag (assets are replaced on each push tomain).
Daemon mode:
- If
daemonize: trueand Atlas is started from a TTY, it detaches (no stdout spam and the shell stays usable). - Run in foreground:
atlas -config /etc/atlas/atlas.json -foreground
Config and data locations (when installed via .deb/.rpm):
- config:
/etc/atlas/atlas.json - data/keys/users DB:
/var/lib/atlas/
The script builds the binary, generates a random port/base_path/password by default (and offers to enter your own if you decline), creates an admin user with full privileges, and prints the /login URL:
./deploy/install.shRequirements: bash, tar, go, plus curl or wget.
curl -fsSL https://raw.githubusercontent.com/MrTeeett/Atlas/main/deploy/remote_install.sh | bashYou can pass arguments through to the installer, for example:
curl -fsSL https://raw.githubusercontent.com/MrTeeett/Atlas/main/deploy/remote_install.sh | bash -s -- --dir /opt/atlas --freshIf you need to recreate the config/keys/users DB in the install directory:
./deploy/install.sh --dir /opt/atlas --freshAtlas prints the URL in logs on startup. You can also build the URL from atlas.json:
https://<host from listen><base_path>/login.
Config: atlas.json (JSON).
If atlas.json is missing, it is created automatically (default: everything is allowed, plus random listen and base_path).
The key and users DB are created next to the config:
atlas.master.key— 32 bytes (base64), keep it with0600permissionsatlas.users.db— encrypted users file
Create a login user (credentials are stored in the encrypted users DB):
go run ./cmd/atlas -config ./atlas.json user add -user admin -pass change-mePermissions (examples):
# Regular user: view/files within process permissions
go run ./cmd/atlas -config ./atlas.json user set -user alice -exec=false -procs=false -fs-sudo=false
# Admin: access to Terminal, process management, and FS identity switching
go run ./cmd/atlas -config ./atlas.json user set -user admin -role=admin -exec=true -procs=true -fs-sudo=true -fs-any=true
# Process access + files as sysdba (no Terminal)
go run ./cmd/atlas -config ./atlas.json user set -user ops -exec=false -procs=true -fs-sudo=true -fs-users=sysdbaBuild:
go build -trimpath -ldflags="-s -w" -o atlas ./cmd/atlasCopy:
scp ./atlas user@server:/opt/atlas/atlas
scp ./atlas.json user@server:/opt/atlas/atlas.jsonTunnel:
ssh -L 8080:127.0.0.1:8080 user@server- The release
install.shinitializer binds to0.0.0.0:<random-port>by default so you can access it remotely. This is risky on an internet-facing server — prefer SSH tunnel or a reverse proxy with TLS + firewall/IP allowlist. - Atlas always serves UI/API over HTTPS. If
tls_cert_file/tls_key_fileare not configured, it auto-generates a self-signed certificate (atlas.tls.crt+atlas.tls.key) next toatlas.json. - For public access, replace the auto-generated certificate with a trusted one (for example via
Settings -> HTTPS) to avoid browser certificate warnings. enable_exec: trueenables executing shell commands on the server from the browser — this is dangerous. If you enable it, use TLS, strong credentials, restrict the root, and preferably run under a dedicated low-privilege user.- Switching FS user in
Filesworks viasudo -n -u <user> atlas fs-helper ...and requires asudoers(NOPASSWD) rule for the Atlas binary; otherwise you'll get403instead of500. Example (service useratlas, binary/opt/atlas/atlas, allow onlysysdba):/etc/sudoers.d/atlas:atlas ALL=(sysdba) NOPASSWD: /opt/atlas/atlas fs-helper *
Example unit: deploy/atlas.service (adjust the path and atlas.json to your setup).
Create a user on the server:
/opt/atlas/atlas -config /opt/atlas/atlas.json user add -user admin -pass change-me