
Setting up project management software on a fresh Linux server can feel overwhelming, especially when you need production-ready security and automatic startup. Many developers struggle with database configuration, firewall rules, and Java dependencies that cause installation failures. This guide shows you exactly how to install Jira on Ubuntu 26.04 with step-by-step commands, clear explanations of why each step matters, and troubleshooting tips from real deployment experience. You’ll get a fully functional Jira Server instance with external MySQL database, proper security configuration, and systemd auto-start that survives reboot.
Prerequisites
Before you begin installing Jira on Ubuntu 26.04, verify your system meets these requirements:
- Operating System: Ubuntu 26.04 LTS (Resolute Raccoon) – released April 23, 2026
- Root or sudo access: You need administrative privileges to install packages and configure services
- Minimum 8GB RAM: Jira requires 2GB Java heap for evaluation, but production needs 8GB+ for smooth performance
- 25GB free disk space: Jira stores issues, attachments, and indexes; faster drives (7200 rpm+) improve performance
- Multi-core CPU: Recent multicore processors handle indexing and search operations better
- Network ports available: HTTP 8080, RMI 8005 must not be blocked by other services
- Tools to install: MySQL Server 8.0+, unzip, fontconfig utilities
You’ll also need a valid Atlassian account email address to generate your Jira license during setup.
Step 1: Update Your System and Install Required Packages
Update Ubuntu 26.04 Package Repository
sudo apt update
This command refreshes your local package list from Ubuntu’s repositories. Running apt update ensures you install the latest versions with security patches. Ubuntu 26.04 LTS includes GNOME 50, enhanced TPM encryption security, and 12-year support with Ubuntu Pro. Skipping this step might install outdated packages with known vulnerabilities.
Install MySQL Server and Dependencies
sudo apt install mysql-server unzip fontconfig -y
This installs four critical packages:
- mysql-server: Jira requires a relational database for production. The embedded H2 database is evaluation-only and cannot handle concurrent users or backup requirements
- unzip: Needed later to extract the MySQL JDBC driver archive
- fontconfig: Jira renders diagrams and charts that require font libraries for proper display
- -y flag: Automatically confirms installation prompts so the command completes without waiting for your input
After installation, verify MySQL is running:
systemctl status mysql
Expected output shows active (running) status. If you see inactive or failed, restart the service:
sudo systemctl restart mysql
Step 2: Create a Dedicated Jira User Account
Add the Jira System User
sudo useradd --create-home -c "JIRA role account" jira
This creates a dedicated user named jira with a home directory and description. Running Jira as root is a critical security vulnerability. If Jira gets compromised, attackers gain full system access. A dedicated user limits damage to Jira’s specific files and directories only. This follows the security principle of privilege separation that every sysadmin with 10 years experience applies automatically.
Create and Set Permissions on Installation Directory
sudo mkdir /opt/atlassian/jira
sudo chown jira: /opt/atlassian/jira
The mkdir command creates Jira’s installation directory at /opt/atlassian/jira. This path is Atlassian’s standard location for Linux installations. Keeping it consistent helps with maintenance, documentation, and future troubleshooting. The chown jira: command sets ownership to the jira user. Jira needs write access to its installation directory for logs, configuration files, and runtime data. Without proper ownership, the installation fails with “Permission denied” errors.
Step 3: Configure MySQL Database for Jira
Connect to MySQL and Create Database Schema
mysql
This opens the MySQL command-line client. You’re now running SQL commands directly against the database server.
CREATE DATABASE jiradb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
This creates a database named jiradb with UTF-8 MultiByte 4 character encoding. The utf8mb4 charset supports all Unicode characters including emojis and international text. Jira stores user comments, issue descriptions, and project names that may contain any character. Using utf8mb4_bin collation ensures consistent sorting and comparison across different systems. This prevents character encoding issues when your team includes members from different countries.
CREATE USER 'jirauser'@'localhost' IDENTIFIED BY 'YourSecurePassword123';
This creates a dedicated database user jirauser that Jira will use to connect. The password should be at least 12 characters with mixed case, numbers, and symbols. Using a dedicated user follows security best practices. If Jira credentials are compromised, other databases remain safe because jirauser only has access to jiradb.
GRANT ALL ON jiradb.* TO 'jirauser'@'localhost' WITH GRANT OPTION;
This grants jirauser full permissions on the jiradb database. Jira needs to create tables, indexes, and modify schema during operations. The WITH GRANT OPTION allows Jira to create additional database users if needed for plugins. Without this privilege, Jira setup fails at the database configuration screen with “insufficient permissions” errors.
FLUSH PRIVILEGES;
EXIT;
FLUSH PRIVILEGES reloads MySQL’s permission tables so the new user and grants are active immediately. EXIT closes the MySQL client and returns to your shell.
Secure MySQL Configuration
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Edit the MySQL configuration file to add this line under the [mysqld] section:
bind-address = 127.0.0.1
This restricts MySQL to localhost-only access. External database access is unnecessary for single-server Jira deployments and creates security risk. Atlassian explicitly recommends restricting database access to the Jira instance only. After editing, restart MySQL:
sudo systemctl restart mysql
Verify Database Configuration
mysql -u jirauser -p -e "SHOW DATABASES;"
Enter your password when prompted. Expected output:
jiradb
This confirms the database exists and jirauser can access it. Next, verify no tables exist yet:
mysql -u jirauser -p jiradb -e "SHOW TABLES;"
Expected output is empty. Jira creates its schema during initial web setup. Pre-existing tables indicate a previous installation or corrupted database that needs cleanup.
Step 4: Download and Install Jira Software
Download the Jira Linux Binary Installer
wget https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-10.3.6-x64.bin
This downloads the latest stable Jira Software 10.3.6 binary installer directly to your server. Using wget avoids transferring files through your local machine, which adds security risk. The x64.bin file is a 64-bit Linux binary that includes a bundled JRE (Java Runtime Environment). You don’t need to install Java separately, which simplifies the process. Download from Atlassian’s official site ensures you get authentic, unmodified software. Never download Jira from third-party sites.
Make the Installer Executable
chmod a+x atlassian-jira-software-10.3.6-x64.bin
This adds executable permissions to the binary file. Without this step, the shell cannot run the installer and returns “Permission denied”. The a+x flag adds execute permission for all users (owner, group, others).
Run the Interactive Installer
./atlassian-jira-software-10.3.6-x64.bin
This launches the guided command-line installer. The installer validates dependencies automatically and provides clear error messages if something is missing. Run as a regular user, not sudo. The installer creates its own user and sets permissions internally. Running as sudo can cause ownership conflicts that break Jira later.
When prompted, select Custom Install (recommended for advanced users) instead of Express Install. Express uses defaults that may not match production requirements. Custom installation lets you verify every setting and document your configuration.
Enter these installation settings:
- Installation Directory:
/opt/atlassian/jira(default – keep as is) - Home Directory:
/var/atlassian/application-data/jira(default – keep as is) - HTTP Port:
8080(default – keep as is) - RMI Port:
8005(default – keep as is) - Install as service:
Yes
The default installation directory /opt/atlassian/jira is the standardized path. Changing it breaks documentation, troubleshooting guides, and future maintenance scripts. The Home Directory /var/atlassian/application-data/jira stores Jira home data like indexes and attachments. Separating this from the installation directory enables cleaner backups. HTTP port 8080 is Jira’s default and what all documentation expects. RMI port 8005 is for Jira management tools. Choosing “Install as service: Yes” automatically creates a systemd service for auto-start on reboot. Manual startup scripts are error-prone and harder to manage.
Step 5: Configure Jira with External MySQL Database
Download and Install MySQL JDBC Driver
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.18.zip
This downloads the MySQL JDBC (Java Database Connector) driver version 8.0.18. The JDBC driver enables Jira, which is a Java application, to communicate with MySQL. Without it, Jira cannot connect to your database and setup fails immediately. Version 8.0.18 matches MySQL 8.0 server version. Driver mismatches cause connection failures or unsupported protocol errors.
unzip mysql-connector-java-8.0.18.zip
This extracts the archive contents. The driver file is located in the extracted directory.
cp mysql-connector-java-8.0.18/mysql-connector-java-8.0.18.jar /opt/atlassian/jira/lib
This copies the JDBC driver jar file to Jira’s lib directory. Jira loads JDBC drivers from this directory and adds them to the Java classpath automatically. Placing the driver here makes it available to Jira without manual classpath configuration.
Restart Jira to Load the JDBC Driver
sudo systemctl stop jira
sudo systemctl start jira
Ubuntu 26.04 uses systemd for service management. These commands stop and restart the Jira service. Jira scans the lib directory at startup and loads all jar files. The JDBC driver won’t be recognized without this restart. Skipping this step causes “No suitable driver” error at the database configuration page.
Verify Jira is running:
ss -antpl | grep java
Expected output shows Java listening on ports 8080 and 8005:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=1234,fd=55))
LISTEN 0 128 0.0.0.0:8005 0.0.0.0:* users:(("java",pid=1234,fd=56))
If ports aren’t open, Jira didn’t start properly. Check the log file at /var/atlassian/application-data/jira/log/atlassian-jira.log for errors.
Access Jira Web Setup and Configure Database
Open your browser and navigate to:
http://your-server-ip:8080
You’ll see the Jira setup wizard. Click Set up Jira and proceed to the Database Configuration page. Enter these settings:
- Database Type:
MySQL - Host Name:
localhost - Port:
3306 - Database Name:
jiradb - Username:
jirauser - Password:
YourSecurePassword123(what you set in Step 3)
Click Next.
This page takes 5-10 minutes to complete. Jira creates all tables, indexes, and initial data. Do not timeout or refresh the page during this process. The localhost host name works because MySQL is bound to 127.0.0.1. Port 3306 is MySQL’s default. The database name and username must exactly match what you created in Step 3. Typos cause “Database connection failed” errors.
Step 6: Complete Jira Application Setup and Configure Security
Configure Application Properties
On the Application Properties page, enter:
- Application Title:
Your Company Jira - Base URL:
http://your-server-ip:8080 - Mode:
Production
Click Next.
The Application Title appears in browser tabs and email notifications. Customize it for your organization. The Base URL is critical. Jira uses this for all internal links, redirects, and session cookies. If it’s wrong, users get broken links and sessions fail immediately. The URL must match exactly how users will access Jira. Production mode enables production-level logging and performance settings. Evaluation mode disables some features and is not suitable for real teams.

Enter License and Create Administrator Account
On the License page:
- Select license type:
Developers(for teams under 10 users) orEnterprise - Enter your Atlassian account email address
- Click Generate License
- Confirm license usage:
Server
Click Next.
Your Atlassian account email links the license to your account for future upgrades and support. Use a corporate email for business licenses. Confirming “Server” prevents license mismatch errors. Cloud licenses won’t work on Server installations.
On the Administrator account page:
- Email:
admin@yourcompany.com - Username:
admin - Password: Create a strong password (12+ characters with mixed case, numbers, symbols)
Click Next.
The first administrator account has full system access. Weak passwords are the most common security breach vector in Jira deployments. Use a password manager to generate and store it securely. A dedicated admin email separates this account from personal email and enables password reset notifications.
Final Setup: Avatar and Sample Project
Select language: English (US) or your preferred language. Choose an avatar image for the admin account. Click Create sample project and select Scrum. Define a project name like Software Development and key like SD. Click Submit.
The sample project provides a template for your team. It shows how to create issues, boards, and workflows. Scrum is the most common framework for software teams and includes sprint planning and backlog management. This final step takes time as Jira initializes indexes and caches. First access after setup may be slow. This is normal behavior.
Configure UFW Firewall for Jira
sudo ufw allow 8080/tcp
sudo ufw allow 8443/tcp
sudo ufw enable
sudo ufw status
These commands configure Ubuntu’s Uncomplicated Firewall (UFW). Port 8080 allows browser access to Jira. Without this rule, users get connection timeout errors. Port 8443 is required if you set up SSL reverse proxy later for HTTPS access. Ubuntu 26.04 includes UFW by default but it’s disabled initially. The enable command activates all firewall rules. The status command verifies rules are active. Misconfigured firewall is the number one cause of “Jira not accessible” after installation.
Expected status output:
Status: active
To Action From
-- ------ ----
8080/tcp ALLOW Anywhere
8443/tcp ALLOW Anywhere
Set File System Permissions
sudo chown jira:jira -R /opt/atlassian/jira
sudo chown jira:jira -R /var/atlassian/application-data/jira
sudo chmod 750 /opt/atlassian/jira
sudo chmod 750 /var/atlassian/application-data/jira
The chown commands recursively set ownership of all files and directories to the jira user. Partial ownership causes “Permission denied” errors during Jira operations like uploading attachments. The chmod 750 commands set permissions to allow owner full access, group read and execute only, and no access for others. This prevents other users from reading sensitive files like dbconfig.xml containing database passwords and user attachment data. Files in Jira Home contain passwords and user data. Unrestricted permissions are a major security vulnerability.
Troubleshooting Common Jira Installation Issues
Database Connection Failed
Symptom: Web setup shows “Database connection failed” error.
Solution: Verify these three items:
- Check MySQL is running:
systemctl status mysqlshowsactive (running) - Verify credentials match Step 3 exactly: database name
jiradb, usernamejirauser, password you set - Confirm JDBC driver exists:
ls /opt/atlassian/jira/lib/mysql-connector-java-8.0.18.jar
This error most commonly happens from typos in the database name or username. The JDBC driver not being loaded is the second most common cause. If the driver file is missing, restart Jira after copying it.
Jira Won’t Start After Installation
Symptom: systemctl status jira shows inactive (failed).
Solution: Check the log file for errors:
sudo tail -f /var/atlassian/application-data/jira/log/atlassian-jira.log
Common issues include:
- Java version mismatch: Ubuntu 26.04’s fapolicyd service can block Jira execution. Stop it with
sudo systemctl stop fapolicydthen restart Jira - Port conflicts: Another service using port 8080. Find it with
ss -antpl | grep 8080and stop the conflicting service - Permission errors: Jira user doesn’t own directories. Run the
chowncommands from Step 6
Port 8080 Already in Use
Symptom: Installer fails with “Port 8080 bound to another process”.
Solution: Find what’s using the port:
ss -antpl | grep 8080
This shows the process name and PID. Stop it with sudo systemctl stop <service-name> or sudo kill <PID>. Common culprits are Apache, NGINX, or another Java application. If you need both services, change Jira’s port in the installer to 8081.
Permission Denied on Attachments
Symptom: Users can’t upload or download attachments.
Solution: Verify directory ownership:
ls -la /var/atlassian/application-data/jira
The output should show jira jira as owner and group for all directories. If you see different ownership, fix it:
sudo chown jira:jira -R /var/atlassian/application-data/jira
This happens when you run the installer as sudo. The Jira process runs as the jira user but can’t write to directories owned by root.
[su_box title=”VPS Manage Service Offer” style=”bubbles” box_color=”#000000″ radius=”10″]If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal![/su_box]