Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Preface
Who this book is for
What this book covers
To get the most out of this book
Get in touch
Deploying Ubuntu Server
Technical requirements
Determining your server's role
Setting up our server
Virtual machine
Physical server
Virtual private server
Spare desktop or laptop
Raspberry Pi
Obtaining installation media
Creating a bootable flash drive
Planning the partitioning layout
Installing Ubuntu Server
Installing media
Customizing the installation
Configuring the server's disk
Creating the initial user account
Installing Ubuntu on a Raspberry Pi
Summary
Further Reading
Managing Users and Permissions
Understanding users and groups
Understanding when to use root
Using sudo to run privileged commands
Creating and removing users
Using useradd
Using adduser
Removing users
Understanding the /etc/passwd and /etc/shadow files
Using /etc/passwd
Using /etc/shadow
Distributing default configuration files with /etc/skel
Switching users
Managing groups
Managing passwords and password policies
Locking and unlocking user accounts
Setting password expiration information
Setting a password policy
Configuring administrator access with sudo
Setting permissions on files and directories
Viewing permissions
Changing permissions
Changing the ownership of objects
Summary
Further reading
Managing Software Packages
Understanding Linux package management
Understanding the differences between Debian and Snap packages
Debian packages
Snap packages
Installing and removing software
Managing Debian packages with apt
Managing Snap packages with snap
Searching for packages
Managing package repositories
Adding additional repositories
Adding Personal Package Archives
Backing up and restoring Debian packages
Cleaning up orphaned apt packages
Taking advantage of hardware enablement updates
Summary
Further reading
Navigating and Essential Commands
Learning essential Linux commands
Understanding the Linux filesystem layout
Viewing the contents of files
Viewing application log files
Summary
Further reading
Managing Files and Directories
Copying, moving, and renaming files and directories
Editing files with the Nano and Vim text editors
Editing with Nano
Editing with Vim
Input and output streams
Using symbolic and hard links
Summary
Further reading
Boosting Your Command-line Efficiency
Understanding the Linux shell
Understanding Bash history
Learning some useful command-line tricks
Understanding variables
Writing simple scripts
Putting it all together – Writing an rsync backup script
Summary
Further reading
Controlling and Managing Processes
Managing jobs
Understanding the ps command
Viewing running processes with ps
Configuring arguments to ps
Changing the priority of processes
Dealing with misbehaving processes
Managing system processes
Scheduling tasks with cron
Summary
Further reading
Monitoring System Resources
Viewing disk usage
Using df
Diving deeper into disk usage
Monitoring memory usage
Understanding server memory
Managing swap
Understanding load average
Viewing resource usage with htop
Summary
Further reading
Managing Storage Volumes
Adding additional storage volumes
Formatting and partitioning storage devices
Creating a partition
Formatting partitions
Mounting and unmounting volumes
Understanding the /etc/fstab file
Analyzing the contents of /etc/fstab
Adding to the /etc/fstab file
Backing up and restoring volumes
Utilizing LVM
Getting started with LVM
Formatting logical volumes
Removing volumes with LVM
Understanding LVM snapshots
Summary
Further reading
Connecting to Networks
Setting the hostname
Managing network interfaces
Assigning static IP addresses
Understanding Linux name resolution
Getting started with OpenSSH
Installing OpenSSH
Issuing commands with OpenSSH
Getting started with SSH key management
Generating public and private keys
Copying your public key to a remote server
Utilizing an SSH agent
Changing the passphrase of an OpenSSH key
Simplifying SSH connections with a config file
Summary
Further reading
Setting Up Network Services
Planning your IP address scheme
Setting up a DHCP server for serving IP addresses
Adding a DNS server
Setting up external DNS with bind
Setting up internal DNS and adding hosts
Setting up an internet gateway
Keeping your clock in sync with NTP
Summary
Further reading
Sharing and Transferring Files
File server considerations
Sharing files with Windows users via Samba
Setting up NFS shares
Transferring files with rsync
Transferring files with SCP
Mounting remote directories with SSHFS
Summary
Further reading
Managing Databases
Preparations for setting up a database server
Installing MariaDB
Understanding the MariaDB configuration files
Managing MariaDB databases
Setting up a secondary database server
Summary
Further reading
Serving Web Content
Installing and configuring Apache
Installing additional Apache modules
Securing Apache with TLS
Installing and configuring NGINX
Setting up failover with keepalived
Setting up and configuring Nextcloud
Summary
Further reading
Automating Server Configuration with Ansible
Understanding the need for configuration management
Why Ansible?
Creating a Git repository
Getting started with Ansible
Making your servers do your bidding
Setting up an inventory file and configuring Ansible settings
Configuring client servers
Putting it all together – automating web server deployment
Using Ansible's pull method
Summary
Further reading
Virtualization
Prerequisites and considerations
Setting up a virtual machine server
Creating virtual machines
Bridging the virtual machine network
Simplifying virtual machine creation with cloning
Managing virtual machines via the command line
Summary
Further reading
Running Containers
What is containerization?
Understanding the differences between Docker and LXD
Installing Docker
Managing Docker containers
Automating Docker image creation with Dockerfiles
Managing LXD containers
Summary
Further reading
Container Orchestration
Container orchestration
Preparing a lab environment for Kubernetes testing
Utilizing MicroK8s
Installing MicroK8s on Linux
Installing MicroK8s on macOS
Installing MicroK8s on Windows
Interacting with MicroK8s
Setting up a Kubernetes cluster
Configuring Docker
Testing Docker
Installing Kubernetes
Deploying containers via Kubernetes
Summary
Further reading
Deploying Ubuntu in the Cloud
Understanding the difference between on-premises and cloud infrastructure
Important considerations when considering cloud computing as a potential solution
Becoming familiar with some basic AWS concepts
Creating an AWS account
Signing up for AWS
Implementing basic user security
Choosing a region
Deploying Ubuntu as an AWS EC2 instance
Setting up an IAM Role for Session Manager
Creating an Ubuntu Server instance in AWS
Creating and deploying Ubuntu AMI images
Automatically scaling Ubuntu EC2 deployments with Auto Scaling
Creating a launch template
Creating an Auto Scaling group
Creating a load balancer
Keeping costs down: understanding how to save money and make cost-effective decisions
Viewing billing information
Adding a billing alert
Removing unneeded backups
Running EC2 instances only when they're needed
Stopping or terminating unneeded EC2 instances
Taking cloud further: additional resources to grow your knowledge
Online training and labs
Certification
Keep experimenting and learning
AWS documentation
Summary
Further reading
Automating Cloud Deployments with Terraform
Why it's important to automate your infrastructure
Introduction to Terraform and how it can fit within your workflow
Installing Terraform
Automating an EC2 instance deployment
Managing security groups with Terraform
Using Terraform to destroy unused resources
Combining Ansible with Terraform for a full deployment solution
Summary
Securing Your Server
Lowering your attack surface
Understanding and responding to CVEs
Installing security updates
Automatically installing patches with the Canonical Livepatch service
Monitoring Ubuntu servers with Canonical's Landscape service
Securing OpenSSH
Installing and configuring Fail2ban
MariaDB best practices for secure database servers
Setting up a firewall
Encrypting and decrypting disks with LUKS
Locking down sudo
Summary
Further reading
Troubleshooting Ubuntu Servers
Evaluating the scope
Conducting a root cause analysis
Viewing system logs
Tracing network issues
Troubleshooting resource issues
Diagnosing defective RAM
Summary
Further reading
Preventing Disasters
Preventing disasters
Utilizing Git for configuration management
Implementing a backup plan
Replacing failed RAID disks
Utilizing bootable recovery media
Summary
Further reading
Another Book You May Enjoy
Index
← Prev
Back
Next →
← Prev
Back
Next →