parent
af50232021
commit
ca2f280d24
17 changed files with 424 additions and 0 deletions
@ -0,0 +1,36 @@ |
||||
--- |
||||
|
||||
# Version to deploy |
||||
pim_version: 5.0.43 |
||||
# User under which the PIM will run |
||||
pim_user: php-pim_{{ pim_id }} |
||||
# If you install several pim instance on the same host, you should change the ID for each of them |
||||
pim_id: 1 |
||||
# Root directory of the installation |
||||
pim_root_dir: /opt/pim_{{ pim_id }} |
||||
# Should anisble handle upgrades or just initial install |
||||
pim_manage_upgrade: True |
||||
|
||||
# PHP version to use |
||||
pim_php_version: 74 |
||||
|
||||
# Database settings |
||||
pim_db_server: "{{ mysql_server | default('localhost') }}" |
||||
pim_db_port: 3306 |
||||
pim_db_name: akeneopim_{{ pim_id }} |
||||
pim_db_user: akeneopim_{{ pim_id }} |
||||
# A random pass will be generated and stored in {{ pim_root_dir }}/meta/ansible_dbpass if not defined |
||||
# pim_db_pass: S3cr3t. |
||||
|
||||
# A secret used to sign cookies. A random one will be generated and stored in {{ pim_root_dir }}/meta/ansible_secret if not defined |
||||
# pim_secret: ChangeMe |
||||
|
||||
# Elasticsearch host |
||||
pim_es_server: localhost:9200 |
||||
|
||||
# Public URL used to reach AKeneo |
||||
pim_public_url: http://{{ inventory_hostname }}/pim_{{ pim_id }} |
||||
|
||||
# If defined, an alias will be added in httpd's config to access pim |
||||
# Else, you'll have to defined a vhost to make pim accessible. See httpd_common role |
||||
pim_web_alias: /pim_{{ pim_id }} |
@ -0,0 +1,12 @@ |
||||
--- |
||||
|
||||
allow_duplicates: True |
||||
dependencies: |
||||
- role: mkdir |
||||
- role: composer |
||||
- role: mysql_server |
||||
when: pim_db_server in ['localhost','127.0.0.1'] |
||||
- role: httpd_php |
||||
- role: nodejs |
||||
- role: elasticsearch |
||||
when: pim_es_server | regex_replace('(.*):\d+','\\1') in ['localhost','127.0.0.1'] |
@ -0,0 +1,28 @@ |
||||
--- |
||||
|
||||
- name: Create the archive dir |
||||
file: path={{ pim_root_dir }}/archives/{{ pim_current_version }} state=directory |
||||
tags: pim |
||||
|
||||
- name: Archive current version |
||||
synchronize: |
||||
src: "{{ pim_root_dir }}/app" |
||||
dest: "{{ pim_root_dir }}/archives/{{ pim_current_version }}/" |
||||
compress: False |
||||
delete: True |
||||
delegate_to: "{{ inventory_hostname }}" |
||||
tags: pim |
||||
|
||||
- name: Dump the database |
||||
mysql_db: |
||||
state: dump |
||||
name: "{{ pim_db_name }}" |
||||
target: "{{ pim_root_dir }}/archives/{{ pim_current_version }}/{{ pim_db_name }}.sql.xz" |
||||
login_host: "{{ pim_db_server }}" |
||||
login_user: "{{ pim_db_user }}" |
||||
login_password: "{{ pim_db_pass }}" |
||||
quick: True |
||||
single_transaction: True |
||||
environment: |
||||
XZ_OPT: -T0 |
||||
tags: pim |
@ -0,0 +1,32 @@ |
||||
--- |
||||
|
||||
- name: Deploy configuration |
||||
template: src=env.j2 dest={{ pim_root_dir }}/app/.env.local group={{ pim_user }} mode=640 |
||||
tags: pim |
||||
|
||||
- import_tasks: ../includes/webapps_webconf.yml |
||||
vars: |
||||
- app_id: pim_{{ pim_id }} |
||||
- php_version: "{{ pim_php_version }}" |
||||
- php_fpm_pool: "{{ pim_php_fpm_pool | default('') }}" |
||||
tags: pim |
||||
|
||||
- name: Build assets |
||||
command: scl enable php{{ pim_php_version }} -- make prod |
||||
args: |
||||
chdir: "{{ pim_root_dir }}/app" |
||||
environment: |
||||
NO_DOCKER: true |
||||
become_user: "{{ pim_user }}" |
||||
when: pim_install_mode != 'none' |
||||
tags: pim |
||||
|
||||
- name: Deploy permission script |
||||
template: src=perms.sh.j2 dest={{ pim_root_dir }}/perms.sh mode=755 |
||||
register: pim_perm_script |
||||
tags: pim |
||||
|
||||
- name: Apply permissions |
||||
command: "{{ pim_root_dir }}/perms.sh" |
||||
when: pim_perm_script.changed or pim_install_mode != 'none' |
||||
tags: pim |
@ -0,0 +1,26 @@ |
||||
--- |
||||
|
||||
- name: Create nedded directories |
||||
file: path={{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} |
||||
loop: |
||||
- dir: "{{ pim_root_dir }}/meta" |
||||
mode: 700 |
||||
- dir: "{{ pim_root_dir }}/archives" |
||||
mode: 700 |
||||
- dir: "{{ pim_root_dir }}/backup" |
||||
mode: 700 |
||||
- dir: "{{ pim_root_dir }}/data" |
||||
owner: "{{ pim_user }}" |
||||
mode: 700 |
||||
- dir: "{{ pim_root_dir }}/app" |
||||
owner: "{{ pim_user }}" |
||||
group: "{{ pim_user }}" |
||||
- dir: "{{ pim_root_dir }}/tmp" |
||||
owner: "{{ pim_user }}" |
||||
group: "{{ pim_user }}" |
||||
mode: 700 |
||||
- dir: "{{ pim_root_dir }}/sessions" |
||||
owner: "{{ pim_user }}" |
||||
group: "{{ pim_user }}" |
||||
mode: 700 |
||||
tags: pim |
@ -0,0 +1,29 @@ |
||||
--- |
||||
|
||||
# Detect installed version (if any) |
||||
- block: |
||||
- import_tasks: ../includes/webapps_set_install_mode.yml |
||||
vars: |
||||
- root_dir: "{{ pim_root_dir }}" |
||||
- version: "{{ pim_version }}" |
||||
- set_fact: pim_install_mode={{ (install_mode == 'upgrade' and not pim_manage_upgrade) | ternary('none',install_mode) }} |
||||
- set_fact: pim_current_version={{ current_version | default('') }} |
||||
tags: pim |
||||
|
||||
# Create a random pass for the DB if needed |
||||
- block: |
||||
- import_tasks: ../includes/get_rand_pass.yml |
||||
vars: |
||||
- pass_file: "{{ pim_root_dir }}/meta/ansible_dbpass" |
||||
- set_fact: pim_db_pass={{ rand_pass }} |
||||
when: pim_db_pass is not defined |
||||
tags: pim |
||||
|
||||
# Create a random secret if needed |
||||
- block: |
||||
- import_tasks: ../includes/get_rand_pass.yml |
||||
vars: |
||||
- pass_file: "{{ pim_root_dir }}/meta/ansible_secret" |
||||
- set_fact: pim_secret={{ rand_pass }} |
||||
when: pim_secret is not defined |
||||
tags: pim |
@ -0,0 +1,72 @@ |
||||
--- |
||||
|
||||
- name: Install needed tools |
||||
package: |
||||
name: |
||||
- make |
||||
tags: pim |
||||
|
||||
- when: pim_install_mode == 'upgrade' |
||||
block: |
||||
- name: Wipe install on upgrades |
||||
file: path={{ pim_root_dir }}/app state=absent |
||||
|
||||
- name: Create app subdir |
||||
file: path={{ pim_root_dir }}/app state=directory owner={{ pim_user }} group={{ pim_user }} |
||||
|
||||
tags: pim |
||||
|
||||
- when: pim_install_mode != 'none' |
||||
block: |
||||
- name: Deploy composer.json |
||||
template: src=composer.json.j2 dest={{ pim_root_dir }}/app/composer.json owner={{ pim_user }} |
||||
become_user: root |
||||
|
||||
- name: Install Akeneo with Composer |
||||
composer: |
||||
working_dir: "{{ pim_root_dir }}/app" |
||||
executable: /bin/php{{ pim_php_version }} |
||||
command: install |
||||
become_user: "{{ pim_user }}" |
||||
|
||||
- name: Install yarn globaly |
||||
npm: |
||||
name: yarn |
||||
path: "{{ pim_root_dir }}/app" |
||||
global: True |
||||
|
||||
- name: Install typescript globaly |
||||
npm: |
||||
name: typescript |
||||
path: "{{ pim_root_dir }}/app" |
||||
global: True |
||||
|
||||
tags: pim |
||||
|
||||
# the PIM makefile has /usr/local/bin/composer hardcoded |
||||
- name: Link composer in /usr/local/bin |
||||
file: src=/bin/composer dest=/usr/local/bin/composer state=link |
||||
tags: pim |
||||
|
||||
- import_tasks: ../includes/webapps_create_mysql_db.yml |
||||
vars: |
||||
- db_name: "{{ pim_db_name }}" |
||||
- db_user: "{{ pim_db_user }}" |
||||
- db_server: "{{ pim_db_server }}" |
||||
- db_pass: "{{ pim_db_pass }}" |
||||
tags: pim |
||||
|
||||
- name: Set correct SELinux context |
||||
sefcontext: |
||||
target: "{{ pim_root_dir }}(/.*)?" |
||||
setype: httpd_sys_content_t |
||||
state: present |
||||
when: ansible_selinux.status == 'enabled' |
||||
tags: pim |
||||
|
||||
- name: Install pre/post backup hooks |
||||
template: src={{ item }}-backup.j2 dest=/etc/backup/{{ item }}.d/pim_{{ pim_id }} mode=700 |
||||
loop: |
||||
- pre |
||||
- post |
||||
tags: pim |
@ -0,0 +1,10 @@ |
||||
--- |
||||
|
||||
- include: user.yml |
||||
- include: directories.yml |
||||
- include: facts.yml |
||||
- include: archive_pre.yml |
||||
when: pim_install_mode == 'upgrade' |
||||
- include: install.yml |
||||
- include: conf.yml |
||||
- include: write_version.yml |
@ -0,0 +1,9 @@ |
||||
--- |
||||
|
||||
- name: Create user |
||||
user: |
||||
name: "{{ pim_user }}" |
||||
system: True |
||||
home: "{{ pim_root_dir }}" |
||||
shell: /sbin/nologin |
||||
tags: pim |
@ -0,0 +1,5 @@ |
||||
--- |
||||
|
||||
- name: Write current installed version |
||||
copy: content={{ pim_version }} dest={{ pim_root_dir }}/meta/ansible_version |
||||
tags: pim |
@ -0,0 +1,44 @@ |
||||
{ |
||||
"name": "akeneo/pim-community-standard", |
||||
"description": "The \"Akeneo Community Standard Edition\" distribution", |
||||
"license": "OSL-3.0", |
||||
"type": "project", |
||||
"authors": [ |
||||
{ |
||||
"name": "Akeneo", |
||||
"homepage": "http://www.akeneo.com" |
||||
} |
||||
], |
||||
"autoload": { |
||||
"psr-0": { |
||||
"": "src/" |
||||
}, |
||||
"psr-4": { |
||||
"Pim\\Upgrade\\": "upgrades/" |
||||
}, |
||||
"exclude-from-classmap": [ |
||||
"vendor/akeneo/pim-community-dev/src/Kernel.php" |
||||
] |
||||
}, |
||||
"require": { |
||||
"akeneo/pim-community-dev": "^{{ pim_version }}" |
||||
}, |
||||
"require-dev": { |
||||
"doctrine/doctrine-migrations-bundle": "1.3.2", |
||||
"symfony/debug-bundle": "^4.4.7", |
||||
"symfony/web-profiler-bundle": "^4.4.7", |
||||
"symfony/web-server-bundle": "^4.4.7" |
||||
}, |
||||
"scripts": { |
||||
"post-update-cmd": [ |
||||
"bash vendor/akeneo/pim-community-dev/std-build/install-required-files.sh" |
||||
], |
||||
"post-install-cmd": [ |
||||
"bash vendor/akeneo/pim-community-dev/std-build/install-required-files.sh" |
||||
], |
||||
"post-create-project-cmd": [ |
||||
"bash vendor/akeneo/pim-community-dev/std-build/install-required-files.sh" |
||||
] |
||||
}, |
||||
"minimum-stability": "stable" |
||||
} |
@ -0,0 +1,17 @@ |
||||
APP_ENV=prod |
||||
APP_DEBUG=0 |
||||
APP_DATABASE_HOST={{ pim_db_server }} |
||||
APP_DATABASE_PORT={{ pim_db_port }} |
||||
APP_DATABASE_NAME={{ pim_db_name }} |
||||
APP_DATABASE_USER={{ pim_db_user }} |
||||
APP_DATABASE_PASSWORD={{ pim_db_pass | quote }} |
||||
APP_DEFAULT_LOCALE=en |
||||
APP_SECRET={{ pim_secret | quote }} |
||||
APP_INDEX_HOSTS={{ pim_es_server }} |
||||
APP_PRODUCT_AND_PRODUCT_MODEL_INDEX_NAME=akeneo_pim_product_and_product_model |
||||
APP_CONNECTION_ERROR_INDEX_NAME=akeneo_connectivity_connection_error |
||||
MAILER_URL=null://localhost&sender_address=no-reply@{{ ansible_domain }} |
||||
AKENEO_PIM_URL={{ pim_public_url }} |
||||
LOGGING_LEVEL=NOTICE |
||||
APP_EVENTS_API_DEBUG_INDEX_NAME=akeneo_connectivity_connection_events_api_debug |
||||
APP_PRODUCT_AND_PRODUCT_MODEL_INDEX_NAME=akeneo_pim_product_and_product_model |
@ -0,0 +1,43 @@ |
||||
{% if pim_web_alias is defined and pim_web_alias != False %} |
||||
Alias /{{ pim_web_alias | regex_replace('^/','') }} {{ pim_root_dir }}/app/public |
||||
{% else %} |
||||
# No alias defined, create a vhost to access it |
||||
{% endif %} |
||||
|
||||
<Directory {{ pim_root_dir }}/app/public> |
||||
AllowOverride All |
||||
Options FollowSymLinks |
||||
{% if pim_src_ip is defined and pim_src_ip | length > 0 %} |
||||
Require ip {{ pim_src_ip | join(' ') }} |
||||
{% else %} |
||||
Require all granted |
||||
{% endif %} |
||||
<FilesMatch \.php$> |
||||
SetHandler "proxy:unix:/run/php-fpm/{{ pim_php_fpm_pool | default('pim_' + pim_id | string) }}.sock|fcgi://localhost" |
||||
</FilesMatch> |
||||
|
||||
RewriteEngine On |
||||
|
||||
# Handle Authorization Header |
||||
RewriteCond %{HTTP:Authorization} . |
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] |
||||
|
||||
# Redirect Trailing Slashes If Not A Folder... |
||||
RewriteCond %{REQUEST_FILENAME} !-d |
||||
RewriteCond %{REQUEST_URI} (.+)/$ |
||||
RewriteRule ^ %1 [L,R=301] |
||||
|
||||
# Send Requests To Front Controller... |
||||
RewriteCond %{REQUEST_FILENAME} !-d |
||||
RewriteCond %{REQUEST_FILENAME} !-f |
||||
RewriteRule ^ index.php [L] |
||||
|
||||
<FilesMatch "(\.git.*)"> |
||||
Require all denied |
||||
</FilesMatch> |
||||
|
||||
</Directory> |
||||
|
||||
<Directory {{ pim_root_dir }}/app/public/bundles> |
||||
RewriteEngine Off |
||||
</Directory> |
@ -0,0 +1,11 @@ |
||||
#!/bin/bash |
||||
|
||||
restorecon -R {{ pim_root_dir }} |
||||
chown root:root {{ pim_root_dir }} |
||||
chmod 700 {{ pim_root_dir }} |
||||
setfacl -R -k -b {{ pim_root_dir }} |
||||
setfacl -m u:{{ pim_user | default('apache') }}:rx,u:{{ httpd_user | default('apache') }}:x {{ pim_root_dir }} |
||||
find {{ pim_root_dir }}/app -type f -exec chmod 644 "{}" \; |
||||
find {{ pim_root_dir }}/app -type d -exec chmod 755 "{}" \; |
||||
chown -R {{ pim_user }}:{{ pim_user }} {{ pim_root_dir }}/app |
||||
|
@ -0,0 +1,35 @@ |
||||
[pim_{{ pim_id }}] |
||||
|
||||
listen.owner = root |
||||
listen.group = apache |
||||
listen.mode = 0660 |
||||
listen = /run/php-fpm/pim_{{ pim_id }}.sock |
||||
user = {{ pim_user }} |
||||
group = {{ pim_user }} |
||||
catch_workers_output = yes |
||||
|
||||
pm = dynamic |
||||
pm.max_children = 15 |
||||
pm.start_servers = 3 |
||||
pm.min_spare_servers = 3 |
||||
pm.max_spare_servers = 6 |
||||
pm.max_requests = 5000 |
||||
request_terminate_timeout = 5m |
||||
|
||||
php_flag[display_errors] = off |
||||
php_admin_flag[log_errors] = on |
||||
php_admin_value[error_log] = syslog |
||||
php_admin_value[memory_limit] = 1024M |
||||
php_admin_value[session.save_path] = {{ pim_root_dir }}/sessions |
||||
php_admin_value[upload_tmp_dir] = {{ pim_root_dir }}/tmp |
||||
php_admin_value[sys_temp_dir] = {{ pim_root_dir }}/tmp |
||||
php_admin_value[post_max_size] = 200M |
||||
php_admin_value[upload_max_filesize] = 200M |
||||
php_admin_value[disable_functions] = system, show_source, symlink, exec, dl, shell_exec, passthru, phpinfo, escapeshellarg, escapeshellcmd |
||||
php_admin_value[open_basedir] = {{ pim_root_dir }}:/usr/share/pear/:/usr/share/php/ |
||||
php_admin_value[max_execution_time] = 1200 |
||||
php_admin_value[max_input_time] = 1200 |
||||
php_admin_flag[allow_url_include] = off |
||||
php_admin_flag[allow_url_fopen] = off |
||||
php_admin_flag[file_uploads] = on |
||||
php_admin_flag[session.cookie_httponly] = on |
@ -0,0 +1,3 @@ |
||||
#!/bin/bash -e |
||||
|
||||
rm -f {{ pim_root_dir }}/backup/*.sql.zst |
@ -0,0 +1,12 @@ |
||||
#!/bin/bash -e |
||||
|
||||
/usr/bin/mysqldump \ |
||||
{% if pim_db_server not in ['localhost','127.0.0.1'] %} |
||||
--user={{ pim_db_user | quote }} \ |
||||
--password={{ pim_db_pass | quote }} \ |
||||
--host={{ pim_db_server | quote }} \ |
||||
--port={{ pim_db_port | quote }} \ |
||||
{% endif %} |
||||
--quick --single-transaction \ |
||||
--add-drop-table {{ pim_db_name | quote }} | zstd -c > {{ pim_root_dir }}/backup/{{ pim_db_name }}.sql.zst |
||||
|
Loading…
Reference in new issue