You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
16 KiB
386 lines
16 KiB
# Chamilo 2
|
|
|
|
[](https://github.com/chamilo/chamilo-lms/actions/workflows/behat.yml)
|
|
[](https://github.com/chamilo/chamilo-lms/actions/workflows/phpunit.yml)
|
|
[](https://github.com/chamilo/chamilo-lms/actions/workflows/php_analysis.yml)
|
|
[](https://github.com/chamilo/chamilo-lms/actions/workflows/format_code.yml)
|
|
[](https://codecov.io/gh/chamilo/chamilo-lms)
|
|
[](https://scrutinizer-ci.com/g/chamilo/chamilo-lms/?branch=master)
|
|
[](https://bestpractices.coreinfrastructure.org/projects/166)
|
|
[](https://www.codacy.com/app/chamilo/chamilo-lms?utm_source=github.com&utm_medium=referral&utm_content=chamilo/chamilo-lms&utm_campaign=badger)
|
|
[](https://shepherd.dev/github/chamilo/chamilo-lms/coverage.svg)
|
|
[](https://shepherd.dev/github/chamilo/chamilo-lms/level.svg)
|
|
|
|
Chamilo is an e-learning platform, also called "LMS", published under the GNU/GPLv3+ license. It has been used by more than 30M people worldwide since its inception in 2010. This is a development version. For the current stable branch, please select the 1.11.x branch in the Code tab.
|
|
|
|
## Quick install
|
|
|
|
**Chamilo 2.0 is still in development. This installation procedure below is for reference only. For a stable Chamilo, please install Chamilo 1.11.x. See the 1.11.x branch's README.md for details.**
|
|
|
|
We assume you already have:
|
|
|
|
- composer 2.x - https://getcomposer.org/download/
|
|
- yarn +4.x - https://yarnpkg.com/getting-started/install
|
|
- Node >= v18+ (lts) - https://github.com/nodesource/distributions/blob/master/README.md
|
|
- Configuring a virtualhost in a domain, not in a sub folder inside a domain.
|
|
- A working LAMP/WAMP server with PHP 8.2+
|
|
|
|
### Software stack install (Ubuntu)
|
|
|
|
You will need PHP8.2+ and NodeJS v18+ to run Chamilo 2.
|
|
|
|
On Ubuntu 24.04+, the following should take care of most dependencies.
|
|
|
|
~~~~
|
|
sudo apt update
|
|
sudo apt -y upgrade
|
|
sudo apt install apache2 libapache2-mod-php mariadb-client mariadb-server redis php-pear php-{apcu,bcmath,cli,curl,dev,gd,intl,mbstring,mysql,redis,soap,xml,zip} git unzip curl
|
|
sudo mysql
|
|
mysql> GRANT ALL PRIVILEGES ON chamilo.* TO chamilo@localhost IDENTIFIED BY '{password}';
|
|
mysql> exit
|
|
~~~~
|
|
(replace 'chamilo' by the database name and user you want, and '{password}' by a more secure password)
|
|
|
|
On older Ubuntu versions (like 22.04), you have to install PHP through third-party sources:
|
|
|
|
~~~~
|
|
sudo apt update
|
|
sudo apt -y upgrade
|
|
sudo apt -y install ca-certificates curl gnupg software-properties-common
|
|
sudo add-apt-repository ppa:ondrej/php
|
|
sudo apt update
|
|
sudo apt install apache2 libapache2-mod-php8.3 mariadb-client mariadb-server redis php-pear php8.3-{apcu,bcmath,cli,curl,dev,gd,intl,mbstring,mysql,redis,soap,xml,zip} git unzip curl
|
|
~~~~
|
|
(replace 'chamilo' by the database name and user you want, and '{password}' by a more secure password)
|
|
|
|
#### NodeJS, Yarn, Composer
|
|
|
|
If you already have nodejs installed, check the version with `node -v`
|
|
Otherwise, install node 18 or above.
|
|
|
|
The following lines use a static version from https://deb.nodesource.com/ (not very sustainable over time).
|
|
~~~~
|
|
cd ~
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
|
|
sudo apt-get install -y nodejs
|
|
~~~~
|
|
|
|
Another option to install nodejs is by using NVM (Node Version Manager). You can install it following the instructions [here](https://github.com/nvm-sh/nvm#installing-and-updating).
|
|
You can install the desired node version (preferably, the LTS version):
|
|
~~~~
|
|
sudo nvm install --lts
|
|
sudo nvm use --lts
|
|
~~~~
|
|
|
|
With NodeJS installed, you must enable corepack and then continue with the requirements
|
|
~~~~
|
|
sudo corepack enable
|
|
cd ~
|
|
~~~~
|
|
|
|
Follow the instructions at https://getcomposer.org/download/ to get Composer, then:
|
|
~~~~
|
|
sudo mv composer.phar /usr/local/bin/composer
|
|
~~~~
|
|
|
|
#### Apache tweaks
|
|
|
|
Optionally, you might want this to enable a series of Apache modules, but only ``rewrite` is 100% necessary:
|
|
~~~~
|
|
sudo apt install libapache2-mod-xsendfile
|
|
sudo a2enmod rewrite ssl headers expires
|
|
sudo systemctl restart apache2
|
|
~~~~
|
|
|
|
When your system is all set, you can use the following:
|
|
~~~~
|
|
cd /var/www
|
|
git clone https://github.com/chamilo/chamilo-lms.git chamilo
|
|
cd chamilo
|
|
composer install
|
|
~~~~
|
|
|
|
We do not recommend running composer as the root user!
|
|
When asked whether you want to execute the recipes or install plugins for some of the components, you can safely type 'n' (for 'no').
|
|
|
|
~~~~
|
|
yarn set version stable
|
|
# delete yarn.lock if present, as it might contain restrictive packages from a different context
|
|
yarn up
|
|
yarn install
|
|
yarn dev
|
|
# you can safely ignore any "warning" mentioned by yarn dev
|
|
sudo touch .env
|
|
sudo chown -R www-data: var/ .env config/
|
|
~~~~
|
|
|
|
In your web server configuration, ensure you allow for the interpretation of .htaccess (`AllowOverride all` and `Require all granted`), and point the `DocumentRoot` to the `public/` subdirectory.
|
|
Finally, make sure your PHP config points at Redis for sessions management.
|
|
This should look similar to this very short excerpt (in your Apache vhost block):
|
|
~~~~
|
|
<VirtualHost *:80>
|
|
ServerName my.chamilo.net
|
|
RewriteEngine On
|
|
RedirectMatch 302 (.*) https://my.chamilo.net$1
|
|
</VirtualHost>
|
|
<VirtualHost *:443>
|
|
DocumentRoot /var/www/chamilo/public/
|
|
ServerName my.chamilo.net
|
|
# Error logging rules...
|
|
# SSL rules...
|
|
RewriteEngine On
|
|
<Directory /var/www/chamilo/public>
|
|
AllowOverride All
|
|
Require all granted
|
|
</Directory>
|
|
<LocationMatch "/.git">
|
|
Require all denied
|
|
</LocationMatch>
|
|
php_value session.cookie_httponly 1
|
|
php_admin_value session.save_handler "redis"
|
|
php_admin_value session.save_path "tcp://127.0.0.1:6379"
|
|
</VirtualHost>
|
|
~~~~
|
|
Don't forget to reload your Apache configuration after each change:
|
|
~~~~
|
|
sudo systemctl reload apache2
|
|
~~~~
|
|
|
|
### Web installer
|
|
|
|
Once the above is ready, use your browser to load the URL you have defined for your host, e.g. https://my.chamilo.net (this should redirect you to `main/install/index.php`) and follow the UI instructions (database, admin user settings, etc).
|
|
|
|
After the web install process, change the permissions back to a reasonably safe state:
|
|
~~~~
|
|
chown -R root .env config/
|
|
~~~~
|
|
|
|
## Quick update for development/testing purposes
|
|
|
|
If you have already installed it and just want to update it from Git, do:
|
|
~~~~
|
|
git pull
|
|
composer install
|
|
php bin/console doctrine:schema:update --force --complete
|
|
php bin/console cache:clear
|
|
yarn install
|
|
yarn dev
|
|
~~~~
|
|
|
|
Note for developers in alpha stage: the doctrine command will try to update
|
|
your database schema to the expected database schema in a fresh installation.
|
|
This is not always perfect, as Doctrine will take the fastest route to do this.
|
|
For example, if you have a migration to rename a table (which would apply just
|
|
fine to a system in Chamilo 1 being *migrated*), Doctrine might consider that
|
|
the destination table does not exist and the original (which should not be
|
|
there in a new installation) is still there, so it will just drop the old
|
|
table and create a new one, losing all records in that table in the process.
|
|
To avoid this, prefer executing migrations with the following instead.
|
|
```
|
|
php bin/console doctrine:migrations:execute "Chamilo\CoreBundle\Migrations\Schema\V200\Version[date]"
|
|
```
|
|
This will respect the migration logic and do the required data processing.
|
|
|
|
The commands above will update the JS (yarn) in public/build/ and PHP (composer) dependencies in vendor/.
|
|
|
|
Sometimes there are conflicts with existing files so, to avoid those, here are some hints :
|
|
- for composer errors, you can remove the vendor folder and composer.lock file
|
|
- for yarn errors, you can remove yarn.lock .yarn/cache/* node_modules/*
|
|
- when opening Chamilo, if the page does not load, then you might want to delete var/cache/*
|
|
|
|
### Refresh configuration settings
|
|
|
|
In case you believe some settings in Chamilo might not have been processed
|
|
correctly based on an incomplete migration or a migration that was added
|
|
after you installed your development version of Chamilo, the
|
|
/admin/settings_sync URL is built to try and fix that automatically by updating
|
|
PHP classes based on the database state. This issue rarely happens, though.
|
|
|
|
## Quick re-install
|
|
|
|
If you have it installed in a dev environment and feel like you should clean it
|
|
up completely (might be necessary after changes to the database), you can do so
|
|
by:
|
|
|
|
* Removing the `.env` file
|
|
* Loading the {url}/main/install/index.php page again
|
|
|
|
The database should be automatically destroyed, table by table. In some extreme
|
|
cases (a previous version created a table that is not necessary anymore and
|
|
creates issues), you might want to clean it completely by just dropping the
|
|
database, but this shouldn't be necessary most of the time.
|
|
|
|
If, for some reason, you have issues with either composer or yarn, a good first
|
|
step is to delete completely the `vendor/` folder (for composer) or the
|
|
`node_modules/` folder (for yarn).
|
|
|
|
## Development setup (Dev environment, stable environment not yet available)
|
|
|
|
If you are a developer and want to contribute to Chamilo in the current
|
|
development branch (not stable yet), then please follow the instructions below.
|
|
Please bear in mind that the development version is NOT STABLE at this time,
|
|
and many features are just not working yet. This is because we are working on
|
|
root components that require massive changes to the structure of the code,
|
|
files and database. As such, to get a working version, you might need to
|
|
completely uninstall and re-install from time to time. You've been warned.
|
|
|
|
First, apply the procedure described here:
|
|
[Managing CSS and JavaScript in Chamilo](assets/README.md) (in particular,
|
|
make sure you follow the given links to install all the necessary components
|
|
on your computer).
|
|
|
|
Then make sure your database supports large prefixes
|
|
(see [this Stack Overflow thread](https://stackoverflow.com/questions/43379717/how-to-enable-large-index-in-mariadb-10/43403017#43403017)
|
|
if you use MySQL < 5.7 or MariaDB < 10.2.2).
|
|
|
|
Load the (your-domain)/main/install/index.php URL to start the installer (which
|
|
is very similar to the installer in previous versions).
|
|
|
|
If the installer is pure-HTML and doesn't appear with a clean layout, that's
|
|
probably because you didn't follow these instructions carefully.
|
|
Go back to the beginning of this section and try again.
|
|
|
|
If you want hot reloading for assets use the command `yarn run encore dev-server`.
|
|
This will refresh automatically your assets when you modify them under
|
|
`assets/vue`. Access your chamilo instance as usual. In the background, this
|
|
will serve assets from a custom server on http://localhost:8080. Do not access
|
|
this url directly since [Encore](https://symfony.com/doc/current/frontend.html#webpack-encore)
|
|
is in charge of changing url assets as needed.
|
|
|
|
### Supporting PHP 7.4 and 8.3 in parallel
|
|
|
|
You might want to support PHP 8.3 (for Chamilo 2) and PHP 7.4 (for all other
|
|
things) on the same server simultaneously. On Ubuntu, you could do it this way:
|
|
```
|
|
sudo add-apt-repository ppa:ondrej/php
|
|
sudo apt update
|
|
sudo apt install php8.3 libapache2-mod-php7.4 php8.3-{modules} php7.4-{modules}
|
|
sudo apt remove libapache2-mod-php8.3 php7.4-fpm
|
|
sudo a2enmod proxy_fcgi
|
|
sudo vim /etc/apache2/sites-available/[your-chamilo2-vhost].conf
|
|
```
|
|
|
|
In the vhost configuration, make sure you set PHP 8.3 FPM to answer this single
|
|
vhost by adding, somewhere between your `<VirtualHost>` tags, the following:
|
|
```
|
|
<IfModule !mod_php8.c>
|
|
<IfModule proxy_fcgi_module>
|
|
<IfModule setenvif_module>
|
|
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
|
|
</IfModule>
|
|
<FilesMatch ".+\.ph(ar|p|tml)$">
|
|
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
|
|
</FilesMatch>
|
|
<FilesMatch ".+\.phps$">
|
|
Require all denied
|
|
</FilesMatch>
|
|
<FilesMatch "^\.ph(ar|p|ps|tml)$">
|
|
Require all denied
|
|
</FilesMatch>
|
|
</IfModule>
|
|
</IfModule>
|
|
```
|
|
|
|
Then exit and restart Apache:
|
|
```
|
|
sudo systemctl restart apache2
|
|
```
|
|
|
|
Finally, remember that PHP settings will have to be changed in
|
|
`/etc/php/8.3/fpm/php.ini` and you will have to reload `php8.3-fpm` to take
|
|
those config changes into account.
|
|
```
|
|
sudo systemctl reload php8.3-fpm
|
|
```
|
|
|
|
When using 2 versions, you will also have issues when calling
|
|
`composer update`, as this one needs to be called by the relevant PHP version.
|
|
This can be done like so:
|
|
```
|
|
/usr/bin/php8.3 /usr/local/bin/composer update
|
|
or, for Chamilo 1.11
|
|
/usr/bin/php7.4 /usr/local/bin/composer update
|
|
```
|
|
If your default php-cli uses PHP7.4 (see `ln -s /etc/alternatives/php`),
|
|
you might have issues running with a so-called `platform_check.php` script
|
|
when running `composer update` anyway. This is because this script doesn't
|
|
user the proper launch context, and you might need to change your default
|
|
settings on Ubuntu (i.e. change the link /etc/alternatives/php to point to
|
|
the other php version) before launching `composer update`. You can always
|
|
revert that operation later on if you need to go back to work on Chamilo 1.11
|
|
and Composer complains again.
|
|
|
|
### git hooks
|
|
|
|
To use the git hook sample scripts under `tests/scripts/git-hooks/`, the
|
|
following commands can be used.
|
|
|
|
git config core.hooksPath tests/scripts/git-hooks/
|
|
|
|
## Changes from 1.x
|
|
|
|
* in general, the main/ folder has been moved to public/main/
|
|
* a big part of the frontend has been migrated to VueJS + Tailwind CSS
|
|
* app/Resources/public/assets moved to public/assets
|
|
* main/inc/lib/javascript moved to public/js
|
|
* main/img/ moved to public/img
|
|
* main/template/default moved to src/CoreBundle/Resources/views
|
|
* src/Chamilo/XXXBundle moved to src/CoreBundle or src/CourseBundle
|
|
* bin/doctrine.php removed use bin/console doctrine:xyz options
|
|
* Plugin images, CSS and JS libs are loaded inside the public/plugins folder
|
|
(composer update copies the content inside plugin_name/public inside web/plugins/plugin_name
|
|
* Plugins templates use the ``asset()` function instead of using "_p.web_plugin"
|
|
* `main/inc/local.inc.php` has been removed
|
|
* Translations are managed through Gettext
|
|
|
|
Libraries
|
|
|
|
* Integration with Symfony 6
|
|
* PHPMailer replaced with Symfony Mailer
|
|
* Bower replaced by [yarn](https://yarnpkg.com)
|
|
|
|
## JWT Authentication
|
|
|
|
This version of Chamilo allows you to use a JWT (token) to use the Chamilo API
|
|
more securely. In order to use it, you will have to generate a JWT token as
|
|
follows.
|
|
|
|
* Run
|
|
```shell
|
|
php bin/console lexik:jwt:generate-keypair
|
|
```
|
|
* In Apache setup Bearer with:
|
|
```apacheconf
|
|
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
|
|
```
|
|
* Get the token:
|
|
```shell
|
|
curl -k -X POST https://example.com/api/authentication_token \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username":"admin","password":"admin"}'
|
|
```
|
|
The response should return something like:
|
|
```json
|
|
{"token":"MyTokenABC"}
|
|
```
|
|
* Go to https://example.com/api
|
|
* Click in "Authorize" button and write the value
|
|
`Bearer MyTokenABC`
|
|
|
|
Then you can make queries using the JWT token.
|
|
|
|
## Todo
|
|
|
|
See https://github.com/chamilo/chamilo-lms/projects/3
|
|
|
|
## Contributing
|
|
|
|
If you want to submit new features or patches to Chamilo 2, please follow the
|
|
Github contribution guide https://guides.github.com/activities/contributing-to-open-source/
|
|
and our [CONTRIBUTING.md](CONTRIBUTING.md) file.
|
|
In short, we ask you to send us Pull Requests based on a branch that you create
|
|
with this purpose into your repository, forked from the original Chamilo repository (`master` branch).
|
|
|
|
## Documentation
|
|
|
|
For more information on Chamilo, visit https://2.chamilo.org/documentation/index.html
|
|
|