mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
Create building_a_docker_image_example_include_php_ioncubeloader.md
This commit is contained in:
parent
02c8679568
commit
d48178f52c
@ -0,0 +1,119 @@
|
|||||||
|
# Building a Custom Docker image: pre-install IonCube Loader
|
||||||
|
|
||||||
|
Docker images are a base for every OpenPanel plan, and they define what Technology Stack is pre-installed for the user.
|
||||||
|
|
||||||
|
If you need something pre-installed or configured for all users on a plan, like the ionCube loader extension for the installed PHP version, follow these recommended steps:
|
||||||
|
|
||||||
|
1. Download example Docker image files.
|
||||||
|
2. Edit to include the new configuration/service.
|
||||||
|
3. Create the Docker image.
|
||||||
|
4. Create a new plan to use the image.
|
||||||
|
5. Test: create a new user on that plan.
|
||||||
|
|
||||||
|
### Download Docker Examples
|
||||||
|
|
||||||
|
Currently, we provide and maintain 2 Docker images, one that uses Nginx and the other with Apache. Download the image files that you want, either nginx or apache:
|
||||||
|
|
||||||
|
For Nginx:
|
||||||
|
```
|
||||||
|
git clone -n --depth=1 --filter=tree:0 \
|
||||||
|
https://github.com/stefanpejcic/OpenPanel/tree/main/docker/nginx
|
||||||
|
cd OpenPanel
|
||||||
|
git sparse-checkout set --no-cone docker/nginx
|
||||||
|
git checkout
|
||||||
|
```
|
||||||
|
|
||||||
|
For Apache:
|
||||||
|
```
|
||||||
|
git clone -n --depth=1 --filter=tree:0 \
|
||||||
|
https://github.com/stefanpejcic/OpenPanel/tree/main/docker/apache
|
||||||
|
cd OpenPanel
|
||||||
|
git sparse-checkout set --no-cone docker/apache
|
||||||
|
git checkout
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
After downloading the source files, there should be:
|
||||||
|
- **Dockerfile**: This file defines the software stack of the image and is used only to build the image.
|
||||||
|
- **entrypoint.sh**: Used by OpenPanel to monitor users' services status and versions, such as tracking the random IP of users' Docker containers, status of Redis/Memcached services, PHP versions installed, etc. This file is essential and should not be modified. It is executed on every restart of the user container.
|
||||||
|
- **my.cnf**: A MySQL service configuration file for customizing MySQL limits and settings.
|
||||||
|
- **pma.php**: A configuration file for phpMyAdmin to enable passwordless login from OpenPanel to phpMyAdmin.
|
||||||
|
|
||||||
|
### Edit Dockerfile
|
||||||
|
|
||||||
|
In this example, we will be adding the ionCube loader PHP extension to the image so that the pre-installed PHP 8.3 version already has ionCube enabled.
|
||||||
|
|
||||||
|
Open the **Dockerfile** with a text editor:
|
||||||
|
|
||||||
|
```
|
||||||
|
nano Dockerfile
|
||||||
|
```
|
||||||
|
|
||||||
|
Inside, include steps to download the ionCube extension and include it in the php.ini file for both CLI and FPM service.
|
||||||
|
|
||||||
|
First, add the part to download the extension. Ensure this is added after PHP install:
|
||||||
|
```
|
||||||
|
#download for PHP 8.3
|
||||||
|
RUN mkdir -p /usr/local/lib && curl -sSlL -o /tmp/ioncube.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz && tar -x --strip-components=1 -C /usr/local/lib -f /tmp/ioncube.tar.gz ioncube/ioncube_loader_lin_8.3.so
|
||||||
|
```
|
||||||
|
|
||||||
|
This downloads the extension from the ionCube website and adds it to the folder.
|
||||||
|
|
||||||
|
Now, add the part to include it in the php.fpm files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# add for phpfpm service
|
||||||
|
RUN (echo 'zend_extension = /usr/local/lib/ioncube_loader_lin_8.3.so' && cat /etc/php/8.3/fpm/php.ini) > /etc/php/8.3/fpm/php.ini.new && mv /etc/php/8.3/cli/php.ini.new /etc/php/8.3/fpm/php.ini
|
||||||
|
|
||||||
|
# add for cli
|
||||||
|
RUN (echo 'zend_extension = /usr/local/lib/ioncube_loader_lin_8.3.so' && cat /etc/php/8.3/cli/php.ini) > /etc/php/8.3/cli/php.ini.new && mv /etc/php/8.3/cli/php.ini.new /etc/php/8.3/cli/php.ini
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
That Is it. Save the file and exit.
|
||||||
|
|
||||||
|
### Create Docker image
|
||||||
|
|
||||||
|
After adding the commands to download and install the ionCube loader, we now need to build a Docker image from the files.
|
||||||
|
|
||||||
|
Depending on the downloaded example, replace `nginx` or `apache` in this command:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker build . -t my_custom_nginx_image
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure that the name contains either `nginx` or `apache`, as this is used by OpenPanel to determine the features to display to the user on their interface.
|
||||||
|
|
||||||
|
If the build fails, there will be an error message indicating which exact line caused the error. That line needs to be edited and the build repeated.
|
||||||
|
|
||||||
|
After successfully building the image, the next step is to create a new OpenPanel hosting plan to use it.
|
||||||
|
|
||||||
|
### Create Hosting Plan
|
||||||
|
|
||||||
|
Currently, new hosting plans with custom images can only be added from the terminal.
|
||||||
|
To create a new plan, run the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
opencli plan-create <NAME> <DESCRIPTION> <DOMAINS_LIMIT> <WEBSITES_LIMIT> <DISK_LIMIT> <INODES_LIMITS> <DATABASES_LIMIT> <CPU_LIMIT> <RAM_LIMIT> <DOCKER_IMAGE> <PORT_SPEED_LIMIT>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
opencli plan-create cloud_8 "Custom plan with 8GB of RAM&CPU" 0 0 15 500000 0 8 8 my_custom_nxinx_image 200
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create new user
|
||||||
|
After creating a plan that uses our newly built Docker image, the final step is to create a new user on the plan to test that the ionCube loader is indeed enabled.
|
||||||
|
|
||||||
|
Create a new user from the OpenAdmin interface or via terminal:
|
||||||
|
```
|
||||||
|
opencli user-add <USERNAME> <PASSWORD> <EMAIL> <PLAN_NAME>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
opencli user-add stefan strongpass123 stefan@pejcic.rs cloud_8
|
||||||
|
```
|
||||||
|
|
||||||
|
After creating the user, log in to their OpenPanel and confirm that the extension is enabled by opening the PHP.INI editor or by creating a php.info file and searching for the ionCube loader.
|
Loading…
Reference in New Issue
Block a user