joerglohrerde/public/2022/02/16/moodle-iomad-linux.html/index.html

351 lines
17 KiB
HTML
Raw Normal View History

2024-11-06 15:55:54 +01:00
<!DOCTYPE html>
2025-01-28 18:18:59 +01:00
<html lang="de" dir="auto">
2025-02-12 19:43:36 +01:00
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script><meta charset="utf-8">
2025-01-28 18:18:59 +01:00
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
2025-02-12 19:43:36 +01:00
<meta name="robots" content="noindex, nofollow">
2025-01-28 18:18:59 +01:00
<title>Moodle Server mit Ubuntu 20 LTS und Iomad | Jörg Lohrer</title>
<meta name="keywords" content="Moodle, Ubuntu, Linux, Iomad, Server, MySql, Datenbank">
<meta name="description" content="Installation von Iomad zur Moodle-Instanz-Verwaltung">
<meta name="author" content="Jörg Lohrer">
2025-02-12 19:43:36 +01:00
<link rel="canonical" href="http://localhost:1313/2022/02/16/moodle-iomad-linux.html/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.fcb38834b6dee4645dbe7c77d6c5278e12448b758b3f769e48a2d86d35709cb2.css" integrity="sha256-/LOINLbe5GRdvnx31sUnjhJEi3WLP3aeSKLYbTVwnLI=" rel="preload stylesheet" as="style">
<link rel="icon" href="http://localhost:1313/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="http://localhost:1313/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="http://localhost:1313/favicon-32x32.png">
<link rel="apple-touch-icon" href="http://localhost:1313/apple-touch-icon.png">
<link rel="mask-icon" href="http://localhost:1313/safari-pinned-tab.svg">
2025-01-28 18:18:59 +01:00
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
2025-02-12 19:43:36 +01:00
<link rel="alternate" hreflang="de" href="http://localhost:1313/2022/02/16/moodle-iomad-linux.html/">
2025-01-28 18:18:59 +01:00
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
2025-02-12 19:43:36 +01:00
</noscript>
2024-11-06 15:55:54 +01:00
</head>
2025-01-28 18:18:59 +01:00
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<header class="header">
<nav class="nav">
<div class="logo">
2025-02-12 19:43:36 +01:00
<a href="http://localhost:1313/" accesskey="h" title="Jörg Lohrer (Alt + H)">Jörg Lohrer</a>
2025-01-28 18:18:59 +01:00
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
<ul class="lang-switch"><li>|</li>
</ul>
</div>
</div>
<ul id="menu">
<li>
2025-02-12 19:43:36 +01:00
<a href="http://localhost:1313/" title="Jörg Lohrer">
2025-01-28 18:18:59 +01:00
<span>Home</span>
</a>
</li>
<li>
2025-02-12 19:43:36 +01:00
<a href="http://localhost:1313/archives/" title="Archive">
2025-01-28 18:18:59 +01:00
<span>Blog</span>
</a>
</li>
<li>
2025-02-12 19:43:36 +01:00
<a href="http://localhost:1313/impressum/" title="Impressum">
2025-01-28 18:18:59 +01:00
<span>Impressum</span>
</a>
</li>
<li>
<a href="https://reliverse.social/@joerglohrer" title="Mastodon">
<span><i class="fa fa-heart"></i>Mastodon</span>&nbsp;
<svg fill="none" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2.5" viewBox="0 0 24 24" height="12" width="12">
<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"></path>
<path d="M15 3h6v6"></path>
<path d="M10 14L21 3"></path>
</svg>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<h1 class="post-title entry-hint-parent">
Moodle Server mit Ubuntu 20 LTS und Iomad
</h1>
<div class="post-description">
Installation von Iomad zur Moodle-Instanz-Verwaltung
2024-11-06 15:55:54 +01:00
</div>
2025-01-28 18:18:59 +01:00
<div class="post-meta"><span title='2022-02-16 00:00:00 +0000 UTC'>Februar 16, 2022</span>&nbsp;·&nbsp;Jörg Lohrer
2024-11-06 15:55:54 +01:00
</div>
2025-01-28 18:18:59 +01:00
</header>
<figure class="entry-cover">
2025-02-12 19:43:36 +01:00
<img loading="eager" src="http://localhost:1313/2022/02/16/moodle-iomad-linux.html/title-gif.gif" alt="">
</figure>
2025-01-28 18:18:59 +01:00
<div class="post-content"><h1 id="moodle-server-mit-ubuntu-20-lts-und-iomad">Moodle Server mit Ubuntu 20 LTS und Iomad<a hidden class="anchor" aria-hidden="true" href="#moodle-server-mit-ubuntu-20-lts-und-iomad">#</a></h1>
<h2 id="ubuntu-server-image-herunterladen">Ubuntu Server-Image herunterladen<a hidden class="anchor" aria-hidden="true" href="#ubuntu-server-image-herunterladen">#</a></h2>
<p><a href="https://releases.ubuntu.com/20.04/">https://releases.ubuntu.com/20.04/</a></p>
<h2 id="virtualbox-mit-dem-ubuntu-image-einrichten">Virtualbox mit dem Ubuntu Image einrichten<a hidden class="anchor" aria-hidden="true" href="#virtualbox-mit-dem-ubuntu-image-einrichten">#</a></h2>
<h3 id="netzwerkbrücke-aktivieren">Netzwerkbrücke aktivieren<a hidden class="anchor" aria-hidden="true" href="#netzwerkbrücke-aktivieren">#</a></h3>
<p><img loading="lazy" src="01-netzwerkbruecke.png" alt="" />
2024-11-06 15:55:54 +01:00
</p>
2025-01-28 18:18:59 +01:00
<h3 id="ip-adresse-ermitteln">IP-Adresse ermitteln<a hidden class="anchor" aria-hidden="true" href="#ip-adresse-ermitteln">#</a></h3>
2024-11-06 15:55:54 +01:00
<p><code>ifconfig </code> -&gt; 192.168.178.132</p>
2025-01-28 18:18:59 +01:00
<h3 id="auf-dem-mac-oder-pc-die-auflösung-des-hosts-verknüpfen">Auf dem Mac (oder PC) die Auflösung des Hosts verknüpfen<a hidden class="anchor" aria-hidden="true" href="#auf-dem-mac-oder-pc-die-auflösung-des-hosts-verknüpfen">#</a></h3>
2024-11-06 15:55:54 +01:00
<p>auf dem Mac <code>sudo nano /etc/hosts</code> die IP eintragen und moodle.local zuweisen:
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="02-hosts-eintragen.png" alt="" />
2024-11-06 15:55:54 +01:00
</p>
2025-01-28 18:18:59 +01:00
<h2 id="moodle-server-auf-virtualbox-vorbereiten">Moodle Server auf Virtualbox vorbereiten<a hidden class="anchor" aria-hidden="true" href="#moodle-server-auf-virtualbox-vorbereiten">#</a></h2>
2024-11-06 15:55:54 +01:00
<p><code>sudo -i</code>wechselt auf root</p>
2025-01-28 18:18:59 +01:00
<h3 id="ssh-zugriff-ermöglichen">SSH Zugriff ermöglichen<a hidden class="anchor" aria-hidden="true" href="#ssh-zugriff-ermöglichen">#</a></h3>
<p><a href="https://linuxconfig.org/allow-ssh-root-login-on-ubuntu-20-04-focal-fossa-linux">Allow SSH root login on Ubuntu 20.04 Focal Fossa Linux</a></p>
<h3 id="shellbefehle-zur-installation">Shellbefehle zur Installation:<a hidden class="anchor" aria-hidden="true" href="#shellbefehle-zur-installation">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">sudo apt update &amp;&amp; apt upgrade -y
apt install mariadb-server
sudo apt install apache2 libapache2-mod-fcgid
sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-intl php-xmlrpc php-soap
a2enconf php7.4-fpm
sudo a2enmod actions fcgid alias proxy_fcgi setenvif
a2dismod php7.4
a2dismod mpm_prefork
a2dismod mpm_worker
a2enmod mpm_event
systemctl restart php7.4-fpm apache2
2025-01-28 18:18:59 +01:00
</code></pre><h3 id="anlegen-etcapache2sites-availablemoodleconf">anlegen: /etc/apache2/sites-available/moodle.conf<a hidden class="anchor" aria-hidden="true" href="#anlegen-etcapache2sites-availablemoodleconf">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">############################
&lt;VirtualHost *:80&gt;
ServerName moodle.local
ServerAdmin webmaster@localhost
DocumentRoot /var/www/moodle
&lt;FilesMatch \.php$&gt;
SetHandler &#34;proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/&#34;
&lt;/FilesMatch&gt;
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;
####################################################################
2025-01-28 18:18:59 +01:00
</code></pre><h3 id="weitere-shellbefehle-zur-installation">Weitere Shellbefehle zur Installation:<a hidden class="anchor" aria-hidden="true" href="#weitere-shellbefehle-zur-installation">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">a2ensite moodle.conf
systemctl reload apache2
mkdir /var/www/moodle
echo &#39;&lt;?php phpinfo(); ?&gt;&#39; &gt; /var/www/moodle/info.php
2025-01-28 18:18:59 +01:00
</code></pre><h3 id="host-eintrag-hinzufügen-192168178xxx-moodlelocal">host eintrag hinzufügen: &ldquo;192.168.178.xxx moodle.local&rdquo;<a hidden class="anchor" aria-hidden="true" href="#host-eintrag-hinzufügen-192168178xxx-moodlelocal">#</a></h3>
2024-11-06 15:55:54 +01:00
<p>192.168.178.xxx moodle.local
2025-01-28 18:18:59 +01:00
192.168.178.xxx <a href="https://www.moodle.local">www.moodle.local</a></p>
<h3 id="im-browser-öffnen-httpmoodlelocalinfophp">im Browser öffnen: <a href="http://moodle.local/info.php">http://moodle.local/info.php</a><a hidden class="anchor" aria-hidden="true" href="#im-browser-öffnen-httpmoodlelocalinfophp">#</a></h3>
<h3 id="maschine-speichern-und-klonen">maschine speichern und klonen<a hidden class="anchor" aria-hidden="true" href="#maschine-speichern-und-klonen">#</a></h3>
<h2 id="anschließend-iomad-moodle-installieren">Anschließend IOMAD moodle installieren:<a hidden class="anchor" aria-hidden="true" href="#anschließend-iomad-moodle-installieren">#</a></h2>
<p><a href="https://www.iomad.org/wp-content/uploads/2021/03/Iomad-Installation-Guide.pdf">https://www.iomad.org/wp-content/uploads/2021/03/Iomad-Installation-Guide.pdf</a></p>
<h3 id="datenbank-für-moodle-erzeugen-via-ssh">Datenbank für moodle erzeugen via SSH:<a hidden class="anchor" aria-hidden="true" href="#datenbank-für-moodle-erzeugen-via-ssh">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">
mysql
CREATE DATABASE moodledb;
CREATE USER &#39;moodleowner&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;$mdb2passwd&#39;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON moodledb.* TO &#39;moodleowner&#39;@&#39;localhost&#39;;
GRANT FILE ON *.* TO &#39;moodleowner&#39;@&#39;localhost&#39;;
quit
2025-01-28 18:18:59 +01:00
</code></pre><h3 id="installation-iomad">Installation iomad<a hidden class="anchor" aria-hidden="true" href="#installation-iomad">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">cd /var/www/moodle
git clone https://github.com/iomad/iomad.git
cd iomad
git checkout -b myiomad origin/IOMAD_310_STABLE
mkdir /var/www/moodledata &amp;&amp; chmod 777 /var/www/moodledata
</code></pre><p><strong>ändern!!!</strong>: <code>/etc/apache2/sites-available/moodle.conf -&gt; DocumentRoot /var/www/moodle/iomad</code></p>
<p><code>systemctl restart php7.4-fpm apache2</code></p>
2025-01-28 18:18:59 +01:00
<h3 id="httpmoodlelocal-aufrufen-und-configphp-datei-mit-hilfe-des-assistenten-generieren-lassen"><a href="http://moodle.local">http://moodle.local</a> aufrufen und config.php Datei mit Hilfe des Assistenten generieren lassen<a hidden class="anchor" aria-hidden="true" href="#httpmoodlelocal-aufrufen-und-configphp-datei-mit-hilfe-des-assistenten-generieren-lassen">#</a></h3>
2024-11-06 15:55:54 +01:00
<p>![](03-config generieren.png)</p>
<p><strong>ändern!!!</strong>: <code>/moodle</code> entfernen</p>
2025-01-28 18:18:59 +01:00
<h3 id="configphp">config.php<a hidden class="anchor" aria-hidden="true" href="#configphp">#</a></h3>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-shell=" data-lang="shell=">&lt;?php // Moodle configuration file
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG-&gt;dbtype = &#39;mariadb&#39;;
$CFG-&gt;dblibrary = &#39;native&#39;;
$CFG-&gt;dbhost = &#39;localhost&#39;;
$CFG-&gt;dbname = &#39;moodledb&#39;;
$CFG-&gt;dbuser = &#39;moodleowner&#39;;
$CFG-&gt;dbpass = &#39;$mdb2passwd&#39;;
$CFG-&gt;prefix = &#39;mdl_&#39;;
$CFG-&gt;dboptions = array (
&#39;dbpersist&#39; =&gt; 0,
&#39;dbport&#39; =&gt; &#39;&#39;,
&#39;dbsocket&#39; =&gt; &#39;&#39;,
&#39;dbcollation&#39; =&gt; &#39;utf8mb4_general_ci&#39;,
);
$CFG-&gt;wwwroot = &#39;http://moodle.local&#39;;
$CFG-&gt;dataroot = &#39;/var/www/moodledata&#39;;
$CFG-&gt;admin = &#39;admin&#39;;
$CFG-&gt;directorypermissions = 0777;
require_once(__DIR__ . &#39;/lib/setup.php&#39;);
// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!
</code></pre>
</div>
2025-01-28 18:18:59 +01:00
<footer class="post-footer">
<ul class="post-tags">
</ul>
</footer>
2025-02-12 19:43:36 +01:00
2025-01-28 18:18:59 +01:00
</article>
</main>
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<footer class="footer">
2025-02-12 19:43:36 +01:00
<span>&copy; 2025 <a href="http://localhost:1313/">Jörg Lohrer</a></span>
2025-01-28 18:18:59 +01:00
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
<a rel="me" href="https://reliverse.social/@joerglohrer">Mastodon</a>
2024-11-06 15:55:54 +01:00
</span>
2025-01-28 18:18:59 +01:00
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
2024-11-06 15:55:54 +01:00
</body>
2025-01-28 18:18:59 +01:00
2024-11-06 15:55:54 +01:00
</html>