Knowledge base
1000 FAQs, 500 tutorials and explanatory videos. Here, there are only solutions!
This guide details the specific rules to follow when creating a user password with mysqli_connect() that contains the “dollar” character $ on the Infomaniak platforms.
Preamble
- If you get the error message "Access denied for user" when using
mysqli_connect(), and your database user password contains a$sign, the issue may be due to the way strings work in PHP. - The issue may also occur with mail scripts.
Rules to follow
When the special character $ is used in a user password and is followed by any character other than a number, the variable name is not valid and the substitution does not occur correctly.
Here are some solutions to fix this:
- Enclose the password in single quotes:
'$******' - Ensure that a number directly follows the dollar:
"$2*****" - Use a backslash to "escape" the dollar sign in the password:
“\$****”
This guide concerns the Apache module mod_auth_mysql which allows user authentication and access authorization via a MySQL database.
With shared hosting
The mod_auth_mysql module is not available with shared hosting; consider a Cloud Server or use PHP scripts and sessions.
This guide explains how to access InnoDB at Infomaniak.
Use the MySQL InnoDB storage engine
Once your Infomaniak hosting gives you access to MySQL / MariaDB databases, InnoDB is available at the same time (previously MyISAM).
InnoDB offers advanced features such as ACID transactions, row-level locks, full-text indexes, etc. You can take advantage of these features by using appropriate SQL statements in your queries.
This guide concerns the installation of PHP extensions on Infomaniak Web Hosting.
Using Zend PHP extensions
- Zend Guard Loader is a PHP extension that allows you to run PHP scripts encrypted via Zend Guard.
- Zend Guard Loader is installed by default for PHP <= 5.6 on all web hosting and is not available for PHP versions >= 5.6.
- Since PHP 5.3.x, the Zend Optimizer module has been replaced by ZendGuardLoader
- The ZendOPCache extension requires a Cloud Server configured with PHP 5.5 minimum
This guide concerns YAZ a software library used to implement the Z39.50 protocol, an information retrieval protocol that allows communication between different library systems (ILS) such as PMB widely used in France.
Infomaniak for efficient library management
On the Web Hosting Infomaniak, PMB is supported and YAZ is activated by default.
However, if you encounter errors such as Call to undefined function yaz_connect() it will be necessary to open ports via the Manager. Port 210 is the standard port used for Z39.50 communications but do not hesitate to consult the documentation of your applications.
For the old Infomaniak hosting plans, consider a change of offer.
Access to the system commands who and users is prohibited for LDAP users on all Infomaniak servers.
This guide will help you if, for example, you want to deploy a package like pymysql and it requires a version of python higher than the one offered on your hosting.
Preamble
- Anaconda is a free and open-source distribution of the Python programming language. This distribution aims to simplify package management and deployment.
- It is recommended to use conda delivered with a recent version of python and which installs in the user space, so that there is no conflict with the python system (as in a virtual environment, which always requires a system installation of the desired version).
- Refer to the official documentation.
⚠️ For additional help contact a partner or launch a free call for tenders — also discover the role of the host.
Download the installer
uid165116@od-12345:~$ wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh
--2021-07-28 18:21:10-- https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh
Resolving repo.anaconda.com (repo.anaconda.com)... 2606:4700::6810:8303, 2606:4700::6810:8203, 104.16.131.3, ...
Connecting to repo.anaconda.com (repo.anaconda.com)|2606:4700::6810:8303|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 89026327 (85M) [application/x-sh]
Saving to: ‘Miniconda3-py37_4.10.3-Linux-x86_64.sh’Miniconda3-py37_4.10.3-Linux-x86_64.sh 100% [==============================================>] 84.90M 203MB/s in 0.4s 18:21:11 (100 MB/s) - ‘Miniconda3-py37_4.10.3-Linux-x86_64.sh’ saved [89026327/89026327]Check the hash
uid165116@od-12345:~$ test $(md5sum Miniconda3-py37_4.10.3-Linux-x86_64.sh | awk '{print $1}') == "9f186c1d86c266acc47dbc1603f0e2ed" && echo "OK"
OKStart the installation
uid165116@od-12345:~$ bash Miniconda3-py37_4.10.3-Linux-x86_64.sh -b
PREFIX=/home/clients/fc84cbbf6dcbd6dd76b15d3e56c1789f/miniconda3
Unpacking payload ...
Collecting package metadata (current_repodata.json): done
Solving environment: done## Package Plan ##environment location: /home/clients/fc84cbbf6dcbd6dd76b15d3e56c1789f/miniconda3added / updated specs:
- _libgcc_mutex==0.1=main
- _openmp_mutex==4.5=1_gnu
- brotlipy==0.7.0=py37h27cfd23_1003
- ca-certificates==2021.7.5=h06a4308_1
- certifi==2021.5.30=py37h06a4308_0
- cffi==1.14.6=py37h400218f_0
- chardet==4.0.0=py37h06a4308_1003
- conda-package-handling==1.7.3=py37h27cfd23_1
- conda==4.10.3=py37h06a4308_0
- cryptography==3.4.7=py37hd23ed53_0
- idna==2.10=pyhd3eb1b0_0
- ld_impl_linux-64==2.35.1=h7274673_9
- libffi==3.3=he6710b0_2
- libgcc-ng==9.3.0=h5101ec6_17
- libgomp==9.3.0=h5101ec6_17
- libstdcxx-ng==9.3.0=hd4cf53a_17
- ncurses==6.2=he6710b0_1
- openssl==1.1.1k=h27cfd23_0
- pip==21.1.3=py37h06a4308_0
- pycosat==0.6.3=py37h27cfd23_0
- pycparser==2.20=py_2
- pyopenssl==20.0.1=pyhd3eb1b0_1
- pysocks==1.7.1=py37_1
- python==3.7.10=h12debd9_4
- readline==8.1=h27cfd23_0
- requests==2.25.1=pyhd3eb1b0_0
- ruamel_yaml==0.15.100=py37h27cfd23_0
- setuptools==52.0.0=py37h06a4308_0
- six==1.16.0=pyhd3eb1b0_0
- sqlite==3.36.0=hc218d9a_0
- tk==8.6.10=hbc83047_0
- tqdm==4.61.2=pyhd3eb1b0_1
- urllib3==1.26.6=pyhd3eb1b0_1
- wheel==0.36.2=pyhd3eb1b0_0
- xz==5.2.5=h7b6447c_0
- yaml==0.2.5=h7b6447c_0
- zlib==1.2.11=h7b6447c_3The following NEW packages will be INSTALLED: _libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-4.5-1_gnu
brotlipy pkgs/main/linux-64::brotlipy-0.7.0-py37h27cfd23_1003
ca-certificates pkgs/main/linux-64::ca-certificates-2021.7.5-h06a4308_1
certifi pkgs/main/linux-64::certifi-2021.5.30-py37h06a4308_0
cffi pkgs/main/linux-64::cffi-1.14.6-py37h400218f_0
chardet pkgs/main/linux-64::chardet-4.0.0-py37h06a4308_1003
conda pkgs/main/linux-64::conda-4.10.3-py37h06a4308_0
conda-package-han~ pkgs/main/linux-64::conda-package-handling-1.7.3-py37h27cfd23_1
cryptography pkgs/main/linux-64::cryptography-3.4.7-py37hd23ed53_0
idna pkgs/main/noarch::idna-2.10-pyhd3eb1b0_0
ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.35.1-h7274673_9
libffi pkgs/main/linux-64::libffi-3.3-he6710b0_2
libgcc-ng pkgs/main/linux-64::libgcc-ng-9.3.0-h5101ec6_17
libgomp pkgs/main/linux-64::libgomp-9.3.0-h5101ec6_17
libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-9.3.0-hd4cf53a_17
ncurses pkgs/main/linux-64::ncurses-6.2-he6710b0_1
openssl pkgs/main/linux-64::openssl-1.1.1k-h27cfd23_0
pip pkgs/main/linux-64::pip-21.1.3-py37h06a4308_0
pycosat pkgs/main/linux-64::pycosat-0.6.3-py37h27cfd23_0
pycparser pkgs/main/noarch::pycparser-2.20-py_2
pyopenssl pkgs/main/noarch::pyopenssl-20.0.1-pyhd3eb1b0_1
pysocks pkgs/main/linux-64::pysocks-1.7.1-py37_1
python pkgs/main/linux-64::python-3.7.10-h12debd9_4
readline pkgs/main/linux-64::readline-8.1-h27cfd23_0
requests pkgs/main/noarch::requests-2.25.1-pyhd3eb1b0_0
ruamel_yaml pkgs/main/linux-64::ruamel_yaml-0.15.100-py37h27cfd23_0
setuptools pkgs/main/linux-64::setuptools-52.0.0-py37h06a4308_0
six pkgs/main/noarch::six-1.16.0-pyhd3eb1b0_0
sqlite pkgs/main/linux-64::sqlite-3.36.0-hc218d9a_0
tk pkgs/main/linux-64::tk-8.6.10-hbc83047_0
tqdm pkgs/main/noarch::tqdm-4.61.2-pyhd3eb1b0_1
urllib3 pkgs/main/noarch::urllib3-1.26.6-pyhd3eb1b0_1
wheel pkgs/main/noarch::wheel-0.36.2-pyhd3eb1b0_0
xz pkgs/main/linux-64::xz-5.2.5-h7b6447c_0
yaml pkgs/main/linux-64::yaml-0.2.5-h7b6447c_0
zlib pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3Preparing transaction: done
Executing transaction: done
installation finished.Launch conda
uid165116@od-12345:~$ source <(~/miniconda3/bin/conda shell.bash hook)Install pymysql (for example)
(base) uid165116@od-12345:~$ python3 -V
Python 3.7.10(base) uid165116@od-12345:~$ pip3 install pymysql --user
Collecting pymysql
Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
|████████████████████████████████| 43 kB 892 kB/s
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
This guide explains how to specify a file that will be loaded before the desired page or at the beginning of each PHP script executed on your server, included as if it had been called with the require() function, but more globally using the PHP directive auto_prepend_file.
Preamble
- For example, to declare the headers of a website, you can create a
headers.phpfile that contains PHPheader()functions and that is prepended at the beginning of each PHP file…- … via a
.user.inifile (specific to a folder), - … or via the site configuration in the Manager (global) as explained below.
- … via a
Include a file globally from the Manager
To access the website management:
- Click here to access the management of your product on the Infomaniak Manager (need help?).
- Click directly on the name assigned to the product concerned:
- Click on Manage under Advanced settings:

- Click on the PHP / Apache tab.
- Complete the relevant line by entering the path of the file to include.
- Click the button to save:

After defining this directive, all PHP pages on your server will automatically include the specified file before executing their own code.
The headers defined in a .htaccess file are only valid for non-PHP (i.e., static) content.
Infomaniak uses php-fpm which receives the different headers via apache fast_cgi. In the RFC of cgi_www the header Strict-Transport-Security is not part of the headers passed via CGI and the Apache documentation confirms this. See this other RFC.
⚠️ For additional help contact a partner or launch a free tender — also discover the role of the host.
WARNING: This method modifies Magento core files to disable advanced privilege checks (triggers, routines), which is a risky practice in terms of security, stability, and complicates future updates.
Today, Magento (now Adobe Commerce or Magento Open Source) is a modern platform that requires a server environment that meets its strict prerequisites. The current stable version is often 2.4.8 or a more recent patch version. These versions require up-to-date technologies such as PHP 8.2/8.3, MySQL 8.0/MariaDB 10.6 and a dedicated search engine such as Elasticsearch or OpenSearch.
For any new installation or migration, it is strongly recommended to use the latest stable version without any manual modification of the source code. You must choose a high-performance hosting type (Cloud Server or VPS/Dedicated) that guarantees access to all the system privileges required for secure and stable operation.
Absolutely avoid using the old patch below. Note that this patch is unnecessary in case of installation on a Cloud Server.
This guide explains how to patch the Magento installation so that it can be performed on an Infomaniak shared hosting, even without triggers & routines type privileges.
Resolve Magento 2 installation issues
Edit the file DbValidator.php:
--- setup/src/Magento/Setup/Validator/DbValidator.php.orig 2019-04-11 17:01:45.154767893 +0200
+++ setup/src/Magento/Setup/Validator/DbValidator.php 2019-04-13 21:37:02.560386985 +0200
@@ -150,12 +150,8 @@
'ALTER',
'CREATE TEMPORARY TABLES',
'LOCK TABLES',
- 'EXECUTE',
'CREATE VIEW',
- 'SHOW VIEW',
- 'CREATE ROUTINE',
- 'ALTER ROUTINE',
- 'TRIGGER'
+ 'SHOW VIEW'
];
// check global privilegesIn case of SOAP/PHPfpm error
Depending on the version of Magento used, the soap function does not work correctly and may return the following error message: «Uncaught SoapFault exception: [Client] looks like we got no XML document».
The problem does not come from a bad server configuration, but rather from a poor design of Magento which does not take into account the case of PHP execution in an FPM environment. Thus, the SOAP requests generated by Magento contain double headers (non-compliant with the SOAP specification) and generate an error.
Be aware of this solution (not developed by Infomaniak).
This guide explains how to increase the max_children value on Cloud Server to increase the number of simultaneous PHP processes that can be used by your site. This will be very useful for resolving infinite page loading issues on your site.
Preamble
- By default on all hosting, the
max_childrenlimit is set to 20.- Although it is possible to increase this value from the Infomaniak Manager, the
max_childrenlimit is automatically adjusted based on the configuration of your Cloud Server. - To increase this limit on shared hosting, migrate to Cloud Server.
- Although it is possible to increase this value from the Infomaniak Manager, the
- To understand how to accurately calculate the necessary
max_children, refer to this article on the subject.
Increase the max_children value
Prerequisites
- Ensure that you have the necessary resources on the Cloud Server.
- Ensure that all resources of the Cloud Server are not being used; if it turns out that they are fully used, increasing the
max_childrenvalue will have no effect (Modify the resources of the Cloud Server). - Monitor the resources of your server, in case the resources of your server are reached, it will be necessary to check the optimization of the processes and your site before considering increasing the value
max_children. - Consult the PHP error reports from the
/ik-logsfolder (master process php logs - file name: php-fpm.log) to check if the "max_children" limit has been exceeded... example of error:[05-Jul-2024 09:08:58] WARNING: [pool www.infomaniak.ch] server reached max_children setting (20), consider raising it
To access the management of PHP / Apache parameters of the site for which you need to increase the max_children value on Cloud Server, refer to this other guide.
You will be able to...
- ... choose a new
max_childrenvalue:
Do not forget to save the changes at the bottom of the page.
Limits depending on the server
Limit of max_children depending on the resources of the Cloud Server:
| Cloud Server Configuration | max_children |
|---|---|
| 2 CPU / 6 Go RAM | 20 |
| 4 CPU / 12 Go RAM | 40 |
| 6 CPU / 18 GB RAM | 60 |
| 8 CPU / 24 GB RAM | 80 |
| 12 CPU / 36 GB RAM | 120 |
| 16 CPU / 48 GB RAM | 160 |
| 24 CPU / 72 GB RAM | 240 |
| 32 CPU / 96 or 128 GB RAM | 320 |
This guide explains how to modify the value of the directive php_value include_path.
Modify the include_path
Like any other PHP parameter, include_path is defined in the .user.ini file.
Here is an example of path to use in the .user.ini file:
include_path = .:/home/clients/123456789a12345b12fc345d/web/www.domainetest.abc/public/abc/includeCheck out this other guide about phpinfo to verify that your new directive has been applied.
The Apache module mod_userdir is not available.
This guide is for you because you have chosen (or will choose) Infomaniak as your host. This choice is not trivial. You are sensitive to ecology and want to do everything possible to reduce the carbon footprint on the Internet.
Infomaniak already thanks you for choosing this hosting provider that cares for the planet and for exploring the paths below to progress in the eco-design of your web environment.
Why act?
Websites consume energy to function, and the use of the Internet is one of the main causes of the increase in greenhouse gas emissions.
In addition to choosing an ethical host that uses renewable energy sources to power its servers, you can also contribute to reducing these emissions by adopting eco-responsible practices in the design and management of your sites and Mail services.
How to act?
As mentioned earlier, Infomaniak takes action on various points, including its support department: it will assist you in choosing services tailored to your needs with a focus on environmental preservation, gather your feedback to optimize our practices and draw inspiration from your experiences, while also communicating the environmental challenges in the hosting sector to adopt good digital practices.
At your level, there are several ways to reduce your carbon footprint on the Internet:
Minimize energy consumption
To reduce the energy consumption of servers and users' computers: optimize images, use web fonts, use minified scripts and data compression technologies. Clean designs can help reduce bandwidth requirements.
Offer options to reduce data consumption by using lower quality images or providing streaming videos in different qualities, to disable trackers and advertisements that consume a lot of data.
For good practices dedicated to WordPress consult the GreenIT sheets.
Use eco-responsible technologies
Sustainable development technologies, such as HTML5, CSS3, and JavaScript, are more environmentally friendly.
Promote sustainability
Raise user awareness of the environmental impact of Internet technologies and encourage them to adopt eco-responsible practices. Including with the WordPress solution.
And what about email?
The same habits can be applied to your email communication:
- Use an eco-friendly signature that encourages recipients to reduce their environmental impact by using eco-friendly technologies or adopting eco-friendly practices…
- Use eco-friendly email management tools that utilize renewable energy sources and have eco-friendly policies regarding energy consumption…
- Use plain text emails instead of HTML emails, as HTML emails tend to consume more energy to be displayed…
- Use PDF attachments instead of heavier formats…
- Use unsubscribe features to avoid sending unwanted emails…
- Use tracking tools to find out how many people open your emails and thus know if you are sending too many or too few…
All these actions can be implemented gradually and should be adapted to the situation of each website. There is no one-size-fits-all solution.
Regularly monitor energy consumption statistics to continue improving the site's ecological performance. Infomaniak will offer tools in this direction in the future, but in the meantime, you can use https://greenframe.io.
Writing to the /etc and /lib directories is disabled for security reasons.
This guide will help you install Ghost on Infomaniak, an ideal platform for blogs (regular writing, editorial format) and content-focused publishing sites, such as Substack or Medium.
Built on Node.js and using Markdown for writing, Ghost stands out for its lightness, whereas WordPress, though more flexible and universal, is heavier.
For additional help contact a partner or launch a free tender — also discover the role of the host.
Prerequisites
- Have installed a blank Node.js site on an Infomaniak web hosting.
- Create an SSH access.
- Create a database.
- Have a valid and functional email address (especially the forgotten password features).
- Stop your Node.JS application before proceeding with the following steps!
Installing Ghost
To do this:
- Log in to the server via SSH (need help?).
Clone and run the installation script (execute these commands one by one):
git clone https://github.com/Infomaniak/hosting-tools.git cd hosting-tools/h3-ghost bash ./install.sh
The script will now:
- Ask you a few questions (such as the URL of your site, database information, etc.)…
- Download and configure Ghost automatically…
- Take a few minutes — be patient!
Answer the questions carefully using the database details you noted earlier. Do not close the terminal until it has finished!
Configure your hosting (via the Infomaniak panel)
Once the script is complete, go to your Infomaniak Control Panel:
- Click here to access the management of your product on the Infomaniak Manager (need help?).
- Click directly on the name assigned to the product concerned.
- Click on Manage under Advanced settings:

- Click on the Node.js tab to access the settings.
In the execution command field, enter:
/srv/customer/node_modules/ghost-cli/bin/ghost run- Check that the port number is
3000. - Command case of build : disable it.
- Click on the Save button at the bottom of the page:

- On the main page, click on the Start button (or Restart if already running).
- Observe the logs showing the creation of the database and the startup of the application:

Done! Access your Ghost blog
Then go to the URL of your site to start:
- Open your browser and go to
https://yourwebsite.com/ghost(replaceyourwebsite.comwith your current domain). - The first time:
- You will create an administrator account (your login for the blog)…
- Then, you can start writing articles!
User / mail configuration
To create the first user, add /ghost to the URL of your site (for example https://ghost.domain.xyz/ghost) and follow the assistant.
You can also configure the “member portal support address”: when new members want to sign up, the portal sends the double opt-in confirmation from a specific address. By default, this is the “noreply” address of your domain. To update it, navigate to “Settings”, “Membership”, “Portal Settings”, “Customize”, and “Account Page”:
Resolve a technical incompatibility between Ghost and MariaDB
There is a compatibility issue between Ghost and the MariaDB database. This results in this type of error:
[2025-01-01 12:54:28] ERROR "GET /ghost/api/admin/posts/6834625e35802b06f1496305/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.conversions%2Ccount.clicks%2Csentiment%2Ccount.positive_feedback%2Ccount.negative_feedback" 400 27ms
Could not understand request.
Error ID:
8f2b0d90-3a30-11f0-a25f-fd9c83e1cf02
Error Code:
ER_BAD_FIELD_ERROR
----------------------------------------
Error: select `posts`.*, (with `k` as (select `member_id` from `members_subscription_created_events` where posts.id = members_subscription_created_events.attribution_id union select `member_id` from `members_created_events` where posts.id = members_created_events.attribution_id) select count(*) from `k`) as `count__conversions`, `posts`.*, (select count(distinct `members_click_events`.`member_id`) from `members_click_events` inner join `redirects` on `members_click_events`.`redirect_id` = `redirects`.`id` where posts.id = redirects.post_id) as `count__clicks`, `posts`.*, (select COALESCE(ROUND(AVG(score) * 100), 0) from `members_feedback` where posts.id = members_feedback.post_id) as `count__sentiment`, `posts`.*, (select count(*) from `members_feedback` where posts.id = members_feedback.post_id AND members_feedback.score = 0) as `count__negative_feedback`, `posts`.*, (select sum(`score`) from `members_feedback` where posts.id = members_feedback.post_id) as `count__positive_feedback` from `posts` where (`posts`.`type` = 'post' and `posts`.`status` in ('draft', 'published', 'scheduled', 'sent')) and `posts`.`id` = '2834125e33802b06e1433305' limit 1 - Unknown column 'posts.id' in 'where clause'
at Child.<anonymous> (/srv/customer/sites/ghost.domain.xyz/versions/5.120.2/core/server/models/base/plugins/crud.js:194:31)
at Packet.asError (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packets/packet.js:740:17)
at Query.execute (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:475:34)
at PacketParser.onPacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:93:12)
at PacketParser.executeStart (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:100:25)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)Some SQL queries generated by Ghost, using common table expressions (CTEs) nested in scalar subqueries, cause HTTP 400 errors when executed on MariaDB. These queries are valid in MySQL 8, which supports CTEs in scalar subqueries, but not in MariaDB up to version 10.6.
A patch is available to adapt Ghost's behavior and avoid these errors (refer to the official guide).
To use this patch, enter this command:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0
This guide presents the various actions that are possible on a MySQL table depending on the rights granted to a user.
Actions on tables according to user rights…
... on shared web hosting
Read + Write + Admin
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEWRead + Write
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLERead
GRANT SELECT... on Cloud Server
Read + Write + Admin
GRANT ALLRead + Write
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLESRead
GRANT SELECT
This guide is for people who want to work with the Propel abstraction layer (which refers to a key component of the Propel library, an ORM (Object-Relational Mapping) for PHP).
Preamble
- Object-Relational Mapping (ORM) allows linking application objects to the tables of a relational database. Instead of writing SQL, data is manipulated through objects.
- Propel, a PHP abstraction layer, facilitates the creation, manipulation, and retrieval of objects without worrying about SQL details. It allows for managing relationships, joins, and pagination, while improving code readability and maintainability.
Particularities & limitations
- Propel is not installed by default as a Pear package; this means that you will have to install it manually on your server.
- The "Conventionnal Package" version of Propel can be installed; make sure to download and install this specific version.
- Since Propel command lines (e.g.,
propel-gen) are not accessible, you will not be able to use them directly. - This means that Propel can only be used in production once you have generated the necessary classes and files locally or in another development environment.
- All manipulations and code generation must be done elsewhere before transferring the resulting files to your production environment.
Dependencies
- All the necessary dependencies to use Propel are available, except for Phing.
- Phing is not required for production, so this should not be an issue.
- Ensure that all other required dependencies for Propel are installed correctly.
This guide presents the open ports available for Node.js sites (only) hosted by Infomaniak.
Outbound open ports
Web
- HTTP (tcp/80)
- Alternative HTTP (tcp/8080)
- HTTPS (tcp/443)
- FTP Data (tcp/20)
- FTP Control (tcp/21)
- POP3 (tcp/110)
- IMAP (tcp/143)
- SMTP submission (+ STARTTLS) (tcp/587)
- SMTPS (tcp/465)
- IMAPS (tcp/993)
- POP3S (tcp/995)
DB
- MySQL (tcp/3306)
- MongoDB (tcp/27017)
- PostgreSQL (tcp/5432)
- Redis (tcp/6379)
- Redis TLS (tcp/6380)
- ElasticSearch (tcp/9200)
Misc
- SSH (tcp/22)
- Git pack transfer (tcp/9418)
Open inbound ports
- HTTP (tcp/80)
- HTTPS (tcp/443)
- SSH (tcp/22)
This guide explains how to adjust the configuration of a Node.js site hosted on the Infomaniak infrastructure to adapt the behavior of your application according to its evolution, its dependencies or your technical preferences.
Prerequisites
- Install a Node.js site on your hosting.
- Test your modifications locally before applying them to production.
- Check that your scripts (
start,build) are properly defined in yourpackage.jsonfile. - If you modify the structure of your project, remember to adjust the execution folder and the associated commands.
- The listening port defined in the Manager must absolutely correspond to the one used in the application's code.
Access the configuration
Each site has a dedicated dashboard to control the application (start, stop, restart), access the execution console, manage Node.js versions, configure domains and activate SSL certificates:
- Click here to access the management of your product on the Infomaniak Manager (need help?).
- Click directly on the name assigned to the relevant product.
- You can open the console, stop the project (a maintenance page will be applied) or restart it.
- To access the advanced settings, click on Manage under Advanced Settings:

- Click on the Node.js tab to access the settings:

Apply the changes
To do this:
- Save the changes from the Manager interface.
- Restart your application for the changes to take effect.
Refer to this other guide if you encounter any issues.
Main commands
Execution folder
The execution folder indicates the location on the server where build and launch commands will be executed. It should point to the root directory of your application, i.e., where your package.json file is located.
For example, you can specify for the project root:
./or if your application is in a subfolder named app:
./appor if it is located in a backend folder:
./backendOptional build command
If your Node.js application requires a compilation step before it can be run, enter a build command in the designated field. This command will be executed automatically before the application starts.
For example, you can specify:
npm install && npm run buildor, if you use yarn :
yarn install && yarn buildIf your project does not require any compilation, this field can be left empty.
Launch command
The launch command corresponds to the instruction used to start your application. It must be identical to the one you use locally to run the project.
For example, you can specify:
node index.jsnpm startor
yarn startThis command should allow you to directly start the server or the entry point of your application as defined in your development environment.
Listening port
Your application must listen on a specific port that is defined in the Manager. This port is passed to your application via an environment variable PORT.
Example in your Node.js code:
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`Application lancée sur le port ${port}`);
});Make sure this port is properly accounted for in your code.
Node.js version
You can select the Node.js version that your site should use. It is recommended to use a stable and always supported version to ensure the security and compatibility of your application.
This guide concerns OAuth2 applications to connect to your external services via your Infomaniak login ID.
Manage Infomaniak OAuth2 apps
To do this:
- Click here to access the management of your product on the Infomaniak Manager (need help?).
- Click the blue Create a new application button:

- Choose the type appropriate to your current need and project.
- Give a name to the application.
- Enter the URL of the application according to the technical information available to you.
- Click on the button to create the application:

- Copy the information (
Client ID,Client secret) to a safe place - they will no longer be accessible after that: