How to Install WildFly 8 as a Systemd Service on Ubuntu with Auto-Start


10 views

When deploying WildFly 8.0.0.Final on Ubuntu servers, manually starting the server via SSH isn't production-ready. The current approach lacks:

  • Automatic restart on system reboot
  • Proper process management
  • Standardized logging
  • Clean startup/shutdown procedures

Ubuntu 12.04 LTS uses Upstart, but we'll create a modern systemd-compatible service for forward compatibility. Create this file:

sudo nano /etc/systemd/system/wildfly.service

Add the following configuration:

[Unit]
Description=WildFly Application Server
After=syslog.target network.target

[Service]
Type=simple
User=wildfly
Group=wildfly
ExecStart=/opt/wildfly/bin/standalone.sh -b=0.0.0.0 -bmanagement=0.0.0.0
ExecStop=/opt/wildfly/bin/jboss-cli.sh --connect command=:shutdown
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
# Create dedicated user
sudo useradd -r -s /bin/false wildfly

# Set permissions
sudo chown -R wildfly:wildfly /opt/wildfly

# Reload systemd
sudo systemctl daemon-reload

# Enable auto-start
sudo systemctl enable wildfly

# Start service
sudo systemctl start wildfly

Check service status:

sudo systemctl status wildfly

View logs:

sudo journalctl -u wildfly -f

For production environments, consider adding these parameters to standalone.sh:

-Dorg.jboss.as.logging.per-deployment=false
-server
-Xms512m -Xmx1024m
-XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m

If WildFly fails to start:

  1. Verify Java installation: java -version
  2. Check ports: netstat -tulnp | grep java
  3. Review permissions: ls -la /opt/wildfly

When you manually run WildFly 8.0.0.Final through SSH using standalone.sh, you're missing several critical production features:

# Current manual startup
cd /opt/wildfly-8.0.0.Final/bin
nohup standalone.sh -b=0.0.0.0 -bmanagement=0.0.0.0 > /dev/null &

# Current manual shutdown (problematic)
kill $(pgrep -f wildfly)  # This may kill wrong processes

WildFly provides native integration scripts in its bin/init.d directory. Here's the professional approach:

Step 1: Prepare Environment

sudo mkdir -p /etc/wildfly
sudo cp /opt/wildfly-8.0.0.Final/bin/init.d/wildfly-init-debian.sh /etc/init.d/wildfly
sudo chmod +x /etc/init.d/wildfly

Step 2: Create Configuration File

sudo nano /etc/default/wildfly.conf

Add these configurations:

# WildFly configuration
JBOSS_HOME="/opt/wildfly-8.0.0.Final"
JBOSS_USER=wildfly
JBOSS_MODE=standalone
JBOSS_CONFIG=standalone.xml
JBOSS_BIND=0.0.0.0
JBOSS_BIND_MANAGEMENT=0.0.0.0
sudo adduser --system --group --no-create-home --disabled-login wildfly
sudo chown -R wildfly:wildfly /opt/wildfly-8.0.0.Final

For Ubuntu 12.04, we'll use Upstart instead of systemd. Create:

sudo nano /etc/init/wildfly.conf

With this content:

description "WildFly Application Server"
start on runlevel [2345]
stop on runlevel [!2345]

respawn
limit nofile 4096 4096

setuid wildfly
setgid wildfly

exec /opt/wildfly-8.0.0.Final/bin/standalone.sh \
    -b $JBOSS_BIND \
    -bmanagement $JBOSS_BIND_MANAGEMENT \
    -c $JBOSS_CONFIG
# Start service
sudo service wildfly start

# Stop service
sudo service wildfly stop

# Check status
sudo service wildfly status

# Enable automatic startup
sudo update-rc.d wildfly defaults

If the service fails to start, check:

# View logs
tail -f /opt/wildfly-8.0.0.Final/standalone/log/server.log

# Verify port binding
netstat -tulnp | grep java

For production environments, consider adding these JVM options in standalone.conf:

JAVA_OPTS="-Xms1G -Xmx2G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman"