parent
5df22490ac
commit
5f8f23065e
18 changed files with 439 additions and 0 deletions
@ -0,0 +1,58 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
# Version to deploy |
||||||
|
bookstack_version: 0.31.8 |
||||||
|
# URL of the arhive |
||||||
|
bookstack_archive_url: https://github.com/BookStackApp/BookStack/archive/v{{ bookstack_version }}.tar.gz |
||||||
|
# Expected sha1 of the archive |
||||||
|
bookstack_archive_sha1: 0d6990a6c2b196f4e4ec2e4e06fb75ffba3c96ff |
||||||
|
|
||||||
|
# Should ansible handle bookstack upgrades or just the inintial install |
||||||
|
bookstack_manage_upgrade: True |
||||||
|
|
||||||
|
# We can deploy several bookstack instance on a single host |
||||||
|
# each one can have a different ID which can be a simple number |
||||||
|
# or a short string |
||||||
|
bookstack_id: 1 |
||||||
|
# Where to install bookstack |
||||||
|
bookstack_root_dir: /opt/bookstack_{{ bookstack_id }} |
||||||
|
# User under which the app will be executed |
||||||
|
bookstack_php_user: php-bookstack_{{ bookstack_id }} |
||||||
|
# Version of PHP used |
||||||
|
bookstack_php_version: 74 |
||||||
|
# Or you can specify here the name of a custom PHP FPM pool. See the httpd_php role |
||||||
|
# bookstack_php_fpm_pool: custom_bookstack |
||||||
|
|
||||||
|
# If defined, an alias will be added in httpd's config to access bookstack |
||||||
|
# Else, you'll have to defined a vhost to make bookstack accessible. See httpd_common role |
||||||
|
bookstack_web_alias: /bookstack_{{ bookstack_id }} |
||||||
|
|
||||||
|
# You can restrict access to bookstack. If not defined or empty, |
||||||
|
# no restriction will be made |
||||||
|
bookstack_src_ip: [] |
||||||
|
|
||||||
|
# MySQL Database |
||||||
|
bookstack_db_server: "{{ mysql_server | default('locaclhost') }}" |
||||||
|
bookstack_db_port: 3306 |
||||||
|
bookstack_db_user: bookstack_{{ bookstack_id }} |
||||||
|
bookstack_db_name: bookstack_{{ bookstack_id }} |
||||||
|
# If no pass is defined, a random one will be created and stored in meta/ansible_dbpass |
||||||
|
# bookstack_db_pass: S3cr3t. |
||||||
|
|
||||||
|
# Application key. If not defined, a random one will be generated and store in meta/ansible_app_key |
||||||
|
# bookstack_app_key: base64:H/zDPBqtK2BjOkgCrMMGGH+sSjOBrBs/ibcD4ozQc90= |
||||||
|
|
||||||
|
# Public URL of the app |
||||||
|
bookstack_public_url: http://{{ inventory_hostname }}/bookstack_{{ bookstack_id }} |
||||||
|
|
||||||
|
# Email settings. Default will use local postfix installation |
||||||
|
bookstack_email_name: BookStack |
||||||
|
bookstack_email_from: no-reply@{{ ansible_domain }} |
||||||
|
bookstack_email_server: localhost |
||||||
|
bookstack_email_port: 25 |
||||||
|
# You can set user and pass if needed |
||||||
|
# bookstack_email_user: user@example.org |
||||||
|
# bookstack_email_pass: S3cR3t. |
||||||
|
# Encryption can be tls, ssl or null |
||||||
|
bookstack_email_encryption: 'null' |
||||||
|
|
@ -0,0 +1,8 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
allow_duplicates: True |
||||||
|
dependencies: |
||||||
|
- role: mkdir |
||||||
|
- role: mysql_server |
||||||
|
when: bookstack_db_server in ['localhost','127.0.0.1'] |
||||||
|
- role: composer |
@ -0,0 +1,10 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Compress previous version |
||||||
|
command: tar cf {{ bookstack_root_dir }}/archives/{{ bookstack_current_version }}.tar.zst ./ --use-compress-program=zstd |
||||||
|
args: |
||||||
|
chdir: "{{ bookstack_root_dir }}/archives/{{ bookstack_current_version }}" |
||||||
|
warn: False |
||||||
|
environment: |
||||||
|
ZSTD_CLEVEL: 10 |
||||||
|
tags: bookstack |
@ -0,0 +1,31 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create the archive dir |
||||||
|
file: path={{ bookstack_root_dir }}/archives/{{ bookstack_current_version }} state=directory |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Archive current version |
||||||
|
synchronize: |
||||||
|
src: "{{ root_dir }}/app" |
||||||
|
dest: "{{ root_dir }}/archives/{{ version }}/" |
||||||
|
compress: False |
||||||
|
delete: True |
||||||
|
rsync_opts: |
||||||
|
- '--exclude=/storage/' |
||||||
|
delegate_to: "{{ inventory_hostname }}" |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Dump the database |
||||||
|
mysql_db: |
||||||
|
state: dump |
||||||
|
name: "{{ bookstack_db_name }}" |
||||||
|
target: "{{ bookstack_root_dir }}/archives/{{ current_version }}/{{ bookstack_db_name }}.sql.xz" |
||||||
|
login_host: "{{ bookstack_db_server }}" |
||||||
|
login_user: "{{ bookstack_db_user }}" |
||||||
|
login_password: "{{ bookstack_db_pass }}" |
||||||
|
quick: True |
||||||
|
single_transaction: True |
||||||
|
environment: |
||||||
|
XZ_OPT: -T0 |
||||||
|
tags: bookstack |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Remove tmp and obsolete files |
||||||
|
file: path={{ item }} state=absent |
||||||
|
loop: |
||||||
|
- "{{ bookstack_root_dir }}/archives/{{ bookstack_current_version }}" |
||||||
|
- "{{ bookstack_root_dir }}/tmp/BookStack-{{ bookstack_version }}" |
||||||
|
- "{{ bookstack_root_dir }}/tmp/BookStack-{{ bookstack_version }}.tar.gz" |
||||||
|
tags: bookstack |
@ -0,0 +1,43 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- import_tasks: ../includes/webapps_webconf.yml |
||||||
|
vars: |
||||||
|
- app_id: bookstack_{{ bookstack_id }} |
||||||
|
- php_version: "{{ bookstack_php_version }}" |
||||||
|
- php_fpm_pool: "{{ bookstack_php_fpm_pool | default('') }}" |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- when: bookstack_app_key is not defined |
||||||
|
block: |
||||||
|
- name: Generate a uniq application key |
||||||
|
shell: /bin/php{{ bookstack_php_version }} {{ bookstack_root_dir }}/app/artisan key:generate --show > {{ bookstack_root_dir }}/meta/ansible_app_key |
||||||
|
args: |
||||||
|
creates: "{{ bookstack_root_dir }}/meta/ansible_app_key" |
||||||
|
|
||||||
|
- name: Read application key |
||||||
|
slurp: src={{ bookstack_root_dir }}/meta/ansible_app_key |
||||||
|
register: bookstack_rand_app_key |
||||||
|
|
||||||
|
- set_fact: bookstack_app_key={{ bookstack_rand_app_key.content | b64decode | trim }} |
||||||
|
|
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Deploy BookStack configuration |
||||||
|
template: src=env.j2 dest={{ bookstack_root_dir }}/app/.env group={{ bookstack_php_user }} mode=640 |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Migrate the database |
||||||
|
shell: echo yes | /bin/php{{ bookstack_php_version }} artisan migrate |
||||||
|
args: |
||||||
|
chdir: "{{ bookstack_root_dir }}/app" |
||||||
|
become_user: "{{ bookstack_php_user }}" |
||||||
|
when: bookstack_install_mode != 'none' |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Deploy permission script |
||||||
|
template: src=perms.sh.j2 dest={{ bookstack_root_dir }}/perms.sh mode=755 |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Apply permissions |
||||||
|
command: "{{ bookstack_root_dir }}/perms.sh" |
||||||
|
tags: bookstack |
@ -0,0 +1,23 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create required directories |
||||||
|
file: path={{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} |
||||||
|
loop: |
||||||
|
- dir: "{{ bookstack_root_dir }}" |
||||||
|
- dir: "{{ bookstack_root_dir }}/meta" |
||||||
|
mode: 700 |
||||||
|
- dir: "{{ bookstack_root_dir }}/backup" |
||||||
|
mode: 700 |
||||||
|
- dir: "{{ bookstack_root_dir }}/archives" |
||||||
|
mode: 700 |
||||||
|
- dir: "{{ bookstack_root_dir }}/app" |
||||||
|
- dir: "{{ bookstack_root_dir }}/sessions" |
||||||
|
group: "{{ bookstack_php_user }}" |
||||||
|
mod: 770 |
||||||
|
- dir: "{{ bookstack_root_dir }}/tmp" |
||||||
|
group: "{{ bookstack_php_user }}" |
||||||
|
mod: 770 |
||||||
|
- dir: "{{ bookstack_root_dir }}/data" |
||||||
|
group: "{{ bookstack_php_user }}" |
||||||
|
mod: 700 |
||||||
|
tags: bookstack |
@ -0,0 +1,20 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
# Detect installed version (if any) |
||||||
|
- block: |
||||||
|
- import_tasks: ../includes/webapps_set_install_mode.yml |
||||||
|
vars: |
||||||
|
- root_dir: "{{ bookstack_root_dir }}" |
||||||
|
- version: "{{ bookstack_version }}" |
||||||
|
- set_fact: bookstack_install_mode={{ (install_mode == 'upgrade' and not bookstack_manage_upgrade) | ternary('none',install_mode) }} |
||||||
|
- set_fact: bookstack_current_version={{ current_version | default('') }} |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
# Create a random pass for the DB if needed |
||||||
|
- block: |
||||||
|
- import_tasks: ../includes/get_rand_pass.yml |
||||||
|
vars: |
||||||
|
- pass_file: "{{ bookstack_root_dir }}/meta/ansible_dbpass" |
||||||
|
- set_fact: bookstack_db_pass={{ rand_pass }} |
||||||
|
when: bookstack_db_pass is not defined |
||||||
|
tags: bookstack |
@ -0,0 +1,86 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Install needed tools |
||||||
|
package: |
||||||
|
name: |
||||||
|
- acl |
||||||
|
- tar |
||||||
|
- zstd |
||||||
|
- mariadb |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- when: bookstack_install_mode != 'none' |
||||||
|
block: |
||||||
|
- name: Download bookstack |
||||||
|
get_url: |
||||||
|
url: "{{ bookstack_archive_url }}" |
||||||
|
dest: "{{ bookstack_root_dir }}/tmp" |
||||||
|
checksum: sha1:{{ bookstack_archive_sha1 }} |
||||||
|
|
||||||
|
- name: Extract the archive |
||||||
|
unarchive: |
||||||
|
src: "{{ bookstack_root_dir }}/tmp/BookStack-{{ bookstack_version }}.tar.gz" |
||||||
|
dest: "{{ bookstack_root_dir }}/tmp" |
||||||
|
remote_src: True |
||||||
|
|
||||||
|
- name: Move BookStack to its final dir |
||||||
|
synchronize: |
||||||
|
src: "{{ bookstack_root_dir }}/tmp/BookStack-{{ bookstack_version }}/" |
||||||
|
dest: "{{ bookstack_root_dir }}/app/" |
||||||
|
delete: True |
||||||
|
compress: False |
||||||
|
rsync_opts: |
||||||
|
- '--exclude=/storage/' |
||||||
|
- '--exclude=/public/uploads/' |
||||||
|
delegate_to: "{{ inventory_hostname }}" |
||||||
|
|
||||||
|
- name: Populate data directories |
||||||
|
synchronize: |
||||||
|
src: "{{ bookstack_root_dir }}/tmp/BookStack-{{ bookstack_version }}/{{ item }}" |
||||||
|
dest: "{{ bookstack_root_dir }}/data/" |
||||||
|
compress: False |
||||||
|
delegate_to: "{{ inventory_hostname }}" |
||||||
|
loop: |
||||||
|
- storage |
||||||
|
- public/uploads |
||||||
|
|
||||||
|
- name: Link data directories |
||||||
|
file: src={{ item.src }} dest={{ item.dest }} state=link |
||||||
|
loop: |
||||||
|
- src: "{{ bookstack_root_dir }}/data/storage" |
||||||
|
dest: "{{ bookstack_root_dir }}/app/storage" |
||||||
|
- src: "{{ bookstack_root_dir }}/data/uploads" |
||||||
|
dest: "{{ bookstack_root_dir }}/app/public/uploads" |
||||||
|
|
||||||
|
- name: Install PHP libs with composer |
||||||
|
composer: |
||||||
|
command: install |
||||||
|
working_dir: "{{ bookstack_root_dir }}/app" |
||||||
|
executable: /bin/php{{ bookstack_php_version }} |
||||||
|
environment: |
||||||
|
php: /bin/php{{ bookstack_php_version }} |
||||||
|
|
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- import_tasks: ../includes/webapps_create_mysql_db.yml |
||||||
|
vars: |
||||||
|
- db_name: "{{ bookstack_db_name }}" |
||||||
|
- db_user: "{{ bookstack_db_user }}" |
||||||
|
- db_server: "{{ bookstack_db_server }}" |
||||||
|
- db_pass: "{{ bookstack_db_pass }}" |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Set correct SELinux context |
||||||
|
sefcontext: |
||||||
|
target: "{{ bookstack_root_dir }}(/.*)?" |
||||||
|
setype: httpd_sys_content_t |
||||||
|
state: present |
||||||
|
when: ansible_selinux.status == 'enabled' |
||||||
|
tags: bookstack |
||||||
|
|
||||||
|
- name: Install pre/post backup hooks |
||||||
|
template: src={{ item }}-backup.j2 dest=/etc/backup/{{ item }}.d/bookstack_{{ bookstack_id }} mode=700 |
||||||
|
loop: |
||||||
|
- pre |
||||||
|
- post |
||||||
|
tags: bookstack |
@ -0,0 +1,13 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- include: user.yml |
||||||
|
- include: directories.yml |
||||||
|
- include: facts.yml |
||||||
|
- include: archive_pre.yml |
||||||
|
when: bookstack_install_mode == 'upgrade' |
||||||
|
- include: install.yml |
||||||
|
- include: conf.yml |
||||||
|
- include: write_version.yml |
||||||
|
- include: archive_post.yml |
||||||
|
when: bookstack_install_mode == 'upgrade' |
||||||
|
- include: cleanup.yml |
@ -0,0 +1,5 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create user account |
||||||
|
user: name={{ bookstack_php_user }} system=True shell=/sbin/nologin home={{ bookstack_root_dir }} |
||||||
|
tags: bookstack |
@ -0,0 +1,5 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Write current version |
||||||
|
copy: content={{ bookstack_version }} dest={{ bookstack_root_dir }}/meta/ansible_version |
||||||
|
tags: bookstack |
@ -0,0 +1,20 @@ |
|||||||
|
APP_KEY={{ bookstack_app_key }} |
||||||
|
APP_URL={{ bookstack_public_url }} |
||||||
|
DB_HOST={{ bookstack_db_server }} |
||||||
|
DB_DATABASE={{ bookstack_db_name }} |
||||||
|
DB_USERNAME={{ bookstack_db_user }} |
||||||
|
DB_PASSWORD={{ bookstack_db_pass | quote }} |
||||||
|
MAIL_DRIVER=smtp |
||||||
|
MAIL_FROM_NAME="{{ bookstack_email_name }}" |
||||||
|
MAIL_FROM={{ bookstack_email_from }} |
||||||
|
MAIL_HOST={{ bookstack_email_server }} |
||||||
|
MAIL_PORT={{ bookstack_email_port }} |
||||||
|
{% if bookstack_email_user is defined and bookstack_email_pass is defined %} |
||||||
|
MAIL_USERNAME={{ bookstack_email_user }} |
||||||
|
MAIL_PASSWORD={{ bookstack_email_pass | quote }} |
||||||
|
{% endif %} |
||||||
|
MAIL_ENCRYPTION={{ bookstack_email_encryption }} |
||||||
|
APP_TIMEZONE={{ system_tz | default('UTC') }} |
||||||
|
SESSION_COOKIE_NAME=bookstack_{{ bookstack_id }}_session |
||||||
|
CACHE_PREFIX=bookstack_{{ bookstack_id }} |
||||||
|
#STORAGE_TYPE=local_secure |
@ -0,0 +1,39 @@ |
|||||||
|
{% if bookstack_web_alias is defined and bookstack_web_alias != False %} |
||||||
|
Alias /{{ bookstack_web_alias | regex_replace('^/','') }} {{ bookstack_root_dir }}/app/public |
||||||
|
{% else %} |
||||||
|
# No alias defined, create a vhost to access it |
||||||
|
{% endif %} |
||||||
|
|
||||||
|
<Directory {{ bookstack_root_dir }}/app/public> |
||||||
|
AllowOverride All |
||||||
|
Options FollowSymLinks |
||||||
|
{% if bookstack_src_ip is defined and bookstack_src_ip | length > 0 %} |
||||||
|
Require ip {{ bookstack_src_ip | join(' ') }} |
||||||
|
{% else %} |
||||||
|
Require all granted |
||||||
|
{% endif %} |
||||||
|
<FilesMatch \.php$> |
||||||
|
SetHandler "proxy:unix:/run/php-fpm/{{ bookstack_php_fpm_pool | default('bookstack_' + bookstack_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> |
@ -0,0 +1,19 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
restorecon -R {{ bookstack_root_dir }} |
||||||
|
chown root:root {{ bookstack_root_dir }} |
||||||
|
chmod 700 {{ bookstack_root_dir }} |
||||||
|
setfacl -k -b {{ bookstack_root_dir }} |
||||||
|
setfacl -m u:{{ bookstack_php_user | default('apache') }}:rx,u:{{ httpd_user | default('apache') }}:x {{ bookstack_root_dir }} |
||||||
|
find {{ bookstack_root_dir }}/app -type f -exec chmod 644 "{}" \; |
||||||
|
find {{ bookstack_root_dir }}/app -type d -exec chmod 755 "{}" \; |
||||||
|
chown root:{{ bookstack_php_user }} {{ bookstack_root_dir }}/app/.env |
||||||
|
chmod 640 {{ bookstack_root_dir }}/app/.env |
||||||
|
chown -R {{ bookstack_php_user }} {{ bookstack_root_dir }}/app/bootstrap/cache |
||||||
|
chmod 700 {{ bookstack_root_dir }}/app/bootstrap/cache |
||||||
|
chown -R {{ bookstack_php_user }} {{ bookstack_root_dir }}/data |
||||||
|
chmod 700 {{ bookstack_root_dir }}/data |
||||||
|
setfacl -m u:{{ httpd_user | default('apache') }}:rx {{ bookstack_root_dir }} {{ bookstack_root_dir }}/app/public |
||||||
|
setfacl -m u:{{ httpd_user | default('apache') }}:x {{ bookstack_root_dir }} {{ bookstack_root_dir }}/data/ |
||||||
|
setfacl -R -m u:{{ httpd_user | default('apache') }}:rx {{ bookstack_root_dir }} {{ bookstack_root_dir }}/data/uploads |
||||||
|
find {{ bookstack_root_dir }} -name .htaccess -exec chmod 644 "{}" \; |
@ -0,0 +1,35 @@ |
|||||||
|
[bookstack_{{ bookstack_id }}] |
||||||
|
|
||||||
|
listen.owner = root |
||||||
|
listen.group = apache |
||||||
|
listen.mode = 0660 |
||||||
|
listen = /run/php-fpm/bookstack_{{ bookstack_id }}.sock |
||||||
|
user = {{ bookstack_php_user }} |
||||||
|
group = {{ bookstack_php_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] = 256M |
||||||
|
php_admin_value[session.save_path] = {{ bookstack_root_dir }}/sessions |
||||||
|
php_admin_value[upload_tmp_dir] = {{ bookstack_root_dir }}/tmp |
||||||
|
php_admin_value[sys_temp_dir] = {{ bookstack_root_dir }}/tmp |
||||||
|
php_admin_value[post_max_size] = 100M |
||||||
|
php_admin_value[upload_max_filesize] = 100M |
||||||
|
php_admin_value[disable_functions] = system, show_source, symlink, exec, dl, shell_exec, passthru, phpinfo, escapeshellarg, escapeshellcmd |
||||||
|
php_admin_value[open_basedir] = {{ bookstack_root_dir }}:/usr/share/pear/:/usr/share/php/ |
||||||
|
php_admin_value[max_execution_time] = 60 |
||||||
|
php_admin_value[max_input_time] = 60 |
||||||
|
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 {{ bookstack_root_dir }}/backup/*.sql.zst |
@ -0,0 +1,12 @@ |
|||||||
|
#!/bin/bash -e |
||||||
|
|
||||||
|
/usr/bin/mysqldump \ |
||||||
|
{% if bookstack_db_server not in ['localhost','127.0.0.1'] %} |
||||||
|
--user={{ bookstack_db_user | quote }} \ |
||||||
|
--password={{ bookstack_db_pass | quote }} \ |
||||||
|
--host={{ bookstack_db_server | quote }} \ |
||||||
|
--port={{ bookstack_db_port | quote }} \ |
||||||
|
{% endif %} |
||||||
|
--quick --single-transaction \ |
||||||
|
--add-drop-table {{ bookstack_db_name | quote }} | zstd -c > {{ bookstack_root_dir }}/backup/{{ bookstack_db_name }}.sql.zst |
||||||
|
|
Loading…
Reference in new issue