When organizations migrate from Windows Small Business Server (SBS) to standalone Server 2003, they often lose built-in SharePoint functionality. Many teams suddenly find themselves without:
- Centralized document repositories
- Internal communication channels
- Collaboration calendars
- Standard Operating Procedure (SOP) access points
Joomla provides a robust CMS framework for intranet development. Here's a basic LAMP stack setup for Ubuntu:
# Install prerequisites
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
# Download Joomla
wget https://downloads.joomla.org/cms/joomla4/4-3-4/Joomla_4-3-4-Stable-Full_Package.zip
unzip Joomla_*.zip -d /var/www/html/intranet
chown -R www-data:www-data /var/www/html/intranet
These Joomla extensions recreate core SharePoint functionality:
Feature | Extension | Cost |
---|---|---|
Document Management | DOCman | Free |
Calendar | JEvents | Free/Paid |
News Management | K2 | Free |
User Permissions | AdminExile | Free |
DOCman provides versioning similar to SharePoint. Sample PHP hook for document upload notifications:
// In your custom plugin
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Mail\Mail;
class plgContentDocNotifier extends JPlugin
{
public function onDocmanAfterUpload($document)
{
$mailer = Factory::getMailer();
$config = Factory::getConfig();
$mailer->setSender($config->get('mailfrom'));
$mailer->addRecipient('team@company.com');
$mailer->setSubject('New Document: ' . $document->docname);
$mailer->setBody("A new version of {$document->docname} was uploaded");
$mailer->Send();
}
}
JEvents can be configured to show department-specific calendars using SQL overrides:
// In jevents_overrides.php
function getCalendarsByDepartment($dept)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('*')
->from('#__jevents_icsfile')
->where($db->quoteName('access') . ' = ' . $db->quote($dept));
$db->setQuery($query);
return $db->loadObjectList();
}
Create a cron job to check SOP document freshness:
#!/bin/bash
# /etc/cron.weekly/sop_checker
DB_USER="joomla_user"
DB_PASS="yourpassword"
DB_NAME="joomla_db"
outdated_docs=$(mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse \
"SELECT id, title FROM jos_docman
WHERE modified_time < DATE_SUB(NOW(), INTERVAL 90 DAY)
AND category_id = 'SOP_CATEGORY_ID'")
if [ -n "$outdated_docs" ]; then
echo "Outdated SOPs:" >> /var/log/sop_check.log
echo "$outdated_docs" >> /var/log/sop_check.log
# Add email notification logic here
fi
html
Many organizations face budget constraints when migrating from SharePoint, especially after moving away from bundled solutions like SBS Server. A self-hosted intranet using open-source tools can provide document management, calendars, and news feeds at minimal cost.
- CMS Platform: Joomla (as mentioned) or WordPress
- Document Management: Alfresco Community Edition
- Calendar: Nextcloud's Calendar app
- Authentication: LDAP integration with Active Directory
1. Server Setup
For a Windows Server 2003 environment:
# Install WAMP stack (Windows/Apache/MySQL/PHP)
choco install wamp-server -y
2. Joomla Configuration
After installing Joomla, enable these extensions:
// Sample PHP snippet for document links
function generateDocLink($docPath) {
return '<a href="'.JURI::root().'docs/'.$docPath.'" class="sop-link">'.basename($docPath).'</a>';
}
3. Document Management Integration
Alfresco configuration snippet for REST API:
// JavaScript fetch example
fetch('http://alfresco:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes', {
headers: new Headers({
'Authorization': 'Basic ' + btoa('admin:admin')
})
})
.then(response => response.json())
.then(data => displayDocuments(data));
For a SharePoint-like interface:
/* CSS for dashboard layout */
.intranet-dashboard {
display: grid;
grid-template-columns: 25% 50% 25%;
grid-gap: 15px;
}
.news-widget, .calendar-widget {
border: 1px solid #e1e1e1;
padding: 10px;
}
Set up automated backups using PowerShell:
# Backup script for Joomla
$date = Get-Date -Format "yyyyMMdd"
Compress-Archive -Path "C:\wamp\www\intranet" -DestinationPath "D:\backups\intranet_$date.zip"
- Implement HTTPS using Let's Encrypt
- Regularly update Joomla components
- Use Active Directory for centralized auth