You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
9.0 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #!/bin/bash
  2. set -eu pipefail
  3. export LANG="C.UTF-8"
  4. export ODOO_RC="/app/data/odoo.conf"
  5. pg_cli() {
  6. PGPASSWORD=$CLOUDRON_POSTGRESQL_PASSWORD psql \
  7. -h $CLOUDRON_POSTGRESQL_HOST \
  8. -p $CLOUDRON_POSTGRESQL_PORT \
  9. -U $CLOUDRON_POSTGRESQL_USERNAME \
  10. -d $CLOUDRON_POSTGRESQL_DATABASE -c "$1"
  11. }
  12. # Create required directories if they don't exist
  13. mkdir -p /app/data/extra-addons /app/data/odoo /run/odoo /run/nginx
  14. chown -R cloudron:cloudron /run
  15. # Check for First Run
  16. if [[ ! -f /app/data/odoo.conf ]]; then
  17. echo "First run. Initializing DB..."
  18. # Initialize the database, and exit.
  19. /usr/local/bin/gosu cloudron:cloudron /app/code/odoo/odoo-bin -i base,auth_ldap,fetchmail --without-demo all --data-dir /app/data/odoo --logfile /run/odoo/runtime.log -d $CLOUDRON_POSTGRESQL_DATABASE --db_host $CLOUDRON_POSTGRESQL_HOST --db_port $CLOUDRON_POSTGRESQL_PORT --db_user $CLOUDRON_POSTGRESQL_USERNAME --db_pass $CLOUDRON_POSTGRESQL_PASSWORD --stop-after-init
  20. echo "Initialized successfully."
  21. # echo "Adding required tables/relations for mail settings."
  22. # pg_cli "INSERT INTO public.res_config_settings (create_uid, create_date, write_uid, write_date, company_id, user_default_rights, external_email_server_default, module_base_import, module_google_calendar, module_microsoft_calendar, module_google_drive, module_google_spreadsheet, module_auth_oauth, module_auth_ldap, module_base_gengo, module_account_inter_company_rules, module_pad, module_voip, module_web_unsplash, module_partner_autocomplete, module_base_geolocalize, module_google_recaptcha, group_multi_currency, show_effect, module_product_images, unsplash_access_key, fail_counter, alias_domain, restrict_template_rendering, use_twilio_rtc_servers, twilio_account_sid, twilio_account_token, auth_signup_reset_password, auth_signup_uninvited, auth_signup_template_user_id) VALUES (2, 'NOW()', 2, 'NOW()', 1, false, true, true, false, false, false, false, false, true, false, false, false, false, true, true, false, false, false, true, false, NULL, 0, '$CLOUDRON_APP_DOMAIN', false, false, NULL, NULL, false, 'b2b', 5) ON CONFLICT (id) DO NOTHING;"
  23. pg_cli "INSERT INTO public.ir_config_parameter (key, value, create_uid, create_date, write_uid, write_date) VALUES ('base_setup.default_external_email_server', 'True', 2, 'NOW()', 2, 'NOW()');"
  24. pg_cli "INSERT INTO public.ir_config_parameter (key, value, create_uid, create_date, write_uid, write_date) VALUES ('mail.catchall.domain', '$CLOUDRON_APP_DOMAIN', 2, 'NOW()', 2, 'NOW()');"
  25. echo "Disabling public sign-up..."
  26. pg_cli "UPDATE public.ir_config_parameter SET value='b2b' WHERE key='auth_signup.invitation_scope';"
  27. echo "Copying default configuration file to /app/data/odoo.conf..."
  28. cp /app/pkg/odoo.conf.sample /app/data/odoo.conf
  29. crudini --set /app/data/odoo.conf 'options' list_db "False"
  30. crudini --set /app/data/odoo.conf 'options' admin_password "$CLOUDRON_MAIL_SMTP_PASSWORD"
  31. echo "First run complete."
  32. fi
  33. # These values should be re-set to make Odoo work as expcected.
  34. echo "Ensuring proper [options] in /app/data/odoo.conf ..."
  35. /usr/local/bin/gosu cloudron:cloudron /app/code/odoo/odoo-bin -i auth_ldap,fetchmail -d $CLOUDRON_POSTGRESQL_DATABASE -c /app/data/odoo.conf --without-demo all --stop-after-init
  36. # Check if asking update
  37. if [[ -f /app/data/update ]]; then
  38. /usr/local/bin/gosu cloudron:cloudron /app/code/odoo/odoo-bin -u all -d $CLOUDRON_POSTGRESQL_DATABASE -c /app/data/odoo.conf --without-demo all --stop-after-init
  39. fi
  40. # Custom paths
  41. crudini --set /app/data/odoo.conf 'options' addons_path "/app/data/extra-addons,/app/code/auto/addons,/app/code/odoo/addons"
  42. crudini --set /app/data/odoo.conf 'options' data_dir "/app/data/odoo"
  43. # Logging
  44. crudini --set /app/data/odoo.conf 'options' logfile "/run/logs/odoo.log"
  45. crudini --set /app/data/odoo.conf 'options' logrotate 'False'
  46. crudini --set /app/data/odoo.conf 'options' log_db 'False'
  47. crudini --set /app/data/odoo.conf 'options' syslog 'False'
  48. # Http Server
  49. crudini --set /app/data/odoo.conf 'options' proxy_mode "True"
  50. crudini --set /app/data/odoo.conf 'options' secure 'False'
  51. crudini --set /app/data/odoo.conf 'options' interface '127.0.0.1'
  52. crudini --set /app/data/odoo.conf 'options' port '8069'
  53. crudini --set /app/data/odoo.conf 'options' longpolling_port '8072'
  54. # Securing Odoo
  55. crudini --set /app/data/odoo.conf 'options' test_enable "False"
  56. crudini --set /app/data/odoo.conf 'options' test_file "False"
  57. crudini --set /app/data/odoo.conf 'options' test_report_directory "False"
  58. crudini --set /app/data/odoo.conf 'options' without_demo "all"
  59. crudini --set /app/data/odoo.conf 'options' debug_mode "False"
  60. #TODO Disable debug mode
  61. # DB
  62. crudini --set /app/data/odoo.conf 'options' db_host "$CLOUDRON_POSTGRESQL_HOST"
  63. crudini --set /app/data/odoo.conf 'options' db_port "$CLOUDRON_POSTGRESQL_PORT"
  64. crudini --set /app/data/odoo.conf 'options' db_user "$CLOUDRON_POSTGRESQL_USERNAME"
  65. crudini --set /app/data/odoo.conf 'options' db_password "$CLOUDRON_POSTGRESQL_PASSWORD"
  66. crudini --set /app/data/odoo.conf 'options' db_name "$CLOUDRON_POSTGRESQL_DATABASE"
  67. crudini --set /app/data/odoo.conf 'options' db_filter "^$CLOUDRON_POSTGRESQL_DATABASE.*$"
  68. crudini --set /app/data/odoo.conf 'options' db_sslmode 'False'
  69. # IMAP Configuration
  70. if [[ -z "${CLOUDRON_MAIL_IMAP_SERVER+x}" ]]; then
  71. echo "IMAP is disabled. Removing values from config."
  72. pg_cli "UPDATE public.fetchmail_server SET active='f' WHERE name LIKE 'Cloudron%';"
  73. else
  74. echo "IMAP is enabled. Adding values to config."
  75. pg_cli "INSERT INTO public.fetchmail_server (id, name, active, state, server, port, server_type, is_ssl, attach, original, date, \"user\", password, object_id, priority, configuration, script, create_uid, create_date, write_uid, write_date) VALUES (1, 'Cloudron IMAP Service', true, 'done', '$CLOUDRON_MAIL_IMAP_SERVER', $CLOUDRON_MAIL_IMAP_PORT, 'imap', false, true, false, NULL, '$CLOUDRON_MAIL_IMAP_USERNAME', '$CLOUDRON_MAIL_IMAP_PASSWORD', 151, 5, NULL, '/mail/static/scripts/odoo-mailgate.py', 2, 'NOW()', 2, 'NOW()') ON CONFLICT (id) DO NOTHING;"
  76. fi
  77. # SMTP Configuration
  78. if [[ -z "${CLOUDRON_MAIL_SMTP_SERVER+x}" ]]; then
  79. echo "SMTP is disabled. Removing values from config."
  80. pg_cli "UPDATE public.ir_mail_server SET active='f' WHERE name LIKE 'Cloudron%';"
  81. else
  82. echo "SMTP is enabled. Adding values to config."
  83. pg_cli "INSERT INTO public.ir_mail_server (id, name, smtp_host, smtp_port, smtp_user, smtp_pass, smtp_encryption, smtp_debug, sequence, active, create_uid, create_date, write_uid, write_date) VALUES (1, 'Cloudron SMTP Service', '$CLOUDRON_MAIL_SMTP_SERVER', $CLOUDRON_MAIL_SMTP_PORT, '$CLOUDRON_MAIL_SMTP_USERNAME', '$CLOUDRON_MAIL_SMTP_PASSWORD', 'none', false, 10, true, 2, 'NOW()', 2, 'NOW()') ON CONFLICT (id) DO NOTHING;"
  84. fi
  85. # LDAP Configuration
  86. if [[ -z "${CLOUDRON_LDAP_SERVER+x}" ]]; then
  87. echo "LDAP is disabled. Removing values from config."
  88. pg_cli "DELETE FROM public.res_company_ldap WHERE id = 1 AND company = 1"
  89. else
  90. echo "LDAP is enabled. Adding values to config."
  91. pg_cli "INSERT INTO public.res_company_ldap (id, sequence, company, ldap_server, ldap_server_port, ldap_binddn, ldap_password, ldap_filter, ldap_base, \"user\", create_user, ldap_tls, create_uid, create_date, write_uid, write_date) VALUES (1, 10, 1, '$CLOUDRON_LDAP_SERVER', $CLOUDRON_LDAP_PORT, '$CLOUDRON_LDAP_BIND_DN', '$CLOUDRON_LDAP_BIND_PASSWORD', '(&(objectclass=user)(mail=%s))', '$CLOUDRON_LDAP_USERS_BASE_DN', NULL, true, false, 2, 'NOW()', 2, 'NOW()') ON CONFLICT (id) DO NOTHING;;"
  92. fi
  93. # Start nginx process
  94. sed -e "s,__REPLACE_WITH_CLOUDRON_APP_DOMAIN__,${CLOUDRON_APP_DOMAIN}," /app/pkg/nginx.conf >/run/nginx/nginx.conf
  95. if [[ ! -f /app/data/nginx-custom-locations.conf ]]; then
  96. cat >/app/data/nginx-custom-locations.conf <<EOF
  97. # Content of this file is included inside the server { } block.
  98. # Add custom locations except "/" and "/longpolling" as they are reserved for Odoo.
  99. # Or add custom directives. See https://nginx.org/en/docs/http/ngx_http_core_module.html#server
  100. EOF
  101. fi
  102. chown -R cloudron:cloudron /app/data
  103. echo "=> Start nginx"
  104. rm -f /run/nginx.pid
  105. nginx -c /run/nginx/nginx.conf &
  106. # Done nginx
  107. echo "Resource allocation (hard limit: 100% of available memory; soft limit: 80%)"
  108. if [[ -f /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes ]]; then
  109. memory_limit_hard=$(($(cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes)))
  110. memory_limit_soft=$((memory_limit_hard * 4 / 5))
  111. else
  112. memory_limit_hard=2684354560
  113. memory_limit_soft=2147483648 # (memory_limit_hard * 4 / 5)
  114. fi
  115. worker_count=$((memory_limit_hard / 1024 / 1024 / 150)) # 1 worker for 150M
  116. worker_count=$((worker_count > 8 ? 8 : worker_count)) # max of 8
  117. worker_count=$((worker_count < 1 ? 1 : worker_count)) # min of 1
  118. echo "Memory limits - hard limit: $memory_limit_hard bytes, soft limit: $memory_limit_soft bytes"
  119. crudini --set /app/data/odoo.conf 'options' limit_memory_hard $memory_limit_hard
  120. crudini --set /app/data/odoo.conf 'options' limit_memory_soft $memory_limit_soft
  121. crudini --set /app/data/odoo.conf 'options' workers $worker_count
  122. echo "Done. Starting server with $worker_count workers.."
  123. chown -R cloudron:cloudron /app/data/
  124. /usr/local/bin/gosu cloudron:cloudron /app/code/odoo/odoo-bin -c /app/data/odoo.conf