Introduction
Fedora Server stands as one of the most innovative Linux distributions, serving as the upstream development platform for Red Hat Enterprise Linux. It combines enterprise-grade stability with cutting-edge features, making it an excellent choice for modern server workloads.
In 2026, Fedora Server continues to lead in containerization, cloud deployment, and emerging technologies while maintaining strong security fundamentals. This comprehensive guide covers installation, configuration, package management, container tools, and production deployment best practices.
Understanding Fedora
Fedora vs RHEL vs CentOS
Fedora serves as the community-driven upstream project for Red Hat Enterprise Linux:
- Fedora: Fast-paced, innovative, 13-month release cycle
- RHEL: Enterprise stability, 10+ year support life cycle
- CentOS Stream: Downstream of Fedora, upstream of RHEL
Fedora Server provides:
- Latest kernel and GNU tools
- Modern container runtimes
- Cutting-edge security features
- Testing ground for enterprise technologies
Release Cycle
# Fedora releases occur every 6 months
# Supported for ~13 months (until next + 2 weeks)
# Check version
cat /etc/fedora-release
# Fedora release 42 (Server Edition)
# Check kernel
uname -r
Installation and Initial Setup
Server Installation
# Download Fedora Server ISO
# https://getfedora.org/server/
# Installation options:
# - Server with GUI
# - Server (minimal)
# - Custom operating system
# Post-installation setup
sudo dnf update -y
sudo systemctl reboot
Initial Configuration
# Set hostname
sudo hostnamectl set-hostname server1.example.com
# Configure timezone
sudo timedatectl set-timezone America/New_York
# Enable NTP
sudo timedatectl set-ntp true
# Configure firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
# Check status
sudo firewall-cmd --list-all
Package Management with DNF
DNF Fundamentals
DNF (Dandified YUM) is Fedora’s next-generation package manager:
# Update all packages
sudo dnf update
# Upgrade to new release
sudo dnf system-upgrade download --releasever=42
sudo dnf system-upgrade reboot
# Install package
sudo dnf install nginx
# Remove package
sudo dnf remove nginx
# Search packages
dnf search nginx
dnf provides /usr/sbin/nginx
# List installed
dnf list installed
dnf list installed | grep nginx
# Package information
dnf info nginx
# Check for updates
dnf check-update
NF Repositories
#```bash
D List repositories
dnf repolist dnf repolist enabled
Repository information
dnf repoinfo fedora
Enable/disable repository
sudo dnf config-manager –set-enabled fedora sudo dnf config-manager –set-disabled fedora
Add custom repository
sudo dnf config-manager –add-repo https://example.com/repo.repo
Create custom repo file
sudo vim /etc/yum.repos.d/custom.repo
[custom] name=Custom Repository baseurl=https://example.com/repo/$releasever/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://example.com/key.pub
### Module Streams
Fedora uses AppStream modules for multiple software versions:
List modules
dnf module list
Enable module stream
sudo dnf module enable nodejs:20
Install module
sudo dnf module install nodejs:20
Reset module
sudo dnf module reset nodejs
## Systemd and Service Management
### Service Management
Start/stop service
sudo systemctl start nginx sudo systemctl stop nginx
Enable/disable at boot
sudo systemctl enable nginx sudo systemctl disable nginx
Check status
systemctl status nginx
View logs
journalctl -u nginx journalctl -u nginx -f journalctl –since “1 hour ago”
List failed units
systemctl –failed
Restart on failure
sudo systemctl edit nginx
[Service] Restart=on-failure RestartSec=5
## SELinux on Fedora
### SELinux Basics
Fedora enforces SELinux by default:
Check SELinux status
getenforce sestatus
SELinux modes
Enforcing (default) - enforces policy
Permissive - logs but doesn’t enforce
Disabled - completely off
Temporarily set permissive
sudo setenforce 0
Permanently set mode
sudo setenforce 1 sudo vim /etc/selinux/config
SELinux context
ls -Z /var/www/html ps -Z nginx
Restore default context
sudo restorecon -Rv /var/www/html
Change context
sudo chcon -t httpd_sys_content_t /var/www/html/file.html
Manage booleans
getsebool -a sudo setsebool -P httpd_read_user_content 1
Audit logs
sudo tail /var/log/audit/audit.log sudo ausearch -m avc
### Troubleshooting SELinux
Install SELinux tools
sudo dnf install setools sepolicy
Find boolean for service
seinfo -b | grep http
Check denied access
sudo ausearch -m avc -c httpd
Create local policy module
sudo dnf install policycoreutils-devel sudo audit2allow -a -M mymodule sudo semodule -i mymodule.pp
## Container Tools
### Podman
Fedora includes Podman as the default container runtime:
Install Podman
sudo dnf install podman
Basic commands (Docker-compatible)
podman pull docker.io/library/nginx podman run -d –name web nginx podman ps podman logs web podman exec -it web /bin/bash
Rootless containers
podman run -d nginx # Runs without root
Build images
podman build -t myapp . podman push myapp:latest
Compose
podman-compose up -d
System containers (run systemd in container)
podman run -d –name=fedora fedora:latest /sbin/init
### Buildah and Skopeo
Install tools
sudo dnf install buildah skopeo
Buildah - build container images
buildah from fedora buildah run myfedora-1 dnf update -y buildah commit myfedora-1 myfedora:latest
Skopeo - inspect and copy images
skopeo inspect docker://docker.io/library/nginx skopeo copy docker://nginx registry.example.com:5000/nginx skopeo delete docker://localhost:5000/myimage:latest
### Fedora CoreOS
Fedora CoreOS for container workloads
Download and run
curl -L https://getfedora.org/coreos/download/ | bash
Install to disk
sudo fcos install /dev/sda
Configuration with Butane
https://docs.fedoraproject.org/en-US/fedora-coreos/producing-ign/
## Cockpit Administration
### Web-Based Management
Cockpit provides a web interface for server management:
Install Cockpit
sudo dnf install cockpit
Enable and start
sudo systemctl enable –now cockpit.socket
Access via https://server:9090
Enable additional features
sudo dnf install cockpit-storaged sudo dnf install cockpit-networkmanager sudo dnf install cockpit-packagekit
### Cockpit Features
Dashboard - system overview
Logs - journal entries
Services - systemd management
Storage - disk/RAID management
Networking - network configuration
Accounts - user management
Kernel dump - crash analysis
Subscriptions - RHEL subscription management
Terminal - web terminal
## Web Server Configuration
### Apache
Install Apache
sudo dnf install httpd
Configuration
sudo vim /etc/httpd/conf/httpd.conf sudo vim /etc/httpd/conf.d/ssl.conf
Create virtual host
sudo vim /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
```text
Nginx
# Install Nginx
sudo dnf install nginx
# Configuration
sudo vim /etc/nginx/nginx.conf
sudo vim /etc/nginx/conf.d/example.com.conf
# Test configuration
sudo nginx -t
# Reload
sudo systemctl reload nginx
```text
server { listen 80; server_name example.com; root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
## Database Installation
### PostgreSQL
Install PostgreSQL
sudo dnf install postgresql-server
Initialize database
sudo postgresql-setup –initdb
Start service
sudo systemctl enable –now postgresql
Access database
sudo -u postgres psql
Create user and database
sudo -u postgres createuser -s myuser sudo -u postgres createdb mydb
### MariaDB
Install MariaDB
sudo dnf install mariadb-server
Start service
sudo systemctl enable –now mariadb
Secure installation
sudo mysql_secure_installation
Access database
mysql -u root -p
### Redis
Install Redis
sudo dnf install redis
Configure
sudo vim /etc/redis.conf
Start service
sudo systemctl enable –now redis
## Security Hardening
### Firewall Configuration
Using firewalld (default)
sudo firewall-cmd –permanent –add-service=http sudo firewall-cmd –permanent –add-service=https sudo firewall-cmd –permanent –add-service=ssh sudo firewall-cmd –permanent –add-port=8080/tcp sudo firewall-cmd –reload
Check rules
sudo firewall-cmd –list-all
Rich rules
sudo firewall-cmd –permanent –add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” service name=“http” accept’
### Fail2ban
Install Fail2ban
sudo dnf install fail2ban
Configuration
sudo vim /etc/fail2ban/jail.local
[DEFAULT] bantime = 3600 findtime = 600 maxretry = 5
[sshd] enabled = true port = ssh maxretry = 3
[nginx-http-auth] enabled = true
Start service
sudo systemctl enable –now fail2ban
### Automatic Updates
Enable dnf-automatic
sudo dnf install dnf-automatic
Configure
sudo vim /etc/dnf/automatic.conf
[commands] upgrade_type = default random_sleep = 60
[email] email_from = [email protected] email_to = [email protected]
Enable timers
sudo systemctl enable –now dnf-automatic.timer
## Performance Tuning
### Kernel Parameters
Network tuning
sudo sysctl -w net.core.rmem_max=16777216 sudo sysctl -w net.core.wmem_max=16777216
Make permanent
sudo vim /etc/sysctl.d/99-custom.conf
IO scheduler
cat /sys/block/sda/queue/scheduler echo “mq-deadline” | sudo tee /sys/block/sda/queue/scheduler
Transparent huge pages
cat /sys/kernel/mm/transparent_hugepage/enabled
### Resource Limits
Systemd resource limits
sudo systemctl edit nginx
[Service] MemoryLimit=512M CPUQuota=50% TasksMax=100
## Backup and Recovery
### Backup Scripts
#!/bin/bash
/usr/local/bin/backup.sh
DATE=$(date +%Y%m%d) BACKUP_DIR="/backup" DB_NAME=“mydb” DB_USER=“backup”
Database backup
pg_dump -U $DB_USER $DB_NAME | gzip > $BACKUP_DIR/db-$DATE.sql.gz
Files backup
tar -czf $BACKUP_DIR/files-$DATE.tar.gz /var/www/html
Keep 7 days
find $BACKUP_DIR -mtime +7 -delete
### Restore Procedures
Database restore
gunzip < backup.sql.gz | psql -U user dbname
Files restore
tar -xzf files.tar.gz -C /
Full system restore
Use Kickstart for reinstallation
Restore /home and /etc from backup
## Monitoring and Logging
### System Monitoring
Install monitoring tools
sudo dnf install htop iotop atop
Resource monitoring
htop iotop atop
Network monitoring
sudo dnf install nethogs nethogs eth0
### Logging with Journald
View logs
journalctl journalctl -u nginx journalctl –since “2026-01-01” journalctl –until “2026-01-02” journalctl -p err
Persistent logging
sudo vim /etc/systemd/journald.conf
[Journal] Storage=persistent SystemMaxUse=1G RuntimeMaxUse=100M
## Conclusion
Fedora Server provides an excellent platform for modern infrastructure, combining innovation with enterprise features. Its cutting-edge packages, strong SELinux integration, and excellent container tools make it ideal for organizations seeking the latest technology with production-ready stability.
Whether deploying web applications, databases, or containerized workloads, Fedora Server delivers the tools and features needed for 2026 infrastructure requirements.
## Resources
- [Fedora Server Documentation](https://docs.fedoraproject.org/en-US/fedora-server/)
- [DNF Documentation](https://dnf.readthedocs.io/)
- [Cockpit Project](https://cockpit-project.org/)
- [Fedora Magazine](https://fedoramagazine.org/)
Comments