Linux Terminal Glossary
›
Self-Hosting
Self-Hosting
220 commands
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl reload nginx
sudo systemctl restart nginx
sudo nginx -t
sudo nginx -T
nginx -v
sudo nano /etc/nginx/nginx.conf
sudo nano /etc/nginx/sites-available/myapp
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/myapp
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
sudo cat /etc/nginx/sites-available/default
sudo gzip -t /var/log/nginx/access.log.1.gz
sudo apt install caddy
caddy version
caddy run
caddy start
caddy stop
caddy reload
caddy validate --config /etc/caddy/Caddyfile
caddy fmt --overwrite /etc/caddy/Caddyfile
sudo nano /etc/caddy/Caddyfile
journalctl -u caddy -f
caddy adapt --config /etc/caddy/Caddyfile
docker run -d --name traefik -p 80:80 -p 443:443 -p 8080:8080 traefik:v3.0
traefik version
traefik healthcheck
docker logs -f traefik
curl http://localhost:8080/api/rawdata
curl http://localhost:8080/ping
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot certonly --standalone -d example.com
sudo certbot renew
sudo certbot renew --dry-run
sudo certbot certificates
sudo certbot delete --cert-name example.com
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
openssl x509 -enddate -noout -in /etc/letsencrypt/live/example.com/cert.pem
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
sudo ls -la /etc/letsencrypt/live/
sudo ufw status
sudo ufw status verbose
sudo ufw enable
sudo ufw disable
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 'Nginx Full'
sudo ufw deny 3306
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 1.2.3.4 to any port 22
sudo ufw delete allow 80/tcp
sudo ufw reset
sudo ufw logging on
sudo ufw app list
sudo ufw limit ssh
sudo iptables -L -n -v
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-restore < /etc/iptables/rules.v4
sudo nano /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp
sudo systemctl stop myapp
sudo systemctl disable myapp
sudo journalctl -u myapp -n 100 --no-pager
sudo journalctl -u myapp -f
sudo journalctl -u myapp --since '1 hour ago'
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
sudo systemctl edit myapp
docker compose up -d --pull always
docker compose logs -f servicename
docker compose restart servicename
docker compose exec servicename bash
docker compose build --no-cache
docker compose scale servicename=3
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
docker exec -it portainer /bin/sh
docker pull portainer/portainer-ce:latest
curl -I http://localhost:3000
curl -sv https://example.com 2>&1 | head -30
curl -H 'Host: example.com' http://localhost
ss -tlnp
ss -tlnp | grep :80
netstat -tlnp
lsof -i :443
dig example.com A
dig example.com AAAA
dig example.com TXT
dig example.com NS
dig +trace example.com
cat /etc/hosts
sudo nano /etc/hosts
cat /etc/resolv.conf
resolvectl status
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
sudo nano /etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo wg-quick down wg0
sudo systemctl enable --now wg-quick@wg0
sudo wg show
sudo wg showconf wg0
cloudflared tunnel login
cloudflared tunnel create mytunnel
cloudflared tunnel route dns mytunnel app.example.com
cloudflared tunnel run mytunnel
cloudflared tunnel list
cloudflared tunnel info mytunnel
cloudflared tunnel delete mytunnel
sudo cloudflared service install
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt
openssl verify -CAfile ca.crt server.crt
openssl x509 -in cert.pem -text -noout
openssl pkcs12 -export -out bundle.p12 -inkey server.key -in server.crt
sudo apt install postgresql
sudo systemctl start postgresql
sudo -u postgres psql
sudo -u postgres createdb myapp_db
sudo -u postgres createuser myapp_user
pg_dump -U myapp_user myapp_db > backup.sql
pg_dump -U myapp_user -Fc myapp_db > backup.dump
psql -U myapp_user -d myapp_db < backup.sql
pg_restore -U myapp_user -d myapp_db backup.dump
sudo apt install mysql-server
sudo mysql_secure_installation
mysql -u root -p
mysqldump -u root -p myapp_db > backup.sql
mysql -u root -p myapp_db < backup.sql
sqlite3 myapp.db .dump > backup.sql
sqlite3 myapp.db < backup.sql
docker run -d -p 9090:9090 --name prometheus -v prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
docker run -d -p 3000:3000 --name grafana grafana/grafana
docker run -d -p 9100:9100 --name node-exporter -v /proc:/host/proc -v /sys:/host/sys prom/node-exporter
curl http://localhost:9090/api/v1/query?query=up
iostat -x 1 5
du -sh /var/lib/docker
watch -n 5 'df -h'
dmesg | tail -20
rsync -avz /data/ user@remote:/backup/data/
rsync -avz --delete /data/ user@remote:/backup/data/
rsync -avz --exclude='node_modules' /app/ user@remote:/backup/app/
tar -czf backup-$(date +%Y%m%d).tar.gz /data
tar -xzf backup.tar.gz -C /restore/
0 2 * * * /usr/local/bin/backup.sh
sudo apt install borgbackup
borg init --encryption=repokey user@remote:/backup/borg-repo
borg create user@remote:/backup/borg-repo::'{hostname}-{now}' /data
borg list user@remote:/backup/borg-repo
borg extract user@remote:/backup/borg-repo::archive-name
borg prune --keep-daily=7 --keep-weekly=4 user@remote:/backup/borg-repo
sudo apt install fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 1.2.3.4
sudo nano /etc/fail2ban/jail.local
sudo nano /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl restart sshd
sudo passwd -l root
sudo apt-get update && sudo apt-get upgrade -y
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
sudo lynis audit system
sudo chkrootkit
sudo rkhunter --check
sudo chmod 600 ~/.ssh/authorized_keys
sudo chown root:root /etc/ssh/sshd_config && sudo chmod 600 /etc/ssh/sshd_config
cp .env.example .env
cat .env | grep -v '^#' | grep -v '^$'
sudo nano /etc/environment
docker secret create mysecret secret.txt
docker pull ghcr.io/immich-app/immich-server:release
docker pull lscr.io/linuxserver/nextcloud:latest
docker pull vaultwarden/server:latest
docker pull ghcr.io/paperless-ngx/paperless-ngx:latest
docker pull gitea/gitea:latest
docker pull jellyfin/jellyfin:latest
docker pull plausible/analytics:latest
docker pull n8nio/n8n:latest
docker pull homeassistant/home-assistant:stable
docker pull freshrss/freshrss
docker network create app-network
docker network inspect app-network
docker volume inspect myapp_data
docker volume rm myapp_data
ssh-keygen -t ed25519 -C 'server@example.com'
ssh-copy-id user@server-ip
ssh -i ~/.ssh/id_ed25519 user@server-ip
scp -r ./app user@server-ip:/srv/app
sudo hostnamectl set-hostname myserver
timedatectl set-timezone America/Chicago
timedatectl status
sudo adduser deploy
sudo usermod -aG docker deploy
sudo usermod -aG sudo deploy
sudo visudo
sudo swapoff -a && sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
cat /proc/meminfo | grep -E 'MemTotal|MemAvailable|SwapTotal'
curl -o /dev/null -s -w '%{http_code}' http://localhost:3000/health
curl -sf http://localhost:3000/health || echo 'UNHEALTHY'
sudo journalctl -xe
sudo dmesg -T | grep -i 'oom\|kill'
sudo lsof -i -n -P | grep LISTEN
traceroute example.com
mtr --report example.com
ping -c 4 8.8.8.8
curl ifconfig.me
ip addr show
ip route show
Search all 7,657 commands
instead.