Перейти к основному содержимому
Это документация для Пассворка версии 6.0, которая больше не поддерживается.

Актуальная документация находится на странице последней версии 7.0.
Версия: 6.0

Windows Server

к сведению

Инструкция по установке Пассворка на ОС:

  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022

1. Минимальные системные требования

Пассворк не требователен к системным ресурсам, а необходимое количество серверов зависит от числа активных пользователей, объема хранимых данных и требований к отказоустойчивости системы.

Ознакомьтесь с полными системными требованиями.

2. Базовые действия перед установкой

Открыть PowerShell от имени администратора:

  • Нажать правой кнопкой мыши на значок Пуск в левом нижнем углу экрана;
  • Выбрать Windows PowerShell (администратор) в контекстном меню.
осторожно

Если используется Windows Server 2016 — нужно включить TLS-протокол для загрузки пакетов в операционную систему:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Создать временную директорию для скачивания пакетов и архивов:

if (-not (Test-Path "$env:SystemDrive\Windows\Temp\passwork_install" -PathType Container)) {
New-Item -Path "$env:SystemDrive\Windows\Temp\passwork_install" -ItemType Directory
Write-Host "Директория успешно создана" -ForegroundColor Green
} else {
Write-Host "Директория уже существует"
}

Опеределить имена групп пользователей с помощью SID:

$userGroupSid = "S-1-5-32-545"
$userSecurityIdentifier = New-Object System.Security.Principal.SecurityIdentifier($userGroupSid)
$userGroupName = $userSecurityIdentifier.Translate([System.Security.Principal.NTAccount]).Value
$userGroupName = $userGroupName.Split("\")[1]

$iis_iusrsGroupSid = "S-1-5-32-568"
$iis_iusrsSecurityIdentifier = New-Object System.Security.Principal.SecurityIdentifier($iis_iusrsGroupSid)
$iis_iusrsGroupName = $iis_iusrsSecurityIdentifier.Translate([System.Security.Principal.NTAccount]).Value
$iis_iusrsGroupName = $iis_iusrsGroupName.Split("\")[1]

Установить роль IIS с модулем:

Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature -Name Web-CGI -IncludeManagementTools

3. Установка PHP

Загрузить архив PHP:

try {
(New-Object System.Net.WebClient).DownloadFile(
"https://repos.passwork.ru/repository/windows_packages/php_build/82/php_latest.zip",
"$env:SystemDrive\Windows\Temp\passwork_install\php_latest.zip"
)
Write-Host "PHP загружен успешно" -ForegroundColor Green
} catch {
Write-Host "Ошибка при загрузке PHP: $_" -ForegroundColor Red
}
к сведению

Вы также можете скачать архив вручную

Разархивировать содержимое в Program Files:

Expand-Archive `
-Path "$env:SystemDrive\Windows\Temp\passwork_install\php_latest.zip" `
-DestinationPath "$env:ProgramFiles\"

Добавить PHP-утилиты в переменное окружение PATH:

if (-not ([System.Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User).Contains("$env:ProgramFiles\php8.2"))) {
[System.Environment]::SetEnvironmentVariable(
"PATH",
[System.Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User) + ";$env:ProgramFiles\php8.2",
[System.EnvironmentVariableTarget]::User
)
Write-Host "Директория PHP добавлена в переменное окружение PATH" -ForegroundColor Green
} else {
Write-Host "Директория PHP уже присутствует в переменном окружении PATH"
}
к сведению

Для проверки откройте новое окно PowerShell и выполните команду php -v

Установить права группе Users для PHP-директории:

Invoke-Expression "icacls '$env:ProgramFiles\php8.2' /grant '${userGroupName}:(OI)(CI)`M'"

4. Установка базы данных MongoDB

Загрузить установщик MongoDB:

try {
(New-Object System.Net.WebClient).DownloadFile("https://repos.passwork.ru/repository/windows_packages/mongodb_database_latest.msi", "$env:SystemDrive\Windows\Temp\passwork_install\mongodb_database_latest.msi")
Write-Host "MongoDB успешно загружен" -ForegroundColor Green
} catch {
Write-Host "Ошибка при загрузке MongoDB: $_" -ForegroundColor Red
}
к сведению

Установить MongoDB по умолчанию:

try {
Start-Process -FilePath "msiexec.exe" -ArgumentList "/l*v", "$env:SystemDrive\Windows\Temp\mdbinstall.log", "/qb", "/i", "$env:SystemDrive\Windows\Temp\passwork_install\mongodb_database_latest.msi", "SHOULD_INSTALL_COMPASS=0", "ADDLOCAL=Router,ServerService" -Wait -ErrorAction Stop
} catch {
Write-Host "Ошибка установки MongoDB: $_." -ForegroundColor Red
}
к сведению

Для установки MongoDB на другой диск нужно добавить "INSTALLLOCATION=A:\MongoDB"

Создать директорию для утилит администрирования MongoDB:

if (-not (Test-Path "$env:ProgramFiles\MongoDB\Tools\")) {
New-Item -ItemType Directory -Force -Path "$env:ProgramFiles\MongoDB\Tools\"
Write-Host "Директория успешно создана" -ForegroundColor Green
} else {
Write-Host "Директория уже существует"
}

Загрузить утилиты администрирования:

try {
(New-Object System.Net.WebClient).DownloadFile(
"https://repos.passwork.ru/repository/windows_packages/database_tools_latest.zip",
"$env:SystemDrive\Windows\Temp\passwork_install\database_tools_latest.zip"
)
Write-Host "Утилиты администрирования загружены" -ForegroundColor Green
} catch {
Write-Host "Ошибка загрузки утилит администрирования: $_" -ForegroundColor Red
}
к сведению

Разархивировать содержимое:

Expand-Archive `
-Path "$env:SystemDrive\Windows\Temp\passwork_install\database_tools_latest.zip" `
-DestinationPath "$env:ProgramFiles\MongoDB\Tools\"

Добавить утилиты администрирования в переменное окружение PATH:

if (-not ([System.Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User).Contains("$env:ProgramFiles\MongoDB\Tools"))) {
[System.Environment]::SetEnvironmentVariable(
"PATH",
[System.Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User) + ";$env:ProgramFiles\MongoDB\Tools",
[System.EnvironmentVariableTarget]::User
)
Write-Host "Утилиты MongoDB добавлены в переменное окружения PATH" -ForegroundColor Green
} else {
Write-Host "Утилиты MongoDB уже присутствуют в переменной окружения PATH"
}

5. Установка модулей для IIS

Загрузить архив с модулями:

try {
(New-Object System.Net.WebClient).DownloadFile(
"https://repos.passwork.ru/repository/windows_packages/iis_package_latest.zip",
"$env:SystemDrive\Windows\Temp\passwork_install\iis_package_latest.zip"
)
Write-Host "Архив успешно загружен" -ForegroundColor Green
} catch {
Write-Host "Ошибка загрузки архива: $_" -ForegroundColor Red
}
к сведению

В случае ошибки вы можете скачать модули вручную

Разархивировать модули для IIS:

Expand-Archive `
-Path "$env:SystemDrive\Windows\Temp\passwork_install\iis_package_latest.zip" `
-DestinationPath "$env:SystemDrive\Windows\Temp\passwork_install\"

Установить Visual C++:

try {
Start-Process `
-FilePath "$env:SystemDrive\Windows\Temp\passwork_install\VC_redist.x64.exe" `
-ArgumentList "/q" -Wait -ErrorAction Stop
}
catch {
Write-Host "Установка Visual C++ завершилась ошибкой: $_" -ForegroundColor Red
}

Установить PHP Manager:

try {
Start-Process -FilePath "msiexec.exe" `
-ArgumentList "/i $env:SystemDrive\Windows\Temp\passwork_install\PHPManagerForIIS_x64.msi /quiet /norestart" `
-Wait -ErrorAction Stop
}
catch {
Write-Host "Установка PHP Manager завершилась ошибкой: $_" -ForegroundColor Red
}

Установить URL Rewrite:

try {
Start-Process -FilePath "msiexec.exe" `
-ArgumentList "/i $env:SystemDrive\Windows\Temp\passwork_install\rewrite_amd64_en-US.msi /quiet /norestart" `
-Wait -ErrorAction Stop
}
catch {
Write-Host "Установка URL Rewrite завершилась ошибкой: $_" -ForegroundColor Red
}

6. Получение последней версии Пассворка

Создать директорию для Пассворка:

if (-not (Test-Path "$env:SystemDrive\inetpub\wwwroot\passwork")) {
New-Item -ItemType Directory -Force -Path "$env:SystemDrive\inetpub\wwwroot\passwork"
Write-Host "Директория успешно создана" -ForegroundColor Green
} else {
Write-Host "Директория уже существует"
}

Перейти на клиентский портал Пассворка и скопировать номер сертификата:

Сертификат Passwork

Получить актуальную версию Пассворка, указав номер сертификата:

try {
(New-Object System.Net.WebClient).DownloadFile(
"https://portal.passwork.ru/api/download?certificate=номер_сертификата",
"$env:SystemDrive\Windows\Temp\passwork_install\passwork.zip"
)
Write-Host "Пассворк успешно загружен" -ForegroundColor Green
} catch {
Write-Host "Ошибка загрузки Пассворка: $_" -ForegroundColor Red
}

Разархивировать полученный архив:

Expand-Archive `
-Path "$env:SystemDrive\Windows\Temp\passwork_install\passwork.zip" `
-DestinationPath "$env:SystemDrive\inetpub\wwwroot\passwork\"

Создать web.config для правил перенаправления:

"<?xml version=`"1.0`" encoding=`"UTF-8`"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=`"Imported Rule 1`" stopProcessing=`"true`">
<match url=`"^app/(.*)/(.*)/template.([a-z-A-Z0-9]+).html`" ignoreCase=`"false`" />
<conditions logicalGrouping=`"MatchAll`">
<add input=`"{REQUEST_FILENAME}`" matchType=`"IsFile`" ignoreCase=`"false`" negate=`"true`" />
</conditions>
<action type=`"Rewrite`" url=`"app/{R:1}/{R:2}/template.html`" />
</rule>
<rule name=`"Imported Rule 2`" stopProcessing=`"true`">
<match url=`"^extension/js/(.*)/(.*)/template.([a-z-A-Z0-9]+).html`" ignoreCase=`"false`" />
<action type=`"Rewrite`" url=`"extension/js/{R:1}/{R:2}/template.html`" />
</rule>
<rule name=`"Imported Rule 3`" stopProcessing=`"true`">
<match url=`"^(.*)$`" ignoreCase=`"false`" />
<conditions logicalGrouping=`"MatchAll`">
<add input=`"{REQUEST_FILENAME}`" matchType=`"IsDirectory`" ignoreCase=`"false`" negate=`"true`" />
<add input=`"{REQUEST_FILENAME}`" matchType=`"IsFile`" ignoreCase=`"false`" negate=`"true`" />
</conditions>
<action type=`"Rewrite`" url=`"index.php?_url=/{R:1}`" appendQueryString=`"true`" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>" | Out-File -FilePath "$env:SystemDrive\inetpub\wwwroot\passwork\public\web.config" -Encoding UTF8

Установить права для физического расположения Пассворка:

Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant '${userGroupName}:(OI)(CI)`M'"
Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant '${$iis_iusrsGroupName}:(OI)(CI)`M'"
Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant 'IUSR:(OI)(CI)`M'"

7. Настройка веб-сервера IIS

Подключить модули в PowerShell для управления IIS:

Import-Module IISAdministration
Import-Module WebAdministration
Add-PsSnapin PHPManagerSnapin

Разблокировать конфигурацию handlers в IIS:

Invoke-Expression "$env:windir\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/handlers"

Получить используемые порты в операционной системе:

function Test-PortInUse {
param (
[int]$Port
)

try {
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, $Port)
$listener.Start()
$listener.Stop()
return $false
} catch {
return $true
}
}

Проверить занятые стандартные порты для веб-сайта:

if (Test-PortInUse -Port 80) {
$httpPort = 5353
} else {
$httpPort = 80
}

Создать веб-сайт (Passwork Web Site) с HTTP-протоколом:

New-WebSite -Name "Passwork Web Site" -Port $httpPort -PhysicalPath "$env:SystemDrive\inetpub\wwwroot\passwork\public" -Force

Зарегистрировать PHP-версию для веб-сайта:

New-PHPVersion -ScriptProcessor "$env:ProgramFiles\php8.2\php-cgi.exe" -SiteName "Passwork Web Site" -VirtualPath "/"

Активировать драйверы и расширения для веб-сайта:

$availableExtensions = Get-PHPExtension -SiteName "Passwork Web Site" -VirtualPath "/"

$commands = @(
@{Name="php_curl.dll"; Status="Enabled"},
@{Name="php_gettext.dll"; Status="Enabled"},
@{Name="php_zip.dll"; Status="Enabled"},
@{Name="php_phalcon.dll"; Status="Enabled"},
@{Name="php_mongodb.dll"; Status="Enabled"},
@{Name="php_ldap.dll"; Status="Enabled"},
@{Name="php_gd.dll"; Status="Enabled"},
@{Name="php_openssl.dll"; Status="Enabled"},
@{Name="php_soap.dll"; Status="Enabled"},
@{Name="php_mbstring.dll"; Status="Enabled"},
@{Name="php_mysqli.dll"; Status="Enabled"},
@{Name="php_opcache.dll"; Status="Enabled"}
)

foreach ($command in $commands) {
$extension = $availableExtensions | Where-Object {$_.Name -eq $command.Name}
if (-not $extension) {
Write-Host "$($command.Name) не доступен"
} elseif ($extension.Status -eq "Enabled") {
Write-Host "$($command.Name) уже включен"
} else {
Set-PHPExtension -Name $command.Name -Status Enabled -SiteName "Passwork Web Site" -VirtualPath "/"
Write-Host "$($command.Name) успешно активировано"
}
}

Перезапустить веб-сервер IIS:

Restart-Service -Name "W3SVC"
к сведению

Открыть http://localhost:80 или http://localhost:5353 для проверки подключения к Пассворку

8. Прохождение чек-листа

При первом подключении к Пассворк, необходимо пройти чек-лист параметров, в ходе которого будет выполнена:

  • Проверка необходимых параметров
  • Подключение к базе данных MongoDB
  • Случайно сгенерированный ключ для шифрования данных в MongoDB
  • Проверка лицензионного ключа
к сведению

Оставьте все поля в значениях по умолчанию, если вы устанавливаете новую копию Пассворка

После прохождения чек-листа будет предложено создать первого пользователя в Пассворк, где необходимо указать логин, пароль и почтовый адрес для отправки уведомлений.

осторожно

Первый пользователь по умолчанию является локальным и владельцем Пассворка. В случае назначения владельцем LDAP/SSO пользователя, он автоматически станет локальным и вы не сможете авторизоваться.

9. Настройка доступа по HTTPS-протоколу

9.1 Генерация самоподписанного SSL-сертификата

Проверить занятый стандартный порт для HTTPS-протокола веб-сайта:

if (Test-PortInUse -Port 443) {
$httpsPort = 444
} else {
$httpsPort = 443
}

Создать самоподписанный SSL-сертификат с значением имени сервера:

$dnsName = "$env:COMPUTERNAME"
$newCert = New-SelfSignedCertificate -DnsName $dnsName -CertStoreLocation cert:\LocalMachine\My

9.2 Создание привязки IIS для доступа по HTTPS-протоколу

Создать HTTPS-привязку в веб-сайте Пассворка:

New-WebBinding -Name "Passwork Web Site" -IPAddress "*" -Port $httpsPort -Protocol "https"

Получить текущую привязку веб-сайта Пассворка:

$binding = Get-WebBinding -Name "Passwork Web Site" -Protocol "https"

Привязать ранее созданный самоподписанный SSL-сертификат к HTTPS-протоколу веб-сайта:

$binding.AddSslCertificate($newCert.GetCertHashString(), "my")

Перезапустить веб-сервер IIS:

Restart-Service -Name "W3SVC"
к сведению

Открыть https://localhost:443 или https://localhost:444 для проверки подключения к Пассворку

9.3 Настройка Пассворка для работы по HTTPS-протоколу

При использовании защищенного SSL-соединения (HTTPS) клиентские браузеры требуют определенных флагов для обработки данных Пассворка.

Если флаги session.cookie_secure и disableSameSiteCookie не установлены, браузеры не смогут установить соединение, что может приведет к ошибкам авторизации.

Установить параметр session.cookie_secure в файле C:\Program Files\php8.2\php.ini:

session.cookie_secure = 1

Установить параметр disableSameSiteCookie в C:\inetpub\wwwroot\passwork\app\config\config.ini на значение Off:

disableSameSiteCookie = Off
к сведению

Не устанавливайте эти параметры или верните их в исходное значение, если вы передумаете использовать SSL и будете работать через HTTP-протокол

10. Настройка фоновых задач

Фоновые задачи — это задачи, которые выполняются по планировщику в фоновом режиме. Узнайте, как настроить фоновые задачи.

осторожно

Фоновые задачи обязательны для корректной работы части функционала Пассворка, например:

  • Работы LDAP;
  • Отправки почтовых уведомлений;
  • Загрузки фавиконов;
  • Очистки коллекции session в базе данных Пассворка.

11. Настройка безопасности

к сведению

Перед изменением и настройке параметров безопасности, настоятельно рекомендуем убедиться в стабильной и корректной работе Пассворка, а также создать резервную копию файлов

Безопасность сервера является важной частью обеспечения защиты ценных данных и ресурсов компании. Это процесс, который требует планирования и исполнения, чтобы обеспечить максимальную защиту от различных угроз.

Ознакомьтесь с рекомендуемыми параметрами безопасности Пассворка.