d0c77893f7
- setup-webserver.sh: idempotent Ubuntu 24.04 LAMP provisioning (Apache event MPM + PHP 8.3-FPM + MariaDB + Node/Python, phpMyAdmin, Composer, Certbot, UFW, Fail2ban; optional components prompted/env-gated) - add-vhost.sh: add an Apache virtual host, optional DB + TLS - CHEATSHEET.md: day-to-day server CLI reference - README.md: setup instructions and env-var matrix Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.2 KiB
5.2 KiB
Web Server CLI Cheatsheet — Ubuntu 24.04 (Apache + PHP-FPM + MariaDB)
Daily commands for running the server built by setup-webserver.sh.
Quick status
sudo healthcheck # custom: all services, disk, memory, ports
systemctl status apache2 # one service detail
sudo systemctl --failed # anything broken?
htop # live CPU/RAM/process (q to quit)
df -h # disk space
free -h # memory + swap
Apache
sudo systemctl reload apache2 # apply config, no dropped connections (PREFER)
sudo systemctl restart apache2 # full restart (drops connections)
sudo apache2ctl configtest # check config BEFORE reload — always do this
apache2ctl -v # version
# Manage sites (vhosts)
sudo a2ensite SITE.conf # enable a site
sudo a2dissite SITE.conf # disable a site
sudo a2enmod rewrite # enable a module
ls /etc/apache2/sites-available/ # all defined sites
ls /etc/apache2/sites-enabled/ # active sites (symlinks)
# Add a site (your script)
sudo ./add-vhost.sh example.com
# Logs (live tail, Ctrl+C to stop)
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/example.com-access.log
PHP / PHP-FPM
php -v # version
php -m # installed modules
sudo systemctl restart php8.3-fpm # restart after ini changes
php -i | grep opcache # check opcache settings
sudo tail -f /var/log/php8.3-fpm.log # FPM errors
# Config locations
/etc/php/8.3/fpm/php.ini # main FPM config
/etc/php/8.3/fpm/conf.d/ # drop-in .ini files
/etc/php/8.3/fpm/pool.d/www.conf # worker pool tuning
MariaDB / MySQL
sudo mariadb # connect as root (socket auth, no password)
# Inside the mariadb prompt (end each with ;)
SHOW DATABASES;
USE mydb;
SHOW TABLES;
SELECT user, host FROM mysql.user;
\q # quit
# One-liners from shell
sudo mariadb -e "SHOW DATABASES;"
sudo mariadb mydb < dump.sql # import
sudo mariadb-dump mydb > dump.sql # export single DB
sudo db-backup # your nightly backup, run manually
ls -lh /var/backups/mysql/ # backups
# Create app DB + user
sudo mariadb -e "CREATE DATABASE app CHARACTER SET utf8mb4;
CREATE USER 'app'@'localhost' IDENTIFIED BY 'CHANGE_ME';
GRANT ALL ON app.* TO 'app'@'localhost'; FLUSH PRIVILEGES;"
Firewall (UFW)
sudo ufw status verbose # rules + active?
sudo ufw allow 8080/tcp # open a port
sudo ufw delete allow 8080/tcp # close it
sudo ufw deny from 1.2.3.4 # block an IP
Fail2ban (brute-force bans)
sudo fail2ban-client status # active jails
sudo fail2ban-client status sshd # banned IPs for SSH
sudo fail2ban-client set sshd unbanip 1.2.3.4 # unban
TLS / Certbot
sudo certbot --apache -d example.com -d www.example.com # get cert
sudo certbot certificates # list certs + expiry
sudo certbot renew --dry-run # test auto-renew (real renew is automatic)
Services (systemd) — the universal pattern
sudo systemctl start|stop|restart|reload|status NAME
sudo systemctl enable NAME # start on boot
sudo systemctl disable NAME # don't start on boot
journalctl -u NAME -f # live logs for any service
journalctl -u NAME --since "1 hour ago"
Files & permissions (web root)
sudo chown -R www-data:www-data /var/www/example.com # web server owns files
sudo find /var/www -type d -exec chmod 755 {} \; # dirs
sudo find /var/www -type f -exec chmod 644 {} \; # files
du -sh /var/www/* # folder sizes
Node (if installed)
node -v ; npm -v
pm2 start app.js --name myapp # run a node app, kept alive
pm2 list # running apps
pm2 logs myapp
pm2 restart myapp
pm2 startup && pm2 save # survive reboot
System maintenance
sudo apt update && sudo apt upgrade -y # update packages
sudo apt autoremove # clean unused
sudo reboot
uptime # how long up + load
who # who's logged in
last # login history
Logs — where to look when something breaks
| Problem | Look here |
|---|---|
| Site 500 error | /var/log/apache2/<site>-error.log |
| PHP crash | /var/log/php8.3-fpm.log |
| DB won't start | journalctl -u mariadb |
| Can't SSH in | journalctl -u ssh (from console) |
| Service down | systemctl status <name> |
| Anything else | journalctl -xe |
Survival tips
- Always
configtestbefore reloading Apache. Bad config + restart = site down. reloadoverrestartwhen possible — no dropped connections.- Keep an SSH session open when changing SSH/firewall config. Test new login in a second terminal before closing the first.
Ctrl+Cstops a running command (liketail -f).qquits pagers (less,htop).- Tab autocompletes paths/commands. ↑ recalls last command.