Saltar al contenido principal

Windows Server

peligro

Tenga en cuenta:

  • Esta instrucción asume lo siguiente:
    • Ubicación física de Passwork — C:\inetpub\wwwroot\passwork
    • Nombre del sitio web de Passwork — Passwork Web Site
  • Antes de actualizar, si Passwork está instalado en un entorno en la nube/virtual, cree una instantánea del estado virtual del sistema operativo para restaurar la funcionalidad en caso de una actualización incorrecta

Obtención de la versión actual de Passwork

Cree un directorio temporal para obtener Passwork:

mkdir "$env:SystemDrive\inetpub\new_version"

Si el servidor con Passwork está ubicado en una red aislada

Debe ir al Portal de clientes de Passwork, copiar el número de certificado y usar la barra de direcciones del navegador para obtener la versión 7 de Passwork:

https://portal.passwork.pro/api/download?apikey=api_key

Vaya al Portal de clientes de Passwork y copie la clave API para obtener la versión actual:

Obtención de la clave API en el portal de clientes

Cree una variable API_KEY con el número de certificado:

$API_KEY = "your_api_key"

Obtenga la versión 7 de Passwork utilizando la solicitud:

try {
(New-Object System.Net.WebClient).DownloadFile(
"https://portal.passwork.pro/api/download?apikey=$API_KEY",
"$env:SystemDrive\inetpub\new_version\passwork.zip"
)
Write-Output "Passwork archive successfully obtained"
} catch {
Write-Output "Error obtaining Passwork: $_"
}

Limpie la variable API_KEY con el número de certificado:

Remove-Variable API_KEY

Actualización a la versión actual

Obtenga la versión actual de Passwork en una variable:

$version = Get-Content "$env:SystemDrive\inetpub\wwwroot\passwork\version"

Copie los archivos de configuración de Passwork al directorio temporal:

Copy-Item -Path "$env:SystemDrive\inetpub\wwwroot\passwork\init\config.env" -Destination "$env:SystemDrive\inetpub\new_version\" -Recurse -Force
Copy-Item -Path "$env:SystemDrive\inetpub\wwwroot\passwork\init\encryption_key" -Destination "$env:SystemDrive\inetpub\new_version\" -Recurse -Force
Copy-Item -Path "$env:SystemDrive\inetpub\wwwroot\passwork\.env.local" -Destination "$env:SystemDrive\inetpub\new_version\" -Recurse -Force

Cree un archivo de la versión actual de Passwork para permitir la reversión a la versión anterior:

Compress-Archive -Path "$env:SystemDrive\inetpub\wwwroot\passwork\*" -DestinationPath "$env:SystemDrive\inetpub\wwwroot\passwork-$version.zip" -Force

Elimine todo el contenido del directorio de Passwork:

Remove-Item -Path "$env:SystemDrive\inetpub\wwwroot\passwork\*" -Recurse -Force

Extraiga la versión actualizada de Passwork a la ubicación física:

Expand-Archive -Path "$env:SystemDrive\inetpub\new_version\passwork.zip" -DestinationPath "$env:SystemDrive\inetpub\wwwroot\passwork\"

Mueva los archivos de configuración copiados de Passwork a la nueva versión:

Copy-Item -Path "$env:SystemDrive\inetpub\new_version\config.env" -Destination "$env:SystemDrive\inetpub\wwwroot\passwork\init\" -Recurse -Force
Copy-Item -Path "$env:SystemDrive\inetpub\new_version\encryption_key" -Destination "$env:SystemDrive\inetpub\wwwroot\passwork\init\" -Recurse -Force
Copy-Item -Path "$env:SystemDrive\inetpub\new_version\.env.local" -Destination "$env:SystemDrive\inetpub\wwwroot\passwork\" -Recurse -Force

Elimine el directorio temporal update_passwork:

Remove-Item -Path "$env:SystemDrive\inetpub\new_version" -Recurse -Force

Establezca los permisos para la ubicación física de Passwork:

Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant 'IIS_IUSRS:(OI)(CI)`M'"
Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant 'Users:(OI)(CI)`M'"
Invoke-Expression "icacls '$env:SystemDrive\inetpub\wwwroot' /grant 'IUSR:(OI)(CI)`M'"

Descargue las reglas de reescritura web.config y colóquelo en la nueva versión de Passwork — C:\inetpub\wwwroot\passwork\public\web.config

web.config

Registro de PHP y habilitación de extensiones

Importe los módulos de IIS y registre la versión de PHP:

Import-Module IISAdministration
Add-PsSnapin PHPManagerSnapin

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

Habilite las extensiones de PHP para el sitio web de Passwork:

$extensions = @(
"php_curl.dll",
"php_gd.dll",
"php_gettext.dll",
"php_intl.dll",
"php_ldap.dll",
"php_mbstring.dll",
"php_mongodb.dll",
"php_mysqli.dll",
"php_openssl.dll",
"php_pdo_pgsql.dll",
"php_pdo_sqlite.dll",
"php_pgsql.dll",
"php_soap.dll",
"php_zip.dll",
"php_fileinfo.dll"
)

foreach ($extension in $extensions) {
Write-Host "PHP extension enabled: $extension"
Set-PHPExtension -Name $extension -Status Enabled -SiteName "Passwork Web Site" -VirtualPath "/"
}

Habilite los métodos PHP adicionales para el sitio web de Passwork:

$phpVersion=(Get-PHPConfiguration -SiteName "Passwork Web Site" -VirtualPath "/").Version
Set-WebConfigurationProperty -PSPath "IIS:\Sites\Passwork Web Site" -Filter "system.webServer/handlers/add[@name='php-$phpVersion']" -Name "verb" -Value "GET,HEAD,POST,PUT,DELETE,PATCH"

Vaya a la ubicación raíz de Passwork y actualice la versión de Passwork en la base de datos:

cd "$env:SystemDrive\inetpub\wwwroot\passwork"
php -d "memory_limit=-1" .\bin\console cache:clear
php -d "memory_limit=-1" .\bin\console cache:warmup
php -d "memory_limit=-1" .\bin\console app:update