Skip to content
Snippets Groups Projects
Commit 25cc8ae9 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Mise en place des scripts de déploiement

parent 1411a8aa
Branches
Tags
No related merge requests found
bin/ose 0 → 100755
#!/usr/bin/env php
<?php
$c = new Console();
$oa = new OseAdmin($c);
$c->printMainTitle("OSE", 15);
$action = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : '';
switch ($action) {
case 'update':
update($c, $oa);
break;
case 'notifier-indicateurs':
$oa->exec('notifier indicateurs');
break;
default:
help($c, $oa);
break;
}
function update(Console $c, OseAdmin $oa)
{
$osedir = "/var/www/ose/deploy";//dirname(__DIR__);
// Choix de la version
$c->println("Mise à jour de OSE");
$c->println("Assurez-vous bien d'avoir mis OSE en mode maintenance avant de démarrer\n(pressez Entrée pour continuer)...");
$c->getInput();
$c->exec([
"cd $osedir",
"git fetch --all --tags --prune",
], false);
$c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN);
$c->println("La version actuellement installée est la ".$oa->currentVersion($osedir));
$c->println("Voici la liste des versions de OSE disponibles:");
$tags = $oa->getTags();
foreach ($tags as $tag) {
$c->println($tag);
}
$ok = false;
while (!$ok) {
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput();
if ($oa->tagIsValid($version)) {
$ok = true;
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
}
// Récupération des sources
$c->println("\nMise à jour des fichiers à partir de GIT", $c::COLOR_LIGHT_CYAN);
$c->passthru([
"cd $osedir",
"git checkout tags/$version",
]);
$oa->writeVersion($osedir, $version);
// Récupération des dépendances
$c->println("\nMise à jour des dépendances à l'aide de Composer", $c::COLOR_LIGHT_CYAN);
$c->passthru([
"cd $osedir",
"php composer.phar self-update",
"php composer.phar install",
]);
// Conclusion
$c->println("\nFin de la mise à jour des fichiers", $c::COLOR_LIGHT_GREEN);
$c->println("Il reste encore votre base de données à mettre à jour.");
$c->println("N'oubliez pas de sortir du mode maintenance!");
$c->println('');
}
function help(Console $c, OseAdmin $oa)
{
$c->println('Actions possibles :');
$c->println(" - update : Mise à jour de l'application");
$c->println(" - notifier-indicateurs : Envoi des mails relatifs aux indicateurs");
}
/************************************************************
* Classes utiles *
************************************************************/
class OseAdmin
{
const OSE_ORIGIN = 'git@git.unicaen.fr:dsi/OSE.git';
/**
* @var Console
*/
protected $console;
/**
* @var array
*/
private $tags = false;
/**
* OseAdmin constructor.
*
* @param Console $console
*/
public function __construct(Console $console)
{
$this->console = $console;
}
public function gitlabIsReachable(): bool
{
$gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false);
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
}
public function getTags(): array
{
if (false === $this->tags) {
$this->tags = [];
$ts = $this->console->exec("git ls-remote --tags --refs " . self::OSE_ORIGIN, false);
foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10);
}
}
return $this->tags;
}
/**
* @param string $tag
*
* @return bool
*/
public function tagIsValid(string $tag): bool
{
return in_array($tag, $this->getTags());
}
public function currentVersion(string $osedir): string
{
$vf = $this->getVersionFile($osedir);
if (!file_exists($vf)) {
return 'inconnue';
}
return file_get_contents($vf);
}
public function writeVersion(string $osedir, string $version)
{
$vf = $this->getVersionFile($osedir);
file_put_contents($vf, $version);
}
private function getVersionFile(string $osedir): string
{
if ('/' == substr($osedir, -1)) {
return $osedir . 'VERSION';
} else {
return $osedir . '/VERSION';
}
}
public function exec($args)
{
$this->console->exec("php ../public/index.php " . $args);
}
}
class Console
{
const COLOR_BLACK = '0;30';
const COLOR_DARK_GRAY = '1;30';
const COLOR_BLUE = '0;34';
const COLOR_LIGHT_BLUE = '1;34';
const COLOR_GREEN = '0;32';
const COLOR_LIGHT_GREEN = '1;32';
const COLOR_CYAN = '0;36';
const COLOR_LIGHT_CYAN = '1;36';
const COLOR_RED = '0;31';
const COLOR_LIGHT_RED = '1;31';
const COLOR_PURPLE = '0;35';
const COLOR_LIGHT_PURPLE = '1;35';
const COLOR_BROWN = '0;33';
const COLOR_YELLOW = '1;33';
const COLOR_LIGHT_GRAY = '0;37';
const COLOR_WHITE = '1;37';
const BG_BLACK = '40';
const BG_RED = '41';
const BG_GREEN = '42';
const BG_YELLOW = '43';
const BG_BLUE = '44';
const BG_MAGENTA = '45';
const BG_CYAN = '46';
const BG_LIGHT_GRAY = '47';
public function printMainTitle($title, $spaces = 1)
{
$pstr = str_repeat(' ', $spaces);
$t = $pstr . $title . $pstr;
$len = mb_strlen($t);
echo '╔' . str_repeat('═', $len) . "╗\n";
echo '║' . str_repeat(' ', $len) . "║\n";
echo "║" . $t . "║\n";
echo '║' . str_repeat(' ', $len) . "║\n";
echo '╚' . str_repeat('═', $len) . "╝\n\n";
}
public function print($text, $color = null, $bgColor = null)
{
if ($bgColor) $bgColor = ';' . $bgColor;
if (!$color && !$bgColor) {
echo $text;
} else {
echo "\e[$color$bgColor" . "m$text\e[0m";
}
}
public function println($text, $color = null, $bgColor = null)
{
$this->print($text, $color, $bgColor);
echo "\n";
}
public function gestExitCode($code)
{
if (0 == $code) return;
$this->printDie("Une erreur ($code) est survenue. Le script est stoppé");
}
public function printDie($text)
{
$this->println($text, self::COLOR_LIGHT_RED);
$this->println(' -- FIN Prématurée de l\'exécution du script -- ', null, self::BG_RED);
die("\n");
}
public function getInput()
{
return trim(fgets(STDIN));
}
public function exec($command, $autoDisplay = true)
{
if (is_array($command)) {
$command = implode(';', $command);
}
exec($command, $output, $return);
if ($autoDisplay) {
echo implode("\n", $output) . "\n";
}
$this->gestExitCode($return);
return $output;
}
public function passthru($command)
{
if (is_array($command)) {
$command = implode(';', $command);
}
passthru($command, $returnVar);
$this->gestExitCode($returnVar);
return $returnVar;
}
public function strPad($input, $padLength = null, $padString = ' ')
{
return utf8_encode(str_pad(utf8_decode($input), $padLength, $padString));
}
}
\ No newline at end of file
#!/usr/bin/env php
<?php
$c = new Console();
$od = new OseDeploy($c);
$c->printMainTitle("Déploiement de OSE", 13);
// Mise en place de la clé SSH
$c->println("\nMise en place de la clé SSH vers le GitLab hébergeant OSE", $c::COLOR_LIGHT_CYAN);
$c->println("L'accès au serveur Gitlab doit se faire par SSH.");
$c->print("Voulez-vous créer une clé SSH pour accéder au serveur Gitlab hébergeant OSE ? (o/n, n par défaut) ");
$needKey = $c->getInput();
if (in_array($needKey, ["o", "O"])) {
$c->println("Génération de la clé SSH...");
$c->print("Veuillez préciser l'adresse mail du compte utilisé pour accéder au Gitlab de OSE: ");
$gitlabMail = $c->getInput();
$c->passthru("ssh-keygen -t rsa -C $gitlabMail -b 4096");
$c->println("Intégrez ensuite votre clé SSH dans Gitlab. Ensuite, appuyez sur \"Entrée\" pour continuer...");
$c->getInput();
if ($od->gitlabIsReachable()) {
$c->println("Votre clé SSH a bien été déployée et est fonctionnelle.", $c::COLOR_LIGHT_GREEN);
} else {
$c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure.");
}
} else {
if (!$od->gitlabIsReachable()) {
$c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure.");
}
}
// Création du dossier
$c->println("\nCréation du dossier et initialisation de GIT", $c::COLOR_LIGHT_CYAN);
$c->print("Veuillez indiquer un nouveau répertoire où implanter OSE: ");
$osedir = $c->getInput();
if (file_exists($osedir)){
$c->printDie("Le répertoire $osedir existe déjà. Merci d'en spécifier un nouveau.");
}
$c->exec([
"mkdir $osedir",
"cd $osedir",
"git init",
"git remote add origin " . $od::OSE_ORIGIN,
"git fetch --all --tags --prune",
]);
// Choix de la version
$c->println("\nSélection de la version à déployer", $c::COLOR_LIGHT_CYAN);
$c->println("Voici la liste des versions de OSE disponibles:");
$tags = $od->getTags();
foreach ($tags as $tag) {
$c->println($tag);
}
$ok = false;
while (!$ok) {
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput();
if ($od->tagIsValid($version)) {
$ok = true;
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
}
// Récupération des sources
$c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN);
$c->exec([
"cd $osedir",
"git checkout tags/$version",
"mkdir data/cache",
"chmod 777 data/cache",
//"chmod +7 bin/ose",
]);
$od->writeVersion($osedir, $version);
// Récupération de Composer
$c->println("\nRécupération de l'outil de gestion des dépendances Composer", $c::COLOR_LIGHT_CYAN);
$c->passthru("cd $osedir;wget https://getcomposer.org/composer.phar");
// Récupération des dépendances
$c->println("\nChargement des dépendances à l'aide de Composer", $c::COLOR_LIGHT_CYAN);
$c->passthru("cd $osedir;php composer.phar install");
// Mise en place des tâches CRON...
// Conclusion
$c->println("\nFin du script d'installation des fichiers", $c::COLOR_LIGHT_GREEN);
$c->println("Il reste encore six étapes à réaliser pour que OSE soit pleinement fonctionnel :");
$c->println(" 1 - Configurez votre serveur Apache");
$c->println(" 2 - Initialisez la base de données de OSE avec le script prévu à cet effet");
$c->println(" 3 - Mettez en place la configuration locale de l'application");
$c->println(" 4 - Une fois bien connecté, configurez vos connecteurs en vous appuyant\n le cas échéant sur ceux qui vous sont fournis");
$c->println(" 5 - Mettez en place les tâches CRON et les JOBS Oracle nécessaires (envoi de mails pour les infdicateurs, Synchronisatio automatique, etc.");
$c->println(" 6 - Paramétrez l'application pour l'adapter à vos besoins");
$c->println('');
$c->println("Vous trouverez plus d'informations dans la procédure d'installation située dans\n$osedir/data/Déploiement/Procédure d'installation.pdf");
$c->println("OSE possède également un guide de l'administrateur pour vous aider à configurer l'application");
$c->println('');
/************************************************************
* Classes utiles *
************************************************************/
class OseDeploy
{
const OSE_ORIGIN = 'git@git.unicaen.fr:dsi/OSE.git';
/**
* @var Console
*/
protected $console;
/**
* @var array
*/
private $tags = false;
/**
* OseDeploy constructor.
*
* @param Console $console
*/
public function __construct(Console $console)
{
$this->console = $console;
}
public function gitlabIsReachable(): bool
{
$gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false);
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
}
public function getTags(): array
{
if (false === $this->tags) {
$this->tags = [];
$ts = $this->console->exec("git ls-remote --tags --refs " . self::OSE_ORIGIN, false);
foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10);
}
}
return $this->tags;
}
/**
* @param string $tag
*
* @return bool
*/
public function tagIsValid(string $tag): bool
{
return in_array($tag, $this->getTags());
}
public function currentVersion(string $osedir): string
{
$vf = $this->getVersionFile($osedir);
if (!file_exists($vf)) {
return 'inconnue';
}
return file_get_contents($vf);
}
public function writeVersion(string $osedir, string $version)
{
$vf = $this->getVersionFile($osedir);
file_put_contents($vf, $version);
}
private function getVersionFile(string $osedir): string
{
if ('/' == substr($osedir, -1)) {
return $osedir . 'VERSION';
} else {
return $osedir . '/VERSION';
}
}
}
class Console
{
const COLOR_BLACK = '0;30';
const COLOR_DARK_GRAY = '1;30';
const COLOR_BLUE = '0;34';
const COLOR_LIGHT_BLUE = '1;34';
const COLOR_GREEN = '0;32';
const COLOR_LIGHT_GREEN = '1;32';
const COLOR_CYAN = '0;36';
const COLOR_LIGHT_CYAN = '1;36';
const COLOR_RED = '0;31';
const COLOR_LIGHT_RED = '1;31';
const COLOR_PURPLE = '0;35';
const COLOR_LIGHT_PURPLE = '1;35';
const COLOR_BROWN = '0;33';
const COLOR_YELLOW = '1;33';
const COLOR_LIGHT_GRAY = '0;37';
const COLOR_WHITE = '1;37';
const BG_BLACK = '40';
const BG_RED = '41';
const BG_GREEN = '42';
const BG_YELLOW = '43';
const BG_BLUE = '44';
const BG_MAGENTA = '45';
const BG_CYAN = '46';
const BG_LIGHT_GRAY = '47';
public function printMainTitle($title, $spaces = 1)
{
$pstr = str_repeat(' ', $spaces);
$t = $pstr . $title . $pstr;
$len = mb_strlen($t);
echo '╔' . str_repeat('═', $len) . "╗\n";
echo '║' . str_repeat(' ', $len) . "║\n";
echo "║" . $t . "║\n";
echo '║' . str_repeat(' ', $len) . "║\n";
echo '╚' . str_repeat('═', $len) . "╝\n\n";
}
public function print($text, $color = null, $bgColor = null)
{
if ($bgColor) $bgColor = ';' . $bgColor;
if (!$color && !$bgColor) {
echo $text;
} else {
echo "\e[$color$bgColor" . "m$text\e[0m";
}
}
public function println($text, $color = null, $bgColor = null)
{
$this->print($text, $color, $bgColor);
echo "\n";
}
public function gestExitCode($code)
{
if (0 == $code) return;
$this->printDie("Une erreur ($code) est survenue. Le script est stoppé");
}
public function printDie($text)
{
$this->println($text, self::COLOR_LIGHT_RED);
$this->println(' -- FIN Prématurée de l\'exécution du script -- ', null, self::BG_RED);
die("\n");
}
public function getInput()
{
return trim(fgets(STDIN));
}
public function exec($command, $autoDisplay = true)
{
if (is_array($command)) {
$command = implode(';', $command);
}
exec($command, $output, $return);
if ($autoDisplay) {
echo implode("\n", $output) . "\n";
}
$this->gestExitCode($return);
return $output;
}
public function passthru($command)
{
if (is_array($command)) {
$command = implode(';', $command);
}
passthru($command, $returnVar);
$this->gestExitCode($returnVar);
return $returnVar;
}
public function strPad($input, $padLength = null, $padString = ' ')
{
return utf8_encode(str_pad(utf8_decode($input), $padLength, $padString));
}
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "8fcf364565552167bfe396556f0fee35", "content-hash": "6da2cfcc99bdc140e00167d9ea4ce7cb",
"packages": [ "packages": [
{ {
"name": "bjyoungblood/bjy-authorize", "name": "bjyoungblood/bjy-authorize",
...@@ -1284,16 +1284,16 @@ ...@@ -1284,16 +1284,16 @@
}, },
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v3.4.6", "version": "v3.4.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug.git", "url": "https://github.com/symfony/debug.git",
"reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc" "reference": "9cf7c2271cfb89ef9727db1b740ca77be57bf9d7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/9b1071f86e79e1999b3d3675d2e0e7684268b9bc", "url": "https://api.github.com/repos/symfony/debug/zipball/9cf7c2271cfb89ef9727db1b740ca77be57bf9d7",
"reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc", "reference": "9cf7c2271cfb89ef9727db1b740ca77be57bf9d7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1336,7 +1336,7 @@ ...@@ -1336,7 +1336,7 @@
], ],
"description": "Symfony Debug Component", "description": "Symfony Debug Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-28T21:49:22+00:00" "time": "2018-04-03T05:22:50+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
...@@ -1399,16 +1399,16 @@ ...@@ -1399,16 +1399,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v2.8.36", "version": "v2.8.37",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "756f614c5061729ea245ac6717231f7e3bfb74f9" "reference": "c2fc900ee54e1e44aa956eae8ba041a5347ba93c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/756f614c5061729ea245ac6717231f7e3bfb74f9", "url": "https://api.github.com/repos/symfony/process/zipball/c2fc900ee54e1e44aa956eae8ba041a5347ba93c",
"reference": "756f614c5061729ea245ac6717231f7e3bfb74f9", "reference": "c2fc900ee54e1e44aa956eae8ba041a5347ba93c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -1444,15 +1444,15 @@ ...@@ -1444,15 +1444,15 @@
], ],
"description": "Symfony Process Component", "description": "Symfony Process Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-02-12T17:44:58+00:00" "time": "2018-03-19T21:11:56+00:00"
}, },
{ {
"name": "unicaen/app", "name": "unicaen/app",
"version": "dev-master", "version": "1.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/app.git", "url": "https://git.unicaen.fr/lib/unicaen/app.git",
"reference": "589ef1b2344804bfb90082eb73405c2dd186b447" "reference": "845dd41da189fdd5e39f6d2d882e05b77a16c5dc"
}, },
"require": { "require": {
"doctrine/doctrine-orm-module": ">=0.7", "doctrine/doctrine-orm-module": ">=0.7",
...@@ -1495,15 +1495,15 @@ ...@@ -1495,15 +1495,15 @@
] ]
}, },
"description": "Module de base des applications unicaen", "description": "Module de base des applications unicaen",
"time": "2018-03-21T08:44:30+00:00" "time": "2018-03-28T08:06:13+00:00"
}, },
{ {
"name": "unicaen/auth", "name": "unicaen/auth",
"version": "dev-master", "version": "1.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/auth.git", "url": "https://git.unicaen.fr/lib/unicaen/auth.git",
"reference": "c89fb672ac642da21630b8eff4cafd54aa07049f" "reference": "8615a5a03664977d26691a60e35131b12ba0b752"
}, },
"require": { "require": {
"bjyoungblood/bjy-authorize": ">=1.4", "bjyoungblood/bjy-authorize": ">=1.4",
...@@ -1525,11 +1525,11 @@ ...@@ -1525,11 +1525,11 @@
] ]
}, },
"description": "Module d'authentification pour les applications Unicaen", "description": "Module d'authentification pour les applications Unicaen",
"time": "2018-03-26T14:42:50+00:00" "time": "2018-03-19T13:36:48+00:00"
}, },
{ {
"name": "unicaen/code", "name": "unicaen/code",
"version": "dev-master", "version": "1.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/code.git", "url": "https://git.unicaen.fr/lib/unicaen/code.git",
...@@ -1555,11 +1555,11 @@ ...@@ -1555,11 +1555,11 @@
}, },
{ {
"name": "unicaen/import", "name": "unicaen/import",
"version": "dev-master", "version": "1.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/import.git", "url": "https://git.unicaen.fr/lib/unicaen/import.git",
"reference": "ec1e41a0f10538308fda52910b8ef9b714bbeb12" "reference": "a8f1c91b436138a0bf22226bb9c20335f0aa73aa"
}, },
"require": { "require": {
"unicaen/auth": "^1.2 || dev-master", "unicaen/auth": "^1.2 || dev-master",
...@@ -1579,7 +1579,7 @@ ...@@ -1579,7 +1579,7 @@
] ]
}, },
"description": "Module d'import de données vers une base Oracle", "description": "Module d'import de données vers une base Oracle",
"time": "2018-02-27T14:35:23+00:00" "time": "2018-02-27T08:40:13+00:00"
}, },
{ {
"name": "unicaen/oracle", "name": "unicaen/oracle",
...@@ -1611,11 +1611,11 @@ ...@@ -1611,11 +1611,11 @@
}, },
{ {
"name": "unicaen/tbl", "name": "unicaen/tbl",
"version": "dev-master", "version": "1.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/tbl.git", "url": "https://git.unicaen.fr/lib/unicaen/tbl.git",
"reference": "b6e44ef6fb34563debc3c22d0dc32bf7d3daa98b" "reference": "8fcb7ab01d002c1f61a91cc57bd8b0492459a83e"
}, },
"require": { "require": {
"unicaen/app": "^1.3 || dev-trunk" "unicaen/app": "^1.3 || dev-trunk"
...@@ -1634,7 +1634,7 @@ ...@@ -1634,7 +1634,7 @@
] ]
}, },
"description": "Module Unicaen de gestion de tableaux de bord Oracle", "description": "Module Unicaen de gestion de tableaux de bord Oracle",
"time": "2018-03-02T10:27:16+00:00" "time": "2018-02-27T09:35:50+00:00"
}, },
{ {
"name": "zendframework/zend-authentication", "name": "zendframework/zend-authentication",
...@@ -3958,22 +3958,10 @@ ...@@ -3958,22 +3958,10 @@
} }
], ],
"packages-dev": [], "packages-dev": [],
"aliases": [ "aliases": [],
{
"alias": "1.3.6",
"alias_normalized": "1.3.6.0",
"version": "9999999-dev",
"package": "unicaen/app"
}
],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": { "stability-flags": {
"unicaen/app": 20, "bjyoungblood/bjy-authorize": 20
"unicaen/auth": 20,
"bjyoungblood/bjy-authorize": 20,
"unicaen/code": 20,
"unicaen/import": 20,
"unicaen/tbl": 20
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
......
File deleted
...@@ -31,15 +31,15 @@ Les spécifications sont les suivantes : ...@@ -31,15 +31,15 @@ Les spécifications sont les suivantes :
* un tablespace temporaire de 2 Go minimum * un tablespace temporaire de 2 Go minimum
* encodage en UTF-8, Oracle Enterprise Edition 11.2.0.3 (ou +) * encodage en UTF-8, Oracle Enterprise Edition 11.2.0.3 (ou +)
# Installation de l'archive # Installation des fichiers
Cette page mentionne toutes les étapes à réaliser pour pouvoir installer OSE. L'installation se fait en récupérant les sources directement depuis le déôt GitLab de l'Université de Caen.
Vous devrez auparavant récupérer l'archive de OSE. Un script a été conçu pour automatiser cette opération.
Dézippez l’Archive de OSE vers le répertoire de votre choix (par exemple /var/www/ose). Exécutez la commande suivante sur votre serveur :
```bash
Donner les droits d’écriture à l’utilisateur Apache (www-data sous Debian) au dossier suivant : wget https://ose.unicaen.fr/deploiement/ose-deploy && php ose-deploy
data/cache ```
# Configuration d'Apache # Configuration d'Apache
## Avec un VirtualHost ## Avec un VirtualHost
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment