diff --git a/.github/workflows/sugar-commons.yml b/.github/workflows/sugar-commons.yml new file mode 100644 index 000000000..ec84ec985 --- /dev/null +++ b/.github/workflows/sugar-commons.yml @@ -0,0 +1,50 @@ +name: ci-commons +on: + push: + tags: + - 'v*' + # branches: [ master, dev ] + # pull_request: + # branches: [ master ] +jobs: + docker: + strategy: + fail-fast: false + matrix: + include: + - dockercontext: ./images/permissions + image: sugarcrmdevelopers/sugardockerized + prefix: permissions- + - dockercontext: ./images/testsmtp + image: sugarcrmdevelopers/sugardockerized + prefix: testsmtp- + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ matrix.image }} + flavor: | + latest=true + prefix=${{ matrix.prefix }},onlatest=true + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.dockercontext }} + push: true + platforms: 'linux/amd64,linux/arm64' + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/sugar11.yml b/.github/workflows/sugar11.yml index 240d8eb99..a05f898b6 100644 --- a/.github/workflows/sugar11.yml +++ b/.github/workflows/sugar11.yml @@ -2,8 +2,9 @@ name: on: #push: # branches: [ master, dev ] - pull_request: - branches: [ master ] + push: + tags: + - 'v*' jobs: tests: runs-on: ubuntu-latest diff --git a/.github/workflows/sugar12.yml b/.github/workflows/sugar12.yml index ec8319174..2c815db20 100644 --- a/.github/workflows/sugar12.yml +++ b/.github/workflows/sugar12.yml @@ -1,21 +1,65 @@ -name: +name: ci-v12 on: - #push: - # branches: [ master, dev ] - pull_request: - branches: [ master ] + push: + tags: + - 'v*' jobs: tests: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - run: ['stacks/sugar12/php80.yml', 'stacks/sugar12/php80-local-build.yml'] + run: ['stacks/sugar12/php80-local-build.yml'] steps: - run: sudo sysctl -w vm.max_map_count=262144 - run: echo '127.0.0.1 docker.local' | sudo tee -a /etc/hosts - uses: actions/checkout@v1 - run: cp -r ./tests/web_tests ./data/app/sugar/ - run: ./tests/start.sh ${{ matrix.run }} - - run: ./tests/web_tests.sh ${{ matrix.run }} 11.0 7.4 + - run: ./tests/web_tests.sh ${{ matrix.run }} 12.0 8.0 - run: ./tests/stop.sh ${{ matrix.run }} + + docker: + strategy: + fail-fast: false + matrix: + include: + - dockercontext: ./images/php/80/apache + image: sugarcrmdevelopers/sugardockerized + prefix: php8.0-apache- + - dockercontext: ./images/php/80/cron + image: sugarcrmdevelopers/sugardockerized + prefix: php8.0-cron- + - dockercontext: ./images/mysql/80 + image: sugarcrmdevelopers/sugardockerized + prefix: mysql8.0- + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ matrix.image }} + flavor: | + latest=true + prefix=${{ matrix.prefix }},onlatest=true + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.dockercontext }} + push: true + platforms: 'linux/amd64,linux/arm64' + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/sugar13.yml b/.github/workflows/sugar13.yml new file mode 100644 index 000000000..a24840703 --- /dev/null +++ b/.github/workflows/sugar13.yml @@ -0,0 +1,71 @@ +name: ci-v13 +on: + push: + tags: + - 'v*' +jobs: + tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + run: ['stacks/sugar13/php82-local-build.yml'] + steps: + - run: sudo sysctl -w vm.max_map_count=262144 + - run: echo '127.0.0.1 docker.local' | sudo tee -a /etc/hosts + - uses: actions/checkout@v1 + - run: cp -r ./tests/web_tests ./data/app/sugar/ + - run: ./tests/start.sh ${{ matrix.run }} + - run: ./tests/web_tests.sh ${{ matrix.run }} 13.0 8.2 + - run: ./tests/stop.sh ${{ matrix.run }} + + docker: + strategy: + fail-fast: false + matrix: + include: + - dockercontext: ./images/php/82/apache + image: sugarcrmdevelopers/sugardockerized + prefix: php8.2-apache- + - dockercontext: ./images/php/82/cron + image: sugarcrmdevelopers/sugardockerized + prefix: php8.2-cron- + - dockercontext: ./images/mysql/8032 + image: sugarcrmdevelopers/sugardockerized + prefix: mysql8.0.32- + - dockercontext: ./images/permissions + image: sugarcrmdevelopers/sugardockerized + prefix: permissions- + - dockercontext: ./images/testsmtp + image: sugarcrmdevelopers/sugardockerized + prefix: testsmtp- + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ matrix.image }} + flavor: | + latest=true + prefix=${{ matrix.prefix }},onlatest=true + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.dockercontext }} + push: true + platforms: 'linux/amd64,linux/arm64' + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/sugar14.yml b/.github/workflows/sugar14.yml new file mode 100644 index 000000000..7526beaba --- /dev/null +++ b/.github/workflows/sugar14.yml @@ -0,0 +1,71 @@ +name: ci-v14 +on: + push: + tags: + - 'v*' +jobs: + tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + run: ['stacks/sugar14/php83-local-build.yml'] + steps: + - run: sudo sysctl -w vm.max_map_count=262144 + - run: echo '127.0.0.1 docker.local' | sudo tee -a /etc/hosts + - uses: actions/checkout@v1 + - run: cp -r ./tests/web_tests ./data/app/sugar/ + - run: ./tests/start.sh ${{ matrix.run }} + - run: ./tests/web_tests.sh ${{ matrix.run }} 14.0 8.3 + - run: ./tests/stop.sh ${{ matrix.run }} + + docker: + strategy: + fail-fast: false + matrix: + include: + - dockercontext: ./images/php/83/apache + image: sugarcrmdevelopers/sugardockerized + prefix: php8.3-apache- + - dockercontext: ./images/php/83/cron + image: sugarcrmdevelopers/sugardockerized + prefix: php8.3-cron- + - dockercontext: ./images/mysql/830 + image: sugarcrmdevelopers/sugardockerized + prefix: mysql8.3.0- + - dockercontext: ./images/permissions + image: sugarcrmdevelopers/sugardockerized + prefix: permissions- + - dockercontext: ./images/testsmtp + image: sugarcrmdevelopers/sugardockerized + prefix: testsmtp- + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ matrix.image }} + flavor: | + latest=true + prefix=${{ matrix.prefix }},onlatest=true + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.dockercontext }} + push: true + platforms: 'linux/amd64,linux/arm64' + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/sugar9.yml b/.github/workflows/sugar9.yml index 616a1047c..80403609d 100644 --- a/.github/workflows/sugar9.yml +++ b/.github/workflows/sugar9.yml @@ -2,8 +2,9 @@ name: on: #push: # branches: [ master, dev ] - pull_request: - branches: [ master ] + push: + tags: + - 'v*' jobs: tests: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 7fa42ca46..c30b64563 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ data backups +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index de517d22b..195ec77c0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Sugar Dockerized [![Build Status](https://github.com/esimonetti/SugarDockerized/actions/workflows/sugar12.yml/badge.svg)](https://github.com/esimonetti/SugarDockerized/actions/workflows/sugar12.yml) ![Docker Pulls](https://img.shields.io/docker/pulls/esimonetti/sugardockerized.svg) +# Sugar Dockerized [![Build Status](https://github.com/sugarcrm-developers/SugarDockerized/actions/workflows/sugar12.yml/badge.svg)](https://github.com/sugarcrm-developers/SugarDockerized/actions/workflows/sugar12.yml) [![Build Status](https://github.com/sugarcrm-developers/SugarDockerized/actions/workflows/sugar13.yml/badge.svg)](https://github.com/sugarcrm-developers/SugarDockerized/actions/workflows/sugar13.yml) This repository will help you deploy a Docker based **development only** full stack for Sugar, meeting all the platform requirements for a different set of platform combinations. @@ -21,11 +21,12 @@ If you find this software useful, please consider supporting the work that went ## Stacks available There are few stacks available, with in itself multiple platform combinations. You can read more about the specific stacks on the links below: +* [Sugar 13](stacks/sugar13/README.md) - This stack is valid from version 13 for local developement also of Sugar Cloud only versions * [Sugar 12](stacks/sugar12/README.md) - This stack is valid from version 12 for local developement also of Sugar Cloud only versions * [Sugar 11](stacks/sugar11/README.md) - This stack is valid from version 11 for local developement also of Sugar Cloud only versions You will find additional stacks within the [stack directory of the project](stacks). -For most stacks, there are both the pre-built version (eg on Sugar 9: `./stacks/sugar9/php73.yml`) and a locally built version (eg on Sugar 9: `./stacks/sugar9/php73-local-build.yml`). The locally built version will be built run-time, and therefore those stacks will let you specify additional changes you might require to the docker images provided. Local builds will take much longer to deploy than pre-built ones. +For most stacks, there are both the pre-built version (eg on Sugar 13: `./stacks/sugar13/php82.yml`) and a locally built version (eg on Sugar 13: `./stacks/sugar13/php82-local-build.yml`). The locally built version will be built run-time, and therefore those stacks will let you specify additional changes you might require to the docker images provided. Local builds will take much longer to deploy than pre-built ones. ### Types of stacks There are mainly three types of stack: @@ -45,27 +46,27 @@ There are multiple stack components as docker containers, that perform different ## SugarDockerized installation * The first step for everything to work smoothly, is to add on your computer's host file `/etc/hosts` the entry `docker.local` to point to your machine's ip (it might be `127.0.0.1` if running the stack locally, or the LAN static ip address of the VM running Docker. If using the Debian VirtualBox image provided at the bottom of this README, the ip address is `10.10.10.10`) -* Clone the repository with `git clone https://github.com/esimonetti/SugarDockerized.git sugardocker` and enter sugardocker with `cd sugardocker` +* Clone the repository with `git clone https://github.com/sugarcrm-developers/SugarDockerized.git sugardocker` and enter sugardocker with `cd sugardocker` * Choose the yml stack to run, within [stacks](stacks/) ## Starting and stopping the desired stack -Please leverage the utility script [stack.sh](https://github.com/esimonetti/SugarDockerized#stacksh) that will help with automation of the most common stacks. The utility will also notify you if a new version of SugarDockerized is available. +Please leverage the utility script [stack.sh](#stacksh) that will help with automation of the most common stacks. The utility will also notify you if a new version of SugarDockerized is available. ## Installation - How to get Sugar installed -For details about the hostnames and credentials of each of the infrastructure components, refer to [Sugar Setup details](https://github.com/esimonetti/SugarDockerized#sugar-setup-details). +For details about the hostnames and credentials of each of the infrastructure components, refer to [Sugar Setup details](#sugar-setup-details). ### Sugar installation via installable zip file * The first step is to copy (cp/scp/rsync/filezilla etc) the compressed installable zip file into a known path within the Linux host running SugarDockerized -* Run the utility `installfromzip.sh`. Read more about [installfromzip.sh](https://github.com/esimonetti/SugarDockerized#installfromzipsh) +* Run the utility `installfromzip.sh`. Read more about [installfromzip.sh](#installfromzipsh) ### Sugar installation building from git source * To be able to proceed further, you would need read permission access to Sugar's official git source control repository * Clone the full git repository within your `./data/app/` directory so that the repository is located in `./data/app/Mango/` * Switch to the correct branch -* Run the utility `build/build.sh`. Read more about [build/build.sh](https://github.com/esimonetti/SugarDockerized#buildbuildsh) +* Run the utility `build/build.sh`. Read more about [build/build.sh](#buildbuildsh) ## Current version support -The main stacks work with [Sugar version 9.0 and all its platform requirements](http://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_9.0.x_Supported_Platforms/). Additional stacks are aligned with the platform requirements of version [8.0](http://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_8.0.x_Supported_Platforms/), [7.9](http://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_7.9.x_Supported_Platforms/) and stacks for Sugar Cloud only versions for local development only. +The main stacks work with [Sugar version 13.0 and all its platform requirements](https://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_13.0.x_Supported_Platforms/). Additional stacks are aligned with the platform requirements of version [12.x](https://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_12.0.x_Supported_Platforms/), [11.x](https://support.sugarcrm.com/Resources/Supported_Platforms/Sugar_11.0.x_Supported_Platforms/) and stacks for Sugar Cloud only versions for local development only. ## System's details @@ -110,7 +111,8 @@ Apache web servers have enabled: Apache web servers have PHP with enabled: * Zend OPcache - Configured for Sugar with the assumption the files will be located within the correct path * XHProf and Tideways profilers -* Xdebug is installed but it is not enabled by default (due to its performance impact). For PHP 5.6 images and all cron images if there is the need to enable it, you would have to uncomment the configuration option on the PHP Dockerfile of choice, and leverage the stack configuration with local build. For other case see [`xdebug.sh`](#xdebugsh). +* `Xdebug` is installed but it is not enabled by default (due to its performance impact). For PHP 5.6 images and all cron images if there is the need to enable it, you would have to uncomment the configuration option on the PHP Dockerfile of choice, and leverage the stack configuration with local build. For other case see [`xdebug.sh`](#xdebugsh). + * Remember, `Xdebug` will connect from the Container to your Host not the other way around. In summary, we instructed Xdebug to start with a request and try to send the debug events to the host with the IP `host.docker.internal` on port `9003`. * If you use an IDE such as PHPStorm, you can setup DBGp Proxy under the menus Preference -> Language & Framework -> PHP -> Debug -> DBGp Proxy. Example settings are available in the screenshot below: PHPStorm xdebug settings @@ -212,11 +214,12 @@ Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies ``` Due to performance impact, Xdebug is disabled by default. This script prompts you to activate Xdebug, check if Xdebug is activated, or disable it. -If you do not want to configure DBGp Proxy when running the script, you can specify the second argument `change-ip`. In this case, the script will change the `xdebug.remote_host` option to your local IP address. +If you do not want to configure DBGp Proxy when running the script, you can specify the second argument `change-ip`. In this case, the script will change the `xdebug.client_host` option to your local IP address. +By default, we are setting `host.docker.internal` which should resolve to Docker's internal IP address used by the host. ``` ./utilities/xdebug.sh start change-ip Start xDebug -New IP of remote_host: 192.168.0.105 +New IP of client_host: 192.168.0.105 6c9a9862b60c PHP 7.1.33 (cli) (built: Nov 22 2019 18:28:25) ( NTS ) Copyright (c) 1997-2018 The PHP Group @@ -233,10 +236,10 @@ All directories and files within "data" are now owned by uid:gid 1000:1000 It sets the correct ownership of the data directories #### stack.sh -```./utilities/stack.sh 80 down``` +```./utilities/stack.sh 13 down``` ``` -./utilities/stack.sh 80 down -stacks/sugar8/php71.yml down +./utilities/stack.sh 13 down +stacks/sugar13/php82.yml down Stopping sugar-cron ... done Stopping sugar-web1 ... done Stopping sugar-redis ... done @@ -248,10 +251,10 @@ Removing sugar-redis ... done Removing sugar-mysql ... done Removing sugar-permissions ... done Removing sugar-elasticsearch ... done -Removing network sugar8_default +Removing network sugar13_default No stopped containers ``` -It helps to take the default stack for the sugar version passed as a parameter, up or down. It expects two parameters: version number (eg: 80, 90 etc) and up/down. +It helps to take the default stack for the sugar version passed as a parameter, up or down. It expects two parameters: version number (eg: 12, 13 etc) and up/down. Have a look at the configuration file `./utilities/stacks.conf`, to know all the available stack combinations for the script. For some of the main stacks is available the "local" version of the stack, that allows local modification of settings and local docker image building. #### runcli.sh @@ -289,6 +292,47 @@ System repaired It restores a previous snapshot of sugar files from `backups/backup_802_2018_11_21/sugar` and of MySQL from `backups/backup_802_2018_11_21/sugar.sql` The script assumes that the database name is sugar and the web directory is sugar as well. The script does not restore Elasticsearch and/or Redis. +#### restorefromfile.sh +```./utilities/restorefromfile.sh ~/Downloads/your-cloud-backup.sugarcrm.com.1320ent.1699996734.b76cf32986a8800255e21124a572dc4c151170c2.tar.gz``` +``` +Cleaning up previous install (./data/app/sugar) if any, please wait... +Decompressing /path-to-your-downloads-folder/Downloads/your-cloud-backup.sugarcrm.com.1320ent.1699996734.b76cf32986a8800255e21124a572dc4c151170c2.tar.gz, please wait... +Restoring application files +Application files restored +Restoring database +Database "sugar" dropped +mysql: [Warning] Using a password on the command line interface can be insecure. +mysql: [Warning] Using a password on the command line interface can be insecure. +Database restored +Dockerizing Backup config files... +Cleaning up please wait... +Fixing Sugar permissions, please wait... +Done +Restarting sugar-web1 container, please wait... +Done +Restarting sugar-cron container, please wait... +Done +Deleting all previous redis values +Done +Deleting all previous Elasticsearch indices, please wait... +Done +Repairing system +Preparing SystemUser... +Running QRR... +Rebuilding cache... +Warming up Services... +Done repairing... +System repaired +Performing Elasticsearch re-index +Scheduling reindex ... +Consuming queue ... please be patient +Consuming queue ... finish batch #1 +Reindexing complete +Restore completed! +``` +It restores a SugarCloud snapshot/backup that contains your full Sugar instance with files, custom folders as well as full database backup. +The script will [config_override.php](/utilities/configs/config_override_dockerized.php) settings to make your instance Docker ready. The script does not restore Elasticsearch and/or Redis. + #### jmeter/build.sh This script installs the jmeter components present on the [performance repository](https://github.com/sugarcrm/performance). Access to the repository is needed, if you are a Sugar Partner or Customer you can request access by mailing: developers@sugarcrm.com @@ -306,20 +350,11 @@ The following arguments should be adapted to target server: #### installfromzip.sh This script requires a Sugar zip package, and the zip package needs to be on the host running SugarDockerized. -If the installable zip package is located within the local directory `~/installable/SugarEnt-9.0.2.zip` the install command would be: -```./utilities/installfromzip.sh ~/installable/SugarEnt-9.0.2.zip``` +If the installable zip package is located within the local directory `~/installable/SugarEnt-13.0.0.zip` the install command would be: +```./utilities/installfromzip.sh ~/installable/SugarEnt-13.0.0.zip``` The script will perform all the steps required to silently install the software within the SugarDockerized stack currently running. -To know more about additional custom configuration parameters and actions that can be used/performed during the silent installation refer to [script build/silentinstall.sh](https://github.com/esimonetti/SugarDockerized#buildsilentinstallsh). - -#### build/build.sh -This script is most likely for Sugar Employees only. -The script requires a clone of Sugar's git repository within `./data/app/Mango` with the `index.php` located within `./data/app/Mango/sugarcrm/index.php`. -If we want to build the application version 10.0.0 Enterprise, the build command would be: -```./utilities/build/build.sh ent 10.0.0``` - -The script will perform all the steps necessary to build the current branch of the software and also perform its silent installation. -To know more about additional custom configuration parameters and actions that can be used/performed during the silent installation refer to [script build/silentinstall.sh](https://github.com/esimonetti/SugarDockerized#buildsilentinstallsh). +To know more about additional custom configuration parameters and actions that can be used/performed during the silent installation refer to [script build/silentinstall.sh](#buildsilentinstallsh). #### build/silentinstall.sh The script is leveraged by both `installfromzip.sh` and `build/build.sh` to install silently Sugar on the current stack. diff --git a/data/app/sugar/.gitkeep b/data/app/sugar/.gitkeep index e69de29bb..8b1378917 100644 --- a/data/app/sugar/.gitkeep +++ b/data/app/sugar/.gitkeep @@ -0,0 +1 @@ + diff --git a/images/mysql/8032/Dockerfile b/images/mysql/8032/Dockerfile new file mode 100755 index 000000000..4e829b593 --- /dev/null +++ b/images/mysql/8032/Dockerfile @@ -0,0 +1,4 @@ +FROM mysql:8.0.32 +MAINTAINER enrico.simonetti@gmail.com + +COPY config/mysql/docker.cnf /etc/mysql/conf.d/docker.cnf diff --git a/images/mysql/8032/config/mysql/docker.cnf b/images/mysql/8032/config/mysql/docker.cnf new file mode 100644 index 000000000..baf9ec946 --- /dev/null +++ b/images/mysql/8032/config/mysql/docker.cnf @@ -0,0 +1,13 @@ +[mysqld] +skip-host-cache +skip-name-resolve +default-storage-engine=InnoDB +innodb_file_per_table +innodb_buffer_pool_size=256M +character-set-server=utf8mb4 +collation-server=utf8mb4_general_ci +optimizer-switch=block_nested_loop=off +sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" + +[mysqldump] +max-allowed-packet=128M diff --git a/images/mysql/830/Dockerfile b/images/mysql/830/Dockerfile new file mode 100755 index 000000000..bf4928e95 --- /dev/null +++ b/images/mysql/830/Dockerfile @@ -0,0 +1,4 @@ +FROM mysql:8.3.0 +MAINTAINER developers@sugarcrm.com + +COPY config/mysql/docker.cnf /etc/mysql/conf.d/docker.cnf diff --git a/images/mysql/830/config/mysql/docker.cnf b/images/mysql/830/config/mysql/docker.cnf new file mode 100644 index 000000000..d954b355b --- /dev/null +++ b/images/mysql/830/config/mysql/docker.cnf @@ -0,0 +1,13 @@ +[mysqld] +host-cache-size=0 +skip-name-resolve +default-storage-engine=InnoDB +innodb_file_per_table +innodb_buffer_pool_size=256M +character-set-server=utf8mb4 +collation-server=utf8mb4_general_ci +optimizer-switch=block_nested_loop=off +sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION" + +[mysqldump] +max-allowed-packet=128M diff --git a/images/permissions/Dockerfile b/images/permissions/Dockerfile index 6f2062dd6..197f54fee 100755 --- a/images/permissions/Dockerfile +++ b/images/permissions/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:8.8 +FROM debian:stable-slim MAINTAINER enrico.simonetti@gmail.com RUN adduser sugar --disabled-password --disabled-login --gecos "" diff --git a/images/permissions/apps/sugarfixpermissions b/images/permissions/apps/sugarfixpermissions index 37352438a..d3bd4402a 100644 --- a/images/permissions/apps/sugarfixpermissions +++ b/images/permissions/apps/sugarfixpermissions @@ -2,9 +2,12 @@ DIR=/var/www/html +echo Fixing ownership permissions # Only change ownership on files that aren't currently owned by sugar:sugar find ${DIR} -noleaf \( \! -user sugar -o \! -group sugar \) -print0 | xargs -0 -r chown sugar:sugar +echo Fixing mode of files + # Only change the mode of files/directories within sugar that are not 664/775. Exludes phpunit and sugarcrm find ${DIR}/sugar -noleaf -type d \! -perm 775 -print0 2> /dev/null | xargs -0 -r chmod 775 2> /dev/null find ${DIR}/sugar -noleaf -type f \! -name phpunit \! -name sugarcrm \! -perm 664 -print0 2> /dev/null | xargs -0 -r chmod 664 2> /dev/null @@ -12,10 +15,12 @@ find ${DIR}/sugar -noleaf -type f \! -name phpunit \! -name sugarcrm \! -perm 66 # Directly set these to mode 700 if [ -e ${DIR}/sugar/bin/sugarcrm ] then + echo Fixing mode of sugarcrm chmod 700 ${DIR}/sugar/bin/sugarcrm fi if [ -e ${DIR}/sugar/vendor/phpunit/phpunit/phpunit ] then + echo Fixing mode of phpunit chmod 700 ${DIR}/sugar/vendor/phpunit/phpunit/phpunit fi diff --git a/images/php/80/apache/Dockerfile b/images/php/80/apache/Dockerfile index d42e7b503..82889b995 100644 --- a/images/php/80/apache/Dockerfile +++ b/images/php/80/apache/Dockerfile @@ -24,26 +24,6 @@ RUN adduser sugar --disabled-password --disabled-login --gecos "" RUN echo " /usr/local/php/prepend.php -RUN echo 'date.timezone = GMT' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'error_log = /var/log/apache2/error.log' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'log_errors = On' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'display_errors = Off' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'memory_limit = 512M' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'post_max_size = 100M' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'upload_max_filesize = 100M' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'max_execution_time = 600' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'max_input_time = 600' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'realpath_cache_size = 512k' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'realpath_cache_ttl = 600' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'mbstring.func_overload = 0' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'session.use_cookies = 1' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'session.cookie_httponly = 1' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'session.use_trans_sid = 0' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'session.save_handler = redis' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'session.save_path = "tcp://sugar-redis:6379"' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'auto_prepend_file = "/usr/local/php/prepend.php"' >> /usr/local/etc/php/conf.d/docker.ini - COPY config/apache2/mods-available/deflate.conf /etc/apache2/mods-available/deflate.conf COPY config/apache2/sites-available/sugar.conf /etc/apache2/sites-available/sugar.conf diff --git a/images/php/80/apache/config/php/docker.ini b/images/php/80/apache/config/php/docker.ini new file mode 100644 index 000000000..3c7421d39 --- /dev/null +++ b/images/php/80/apache/config/php/docker.ini @@ -0,0 +1,22 @@ +date.timezone = GMT +error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED +error_log = /var/log/apache2/error.log +log_errors = On +display_errors = Off +memory_limit = 1024M +post_max_size = 100M +upload_max_filesize = 100M +max_execution_time = 600 +max_input_time = 600 +realpath_cache_size = 512k +realpath_cache_ttl = 600 +mbstring.func_overload = 0 +session.use_cookies = 1 +session.cookie_httponly = 1 +session.use_trans_sid = 0 +session.save_handler = redis +session.save_path = "tcp://sugar-redis:6379" +short_open_tag = Off +enable_dl = Off +allow_url_fopen = On +allow_url_include = Off diff --git a/images/php/80/apache/config/php/mods-available/xdebug.ini b/images/php/80/apache/config/php/mods-available/xdebug.ini index a1c102c2d..03228693e 100644 --- a/images/php/80/apache/config/php/mods-available/xdebug.ini +++ b/images/php/80/apache/config/php/mods-available/xdebug.ini @@ -3,11 +3,8 @@ xdebug.max_nesting_level=500 xdebug.profiler_enable=0 ; enable remote debug -; Below are xdebug2 options. Use default xdebug3 -;xdebug.remote_enable=1 -;xdebug.remote_port=9000 -;xdebug.remote_host=10.10.10.1 -;xdebug.remote_autostart = 1 -xdebug.client_host=10.10.10.1 +xdebug.client_host=host.docker.internal xdebug.client_port=9003 xdebug.idekey=XDEBUG_SESSION +xdebug.start_with_request=yes +xdebug.mode=debug \ No newline at end of file diff --git a/images/php/80/cron/Dockerfile b/images/php/80/cron/Dockerfile index eb99e99dd..7e092222a 100644 --- a/images/php/80/cron/Dockerfile +++ b/images/php/80/cron/Dockerfile @@ -27,18 +27,6 @@ RUN adduser sugar --disabled-password --disabled-login --gecos "" \ RUN echo " /usr/local/php/prepend.php -RUN echo 'date.timezone = GMT' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'error_reporting = E_ALL \& ~E_WARNING \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'error_log = /proc/1/fd/1' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'log_errors = On' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'display_errors = Off' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'memory_limit = -1' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'max_execution_time = -1' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'realpath_cache_size = 512k' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'realpath_cache_ttl = 600' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'mbstring.func_overload = 0' >> /usr/local/etc/php/conf.d/docker.ini \ - && echo 'auto_prepend_file = "/usr/local/php/prepend.php"' >> /usr/local/etc/php/conf.d/docker.ini - RUN docker-php-ext-install mysqli \ && docker-php-ext-install bcmath \ && docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \ diff --git a/images/php/80/cron/config/php/docker.ini b/images/php/80/cron/config/php/docker.ini new file mode 100644 index 000000000..c44055bec --- /dev/null +++ b/images/php/80/cron/config/php/docker.ini @@ -0,0 +1,11 @@ +date.timezone = GMT +error_reporting = E_ALL \& ~E_WARNING \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED +error_log = /proc/1/fd/1 +log_errors = On +display_errors = Off +memory_limit = -1 +max_execution_time = -1 +realpath_cache_size = 512k +realpath_cache_ttl = 600 +mbstring.func_overload = 0 +auto_prepend_file = "/usr/local/php/prepend.php" \ No newline at end of file diff --git a/images/php/82/apache/Dockerfile b/images/php/82/apache/Dockerfile new file mode 100644 index 000000000..63beb420d --- /dev/null +++ b/images/php/82/apache/Dockerfile @@ -0,0 +1,78 @@ +FROM php:8.2.2-apache + +RUN apt-get update \ + && apt-get install -y \ + graphviz \ + libpng-dev \ + libgmp-dev \ + libzip-dev \ + libc-client-dev \ + libkrb5-dev \ + libldap2-dev \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libxml2-dev \ + git \ + --no-install-recommends + +RUN apt-get clean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* + +RUN adduser sugar --disabled-password --disabled-login --gecos "" + +RUN echo " /usr/local/php/prepend.php + +COPY config/apache2/mods-available/deflate.conf /etc/apache2/mods-available/deflate.conf +COPY config/apache2/sites-available/sugar.conf /etc/apache2/sites-available/sugar.conf + +RUN set -ex \ + && . "/etc/apache2/envvars" \ + && ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" \ + && a2enmod headers expires deflate rewrite \ + && sed -i "s#Timeout .*#Timeout 600#" /etc/apache2/apache2.conf \ + && a2dissite 000-default \ + && a2ensite sugar + +RUN docker-php-ext-install mysqli \ + && docker-php-ext-install bcmath \ + && docker-php-ext-install gd \ + && docker-php-ext-install gmp \ + && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-install zip \ + && docker-php-ext-install ldap \ + && pecl install xdebug-3.2.0 \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && docker-php-ext-install soap + +RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \ +&& docker-php-ext-install -j$(nproc) gd + +# enabled by default, it can be disabled locally +COPY config/php/mods-available/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +COPY config/php/mods-available/opcache.ini /usr/local/etc/php/conf.d/opcache.ini +COPY config/php/opcache-blacklist /usr/local/etc/php/opcache-blacklist + +RUN git clone https://github.com/tideways/php-xhprof-extension.git tideways \ + && cd tideways \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/tideways.ini /usr/local/etc/php/conf.d/tideways.ini + +RUN git clone https://github.com/longxinH/xhprof.git xhprof \ + && cd xhprof/extension/ \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/xhprof.ini /usr/local/etc/php/conf.d/xhprof.ini + +WORKDIR "/var/www/html/sugar" diff --git a/images/php/82/apache/config/apache2/mods-available/deflate.conf b/images/php/82/apache/config/apache2/mods-available/deflate.conf new file mode 100644 index 000000000..7bb892d3e --- /dev/null +++ b/images/php/82/apache/config/apache2/mods-available/deflate.conf @@ -0,0 +1 @@ +AddOutputFilterByType DEFLATE application/json application/javascript text/css diff --git a/images/php/82/apache/config/apache2/sites-available/sugar.conf b/images/php/82/apache/config/apache2/sites-available/sugar.conf new file mode 100644 index 000000000..6411ef409 --- /dev/null +++ b/images/php/82/apache/config/apache2/sites-available/sugar.conf @@ -0,0 +1,14 @@ + + ServerAdmin webmaster@localhost + ServerName localhost + + DocumentRoot /var/www/html + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + + Options Indexes FollowSymLinks + AllowOverride All + + diff --git a/images/php/82/apache/config/php/docker.ini b/images/php/82/apache/config/php/docker.ini new file mode 100644 index 000000000..3c7421d39 --- /dev/null +++ b/images/php/82/apache/config/php/docker.ini @@ -0,0 +1,22 @@ +date.timezone = GMT +error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED +error_log = /var/log/apache2/error.log +log_errors = On +display_errors = Off +memory_limit = 1024M +post_max_size = 100M +upload_max_filesize = 100M +max_execution_time = 600 +max_input_time = 600 +realpath_cache_size = 512k +realpath_cache_ttl = 600 +mbstring.func_overload = 0 +session.use_cookies = 1 +session.cookie_httponly = 1 +session.use_trans_sid = 0 +session.save_handler = redis +session.save_path = "tcp://sugar-redis:6379" +short_open_tag = Off +enable_dl = Off +allow_url_fopen = On +allow_url_include = Off diff --git a/images/php/82/apache/config/php/mods-available/opcache.ini b/images/php/82/apache/config/php/mods-available/opcache.ini new file mode 100644 index 000000000..b0e4ac566 --- /dev/null +++ b/images/php/82/apache/config/php/mods-available/opcache.ini @@ -0,0 +1,30 @@ +; configuration for php ZendOpcache module +; priority=10 +zend_extension=opcache.so +opcache.blacklist_filename="/usr/local/etc/php/opcache-blacklist" +opcache.consistency_checks=0 +opcache.dups_fix=0 +opcache.enable=1 +opcache.enable_cli=0 +opcache.enable_file_override=0 +opcache.error_log="" +opcache.fast_shutdown=1 +opcache.file_update_protection=2 +opcache.force_restart_timeout=180 +opcache.inherited_hack=1 +opcache.interned_strings_buffer=8 +opcache.load_comments=1 +opcache.log_verbosity_level=1 +opcache.max_accelerated_files=4000 +opcache.max_file_size=0 +opcache.max_wasted_percentage=5 +opcache.memory_consumption=256 +opcache.optimization_level=0x7FFFBFFF +opcache.preferred_memory_model="" +opcache.protect_memory=0 +opcache.restrict_api="" +opcache.revalidate_freq=2 +opcache.revalidate_path=0 +opcache.save_comments=1 +opcache.use_cwd=1 +opcache.validate_timestamps=1 diff --git a/images/php/82/apache/config/php/mods-available/redis.ini b/images/php/82/apache/config/php/mods-available/redis.ini new file mode 100644 index 000000000..6aecae489 --- /dev/null +++ b/images/php/82/apache/config/php/mods-available/redis.ini @@ -0,0 +1 @@ +extension=redis.so diff --git a/images/php/82/apache/config/php/mods-available/tideways.ini b/images/php/82/apache/config/php/mods-available/tideways.ini new file mode 100644 index 000000000..de7c8f9f0 --- /dev/null +++ b/images/php/82/apache/config/php/mods-available/tideways.ini @@ -0,0 +1,2 @@ +extension=tideways_xhprof.so +tideways_xhprof.auto_prepend_library=0 diff --git a/images/php/82/apache/config/php/mods-available/xdebug.ini b/images/php/82/apache/config/php/mods-available/xdebug.ini new file mode 100644 index 000000000..03228693e --- /dev/null +++ b/images/php/82/apache/config/php/mods-available/xdebug.ini @@ -0,0 +1,10 @@ +;zend_extension=xdebug.so +xdebug.max_nesting_level=500 +xdebug.profiler_enable=0 + +; enable remote debug +xdebug.client_host=host.docker.internal +xdebug.client_port=9003 +xdebug.idekey=XDEBUG_SESSION +xdebug.start_with_request=yes +xdebug.mode=debug \ No newline at end of file diff --git a/images/php/82/apache/config/php/mods-available/xhprof.ini b/images/php/82/apache/config/php/mods-available/xhprof.ini new file mode 100644 index 000000000..dd7fd32c6 --- /dev/null +++ b/images/php/82/apache/config/php/mods-available/xhprof.ini @@ -0,0 +1,2 @@ +extension = xhprof.so +xhprof.output_dir = /tmp/xhprof diff --git a/images/php/82/apache/config/php/opcache-blacklist b/images/php/82/apache/config/php/opcache-blacklist new file mode 100644 index 000000000..5edb9d104 --- /dev/null +++ b/images/php/82/apache/config/php/opcache-blacklist @@ -0,0 +1,7 @@ +/var/www/html/sugar/config_override.php +/var/www/html/sugar/cache/modules/Teams/TeamSetCache.php +/var/www/html/sugar/cache/modules/Teams/TeamSetMD5Cache.php +/var/www/html/sugar/cache/class_map.php +/var/www/html/sugar/cache/smarty/templates_c/* +/var/www/html/sugar/custom/modules/unified_search_modules_display.php +/var/www/html/sugar/custom/modulebuilder/* diff --git a/images/php/82/cron/Dockerfile b/images/php/82/cron/Dockerfile new file mode 100644 index 000000000..0c600ce12 --- /dev/null +++ b/images/php/82/cron/Dockerfile @@ -0,0 +1,78 @@ +FROM php:8.2.2-cli + +RUN apt-get update \ + && apt-get install -y \ + sudo \ + vim \ + unzip \ + libpng-dev \ + libgmp-dev \ + libzip-dev \ + libc-client-dev \ + libkrb5-dev \ + libldap2-dev \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libxml2-dev \ + git \ + --no-install-recommends + +RUN apt-get clean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* + +RUN adduser sugar --disabled-password --disabled-login --gecos "" \ + && echo "sugar ALL=NOPASSWD: ALL" > /etc/sudoers.d/sugar + +RUN echo " /usr/local/php/prepend.php + +RUN docker-php-ext-install mysqli \ + && docker-php-ext-install bcmath \ + && docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd \ + && docker-php-ext-install gmp \ + && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-install zip \ + && docker-php-ext-install ldap \ + && docker-php-ext-install ldap \ + && pecl install xdebug-3.2.0 \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && docker-php-ext-install soap + +RUN docker-php-ext-install -j$(nproc) gd + +# disable by default, it can be enabled locally +#COPY config/php/mods-available/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +COPY config/php/mods-available/opcache.ini /usr/local/etc/php/conf.d/opcache.ini +COPY config/php/opcache-blacklist /usr/local/etc/php/opcache-blacklist + +RUN git clone https://github.com/tideways/php-xhprof-extension.git tideways \ + && cd tideways \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/tideways.ini /usr/local/etc/php/conf.d/tideways.ini + +RUN git clone https://github.com/longxinH/xhprof.git xhprof \ + && cd xhprof/extension/ \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/xhprof.ini /usr/local/etc/php/conf.d/xhprof.ini + +RUN curl -sS http://getcomposer.org/installer | php \ + && mv composer.phar /usr/local/bin/composer + +COPY apps/sugarcron /usr/local/bin/sugarcron +RUN chmod +x /usr/local/bin/sugarcron + +WORKDIR "/var/www/html/sugar" +USER sugar + +CMD ["/usr/local/bin/sugarcron"] diff --git a/images/php/82/cron/apps/sugarcron b/images/php/82/cron/apps/sugarcron new file mode 100644 index 000000000..ce24473ac --- /dev/null +++ b/images/php/82/cron/apps/sugarcron @@ -0,0 +1,25 @@ +#!/usr/local/bin/php + /usr/local/php/prepend.php + +COPY config/apache2/mods-available/deflate.conf /etc/apache2/mods-available/deflate.conf +COPY config/apache2/sites-available/sugar.conf /etc/apache2/sites-available/sugar.conf + +RUN set -ex \ + && . "/etc/apache2/envvars" \ + && ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" \ + && a2enmod headers expires deflate rewrite \ + && sed -i "s#Timeout .*#Timeout 600#" /etc/apache2/apache2.conf \ + && a2dissite 000-default \ + && a2ensite sugar + +RUN docker-php-ext-install mysqli \ + && docker-php-ext-install bcmath \ + && docker-php-ext-install gd \ + && docker-php-ext-install gmp \ + && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-install zip \ + && docker-php-ext-install ldap \ + && pecl install xdebug-3.3.0 \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && docker-php-ext-install soap + +RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \ +&& docker-php-ext-install -j$(nproc) gd + +# enabled by default, it can be disabled locally +COPY config/php/mods-available/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +COPY config/php/mods-available/opcache.ini /usr/local/etc/php/conf.d/opcache.ini +COPY config/php/opcache-blacklist /usr/local/etc/php/opcache-blacklist + +RUN git clone https://github.com/tideways/php-xhprof-extension.git tideways \ + && cd tideways \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/tideways.ini /usr/local/etc/php/conf.d/tideways.ini + +RUN git clone https://github.com/longxinH/xhprof.git xhprof \ + && cd xhprof/extension/ \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/xhprof.ini /usr/local/etc/php/conf.d/xhprof.ini + +WORKDIR "/var/www/html/sugar" diff --git a/images/php/83/apache/config/apache2/mods-available/deflate.conf b/images/php/83/apache/config/apache2/mods-available/deflate.conf new file mode 100644 index 000000000..7bb892d3e --- /dev/null +++ b/images/php/83/apache/config/apache2/mods-available/deflate.conf @@ -0,0 +1 @@ +AddOutputFilterByType DEFLATE application/json application/javascript text/css diff --git a/images/php/83/apache/config/apache2/sites-available/sugar.conf b/images/php/83/apache/config/apache2/sites-available/sugar.conf new file mode 100644 index 000000000..6411ef409 --- /dev/null +++ b/images/php/83/apache/config/apache2/sites-available/sugar.conf @@ -0,0 +1,14 @@ + + ServerAdmin webmaster@localhost + ServerName localhost + + DocumentRoot /var/www/html + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + + Options Indexes FollowSymLinks + AllowOverride All + + diff --git a/images/php/83/apache/config/php/docker.ini b/images/php/83/apache/config/php/docker.ini new file mode 100644 index 000000000..3c7421d39 --- /dev/null +++ b/images/php/83/apache/config/php/docker.ini @@ -0,0 +1,22 @@ +date.timezone = GMT +error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED +error_log = /var/log/apache2/error.log +log_errors = On +display_errors = Off +memory_limit = 1024M +post_max_size = 100M +upload_max_filesize = 100M +max_execution_time = 600 +max_input_time = 600 +realpath_cache_size = 512k +realpath_cache_ttl = 600 +mbstring.func_overload = 0 +session.use_cookies = 1 +session.cookie_httponly = 1 +session.use_trans_sid = 0 +session.save_handler = redis +session.save_path = "tcp://sugar-redis:6379" +short_open_tag = Off +enable_dl = Off +allow_url_fopen = On +allow_url_include = Off diff --git a/images/php/83/apache/config/php/mods-available/opcache.ini b/images/php/83/apache/config/php/mods-available/opcache.ini new file mode 100644 index 000000000..b0e4ac566 --- /dev/null +++ b/images/php/83/apache/config/php/mods-available/opcache.ini @@ -0,0 +1,30 @@ +; configuration for php ZendOpcache module +; priority=10 +zend_extension=opcache.so +opcache.blacklist_filename="/usr/local/etc/php/opcache-blacklist" +opcache.consistency_checks=0 +opcache.dups_fix=0 +opcache.enable=1 +opcache.enable_cli=0 +opcache.enable_file_override=0 +opcache.error_log="" +opcache.fast_shutdown=1 +opcache.file_update_protection=2 +opcache.force_restart_timeout=180 +opcache.inherited_hack=1 +opcache.interned_strings_buffer=8 +opcache.load_comments=1 +opcache.log_verbosity_level=1 +opcache.max_accelerated_files=4000 +opcache.max_file_size=0 +opcache.max_wasted_percentage=5 +opcache.memory_consumption=256 +opcache.optimization_level=0x7FFFBFFF +opcache.preferred_memory_model="" +opcache.protect_memory=0 +opcache.restrict_api="" +opcache.revalidate_freq=2 +opcache.revalidate_path=0 +opcache.save_comments=1 +opcache.use_cwd=1 +opcache.validate_timestamps=1 diff --git a/images/php/83/apache/config/php/mods-available/redis.ini b/images/php/83/apache/config/php/mods-available/redis.ini new file mode 100644 index 000000000..6aecae489 --- /dev/null +++ b/images/php/83/apache/config/php/mods-available/redis.ini @@ -0,0 +1 @@ +extension=redis.so diff --git a/images/php/83/apache/config/php/mods-available/tideways.ini b/images/php/83/apache/config/php/mods-available/tideways.ini new file mode 100644 index 000000000..de7c8f9f0 --- /dev/null +++ b/images/php/83/apache/config/php/mods-available/tideways.ini @@ -0,0 +1,2 @@ +extension=tideways_xhprof.so +tideways_xhprof.auto_prepend_library=0 diff --git a/images/php/83/apache/config/php/mods-available/xdebug.ini b/images/php/83/apache/config/php/mods-available/xdebug.ini new file mode 100644 index 000000000..03228693e --- /dev/null +++ b/images/php/83/apache/config/php/mods-available/xdebug.ini @@ -0,0 +1,10 @@ +;zend_extension=xdebug.so +xdebug.max_nesting_level=500 +xdebug.profiler_enable=0 + +; enable remote debug +xdebug.client_host=host.docker.internal +xdebug.client_port=9003 +xdebug.idekey=XDEBUG_SESSION +xdebug.start_with_request=yes +xdebug.mode=debug \ No newline at end of file diff --git a/images/php/83/apache/config/php/mods-available/xhprof.ini b/images/php/83/apache/config/php/mods-available/xhprof.ini new file mode 100644 index 000000000..dd7fd32c6 --- /dev/null +++ b/images/php/83/apache/config/php/mods-available/xhprof.ini @@ -0,0 +1,2 @@ +extension = xhprof.so +xhprof.output_dir = /tmp/xhprof diff --git a/images/php/83/apache/config/php/opcache-blacklist b/images/php/83/apache/config/php/opcache-blacklist new file mode 100644 index 000000000..5edb9d104 --- /dev/null +++ b/images/php/83/apache/config/php/opcache-blacklist @@ -0,0 +1,7 @@ +/var/www/html/sugar/config_override.php +/var/www/html/sugar/cache/modules/Teams/TeamSetCache.php +/var/www/html/sugar/cache/modules/Teams/TeamSetMD5Cache.php +/var/www/html/sugar/cache/class_map.php +/var/www/html/sugar/cache/smarty/templates_c/* +/var/www/html/sugar/custom/modules/unified_search_modules_display.php +/var/www/html/sugar/custom/modulebuilder/* diff --git a/images/php/83/cron/Dockerfile b/images/php/83/cron/Dockerfile new file mode 100644 index 000000000..91928df94 --- /dev/null +++ b/images/php/83/cron/Dockerfile @@ -0,0 +1,78 @@ +FROM php:8.3.6-cli + +RUN apt-get update \ + && apt-get install -y \ + sudo \ + vim \ + unzip \ + libpng-dev \ + libgmp-dev \ + libzip-dev \ + libc-client-dev \ + libkrb5-dev \ + libldap2-dev \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libxml2-dev \ + git \ + --no-install-recommends + +RUN apt-get clean \ + && apt-get -y autoremove \ + && rm -rf /var/lib/apt/lists/* + +RUN adduser sugar --disabled-password --disabled-login --gecos "" \ + && echo "sugar ALL=NOPASSWD: ALL" > /etc/sudoers.d/sugar + +RUN echo " /usr/local/php/prepend.php + +RUN docker-php-ext-install mysqli \ + && docker-php-ext-install bcmath \ + && docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd \ + && docker-php-ext-install gmp \ + && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap \ + && docker-php-ext-install zip \ + && docker-php-ext-install ldap \ + && docker-php-ext-install ldap \ + && pecl install xdebug-3.3.0 \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && docker-php-ext-install soap + +RUN docker-php-ext-install -j$(nproc) gd + +# disable by default, it can be enabled locally +#COPY config/php/mods-available/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +COPY config/php/mods-available/opcache.ini /usr/local/etc/php/conf.d/opcache.ini +COPY config/php/opcache-blacklist /usr/local/etc/php/opcache-blacklist + +RUN git clone https://github.com/tideways/php-xhprof-extension.git tideways \ + && cd tideways \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/tideways.ini /usr/local/etc/php/conf.d/tideways.ini + +RUN git clone https://github.com/longxinH/xhprof.git xhprof \ + && cd xhprof/extension/ \ + && /usr/local/bin/phpize \ + && ./configure --with-php-config=/usr/local/bin/php-config \ + && make \ + && make install + +COPY config/php/mods-available/xhprof.ini /usr/local/etc/php/conf.d/xhprof.ini + +RUN curl -sS http://getcomposer.org/installer | php \ + && mv composer.phar /usr/local/bin/composer + +COPY apps/sugarcron /usr/local/bin/sugarcron +RUN chmod +x /usr/local/bin/sugarcron + +WORKDIR "/var/www/html/sugar" +USER sugar + +CMD ["/usr/local/bin/sugarcron"] diff --git a/images/php/83/cron/apps/sugarcron b/images/php/83/cron/apps/sugarcron new file mode 100644 index 000000000..ce24473ac --- /dev/null +++ b/images/php/83/cron/apps/sugarcron @@ -0,0 +1,25 @@ +#!/usr/local/bin/php +connect('sugar-redis', 6379); +$redis->set($ok, $ok); + +if ($redis->get($ok) == $ok) { + echo $ok; +} diff --git a/tests/web_tests/8.0/test_4.php b/tests/web_tests/8.0/test_4.php new file mode 100644 index 000000000..9ac401e21 --- /dev/null +++ b/tests/web_tests/8.0/test_4.php @@ -0,0 +1,20 @@ +connect_error) { + die('Connection failed: ' . $conn->connect_error); +} + +$sql = 'CREATE DATABASE dockertest'; +if ($conn->query($sql) === TRUE) { + $conn->select_db('dockertest'); + $sql = 'CREATE TABLE test ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL )'; + if ($conn->query($sql) === TRUE) { + echo $ok; + } + $sql = 'DROP DATABASE dockertest'; + $conn->query($sql); +} + +$conn->close(); diff --git a/tests/web_tests/8.0/test_5.php b/tests/web_tests/8.0/test_5.php new file mode 100644 index 000000000..0a080b086 --- /dev/null +++ b/tests/web_tests/8.0/test_5.php @@ -0,0 +1,59 @@ + 4.0, + 'headers' => array( + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ) + ) +); + +$error = true; + +$response = $client->get($url . '_stats'); +if ($response->getStatusCode() == 200) { + + $response = $client->put($url . 'testbucket'); + if ($response->getStatusCode() == 200) { + $response = $client->put( + $url . 'testbucket/user/enrico?refresh=true', + array ( + //'debug' => TRUE, + 'json' => array( + 'name' => 'Enrico Simonetti' + ) + ) + ); + if ($response->getStatusCode() == 201) { + $response = $client->get( + $url . 'testbucket/user/_search', + array( + //'debug' => TRUE, + 'query' => array( + 'q' => 'simonetti' + ) + ) + ); + $decoded = json_decode($response->getBody(), true); + if (!empty($decoded['hits']) + && $decoded['hits']['total']['value'] === 1 + && $decoded['hits']['hits']['0']['_id'] === 'enrico') { + // expected result found + $error = false; + } + } + + $response = $client->delete($url . 'testbucket'); + } +} + +if (!$error) { + echo $ok; +} diff --git a/tests/web_tests/8.2/composer.json b/tests/web_tests/8.2/composer.json new file mode 100644 index 000000000..b2a681338 --- /dev/null +++ b/tests/web_tests/8.2/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "guzzlehttp/guzzle": "6.5.6" + } +} diff --git a/tests/web_tests/8.2/test_1.php b/tests/web_tests/8.2/test_1.php new file mode 100644 index 000000000..3b5622980 --- /dev/null +++ b/tests/web_tests/8.2/test_1.php @@ -0,0 +1,2 @@ +connect('sugar-redis', 6379); +$redis->set($ok, $ok); + +if ($redis->get($ok) == $ok) { + echo $ok; +} diff --git a/tests/web_tests/8.2/test_4.php b/tests/web_tests/8.2/test_4.php new file mode 100644 index 000000000..9ac401e21 --- /dev/null +++ b/tests/web_tests/8.2/test_4.php @@ -0,0 +1,20 @@ +connect_error) { + die('Connection failed: ' . $conn->connect_error); +} + +$sql = 'CREATE DATABASE dockertest'; +if ($conn->query($sql) === TRUE) { + $conn->select_db('dockertest'); + $sql = 'CREATE TABLE test ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL )'; + if ($conn->query($sql) === TRUE) { + echo $ok; + } + $sql = 'DROP DATABASE dockertest'; + $conn->query($sql); +} + +$conn->close(); diff --git a/tests/web_tests/8.2/test_5.php b/tests/web_tests/8.2/test_5.php new file mode 100644 index 000000000..7f73a81d2 --- /dev/null +++ b/tests/web_tests/8.2/test_5.php @@ -0,0 +1,59 @@ + 4.0, + 'headers' => array( + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ) + ) +); + +$error = true; + +$response = $client->get($url . '_stats'); +if ($response->getStatusCode() == 200) { + + $response = $client->put($url . 'testbucket'); + if ($response->getStatusCode() == 200) { + $response = $client->put( + $url . 'testbucket/_doc/enrico?refresh=true', + array ( + //'debug' => TRUE, + 'json' => array( + 'name' => 'Enrico Simonetti' + ) + ) + ); + if ($response->getStatusCode() == 201) { + $response = $client->get( + $url . 'testbucket/_search', + array( + //'debug' => TRUE, + 'query' => array( + 'q' => 'simonetti' + ) + ) + ); + $decoded = json_decode($response->getBody(), true); + if (!empty($decoded['hits']) + && $decoded['hits']['total']['value'] === 1 + && $decoded['hits']['hits']['0']['_id'] === 'enrico') { + // expected result found + $error = false; + } + } + + $response = $client->delete($url . 'testbucket'); + } +} + +if (!$error) { + echo $ok; +} diff --git a/tests/web_tests/8.3/composer.json b/tests/web_tests/8.3/composer.json new file mode 100644 index 000000000..b2a681338 --- /dev/null +++ b/tests/web_tests/8.3/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "guzzlehttp/guzzle": "6.5.6" + } +} diff --git a/tests/web_tests/8.3/test_1.php b/tests/web_tests/8.3/test_1.php new file mode 100644 index 000000000..3b5622980 --- /dev/null +++ b/tests/web_tests/8.3/test_1.php @@ -0,0 +1,2 @@ +connect('sugar-redis', 6379); +$redis->set($ok, $ok); + +if ($redis->get($ok) == $ok) { + echo $ok; +} diff --git a/tests/web_tests/8.3/test_4.php b/tests/web_tests/8.3/test_4.php new file mode 100644 index 000000000..9ac401e21 --- /dev/null +++ b/tests/web_tests/8.3/test_4.php @@ -0,0 +1,20 @@ +connect_error) { + die('Connection failed: ' . $conn->connect_error); +} + +$sql = 'CREATE DATABASE dockertest'; +if ($conn->query($sql) === TRUE) { + $conn->select_db('dockertest'); + $sql = 'CREATE TABLE test ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL )'; + if ($conn->query($sql) === TRUE) { + echo $ok; + } + $sql = 'DROP DATABASE dockertest'; + $conn->query($sql); +} + +$conn->close(); diff --git a/tests/web_tests/8.3/test_5.php b/tests/web_tests/8.3/test_5.php new file mode 100644 index 000000000..7f73a81d2 --- /dev/null +++ b/tests/web_tests/8.3/test_5.php @@ -0,0 +1,59 @@ + 4.0, + 'headers' => array( + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ) + ) +); + +$error = true; + +$response = $client->get($url . '_stats'); +if ($response->getStatusCode() == 200) { + + $response = $client->put($url . 'testbucket'); + if ($response->getStatusCode() == 200) { + $response = $client->put( + $url . 'testbucket/_doc/enrico?refresh=true', + array ( + //'debug' => TRUE, + 'json' => array( + 'name' => 'Enrico Simonetti' + ) + ) + ); + if ($response->getStatusCode() == 201) { + $response = $client->get( + $url . 'testbucket/_search', + array( + //'debug' => TRUE, + 'query' => array( + 'q' => 'simonetti' + ) + ) + ); + $decoded = json_decode($response->getBody(), true); + if (!empty($decoded['hits']) + && $decoded['hits']['total']['value'] === 1 + && $decoded['hits']['hits']['0']['_id'] === 'enrico') { + // expected result found + $error = false; + } + } + + $response = $client->delete($url . 'testbucket'); + } +} + +if (!$error) { + echo $ok; +} diff --git a/utilities/build/build.sh b/utilities/build/build.sh index 44419eabf..852bfe66b 100755 --- a/utilities/build/build.sh +++ b/utilities/build/build.sh @@ -11,7 +11,7 @@ fi if [ -z $2 ] then - echo Provide as second parameter the version number \(e.g.: 9.0.1 or 9.2.0 or 9.3.0\) + echo Provide as second parameter the version number \(e.g.: 13.0.0 or 12.3.0 or 12.0.2\) exit 1 fi diff --git a/utilities/build/simpleRepair.php b/utilities/build/simpleRepair.php new file mode 100644 index 000000000..36a5e8f59 --- /dev/null +++ b/utilities/build/simpleRepair.php @@ -0,0 +1,29 @@ +getSystemUser(); + +echo("Running QRR...\n"); +$repair = new \RepairAndClear(); +$repair->repairAndClearAll(['clearAll'], [$mod_strings['LBL_ALL_MODULES']], false, false, ''); + +echo("Rebuilding cache...\n"); +\SugarAutoLoader::buildCache(); + +echo("Warming up Services...\n"); +$sd = new \ServiceDictionary(); +$sd->buildAllDictionaries(); + +echo("Done repairing...\n"); diff --git a/utilities/configs/config_override_dockerized.php b/utilities/configs/config_override_dockerized.php new file mode 100644 index 000000000..0012e9a6d --- /dev/null +++ b/utilities/configs/config_override_dockerized.php @@ -0,0 +1,17 @@ +$sugar_config['full_text_engine']['Elastic']['host'] = 'sugar-elasticsearch'; +$sugar_config['full_text_engine']['Elastic']['port'] = '9200'; +$sugar_config['full_text_engine']['Elastic']['curl'] = array(); +$sugar_config['dbconfig']['db_host_name'] = 'sugar-mysql'; +$sugar_config['dbconfig']['db_user_name'] = 'root'; +$sugar_config['dbconfig']['db_password'] = 'root'; +$sugar_config['dbconfig']['db_name'] = 'sugar'; +$sugar_config['dbconfig']['db_type'] = 'mysql'; +$sugar_config['dbconfig']['db_host_name'] = 'sugar-mysql'; +$sugar_config['db_manager'] = 'MysqliManager'; +$sugar_config['db'] = array(); +$sugar_config['external_cache']['redis']['host'] = 'sugar-redis'; +$sugar_config['external_cache']['redis']['port'] = '6379'; +$sugar_config['external_cache_disabled'] = 0; +$sugar_config['external_cache_disabled_redis'] = 0; +$sugar_config['host_name'] = 'docker.local'; +$sugar_config['site_url'] = 'http://docker.local/sugar'; diff --git a/utilities/installfromzip.sh b/utilities/installfromzip.sh index bcc8e1b95..72285781d 100755 --- a/utilities/installfromzip.sh +++ b/utilities/installfromzip.sh @@ -2,6 +2,11 @@ # Enrico Simonetti # enricosimonetti.com +if [ ! -x "$(command -v unzip)" ] +then + echo "The command unzip is not available, please install it" + exit 1 +fi if [ -z $1 ] then @@ -26,6 +31,7 @@ else exit 1 fi + echo "Cleaning up previous install (./data/app/sugar) if any, please wait..." # remove current sugar dir if [ -d './data/app/sugar' ] then diff --git a/utilities/restorefromfile.sh b/utilities/restorefromfile.sh new file mode 100755 index 000000000..00d4b4102 --- /dev/null +++ b/utilities/restorefromfile.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +# Rafael Fernandes +# sugarcrm.com + +if [ -z $1 ] +then + echo Provide the backup suffix as script parameters +else + # check if the stack is running + running=`docker ps | grep sugar-mysql | wc -l` + + if [ $running -gt 0 ] + then + # running + now="$(date)" + echo "Starting restore at $now" + + # enter the repo's root directory + REPO="$( dirname ${BASH_SOURCE[0]} )/../" + cd $REPO + + # locate the file + if [ ! -f $1 ] + then + echo $1 does not exist, please provide the tar.gz file path containing the backup to restore + exit 1 + fi + + # if it is our repo, and the source exists, and the destination does not + if [ -f '.gitignore' ] && [ -d 'data' ] + then + echo "Cleaning up previous install (./data/app/sugar) if any, please wait..." + if [ -d 'data/app/sugar' ] + then + rm -rf data/app/sugar + fi + TEMP_FOLDER=./data/app/tmp + if [ -d $TEMP_FOLDER ] + then + rm -rf $TEMP_FOLDER + fi + + mkdir -p "$TEMP_FOLDER/sql" + echo Decompressing $1, please wait... + tar -xf $1 -C $TEMP_FOLDER --strip-components=1 + for f in $TEMP_FOLDER/*.sql; do + mv "$f" "$TEMP_FOLDER/sql/" + done + for f in $TEMP_FOLDER/sugar*; do + mv "$f" $TEMP_FOLDER/sugar + done + + if [ ! -d $TEMP_FOLDER/sugar ] + then + echo \"$TEMP_FOLDER/sugar\" cannot be empty + exit 1 + fi + + if [ -d $TEMP_FOLDER/sql ] + then + find $TEMP_FOLDER/sql -type f -name 'sugar*' ! -name '*triggers*' -exec sh -c 'sql=${1:-:}; x="${2:-:}"; mv "$x" "$sql/sugar.sql"' bash "$TEMP_FOLDER/sql" {} +\; + find $TEMP_FOLDER/sql -type f -name '*triggers*' -exec sh -c 'sql=${1:-:}; x="{}"; mv "${2:-:}" "$sql/sugar_triggers.sql"' bash "$TEMP_FOLDER/sql" {} +\; + fi + + echo Restoring application files + SUGAR_TMP_DIR=`ls -d $TEMP_FOLDER/sugar*` + mv $SUGAR_TMP_DIR ./data/app/sugar + echo Application files restored + + echo Restoring database + docker exec -it sugar-mysql mysqladmin -h localhost -f -u root -proot drop sugar | grep -v "mysqladmin: \[Warning\]" + docker exec -it sugar-mysql mysqladmin -h localhost -u root -proot create sugar | grep -v "mysqladmin: \[Warning\]" + + if [ -f $TEMP_FOLDER/sql/sugar.sql.tgz ] + then + if hash tar 2>/dev/null; then + tar -zxf $TEMP_FOLDER/sql/sugar.sql.tgz + echo Database uncompressed to $TEMP_FOLDER/sql/sugar.sql + fi + fi + + if [ -f $TEMP_FOLDER/sql/sugar.sql ] + then + cat $TEMP_FOLDER/sql/sugar.sql | docker exec -i sugar-mysql mysql -h localhost -u root -proot sugar + if [ -f $TEMP_FOLDER/sql/sugar_triggers.sql ] + then + cat $TEMP_FOLDER/sql/sugar_triggers.sql | docker exec -i sugar-mysql mysql -h localhost -u root -proot sugar + fi + echo Database restored + else + echo Database not found! The selected restore is corrupted + exit 1 + fi + echo "Dockerizing Backup config files..." + sed -i.bak 's@RewriteBase /@RewriteBase /sugar@g' ./data/app/sugar/.htaccess + cat ./utilities/configs/config_override_dockerized.php >> ./data/app/sugar/config_override.php + + echo "Cleaning up please wait..." + if [ -d $TEMP_FOLDER ] + then + rm -rf $TEMP_FOLDER + fi + + # refresh all transient storages + ./utilities/build/refreshsystem.sh + + echo Repairing system + cp ./utilities/build/simpleRepair.php ./data/app/sugar + ./utilities/runcli.sh "php simpleRepair.php" + echo System repaired + + echo Performing Elasticsearch re-index + ./utilities/runcli.sh "./bin/sugarcrm search:silent_reindex --clearData" + echo Restore completed! + fi + now="$(date)" + echo "Restore finished at $now" + else + echo The stack is not running, please start the stack first + fi +fi diff --git a/utilities/stack.sh b/utilities/stack.sh index 350c80a56..d34e7b218 100755 --- a/utilities/stack.sh +++ b/utilities/stack.sh @@ -13,7 +13,7 @@ cd $REPO if [ -z $1 ] || [ -z $2 ] then - echo Provide two parameters. The sugar stack version keyword for \(eg: 80, 90\) and the action \(up, down\). The stacks keywords available can be found below: + echo Provide two parameters. The sugar stack version keyword for \(eg: 14, 13\) and the action \(up, down\). The stacks keywords available can be found below: for index in "${stacks[@]}" ; do KEY="${index%%::*}" echo $KEY diff --git a/utilities/stacks.conf b/utilities/stacks.conf index 9f0bce40e..a38ba963c 100644 --- a/utilities/stacks.conf +++ b/utilities/stacks.conf @@ -19,4 +19,8 @@ stacks=( '11-local::stacks/sugar11/php74-local-build.yml' '12::stacks/sugar12/php80.yml' '12-local::stacks/sugar12/php80-local-build.yml' + '13::stacks/sugar13/php82.yml' + '13-local::stacks/sugar13/php82-local-build.yml' + '14::stacks/sugar14/php83.yml' + '14-local::stacks/sugar14/php83-local-build.yml' ) diff --git a/utilities/sugardockerized/checkversion.sh b/utilities/sugardockerized/checkversion.sh index c5f90a074..6aa1311be 100755 --- a/utilities/sugardockerized/checkversion.sh +++ b/utilities/sugardockerized/checkversion.sh @@ -8,8 +8,7 @@ REPO="$( dirname ${BASH_SOURCE[0]} )/../../" cd $REPO VERSIONFILE=version -#VERSIONFILEURL=https://raw.githubusercontent.com/esimonetti/SugarDockerized/dev/version -VERSIONFILEURL=https://raw.githubusercontent.com/esimonetti/SugarDockerized/master/version +VERSIONFILEURL=https://raw.githubusercontent.com/sugarcrm-developers/SugarDockerized/master/version # if it is our repo if [ -f '.gitignore' ] && [ -d 'data' ] diff --git a/utilities/sugardockerized/install.sh b/utilities/sugardockerized/install.sh index b4e86f7a4..51d233467 100755 --- a/utilities/sugardockerized/install.sh +++ b/utilities/sugardockerized/install.sh @@ -3,7 +3,7 @@ # Enrico Simonetti # enricosimonetti.com -REPOURL=https://github.com/esimonetti/SugarDockerized.git +REPOURL=https://github.com/sugarcrm-developers/SugarDockerized.git INSTALLDIR='sugardocker' diff --git a/utilities/sugardockerized/selfupgrade.sh b/utilities/sugardockerized/selfupgrade.sh index 4ee11865a..92768e6cf 100755 --- a/utilities/sugardockerized/selfupgrade.sh +++ b/utilities/sugardockerized/selfupgrade.sh @@ -3,7 +3,7 @@ # Enrico Simonetti # enricosimonetti.com -REPOURL=https://github.com/esimonetti/SugarDockerized.git +REPOURL=https://github.com/sugarcrm-developers/SugarDockerized.git # enter the repo's root directory REPO="$( dirname ${BASH_SOURCE[0]} )/../../" diff --git a/utilities/xdebug.sh b/utilities/xdebug.sh index 44d431a31..0d4dffebd 100755 --- a/utilities/xdebug.sh +++ b/utilities/xdebug.sh @@ -32,11 +32,11 @@ xdebug_start () if [[ "$1" == "change-ip" ]]; then # Grab IP address of eth0 IP=$(getMyIP) - # Change IP address for parameter xdebug.remote_host - IP_CMD="sed -i 's/^xdebug.remote_host=.*/xdebug.remote_host=$IP/g' \ + # Change IP address for parameter xdebug.client_host + IP_CMD="sed -i 's/^xdebug.client_host=.*/xdebug.client_host=$IP/g' \ /usr/local/etc/php/conf.d/xdebug.ini" docker exec -it $PHP_CONTAINER bash -c "${IP_CMD}" - echo "New IP of remote_host: $IP" + echo "New IP of client_host: $IP" fi docker restart $PHP_CONTAINER diff --git a/version b/version index 08369aae5..cd5ac039d 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.51 +2.0