Ubuntu Server 22.04 Enterprise Configuration Guide

System Network Configuration

Host Resolution Setup

Configure local hostname resolution by editing /etc/hosts:

## Edit /etc/hosts
# Cluster nodes
10.0.1.10 srv01
10.0.1.11 srv02
10.0.1.12 srv03

SSH Key-Based Authentication

Establish passwordless SSH access acrross cluster nodes:

# Ensure OpenSSH server is installed
cd ~/.ssh
# Generate modern Ed25519 key pair
ssh-keygen -t ed25519 -C "cluster-key"
# Press Enter three times for defaults and no passphrase
# This creates id_ed25519 (private) and id_ed25519.pub (public)

# On each node, append public keys to authorized_keys
cat id_ed25519.pub >> authorized_keys
# Transfer keys between nodes (example for srv02)
scp srv02:~/.ssh/id_ed25519.pub ./
cat id_ed25519.pub >> authorized_keys
rm id_ed25519.pub
# Repeat for srv03

# Distribute the consolidated authorized_keys file
scp authorized_keys srv02:~/.ssh/
scp authorized_keys srv03:~/.ssh/

Alternative method using ssh-copy-id:

ssh-copy-id admin@srv02.example.net

To enable root login via SSH:

sudo nano /etc/ssh/sshd_config
# Add or modify:
PermitRootLogin yes
sudo systemctl restart sshd

Environment Configuration

Global Environment Variables

Set up service paths in /etc/profile:

## Edit /etc/profile
# Service installations
export JAVA_HOME="/opt/services/openjdk11"
export ZK_HOME="/opt/services/zookeeper-3.8.0"
export PATH=$ZK_HOME/bin:$JAVA_HOME/bin:$PATH

DNS Client Configuration

Configure name resolution in /etc/resolv.conf:

nameserver 10.0.1.5  # Your internal DNS server
nameserver 127.0.0.53
options edns0 trust-ad
search example.net

Troubleshooting Common Issues

Cloned VM IP Address Conflicts

After cloning Ubuntu 22.04 VMs, you may encounter identical IP addresses. Set static IPs as shown below.

Configuring Static IP Addresses

Edit the Netplan configuration file:

sudo nano /etc/netplan/00-installer-config.yaml

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: true      # Primary interface uses DHCP
    enp0s8:
      dhcp4: false
      addresses:
        - 10.0.1.101/24
      # Remove default gateway for isolated network

Apply the configuration:

sudo netplan apply

Note: If dual NICs cause external connectivity issues, remove routes and nameservers sections.

Boot Delay: "Wait for Network to be Configured"

Disable network wait during boot:

sudo nano /etc/netplan/custom.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      optional: true

Service Instalation Guides

OpenJDK Deployment

Install Java Runtime Environment:

# Create installation directory
sudo mkdir -p /opt/services/java
cd /opt/services/java

# Download and extract OpenJDK
wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.21%2B9/OpenJDK11U-jre_x64_linux_hotspot_11.0.21_9.tar.gz
tar xzf OpenJDK11U-jre_x64_linux_hotspot_11.0.21_9.tar.gz
ln -s jdk-11.0.21+9-jre /opt/services/openjdk11

Configure environment:

## Edit /etc/profile
export JAVA_HOME="/opt/services/openjdk11"
export PATH=$JAVA_HOME/bin:$PATH

# Apply changes
source /etc/profile

Zookeeper Cluster Setup

Deploy Zookeeper 3.8.0 ensemble:

cd /opt/downloads
tar -zxf apache-zookeeper-3.8.0-bin.tar.gz
mv apache-zookeeper-3.8.0-bin /opt/services/zookeeper-3.8.0
mkdir /opt/services/zookeeper-3.8.0/data

# Configure environment
echo 'export ZK_HOME=/opt/services/zookeeper-3.8.0' >> /etc/profile
echo 'export PATH=$ZK_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

# Setup configuration
cp /opt/services/zookeeper-3.8.0/conf/zoo_sample.cfg /opt/services/zookeeper-3.8.0/conf/zoo.cfg
nano /opt/services/zookeeper-3.8.0/conf/zoo.cfg

dataDir=/opt/services/zookeeper-3.8.0/data
clientPort=2181
server.1=srv01:2888:3888
server.2=srv02:2888:3888
server.3=srv03:2888:3888

Initialize and start:

# On srv01
echo "1" > /opt/services/zookeeper-3.8.0/data/myid
/opt/services/zookeeper-3.8.0/bin/zkServer.sh start

# Distribute to other nodes
scp /etc/profile srv02:/etc/
scp /etc/profile srv03:/etc/
scp -r /opt/services/zookeeper-3.8.0 srv02:/opt/services/
scp -r /opt/services/zookeeper-3.8.0 srv03:/opt/services/

# On srv02 and srv03
source /etc/profile
echo "2" > /opt/services/zookeeper-3.8.0/data/myid  # srv02
echo "3" > /opt/services/zookeeper-3.8.0/data/myid  # srv03
/opt/services/zookeeper-3.8.0/bin/zkServer.sh start

# Verify cluster status
/opt/services/zookeeper-3.8.0/bin/zkServer.sh status

Redis Cluster Deployment

Enstall Redis 7.2.3 cluster:

cd /opt/downloads
wget https://download.redis.io/releases/redis-7.2.3.tar.gz
tar -zxf redis-7.2.3.tar.gz
mv redis-7.2.3 /opt/services/

# Install build dependencies
apt-get update
apt-get install -y build-essential tcl

# Compile and install
cd /opt/services/redis-7.2.3
make distclean
make
make test && make install PREFIX=/opt/services/redis-cluster

# Setup directories
cd /opt/services/redis-cluster
mkdir -p logs data conf
cp /opt/services/redis-7.2.3/redis.conf conf/

Configure Redis cluster:

nano conf/redis.conf

bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile /opt/services/redis-cluster/conf/redis_6379.pid
logfile "/opt/services/redis-cluster/logs/redis_6379.log"
appendonly yes
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
masterauth secure_pass_123
requirepass secure_pass_123

Distribute and start:

scp -r /opt/services/redis-cluster srv02:/opt/services/
scp -r /opt/services/redis-cluster srv03:/opt/services/

# On all nodes
/opt/services/redis-cluster/bin/redis-server conf/redis.conf

# Create cluster
/opt/services/redis-cluster/bin/redis-cli --cluster create srv01:6379 srv02:6379 srv03:6379 -a secure_pass_123

# Verify
/opt/services/redis-cluster/bin/redis-cli -c -p 6379 -a secure_pass_123
127.0.0.1:6379> CLUSTER INFO

Docker Engine Management

If Docker was installed via Snap and systemd commands fail:

# Snap Docker commands
sudo snap list
sudo snap restart docker
sudo snap remove docker

Install Docker using official repository:

# Follow official documentation: https://docs.docker.com/engine/install/ubuntu/
# Then install Docker Compose: https://docs.docker.com/compose/install/

Configure mirror registry (China region):

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://your-mirror-id.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

NAS Storage Mounting

Mount CIFS/SMB shares:

sudo apt update
sudo apt install -y cifs-utils

sudo mkdir -p /mnt/shared-storage
sudo mount -t cifs -o uid=root,gid=root,username=your_user,password=your_pass,iocharset=utf8 //10.0.0.50/share /mnt/shared-storage

APT Package Manager Proxy

Configure APT to use corporate proxy:

sudo nano /etc/apt/apt.conf.d/80proxy

Acquire::http::Proxy "http://proxy.example.net:8080/";
Acquire::https::Proxy "https://proxy.example.net:8080/";

DNS Server Setup

For BIND9 DNS server configuration, refer to these resources:

  • Ubuntu BIND9 Documentation
  • Private DNS Setup on Ubuntu 22.04
  • BIND9 Forward/Reverse Zone Configuration

Tags: ubuntu-22.04 netplan openjdk11 zookeeper-cluster redis-cluster

Posted on Sat, 16 May 2026 04:17:59 +0000 by Ryanmcgrim