Categories
Articles SQL

Ubuntu 24.04 — Plesk & MSSQL 2025 Installation & Configuration Guide

 

The complete installation and configuration of Plesk and Microsoft SQL Server 2025 Preview on an Ubuntu 24.04 server.

🖥️ Ubuntu 24.04 LTS
🗄️ MSSQL 2025 Preview (17.0.1000.7)
🌐 Plesk Obsidian
🕐 Timezone: Europe/Istanbul (UTC+3)

1

System Preparation

1.1 System Update

Before starting any installation, ensure the system is fully up to date:

sudo apt update && sudo apt upgrade -y

1.2 Timezone Configuration

Set the server timezone to Turkey (Europe/Istanbul):

sudo timedatectl set-timezone Europe/Istanbul
timedatectl status

Expected output:

Time zone: Europe/Istanbul (+03, +0300)

1.3 Required Packages

sudo apt install -y curl wget gnupg2 software-properties-common apt-transport-https

2

Plesk Installation

2.1 Downloading the Plesk Installer

⚠️

Using the direct sh <(curl ...) method on Ubuntu 24.04 causes a sh: 0: cannot open /dev/fd/63 error. Download the installer to disk first instead.

Download the installer to /tmp, then execute it:

curl -o /tmp/plesk-installer https://autoinstall.plesk.com/plesk-installer
chmod +x /tmp/plesk-installer
sudo /tmp/plesk-installer

2.2 Installation Options

Select Plesk Obsidian from the interactive installer menu. Installation time varies between 10–30 minutes depending on server speed.

2.3 First Login

Once installation is complete, access the panel via browser:

https://<server-ip>:8443

ℹ️

You will be prompted to create an administrator password on first login. Choose a strong password.

2.4 Plesk License

After installation, Plesk runs with a 14-day trial license. License information can be found at Tools & Settings → License Management.

License TypeDurationNotes
Trial14 daysAll features active
Web Admin EditionPaid / AnnualLimited domains
Web Pro EditionPaid / AnnualMid-scale hosting
Web Host EditionPaid / AnnualUnlimited domains

⚠️

The trial period cannot be extended. A license must be purchased before it expires. Visit: plesk.com/pricing

3

MSSQL 2025 Preview Installation

3.1 Add Microsoft GPG Key and Repository

# Add the GPG key
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
  sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg

# Add the SQL Server 2025 Preview repository
curl -fsSL https://packages.microsoft.com/config/ubuntu/24.04/mssql-server-preview.list | \
  sudo tee /etc/apt/sources.list.d/mssql-server-preview.list

sudo apt update

3.2 Install SQL Server

sudo apt install -y mssql-server

3.3 Initial Configuration

sudo /opt/mssql/bin/mssql-conf setup

During the setup wizard:

StepSelection
Edition selectionInitially shows Enterprise Evaluation (can be changed later)
SA passwordSet a strong password (uppercase + lowercase + numbers + special characters)
License acceptanceYes

3.4 Start the Service and Verify

sudo systemctl start mssql-server
sudo systemctl enable mssql-server
sudo systemctl status mssql-server

If the output shows Active: active (running), the installation was successful.

3.5 Install sqlcmd Tools

# Add the sqlcmd repository
curl -fsSL https://packages.microsoft.com/config/ubuntu/24.04/prod.list | \
  sudo tee /etc/apt/sources.list.d/mssql-tools18.list

sudo apt update
sudo apt install -y mssql-tools18 unixodbc-dev

# Add to PATH
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc

3.6 Connection Test

sqlcmd -S localhost -U SA -P '<your-SA-password>' -C -Q "SELECT @@VERSION"

4

Changing MSSQL Edition — Developer Edition

ℹ️

The initial installation defaults to Enterprise Evaluation Edition (180-day trial). For development environments, switching to Developer Edition is recommended — it is free, includes all Enterprise features, but cannot be used in production.

4.1 Stop the Service

sudo systemctl stop mssql-server
sudo systemctl status mssql-server
# Should show: Active: inactive (dead)

4.2 Change the Edition

In SQL Server 2025, edition changes are made using the set-edition command:

sudo /opt/mssql/bin/mssql-conf set-edition

Select Developer from the menu that appears and confirm.

4.3 Restart the Service

sudo systemctl start mssql-server
sudo systemctl status mssql-server

4.4 Verify the Edition Change

sqlcmd -S localhost -U SA -P '<your-SA-password>' -C -Q \
  "SELECT Edition, ProductVersion, GETDATE() AS SqlServerTime FROM sys.dm_os_sys_info CROSS JOIN (SELECT SERVERPROPERTY('Edition') AS Edition, SERVERPROPERTY('ProductVersion') AS ProductVersion) AS props"

Successful output:

Edition ProductVersion SqlServerTime
———————————— ————— ———————–
Standard Developer Edition (64-bit) 17.0.1000.7 2026-08-19 14:47:47.600

Standard Developer Edition (64-bit) — Edition change completed successfully.

5

Plesk License Information

5.1 License Screen

Additional license keys are managed under Tools & Settings → License Management → Additional License Keys. This screen is empty on the trial version.

5.2 License Renewal / Purchase

MethodDescription
From Plesk PanelTools & Settings → License Management → Buy License
Plesk WebsitePurchase at plesk.com/pricing, then enter the key in the panel
Hosting ProviderSome providers bundle a Plesk license with the server package

⚠️

When the trial license expires, the panel enters restricted mode — no new domains or databases can be added. Existing sites continue to work.

6

Plesk & MSSQL Co-existence Architecture

🚫

Important Limitation: Plesk for Linux cannot add or manage MSSQL Server from its Database Servers screen. Only MariaDB / MySQL / PostgreSQL appear there. MSSQL runs as a completely independent service alongside Plesk.

6.1 Current Architecture

ComponentPortManagement Interface
Plesk Panel8443 (HTTPS)Web browser
MariaDB (Plesk)3306Plesk → Database Servers
MSSQL 20251433sqlcmd / SSMS / Azure Data Studio

6.2 Connecting to MSSQL Remotely

Open port 1433 in the firewall:

sudo ufw allow 1433/tcp
sudo ufw reload

Then connect using SQL Server Management Studio (SSMS) or Azure Data Studio on Windows:

FieldValue
Server nameserver IP or Domain,1433
AuthenticationSQL Server Authentication
LoginSA
Password<password set during installation>
Trust server certificate✅ Checked

6.3 Using MSSQL in Plesk-hosted Web Applications

A web application hosted on Plesk that needs to connect to MSSQL should use localhost,1433 or the server IP in its connection string. Plesk does not manage this connection — the application connects directly to MSSQL.

# .NET / C# example connection string
Server=localhost,1433;Database=MyDb;User Id=SA;Password=<password>;TrustServerCertificate=True;
# PHP (PDO) example
$pdo = new PDO("sqlsrv:Server=localhost,1433;Database=MyDb", "SA", "<password>");

7

MSSQL Management — Essential Commands

7.1 Service Management

# Start the service
sudo systemctl start mssql-server

# Stop the service
sudo systemctl stop mssql-server

# Restart the service
sudo systemctl restart mssql-server

# Check status
sudo systemctl status mssql-server

# Enable auto-start on boot
sudo systemctl enable mssql-server

7.2 Basic Operations with sqlcmd

# Connect
sqlcmd -S localhost -U SA -P '<password>' -C

# List databases
SELECT name FROM sys.databases;
GO

# Create a new database
CREATE DATABASE MyDatabase;
GO

# Create a user
CREATE LOGIN myuser WITH PASSWORD = 'Strong@Password123';
CREATE USER myuser FOR LOGIN myuser;
GO

# Check version and edition
SELECT @@VERSION;
SELECT SERVERPROPERTY('Edition');
GO

7.3 Log Files

# MSSQL log directory
sudo ls /var/opt/mssql/log/

# View the error log
sudo tail -100 /var/opt/mssql/log/errorlog

7.4 mssql-conf Configuration Commands

# List all settings
sudo /opt/mssql/bin/mssql-conf list

# Change edition
sudo /opt/mssql/bin/mssql-conf set-edition

# Reset SA password
sudo /opt/mssql/bin/mssql-conf set-sa-password

# Set memory limit (in MB)
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096

8

Important Notes & Warnings

#TopicDescription
1MSSQL 2025 PreviewThis version is still in Preview. It is not recommended for production use.
2Developer EditionFree of charge and includes all Enterprise features. May only be used in development/test environments — not in production.
3Plesk + MSSQLPlesk for Linux cannot manage MSSQL through its panel. Both run as independent services.
4FirewallOpen port 1433 only to trusted IP addresses. Leaving it open to the public is a security risk.
5SA AccountAvoid using the SA account directly. Create dedicated users with minimum required permissions.
6Plesk LicenseThe 14-day trial cannot be extended. Purchase a license before it expires.
7BackupsBack up MSSQL databases regularly. Plesk’s built-in backup system does not cover MSSQL.

📌

Installation Summary:
✅ Ubuntu 24.04 — Ready
✅ Timezone: Europe/Istanbul (UTC+3)
✅ Plesk Obsidian — Installed (Trial license)
✅ MSSQL 2025 Preview (17.0.1000.7) — Installed
✅ Edition: Standard Developer Edition (64-bit)
✅ sqlcmd — Installed (/opt/mssql-tools18/bin/sqlcmd)
 

 

Categories
Articles Proxy Manager

Nginx Proxy Manager New Host Not Working? Check Docker ulimit

A few days ago, I ran into a strange issue while managing my Nginx Proxy Manager instance. At first, I was convinced the problem was related to Cloudflare, DNS, or even Plesk. It turned out that the real culprit was Docker’s default ulimit setting.

My server was hosting around 255 Proxy Hosts. When I added a new one, it simply wouldn’t work. Even more confusing, changes to existing hosts were no longer being applied.

Symptoms

Here’s what I experienced:

  • Newly created Proxy Hosts were unreachable.
  • Disabling and re-enabling an existing host had no effect.
  • SSL and routing changes were not applied.
  • Restarting the Docker container immediately fixed everything.

Naturally, I started troubleshooting the usual suspects:

  • DNS records
  • Cloudflare
  • Plesk
  • SSL certificates
  • Nginx Proxy Manager configuration
  • Docker networking

Everything looked perfectly fine.

Why Did a Docker Restart Fix the Problem?

This was the most confusing part.

Every time I added a new host or modified an existing one, restarting the Docker container made everything work again.

That suggested Nginx Proxy Manager wasn’t failing to read the configuration. Instead, it seemed unable to apply new changes under certain conditions.

So I started looking at the container’s resource limits.

The Real Problem: ulimit nofile

Checking the container revealed that the default nofile limit was set to 1024.

ulimit -n

1024

As a test, I increased the limit to 65536.

services:
  npm:
    image: jc21/nginx-proxy-manager:latest

    ulimits:
      nofile:
        soft: 65536
        hard: 65536

After recreating the container, the issue disappeared completely.

  • New Proxy Hosts started working immediately.
  • Enable/Disable operations were applied correctly.
  • Configuration changes took effect without restarting Docker.

Why Does This Happen?

On Linux systems, every open file and network connection consumes a File Descriptor.

Nginx uses File Descriptors for many different tasks:

  • Listening sockets
  • Proxy connections
  • SSL certificates
  • Log files
  • Internal sockets
  • Configuration files

As the number of Proxy Hosts and active connections grows, the number of required File Descriptors increases as well.

When the container is limited to only 1024 descriptors, Nginx may eventually run out of available resources. Interestingly, it doesn’t always crash.

Instead, you may see subtle and confusing symptoms:

  • New Proxy Hosts don’t work.
  • Configuration changes are ignored.
  • Enable/Disable operations fail silently.
  • Some websites stop responding.
  • Restarting the Docker container temporarily fixes the issue.

In my environment, this behavior started with approximately 255 Proxy Hosts.

The Fix

Increasing the nofile limit for the Docker container solved the problem.

ulimits:
  nofile:
    soft: 65536
    hard: 65536

Then recreate the container:

docker compose down
docker compose up -d

Conclusion

If you’re running Nginx Proxy Manager and notice that:

  • New Proxy Hosts don’t work,
  • Enable/Disable operations have no effect,
  • Configuration changes aren’t applied,
  • Everything starts working again after a Docker restart,

don’t spend hours debugging Cloudflare, DNS, or Plesk.

Take a look at your Docker container’s ulimit nofile setting first.

In my case, the problem wasn’t Nginx Proxy Manager, Cloudflare, or Plesk at all. The root cause was Docker’s default File Descriptor limit of 1024.

Sometimes the most frustrating infrastructure problems are caused by a default setting that nobody thinks about until they hit the limit.

Categories
Windows

Office LTSC (2016, 2019, 2021) Installation Guide (No Login Required)

Office LTSC (2016, 2019, 2021) Installation Guide (No Login Required)

This guide will help you install Office LTSC 2016, 2019, and 2021 versions without needing to sign in, using the Office Deployment Tool (ODT). This method is specifically for Volume License keys.

 

Step 1: Prepare the Office Deployment Tool (ODT)

 

  1. Download: Download the Office Deployment Tool from the official Microsoft site.
  2. Create Folder: Create an easily accessible folder on your computer (e.g., C:\OfficeKurulum).
  3. Extract Files: Run the officedeploymenttool.exe file you downloaded. When it asks where to extract the files, select the C:\OfficeKurulum folder you created.
  4. This folder should now contain the setup.exe file and your configuration-Office365-x64.xml file (or the file you are about to create).

 

Step 2: Edit the configuration-Office365-x64.xml File

 

This is the most critical step as it defines which version of Office you will install. Open your configuration-Office365-x64.xml file (located in C:\OfficeKurulum) with a text editor like Notepad.

Delete all existing content inside the file and paste one of the following code blocks, depending on the version you want to install.

IMPORTANT: You MUST replace PIDKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" with your own 25-character product key for the specific version you are installing.


 

📦 Version 1: XML Code for Office LTSC Professional Plus 2021

 

XML

<Configuration>
  <Add OfficeClientEdition="64" Channel="PerpetualVL2021">
    <Product ID="ProPlus2021Volume" PIDKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX">
      <Language ID="en-us" />
    </Product>
  </Add>
  <RemoveMSI />
  <Display Level="Full" AcceptEULA="TRUE" />
  <Property Name="AUTOACTIVATE" Value="1" />
</Configuration>

(Note: This installs 64-bit, US-English LTSC 2021 Pro Plus.)


 

📦 Version 2: XML Code for Office Professional Plus 2019

 

XML

<Configuration>
  <Add OfficeClientEdition="64" Channel="PerpetualVL2019">
    <Product ID="ProPlus2019Volume" PIDKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX">
      <Language ID="en-us" />
    </Product>
  </Add>
  <RemoveMSI />
  <Display Level="Full" AcceptEULA="TRUE" />
  <Property Name="AUTOACTIVATE" Value="1" />
</Configuration>

(Note: This installs 64-bit, US-English Office 2019 Pro Plus.)


 

📦 Version 3: XML Code for Office Professional Plus 2016

 

XML

<Configuration>
  <Add OfficeClientEdition="64" Channel="PerpetualVL2016">
    <Product ID="ProPlus2016Volume" PIDKEY="XXXXX-XXXXX-XXXXX-XXXXX-XXXXX">
      <Language ID="en-us" />
    </Product>
  </Add>
  <RemoveMSI />
  <Display Level="Full" AcceptEULA="TRUE" />
  <Property Name="AUTOACTIVATE" Value="1" />
</Configuration>

(Note: This installs 64-bit, US-English Office 2016 Pro Plus.)


Don’t forget to save and close the XML file.

 

Step 3: Download Installation Files

 

  1. Open Command Prompt (CMD) as Administrator:
    • Click the Start menu and type cmd.
    • Right-click on “Command Prompt” and select “Run as administrator”.
  2. Navigate to Folder: In the black-and-white window that opens, navigate to your C:\OfficeKurulum folder. Type the following command and press Enter:
    cd C:\OfficeKurulum
    
  3. Start the Download: Now, tell the ODT to download the files based on your XML file. Type the following command and press Enter:
    setup.exe /download configuration-Office365-x64.xml
    
  4. Wait: The command prompt will move to the next line and blink. It may look like nothing is happening, but the files are downloading in the background. This can take 5-15 minutes depending on your internet speed. You will see a new folder named “Office” appear inside your C:\OfficeKurulum directory. The process is finished when the command prompt returns to the C:\OfficeKurulum> prompt.

 

Step 4: Install Office

 

  1. Once the files are downloaded, make sure you are still in the Administrator Command Prompt window.
  2. Type the following command and press Enter:
    setup.exe /configure configuration-Office365-x64.xml
    
  3. That’s it! An Office installation window will appear and begin the installation. When it’s finished, you can open an application like Word or Excel. It will not ask you to sign in, and if you entered your product key correctly in the XML file, Office should already be activated.
Categories
Articles Firewall

Samba Installation and User Authorization on Ubuntu 24.04

Samba Installation and User Authorization on Ubuntu 24.04

This document provides a step-by-step guide for installing and configuring the Samba service on an Ubuntu 24.04 server, including granting a user access to a specific shared directory (e.g., for storing 5651 logs).

1. System Update and Required Packages

sudo apt update && sudo apt upgrade -y
sudo apt install samba -y

2. Create the Shared Directory

sudo mkdir -p /srv/samba/share5651
sudo chown root:root /srv/samba/share5651
sudo chmod 755 /srv/samba/share5651

3. Create the Samba User

sudo adduser berqlog
sudo smbpasswd -a berqlog

Note: Ensure the password is set for both the system and Samba.

4. Edit Samba Configuration File

Edit /etc/samba/smb.conf with the following content:

[global]
    workgroup = WORKGROUP
    netbios name = COMPANY_SMB
    server string = Company Log Server
    security = user
    map to guest = Bad User
    dns proxy = no
    server min protocol = NT1
    ntlm auth = yes
    log file = /var/log/samba/log.%m
    max log size = 1000
    logging = file
    panic action = /usr/share/samba/panic-action %d
    server role = standalone server
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    pam password change = yes
    usershare allow guests = no
    idmap config * : backend = tdb

[share5651]
    path = /srv/samba/share5651
    read only = no
    valid users = berqlog
    create mask = 0644
    directory mask = 0755
    browseable = yes
    guest ok = no

5. Test the Configuration

testparm

Make sure there are no syntax errors.

6. Restart Samba Service

sudo systemctl restart smbd
sudo systemctl enable smbd

7. Firewall Configuration (If Enabled)

sudo ufw allow 'Samba'

8. Access the Share

From a Windows machine:

\\<ubuntu_ip_address>\share5651

Username: berqlog, Password: the one set during setup.

9. Logs and Troubleshooting

Samba logs are located at:

/var/log/samba/log.smbd
/var/log/samba/log.nmbd
/var/log/samba/log.<client_ip_or_name>

Additional Notes:

  • The ntlm auth = yes setting allows compatibility with legacy Windows clients.
  • The server min protocol = NT1 is for compatibility with old systems. For better security, consider using SMB2 or higher.

This setup covers basic file sharing and user authorization. For advanced needs, consider configuring ACLs, audit modules, or integrating with a domain.

Categories
Articles Azure

What is Azure Identity and Access Management (AIM)?

Image by creativearton Freepik

With the proliferation of cloud computing, organizations need robust and secure solutions for identity and access management (IAM). Azure Identity and Access Management (AIM) is a platform that enables you to manage access and identities to your Azure resources. AIM unifies various Azure IAM services such as Azure RBAC, Azure AD, and Azure MFA into a single platform.Key Features of AIM:

  • Centralized identity management: AIM provides a single identity store for all your Azure resources.
  • Easy access management: AIM lets you easily manage access to Azure resources with Azure RBAC.
  • Enhanced security: AIM helps you protect your Azure resources from unauthorized access with Azure AD and Azure MFA.
  • Compliance: AIM helps you control access controls and meet compliance requirements.

AIM Use Cases:

  • Manage access to Azure resources: AIM enables you to easily manage access to Azure resources with Azure RBAC.
  • Manage identities: AIM provides a single identity store for all your Azure resources with Azure AD.
  • Enhance security: AIM helps you protect your Azure resources from unauthorized access with Azure AD and Azure MFA.
  • Ensure compliance: AIM helps you control access controls and meet compliance requirements.

Benefits of AIM:

  • Simplified IAM management: AIM simplifies IAM management by consolidating Azure IAM services into a single platform.
  • Increased security: AIM helps you protect your Azure resources from unauthorized access with Azure AD and Azure MFA.
  • Improved compliance: AIM helps you control access controls and meet compliance requirements.

Technical Details:

  • Azure RBAC: Azure RBAC is an authorization system that lets you manage access to Azure resources. Roles are predefined permissions with specific sets of permissions. The scope can be a subscription, a resource group, or a single resource.
  • Azure AD: Azure AD is an identity service that enables you to manage users and groups in your organization. Azure AD offers features such as user authentication, single sign-on, and multi-factor authentication.
  • Azure MFA: Azure MFA is a security service that lets you add an additional authentication factor to verify a user’s identity. Azure MFA offers a variety of authentication methods, such as SMS, password app codes, or phone calls.

Create a Secure and Compliant IAM Environment with AIM:

AIM is a powerful tool to protect your Azure resources and meet compliance requirements. Using AIM, you can do the following:

  • Use strong authentication and authorization: Provide user authentication and authorization with Azure AD and Azure MFA.
  • Minimize access: Give users only the access they need.
  • Ensure compliance: Control access controls and meet compliance requirements.

The result:

AIM provides a comprehensive IAM solution for your Azure resources. With AIM, you get a powerful tool to protect your Azure resources, simplify IAM management, and meet compliance requirements.


If you have any questions or details you would like to add, feel free to write me.