Initial docker-compse based configuration.

feature/dockerized-app
Ruslan Baidan 2022-10-28 13:24:03 +02:00
parent 89e9de4a15
commit ee906b8e61
No known key found for this signature in database
GPG Key ID: 4B7724C136BF1D89
12 changed files with 1979 additions and 1 deletions

21
.docker/apache/Dockerfile Normal file
View File

@ -0,0 +1,21 @@
FROM debian:stretch
ENV HTTPD_PREFIX /usr/local/apache2
ENV PATH $HTTPD_PREFIX/bin:$PATH
RUN mkdir -p "$HTTPD_PREFIX" \
&& chown www-data:www-data "$HTTPD_PREFIX"
WORKDIR $HTTPD_PREFIX
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
apache2 curl \
&& rm -r /var/lib/apt/lists/*
RUN a2enmod proxy_fcgi ssl rewrite proxy proxy_balancer proxy_http proxy_ajp
RUN sed -i '/Global configuration/a \
ServerName localhost \
' /etc/apache2/apache2.conf
EXPOSE 80 443
RUN rm -f /run/apache2/apache2.pid
CMD apachectl -DFOREGROUND -e info

View File

@ -0,0 +1,26 @@
<VirtualHost *:80>
ServerName monarc.local
DocumentRoot /home/www/monarc/public
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log Combined
<FilesMatch .php$>
SetHandler "proxy:fcgi://monarc_php:9000"
</FilesMatch>
<Directory /home/www/monarc/public>
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
<IfModule mod_headers.c>
Header always set X-Content-Type-Options nosniff
Header always set X-XSS-Protection '1; mode=block'
Header always set X-Robots-Tag none
Header always set X-Frame-Options SAMEORIGIN
</IfModule>
SetEnv APP_ENV dev
SetEnv APP_DIR /home/www/monarc
</VirtualHost>

View File

@ -0,0 +1,10 @@
-- create databases
CREATE DATABASE IF NOT EXISTS `monarc_cli`;
CREATE DATABASE IF NOT EXISTS `monarc_common`;
-- create root user and grant rights
CREATE USER 'root'@'localhost' IDENTIFIED BY 'local';
GRANT ALL ON *.* TO 'root'@'%';
CREATE USER 'sqlmonarcuser'@'%' IDENTIFIED BY 'sqlmonarcuser';
GRANT ALL PRIVILEGES ON * . * TO 'sqlmonarcuser'@'%';
FLUSH PRIVILEGES;

53
.docker/php/Dockerfile Normal file
View File

@ -0,0 +1,53 @@
FROM php:7.4-fpm-alpine
# Set user to root
USER root
# Set working directory
WORKDIR /var/www/html
# Install Additional dependencies
RUN apk update && apk add --no-cache \
build-base shadow vim curl zlib libzip-dev \
libpng-dev libjpeg-turbo-dev libwebp-dev libxpm-dev zlib-dev \
openssl-dev oniguruma-dev \
icu-dev bzip2-dev freetype freetype-dev \
php \
php-cli \
php-gd \
php-pdo \
php-pdo_mysql \
php-mysqli \
php-curl \
php-intl \
php-json \
php-mbstring \
php-pear \
php-xml \
php-phar \
php-zip
RUN docker-php-source extract \
pecl install xdebug-3.1.5
RUN apk add git
RUN apk add --update nodejs npm
COPY php.ini /etc/php/7.4/php.ini
COPY php-fpm-pool.conf /etc/php/7.4/pool.d/www.conf
RUN mkdir -p docker/php/conf.d
COPY xdebug.ini docker/php/conf.d/xdebug.ini
COPY error_reporting.ini docker/php/conf.d/error_reporting.ini
RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
mv composer.phar /usr/local/bin/composer
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /home/www/monarc
# RUN ["chmod", "+x", ".docker/php/install-app.sh"]
EXPOSE 9000
CMD ["php-fpm"]

View File

@ -0,0 +1,2 @@
error_reporting=E_ALL
display_errors=1

View File

@ -0,0 +1,22 @@
if [ ! -d "../../module" ]; then
mkdir -p ../../module/Monarc
cd ../../module/Monarc
ln -sfn ./../../../../vendor/monarc/core Core
ln -sfn ./../../../../vendor/monarc/frontoffice FrontOffice
cd .
fi
if [ ! -d "../../node_modules" ]; then
mkdir -p ../../node_modules
cd ../../node_modules
git clone --config core.fileMode=false https://github.com/monarc-project/ng-client.git ng_client
git clone --config core.fileMode=false https://github.com/monarc-project/ng-anr.git ng_anr
cd ng_client
npm ci
cd .
fi
if [ ! -f "../../config/autoload/local.php" ]; then
cp ./local.php ../../config/autoload/
fi

54
.docker/php/local.php Normal file
View File

@ -0,0 +1,54 @@
<?php
$appdir = getenv('APP_DIR') ?: '/home/vagrant/monarc';
$string = file_get_contents($appdir.'/package.json');
if (!$string) {
$string = file_get_contents('./package.json');
}
$package_json = json_decode($string, true);
return [
'doctrine' => [
'connection' => [
'orm_default' => [
'params' => [
'host' => 'monarc_mariadb',
'user' => 'sqlmonarcuser',
'password' => 'sqlmonarcuser',
'dbname' => 'monarc_common',
],
],
'orm_cli' => [
'params' => [
'host' => 'monarc_mariadb',
'user' => 'sqlmonarcuser',
'password' => 'sqlmonarcuser',
'dbname' => 'monarc_cli',
],
],
],
],
'activeLanguages' => array('fr','en','de','nl','es','ro','it','ja','pl','pt','ru','zh'),
'appVersion' => $package_json['version'],
'checkVersion' => false,
'appCheckingURL' => 'https://version.monarc.lu/check/MONARC',
'email' => [
'name' => 'MONARC',
'from' => 'info@monarc.lu',
],
'mospApiUrl' => 'https://objects.monarc.lu/api/',
'monarc' => [
'ttl' => 60, // timeout
'salt' => '', // private salt for password encryption
],
'statsApi' => [
'baseUrl' => '',
'apiKey' => '',
],
];

View File

@ -0,0 +1,53 @@
; Start a new pool named 'www'.
; the variable $pool can we used in any directive and will be replaced by the
; pool name ('www' here)
[www]
; Unix user/group of processes
user = www-data
group = www-data
; The address on which to accept FastCGI requests.
listen = 0.0.0.0:9000
; Set listen(2) backlog.
listen.backlog = 1023
; Choose how the process manager will control the number of child processes.
pm = dynamic
; The number of child processes to be created when pm is set to 'static' and the
pm.max_children = 8
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 2
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 1
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 3
pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping
; The timeout for serving a single request after which the worker process will be killed.
request_terminate_timeout = 5m
; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot
chdir = /
; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms).
; Default Value: no
catch_workers_output = yes

1681
.docker/php/php.ini Normal file

File diff suppressed because it is too large Load Diff

9
.docker/php/xdebug.ini Normal file
View File

@ -0,0 +1,9 @@
zend_extension=xdebug
[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=monarc.local
xdebug.start_with_request=yes
#xdebug.remote_enable=1
#xdebug.remote_connect_back=1

47
docker-compose.yml Normal file
View File

@ -0,0 +1,47 @@
version: '3'
services:
apache:
build: .docker/apache
container_name: monarc_apache
ports:
- 8080:80
volumes:
- .docker/apache/sites-enabled:/etc/apache2/sites-enabled
- .:/home/www/monarc
depends_on:
- php
mariadb:
image: mariadb
restart: always
container_name: monarc_mariadb
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- .docker/mariaDb/data/db:/var/lib/mysql
- .docker/mariaDb/init:/docker-entrypoint-initdb.d
ports:
- 3312:3306
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_USER: sqlmonarcuser
MARIADB_PASSWORD: sqlmonarcuser
php:
build: .docker/php
container_name: monarc_php
volumes:
- .:/home/www/monarc
# TODO: make it work -> command: sh -c "./.docker/php/install-app.sh && ./scripts/update-all.sh"
environment:
- maildev_host=monarc_maildev
depends_on:
- maildev
- mariadb
maildev:
image: djfarrelly/maildev
container_name: monarc_maildev
ports:
- 8001:80

View File

@ -302,7 +302,7 @@ cat > config/autoload/local.php <<EOF
<?php <?php
\$appdir = getenv('APP_DIR') ? getenv('APP_DIR') : '$PATH_TO_MONARC'; \$appdir = getenv('APP_DIR') ? getenv('APP_DIR') : '$PATH_TO_MONARC';
\$string = file_get_contents(\$appdir.'/package.json'); \$string = file_get_contents(\$appdir.'/package.json');
if(\$string === FALSE) { if (\$string === false) {
\$string = file_get_contents('./package.json'); \$string = file_get_contents('./package.json');
} }
\$package_json = json_decode(\$string, true); \$package_json = json_decode(\$string, true);