diff --git a/conf/nginx.conf b/conf/nginx.conf index 8183896..123b5f0 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,44 +1,6 @@ #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; -location __PATH__/webdav { - - uwsgi_pass unix:///tmp/uwsgi-__APP__-webdav.socket; - include uwsgi_params; - uwsgi_param SCRIPT_NAME ''; -} - -location __PATH__/dav { - - uwsgi_pass unix:///tmp/uwsgi-__APP__-caldav.socket; - include uwsgi_params; - uwsgi_param SCRIPT_NAME ''; -} - -location __PATH__/assets/ { - - # Path to source - alias __INSTALL_DIR__/frontend/dist/assets/ ; - - try_files $uri $uri/; -} - -location __PATH__/app/ { - - # Path to source - alias __INSTALL_DIR__/frontend/dist/app/ ; - - try_files $uri $uri/; -} - -location __PATH__/favicon.ico { - - # Path to source - alias __INSTALL_DIR__/frontend/dist/assets/branding/images/favicon/favicon.ico ; - - try_files $uri $uri/; -} location __PATH__/ { - uwsgi_pass unix:///tmp/uwsgi-__APP__-web.socket; include uwsgi_params; uwsgi_param SCRIPT_NAME ''; @@ -46,3 +8,33 @@ location __PATH__/ { # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; } + +location __PATH__/webdav { + uwsgi_pass unix:///tmp/uwsgi-__APP__-webdav.socket; + include uwsgi_params; + uwsgi_param SCRIPT_NAME ''; +} + +location __PATH__/dav { + uwsgi_pass unix:///tmp/uwsgi-__APP__-caldav.socket; + include uwsgi_params; + uwsgi_param SCRIPT_NAME ''; +} + +location __PATH__/assets/ { + # Path to source + alias __INSTALL_DIR__/www/assets/; + try_files $uri $uri/; +} + +location __PATH__/app/ { + # Path to source + alias __INSTALL_DIR__/www/app/; + try_files $uri $uri/; +} + +location __PATH__/favicon.ico { + # Path to source + alias __INSTALL_DIR__/www/assets/branding/images/favicon/favicon.ico; + try_files $uri $uri/; +} diff --git a/manifest.toml b/manifest.toml index 270b4ad..f3ff22d 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,3 +1,5 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json + packaging_format = 2 id = "tracim" @@ -70,11 +72,35 @@ ram.runtime = "50M" main.url = "/" [resources.apt] - packages = "ffmpeg, xvfb, inkscape, libreoffice, postgresql, ghostscript, git, imagemagick, iproute2, libfile-mimeinfo-perl, libimage-exiftool-perl, webp, libmagic1, locales, poppler-utils, python3, python3-pip, uwsgi, uwsgi-plugin-python3, supervisor, build-essential, libjpeg-dev, libmagickwand-dev, libpq-dev, python3-dev, python3-venv, redis-server" - - extras.yarn.repo = "deb https://dl.yarnpkg.com/debian/ stable main" - extras.yarn.key = "https://dl.yarnpkg.com/debian/pubkey.gpg" - extras.yarn.packages = "yarn" + packages = [ + "ffmpeg", + "xvfb", + "inkscape", + "libreoffice", + "postgresql", + "ghostscript", + "git", + "imagemagick", + "iproute2", + "libfile-mimeinfo-perl", + "libimage-exiftool-perl", + "webp", + "libmagic1", + "locales", + "poppler-utils", + "python3", + "python3-pip", + "uwsgi", + "uwsgi-plugin-python3", + "supervisor", + "build-essential", + "libjpeg-dev", + "libmagickwand-dev", + "libpq-dev", + "python3-dev", + "python3-venv", + "redis-server", + ] [resources.database] type = "postgresql" diff --git a/scripts/_common.sh b/scripts/_common.sh index 9d577cf..67a7e27 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -10,6 +10,10 @@ nodejs_version=16 # PERSONAL HELPERS #================================================= +_corepack_enable() { + ynh_exec_warn_less ynh_exec_as "$app" env "$ynh_node_load_PATH" COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack enable --install-directory="$install_dir/bin" +} + #================================================= # EXPERIMENTAL HELPERS #================================================= diff --git a/scripts/install b/scripts/install index 6b4ec54..9fbd27d 100755 --- a/scripts/install +++ b/scripts/install @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -10,26 +8,24 @@ source _common.sh source /usr/share/yunohost/helpers #================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST +# INITIALIZE AND STORE SETTINGS #================================================= api_key=$(ynh_string_random --length=8) +ynh_app_setting_set --app="$app" --key="api_key" --value="$api_key" + session_secret=$(ynh_string_random --length=8) +ynh_app_setting_set --app="$app" --key="session_secret" --value="$session_secret" + website_title="YunoHost Tracim" -admin_mail=$(ynh_user_get_info --username=$admin --key=mail) +ynh_app_setting_set --app="$app" --key="website_title" --value="$website_title" -#================================================= -# STORE SETTINGS FROM MANIFEST -#================================================= - -ynh_app_setting_set --app=$app --key=api_key --value=$api_key -ynh_app_setting_set --app=$app --key=session_secret --value=$session_secret -ynh_app_setting_set --app=$app --key=website_title --value=$website_title +admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Installing dependencies..." +ynh_script_progression --message="Installing NodeJS..." ynh_install_nodejs --nodejs_version=$nodejs_version @@ -39,18 +35,10 @@ ynh_install_nodejs --nodejs_version=$nodejs_version ynh_script_progression --message="Setting up source files..." # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$install_dir" +ynh_setup_source --dest_dir="$install_dir/sources" chmod -R o-rwx "$install_dir" -chown -R $app:www-data "$install_dir" - -#================================================= -# NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Configuring NGINX web server..." - -# Create a dedicated NGINX config -ynh_add_nginx_config +chown -R "$app:www-data" "$install_dir" #================================================= # ADD A CONFIGURATION @@ -58,90 +46,89 @@ ynh_add_nginx_config ynh_script_progression --message="Adding a configuration file..." redis_db=$(ynh_redis_get_free_db) -ynh_app_setting_set --app=$app --key=redis_db --value=$redis_db +ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db" -ynh_add_config --template="../conf/development.ini.sample" --destination="$install_dir/backend/development.ini" -chmod 400 "$install_dir/backend/development.ini" -chown $app:$app "$install_dir/backend/development.ini" +ynh_add_config --template="development.ini.sample" --destination="$install_dir/sources/backend/development.ini" +chmod 400 "$install_dir/sources/backend/development.ini" +chown "$app:$app" "$install_dir/sources/backend/development.ini" -ynh_add_config --template="../conf/configEnv.json.sample" --destination="$install_dir/frontend/configEnv.json" -chmod 400 "$install_dir/frontend/configEnv.json" -chown $app:$app "$install_dir/frontend/configEnv.json" +ynh_add_config --template="configEnv.json.sample" --destination="$install_dir/sources/frontend/configEnv.json" +chmod 400 "$install_dir/sources/frontend/configEnv.json" +chown "$app:$app" "$install_dir/sources/frontend/configEnv.json" #================================================= # BUILD APP #================================================= ynh_script_progression --message="Building app..." -cp -r $install_dir/frontend/dist/assets/branding.sample $install_dir/frontend/dist/assets/branding +cp -r "$install_dir/sources/frontend/dist/assets/branding.sample" "$install_dir/sources/frontend/dist/assets/branding" -pushd "$install_dir/backend" - ynh_use_nodejs - python3 -m venv env - source env/bin/activate - ynh_exec_warn_less pip install -r requirements-build.txt - ynh_exec_warn_less pip install -r requirements.txt - ynh_exec_warn_less pip install -r requirements-full-preview-generator.txt - ynh_exec_warn_less pip install -r requirements-db-postgres.txt - ynh_exec_warn_less pip install -e "." - mkdir sessions_data sessions_lock previews - ynh_exec_warn_less tracimcli db init - ynh_exec_warn_less tracimcli user create -e $admin_mail -u $admin --lang $language -p $password --profile administrators - ynh_exec_warn_less tracimcli user delete -l admin@admin.admin - deactivate - ynh_exec_warn_less $ynh_npm install "i18next-conv@<8" -g - ynh_exec_warn_less ./update_i18n_json_file.sh || exit 1 +python3 -m venv "$install_dir/venv" +pushd "$install_dir/sources/backend" + ynh_exec_warn_less "$install_dir/venv/bin/pip" install -r requirements-build.txt + ynh_exec_warn_less "$install_dir/venv/bin/pip" install -r requirements.txt + ynh_exec_warn_less "$install_dir/venv/bin/pip" install -r requirements-full-preview-generator.txt + ynh_exec_warn_less "$install_dir/venv/bin/pip" install -r requirements-db-postgres.txt + ynh_exec_warn_less "$install_dir/venv/bin/pip" install -e "." popd +ynh_use_nodejs +_corepack_enable +export PATH="$install_dir/bin:$PATH" +pushd "$install_dir/sources" + ynh_exec_warn_less "$ynh_npm" install "i18next-conv@<8" -g + ynh_exec_warn_less ./update_i18n_json_file.sh || exit 1 + echo 'nodeLinker: node-modules' >> .yarnrc.yml + ynh_exec_warn_less yarn install + ynh_exec_warn_less ./build_full_frontend.sh + ynh_secure_remove --file="$install_dir/www" +popd +cp -R "$install_dir/sources/frontend/dist" "$install_dir/www" + pushd "$install_dir" - echo 'nodeLinker: node-modules' >> .yarnrc.yml - ynh_exec_warn_less yarn install - ynh_exec_warn_less ./build_full_frontend.sh + mkdir sessions_data sessions_lock previews + ynh_exec_warn_less tracimcli db init + ynh_exec_warn_less tracimcli user create -e "$admin_mail" -u "$admin" --lang "$language" -p "$password" --profile administrators + ynh_exec_warn_less tracimcli user delete -l admin@admin.admin popd chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" -chown -R $app:www-data "$install_dir" +chown -R "$app:www-data" "$install_dir" #================================================= -# SETUP SYSTEMD +# SYSTEM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring a systemd service..." +ynh_script_progression --message="Adding system configurations related to $app..." --weight=1 + +# Create a dedicated NGINX config +ynh_add_nginx_config # Create a dedicated systemd config ynh_add_supervisor_config --service="$app" --template="supervisord.conf" - -ynh_add_config --template="../conf/web.ini" --destination="/etc/uwsgi/apps-available/$app-web.ini" -chmod 400 "/etc/uwsgi/apps-available/$app-web.ini" -chown $app:$app "/etc/uwsgi/apps-available/$app-web.ini" -ln -sf /etc/uwsgi/apps-available/$app-web.ini /etc/uwsgi/apps-enabled/$app-web.ini - -ynh_add_config --template="../conf/webdav.ini" --destination="/etc/uwsgi/apps-available/$app-webdav.ini" -chmod 400 "/etc/uwsgi/apps-available/$app-webdav.ini" -chown $app:$app "/etc/uwsgi/apps-available/$app-webdav.ini" -ln -sf /etc/uwsgi/apps-available/$app-webdav.ini /etc/uwsgi/apps-enabled/$app-webdav.ini - -ynh_add_config --template="../conf/caldav.ini" --destination="/etc/uwsgi/apps-available/$app-caldav.ini" -chmod 400 "/etc/uwsgi/apps-available/$app-caldav.ini" -chown $app:$app "/etc/uwsgi/apps-available/$app-caldav.ini" -ln -sf /etc/uwsgi/apps-available/$app-caldav.ini /etc/uwsgi/apps-enabled/$app-caldav.ini - -#================================================= -# GENERIC FINALIZATION -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." - yunohost service add uwsgi --log="/var/log/uwsgi/app/$app-web.log" yunohost service add supervisor --log="/var/log/supervisor/supervisord.log" +ynh_add_config --template="web.ini" --destination="/etc/uwsgi/apps-available/$app-web.ini" +chmod 400 "/etc/uwsgi/apps-available/$app-web.ini" +chown "$app:$app" "/etc/uwsgi/apps-available/$app-web.ini" +ln -sf "/etc/uwsgi/apps-available/$app-web.ini" "/etc/uwsgi/apps-enabled/$app-web.ini" + +ynh_add_config --template="webdav.ini" --destination="/etc/uwsgi/apps-available/$app-webdav.ini" +chmod 400 "/etc/uwsgi/apps-available/$app-webdav.ini" +chown "$app:$app" "/etc/uwsgi/apps-available/$app-webdav.ini" +ln -sf "/etc/uwsgi/apps-available/$app-webdav.ini" "/etc/uwsgi/apps-enabled/$app-webdav.ini" + +ynh_add_config --template="caldav.ini" --destination="/etc/uwsgi/apps-available/$app-caldav.ini" +chmod 400 "/etc/uwsgi/apps-available/$app-caldav.ini" +chown "$app:$app" "/etc/uwsgi/apps-available/$app-caldav.ini" +ln -sf "/etc/uwsgi/apps-available/$app-caldav.ini" "/etc/uwsgi/apps-enabled/$app-caldav.ini" + #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." +ynh_script_progression --message="Starting $app's systemd service..." -# Start a systemd service ynh_systemd_action --service_name="uwsgi" --action="restart" --log_path="/var/log/uwsgi/app/$app-web.log" --line_match="spawned uWSGI" #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 282a0dd..e134431 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -60,7 +60,7 @@ cp -r $install_dir/frontend/dist/assets/branding.sample $install_dir/frontend/di pushd "$install_dir/backend" ynh_use_nodejs ynh_secure_remove --file="$install_dir/backend/env" - python3 -m venv env + python3 -m venv venv source env/bin/activate ynh_exec_warn_less pip install -r requirements-build.txt ynh_exec_warn_less ynh_exec_warn_less pip install -r requirements.txt diff --git a/tests.toml b/tests.toml index eb73b8d..94abb79 100644 --- a/tests.toml +++ b/tests.toml @@ -1,3 +1,5 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json + test_format = 1.0 -[default] \ No newline at end of file +[default]