entrypoint.sh 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/env bash
  2. # TODO: generate cookie secret (if not yet done)
  3. # TODO: run uwsgi as other user
  4. # TODO: Gestion des migrations
  5. # TODO: Verbosite des logs ?
  6. #
  7. # ENVIRONMENT VARIABLES ARE:
  8. #
  9. # * DATABASE_TYPE (values: postgresql, mysql, sqlite)
  10. # * DATABASE_USER
  11. # * DATABASE_PASSWORD
  12. # * DATABASE_HOST
  13. # * DATABASE_PORT
  14. # * DATABASE_NAME
  15. # * PULL
  16. #
  17. # Default values
  18. # TODO: Voir avec Damien si c'est le comportement souhaité
  19. PULL=${PULL:=1}
  20. # Check environment variables
  21. /tracim/check_env_vars.sh
  22. if [ ! "$?" = 0 ]; then
  23. exit 1
  24. fi
  25. # If PULL is set, change repository HEAD
  26. if [ "$PULL" = 1 ]; then
  27. echo "Upgrade Tracim code"
  28. cd /tracim && git pull origin master
  29. fi
  30. # Create config.ini file if no exist
  31. if [ ! -f /etc/tracim/config.ini ]; then
  32. cp /tracim/tracim/development.ini.base /etc/tracim/config.ini
  33. fi
  34. ln -sf /etc/tracim/config.ini /tracim/tracim/config.ini
  35. # Create wsgidav.conf file if no exist
  36. if [ ! -f /etc/tracim/wsgidav.conf ]; then
  37. cp /tracim/tracim/wsgidav.conf.sample /etc/tracim/wsgidav.conf
  38. fi
  39. ln -sf /etc/tracim/wsgidav.conf /tracim/tracim/wsgidav.conf
  40. # MySQL case
  41. if [ "$DATABASE_TYPE" = mysql ] ; then
  42. # Ensure DATABASE_PORT is set
  43. if ! [ -n "$DATABASE_PORT" ]; then
  44. DATABASE_PORT=3306
  45. fi
  46. # engine is mysql+oursql
  47. DATABASE_TYPE=mysql+oursql
  48. # Check if database must be init
  49. TEST_TABLE=$(mysql --host="$DATABASE_HOST" --user="$DATABASE_USER" --password="$DATABASE_USER" --database="$DATABASE_NAME" -s -N --execute="SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '$DATABASE_NAME' AND table_name = 'content';")
  50. if [ ${TEST_TABLE} = 0 ] ; then
  51. INIT_DATABASE=true
  52. fi
  53. fi
  54. # PostgreSQL case
  55. if [ "$DATABASE_TYPE" = postgresql ] ; then
  56. # Ensure DATABASE_PORT is set
  57. if ! [ -n "$DATABASE_PORT" ]; then
  58. DATABASE_PORT=5432
  59. fi
  60. DATABASE_SUFFIX="?client_encoding=utf8"
  61. # Check if database must be init
  62. TEST_TABLE=$(PGPASSWORD="$DATABASE_PASSWORD" psql -U ${DATABASE_USER} -h ${TEST_TABLE} -d ${DATABASE_NAME} -t -c "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'content' );")
  63. if [ ${TEST_TABLE} = f ] ; then
  64. INIT_DATABASE=true
  65. fi
  66. fi
  67. # SQLite case
  68. if [ "$DATABASE_TYPE" = sqlite ] ; then
  69. if [ ! -f /var/tracim/tracim.db ]; then
  70. INIT_DATABASE=true
  71. fi
  72. fi
  73. # Update radicale file system folder config
  74. sed -i "s/\(# radicale.server.filesystem.folder *= *\).*/radicale.server.filesystem.folder = \/var\/tracim\/radicale/" /etc/tracim/config.ini
  75. # Update sqlalchemy.url config
  76. if ! [ "$DATABASE_TYPE" = sqlite ] ; then
  77. sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = $DATABASE_TYPE:\/\/$DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOST:$DATABASE_PORT\/$DATABASE_NAME$DATABASE_SUFFIX/" /etc/tracim/config.ini
  78. else
  79. sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = sqlite:\/\/\/\/var\/tracim\/tracim.db/" /etc/tracim/config.ini
  80. fi
  81. # Start redis server (for async email sending if configured)
  82. service redis-server start
  83. # Initialize database if needed
  84. if [ "$INIT_DATABASE" = true ] ; then
  85. cd /tracim/tracim/ && gearbox setup-app -c config.ini
  86. fi
  87. # Upgrade database
  88. if [ "$PULL" = 1 ]; then
  89. echo "Upgrade Tracim database if required"
  90. cd /tracim/tracim/ && gearbox migrate upgrade
  91. fi
  92. service nginx start
  93. ln -sf /var/log/uwsgi/app/tracim.log /var/tracim/logs/uwsgi.log
  94. ln -sf /var/log/nginx/access.log /var/tracim/logs/nginx-access.log
  95. ln -sf /var/log/nginx/error.log /var/tracim/logs/nginx-error.log
  96. mkdir -p /var/run/uwsgi/app/tracim/
  97. chown www-data:www-data -R /var/run/uwsgi
  98. chown www-data:www-data -R /var/tracim
  99. uwsgi -i /etc/uwsgi/apps-available/tracim.ini --uid www-data --gid www-data