Server configuration

Server configuration is the process of configuring and managing servers to optimize performance and security.

What is Server Configuration?

Server configuration is the process of configuring and managing servers to optimize performance, security, and availability.

Types of Servers

By Function

  • **Web": Web servers
  • **Database": Database servers
  • **Email": Email servers
  • **File": File servers

By Operating System

  • **Windows": Windows Server
  • **Linux": Linux distributions
  • **Unix": Unix systems
  • **FreeBSD": FreeBSD

By Virtualization

  • **Physical": Physical servers
  • **Virtual": Virtual servers
  • **Containers": Containers
  • **Cloud": Cloud servers

Basic Configuration

Operating System

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Update system
sudo apt update && sudo apt upgrade -y

# Install basic packages
sudo apt install -y curl wget vim htop

# Configure hostname
sudo hostnamectl set-hostname server01

# Configure timezone
sudo timedatectl set-timezone Europe/Madrid

Network

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Configure static IP
sudo nano /etc/netplan/01-netcfg.yaml

network:
  version: 2
  ethernets:
    eth0:
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

# Apply configuration
sudo netplan apply

Security

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Configure firewall
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Configure SSH
sudo nano /etc/ssh/sshd_config
# Allow only key authentication
PasswordAuthentication no
PubkeyAuthentication yes

# Restart SSH
sudo systemctl restart ssh

Advanced Configuration

Services

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Configure Apache
sudo apt install apache2
sudo systemctl enable apache2
sudo systemctl start apache2

# Configure MySQL
sudo apt install mysql-server
sudo mysql_secure_installation

# Configure PHP
sudo apt install php libapache2-mod-php
sudo systemctl restart apache2

Monitoring

1
2
3
4
5
6
7
8
# Install monitoring tools
sudo apt install htop iotop nethogs

# Configure logrotate
sudo nano /etc/logrotate.d/custom

# Configure cron for tasks
sudo crontab -e

Backup

1
2
3
4
5
6
# Configure automatic backup
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz /var/www/html
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete

Use Cases

Web

  • **Websites": Website hosting
  • **APIs": API services
  • **Applications": Web applications
  • **CDN": Content Delivery Network

Database

  • **MySQL": MySQL databases
  • **PostgreSQL": PostgreSQL databases
  • **MongoDB": NoSQL databases
  • **Redis": In-memory databases

Email

  • **Postfix": Mail server
  • **Dovecot": IMAP/POP3 server
  • **SpamAssassin": Spam filter
  • **ClamAV": Antivirus

Best Practices

Security

  • **Hardening": Apply hardening
  • **Updates": Keep updated
  • **Firewall": Configure firewall
  • **Monitoring": Monitor security

Performance

  • **Resources": Allocate appropriate resources
  • **Optimization": Optimize configuration
  • **Monitoring": Monitor performance
  • **Scaling": Plan scalability

Maintenance

  • **Backup": Regular backups
  • **Updates": Regular updates
  • **Monitoring": Continuous monitoring
  • **Documentation": Documentation

Tools

Configuration

  • **Ansible": Configuration automation
  • **Puppet": Configuration management
  • **Chef": Configuration management
  • **Terraform": Infrastructure as code

Monitoring

  • **Nagios": Service monitoring
  • **Zabbix": Infrastructure monitoring
  • **Prometheus": Monitoring and alerts
  • **Grafana": Metrics visualization

Backup

  • **rsync": File synchronization
  • **tar": File compression
  • **Bacula": Backup system
  • **Veeam": Enterprise backup

References