1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/snserver_ynh.git synced 2024-09-03 20:26:22 +02:00

Merge pull request #135 from YunoHost-Apps/testing

Testing - manifestv2
This commit is contained in:
Salamandar 2024-05-20 21:13:32 +02:00 committed by GitHub
commit 257b264d7b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 621 additions and 1530 deletions

View file

@ -1,118 +0,0 @@
#!/bin/bash
#=================================================
# PACKAGE UPDATING HELPER
#=================================================
# This script is meant to be run by GitHub Actions
# The YunoHost-Apps organisation offers a template Action to run this script periodically
# Since each app is different, maintainers can adapt its contents so as to perform
# automatic actions when a new upstream release is detected.
#=================================================
# FETCHING LATEST RELEASE AND ITS ASSETS
#=================================================
# Fetching information
current_version=$(cat manifest.json | jq -j '.version|split("~")[0]')
repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]')
commit=""
id=0
while [[ -z $commit && $id -le 29 ]]
do
commit=$(curl --silent "https://api.github.com/repos/$repo/commits" | jq -r ".[$id] | .sha" )
tags=$(git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' https://github.com/standardnotes/server.git | grep $commit)
if [[ -z $tags || $tags == *"alpha"* ]]; then
commit=""
fi
let id++
done
if [ -z $commit ]; then
echo "::warning ::No new version found.."
exit 0
fi
version=$(curl --silent "https://api.github.com/repos/$repo/commits/$commit" | jq -r '.commit.committer.date' | sed 's/T.*$//g' | sed 's/-/./g')
api_gateway_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/api-gateway/package.json" | jq -j '.version')
auth_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/auth/package.json" | jq -j '.version')
files_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/files/package.json" | jq -j '.version')
ss_online_version=$(curl --silent "https://raw.githubusercontent.com/$repo/$commit/packages/syncing-server/package.json" | jq -j '.version')
# Setting up the environment variables
echo "Current version: $current_version"
echo "Latest release from upstream: $version"
echo "API-Gateway: $api_gateway_online_version"
echo "Auth: $auth_online_version"
echo "Files: $files_online_version"
echo "Syncing-Server: $ss_online_version"
echo "VERSION=$version" >> $GITHUB_ENV
echo "VERSION_CURRENT=$current_version" >> $GITHUB_ENV
echo "VERSION_API=$api_gateway_online_version" >> $GITHUB_ENV
echo "VERSION_AUTH=$auth_online_version" >> $GITHUB_ENV
echo "VERSION_FILES=$files_online_version" >> $GITHUB_ENV
echo "VERSION_SS=$ss_online_version" >> $GITHUB_ENV
# For the time being, let's assume the script will fail
echo "PROCEED=false" >> $GITHUB_ENV
# Proceed only if the retrieved version is greater than the current one
if [[ "$current_version" == "$version" ]]; then
echo "::warning ::No new version available"
exit 0
# Proceed only if a PR for this new version does not already exist
elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then
echo "::warning ::A branch already exists for this update"
exit 0
fi
asset="https://github.com/$repo/archive/$commit.tar.gz"
#=================================================
# UPDATE SOURCE FILES
#=================================================
# Create the temporary directory
tempdir="$(mktemp -d)"
# Download sources and calculate checksum
filename=${asset##*/}
curl --silent -4 -L $asset -o "$tempdir/$filename"
checksum=$(sha256sum "$tempdir/$filename" | head -c 64)
# Delete temporary directory
rm -rf $tempdir
# Rewrite source file
cat <<EOT > conf/app.src
SOURCE_URL=$asset
SOURCE_SUM=$checksum
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=
SOURCE_EXTRACT=true
EOT
echo "... conf/app.src updated"
#=================================================
# SPECIFIC UPDATE STEPS
#=================================================
# Any action on the app's source code can be done.
# The GitHub Action workflow takes care of committing all changes after this script ends.
#=================================================
# GENERIC FINALIZATION
#=================================================
# Replace new version in manifest
echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json
# No need to update the README, yunohost-bot takes care of it
# The Action will proceed only if the PROCEED environment variable is set to true
echo "PROCEED=true" >> $GITHUB_ENV
exit 0

View file

@ -1,49 +0,0 @@
# This workflow allows GitHub Actions to automagically update your app whenever a new upstream release is detected.
# You need to enable Actions in your repository settings, and fetch this Action from the YunoHost-Apps organization.
# This file should be enough by itself, but feel free to tune it to your needs.
# It calls updater.sh, which is where you should put the app-specific update steps.
name: Check for new upstream releases
on:
# Allow to manually trigger the workflow
workflow_dispatch:
# Run it every monday at 6:00 UTC
schedule:
- cron: '0 6 * * 1'
jobs:
updater:
runs-on: ubuntu-latest
steps:
- name: Fetch the source code
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run the updater script
id: run_updater
run: |
# Setting up Git user
git config --global user.name 'yunohost-bot'
git config --global user.email 'yunohost-bot@users.noreply.github.com'
# Run the updater script
/bin/bash .github/workflows/updater.sh
- name: Commit changes
id: commit
if: ${{ env.PROCEED == 'true' }}
run: |
git commit -am "Upgrade to $VERSION"
- name: Create Pull Request
id: cpr
if: ${{ env.PROCEED == 'true' }}
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: 'Update: to latest versions'
committer: 'yunohost-bot <yunohost-bot@users.noreply.github.com>'
author: 'yunohost-bot <yunohost-bot@users.noreply.github.com>'
signoff: false
branch: ci-auto-update-${{ env.VERSION }}
base: testing
delete-branch: true
title: 'Upgrade to ${{ env.VERSION }}'
body: |
Upgrade ${{ env.VERSION_CURRENT }} to ${{ env.VERSION }}
draft: false

View file

@ -19,15 +19,9 @@ It shall NOT be edited by hand.
Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place. Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place.
**Shipped version:** 2023.01.26~ynh1 **Shipped version:** 2023.01.26~ynh2
**Demo:** <https://standardnotes.org/demo> **Demo:** <https://standardnotes.org/demo>
## Disclaimers / important information
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: Antifeatures ## :red_circle: Antifeatures
- **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license. - **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license.
@ -35,9 +29,9 @@ Standard Notes is an end-to-end encrypted note-taking app for digitalists and pr
## Documentation and resources ## Documentation and resources
- Official app website: <https://standardnotes.org/> - Official app website: <https://standardnotes.org>
- Official user documentation: <https://standardnotes.com/help> - Official user documentation: <https://standardnotes.com/help>
- Official admin documentation: <https://docs.standardnotes.org/> - Official admin documentation: <https://docs.standardnotes.org>
- Upstream app code repository: <https://github.com/standardnotes/server> - Upstream app code repository: <https://github.com/standardnotes/server>
- YunoHost Store: <https://apps.yunohost.org/app/snserver> - YunoHost Store: <https://apps.yunohost.org/app/snserver>
- Report a bug: <https://github.com/YunoHost-Apps/snserver_ynh/issues> - Report a bug: <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -19,15 +19,9 @@ No se debe editar a mano.
Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place. Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place.
**Versión actual:** 2023.01.26~ynh1 **Versión actual:** 2023.01.26~ynh2
**Demo:** <https://standardnotes.org/demo> **Demo:** <https://standardnotes.org/demo>
## informaciones importantes
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: funcionalidades no deseadas ## :red_circle: funcionalidades no deseadas
- **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license. - **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license.
@ -35,9 +29,9 @@ Standard Notes is an end-to-end encrypted note-taking app for digitalists and pr
## Documentaciones y recursos ## Documentaciones y recursos
- Sitio web oficial: <https://standardnotes.org/> - Sitio web oficial: <https://standardnotes.org>
- Documentación usuario oficial: <https://standardnotes.com/help> - Documentación usuario oficial: <https://standardnotes.com/help>
- Documentación administrador oficial: <https://docs.standardnotes.org/> - Documentación administrador oficial: <https://docs.standardnotes.org>
- Repositorio del código fuente oficial de la aplicación : <https://github.com/standardnotes/server> - Repositorio del código fuente oficial de la aplicación : <https://github.com/standardnotes/server>
- Catálogo YunoHost: <https://apps.yunohost.org/app/snserver> - Catálogo YunoHost: <https://apps.yunohost.org/app/snserver>
- Reportar un error: <https://github.com/YunoHost-Apps/snserver_ynh/issues> - Reportar un error: <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -19,15 +19,9 @@ EZ editatu eskuz.
Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place. Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place.
**Paketatutako bertsioa:** 2023.01.26~ynh1 **Paketatutako bertsioa:** 2023.01.26~ynh2
**Demoa:** <https://standardnotes.org/demo> **Demoa:** <https://standardnotes.org/demo>
## Ezespena / informazio garrantzitsua
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: Ezaugarri zalantzagarriak ## :red_circle: Ezaugarri zalantzagarriak
- **Libreak ez diren baliabideak**: Libreak ez diren baliabideak ditu eta erabiltzen ditu. Kasurik ohikoena artelanak (irudiak, soinuak, musika, etab.) erabiltzen dituzten aplikazioak dira. - jabedun-lizentziapean. - **Libreak ez diren baliabideak**: Libreak ez diren baliabideak ditu eta erabiltzen ditu. Kasurik ohikoena artelanak (irudiak, soinuak, musika, etab.) erabiltzen dituzten aplikazioak dira. - jabedun-lizentziapean.
@ -35,9 +29,9 @@ Standard Notes is an end-to-end encrypted note-taking app for digitalists and pr
## Dokumentazioa eta baliabideak ## Dokumentazioa eta baliabideak
- Aplikazioaren webgune ofiziala: <https://standardnotes.org/> - Aplikazioaren webgune ofiziala: <https://standardnotes.org>
- Erabiltzaileen dokumentazio ofiziala: <https://standardnotes.com/help> - Erabiltzaileen dokumentazio ofiziala: <https://standardnotes.com/help>
- Administratzaileen dokumentazio ofiziala: <https://docs.standardnotes.org/> - Administratzaileen dokumentazio ofiziala: <https://docs.standardnotes.org>
- Jatorrizko aplikazioaren kode-gordailua: <https://github.com/standardnotes/server> - Jatorrizko aplikazioaren kode-gordailua: <https://github.com/standardnotes/server>
- YunoHost Denda: <https://apps.yunohost.org/app/snserver> - YunoHost Denda: <https://apps.yunohost.org/app/snserver>
- Eman errore baten berri: <https://github.com/YunoHost-Apps/snserver_ynh/issues> - Eman errore baten berri: <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -19,15 +19,9 @@ Il NE doit PAS être modifié à la main.
Standard Notes est une application de prise de notes chiffrée de bout en bout pour les numériciens et les professionnels. Capturez vos notes, vos fichiers et le travail de votre vie en un seul endroit sécurisé. Standard Notes est une application de prise de notes chiffrée de bout en bout pour les numériciens et les professionnels. Capturez vos notes, vos fichiers et le travail de votre vie en un seul endroit sécurisé.
**Version incluse:** 2023.01.26~ynh1 **Version incluse:** 2023.01.26~ynh2
**Démo:** <https://standardnotes.org/demo> **Démo:** <https://standardnotes.org/demo>
## Avertissements / informations importantes
* Pas d'authentification unique ou d'intégration LDAP.
* Besoins en mémoire vive (4 Go de mémoire swap seront créés pendant l'installation) :
* La configuration peut être modifiée sous : https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: Anti-fonctionnalités ## :red_circle: Anti-fonctionnalités
- **Ressources non libres **: Contient ou utilise des médias non libres. Le cas le plus fréquent concerne des applications utilisant des œuvres (images, sons, musiques, etc.) sous une licence commerciale. - **Ressources non libres **: Contient ou utilise des médias non libres. Le cas le plus fréquent concerne des applications utilisant des œuvres (images, sons, musiques, etc.) sous une licence commerciale.
@ -35,9 +29,9 @@ Standard Notes est une application de prise de notes chiffrée de bout en bout p
## Documentations et ressources ## Documentations et ressources
- Site officiel de lapp: <https://standardnotes.org/> - Site officiel de lapp: <https://standardnotes.org>
- Documentation officielle utilisateur: <https://standardnotes.com/help> - Documentation officielle utilisateur: <https://standardnotes.com/help>
- Documentation officielle de ladmin: <https://docs.standardnotes.org/> - Documentation officielle de ladmin: <https://docs.standardnotes.org>
- Dépôt de code officiel de lapp: <https://github.com/standardnotes/server> - Dépôt de code officiel de lapp: <https://github.com/standardnotes/server>
- YunoHost Store: <https://apps.yunohost.org/app/snserver> - YunoHost Store: <https://apps.yunohost.org/app/snserver>
- Signaler un bug: <https://github.com/YunoHost-Apps/snserver_ynh/issues> - Signaler un bug: <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -19,15 +19,9 @@ NON debe editarse manualmente.
Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place. Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place.
**Versión proporcionada:** 2023.01.26~ynh1 **Versión proporcionada:** 2023.01.26~ynh2
**Demo:** <https://standardnotes.org/demo> **Demo:** <https://standardnotes.org/demo>
## Avisos / información importante
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: Debes considerar ## :red_circle: Debes considerar
- **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license. - **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license.
@ -35,9 +29,9 @@ Standard Notes is an end-to-end encrypted note-taking app for digitalists and pr
## Documentación e recursos ## Documentación e recursos
- Web oficial da app: <https://standardnotes.org/> - Web oficial da app: <https://standardnotes.org>
- Documentación oficial para usuarias: <https://standardnotes.com/help> - Documentación oficial para usuarias: <https://standardnotes.com/help>
- Documentación oficial para admin: <https://docs.standardnotes.org/> - Documentación oficial para admin: <https://docs.standardnotes.org>
- Repositorio de orixe do código: <https://github.com/standardnotes/server> - Repositorio de orixe do código: <https://github.com/standardnotes/server>
- Tenda YunoHost: <https://apps.yunohost.org/app/snserver> - Tenda YunoHost: <https://apps.yunohost.org/app/snserver>
- Informar dun problema: <https://github.com/YunoHost-Apps/snserver_ynh/issues> - Informar dun problema: <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -19,15 +19,9 @@
Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place. Standard Notes is an end-to-end encrypted note-taking app for digitalists and professionals. Capture your notes, files, and lifes work all in one secure place.
**分发版本:** 2023.01.26~ynh1 **分发版本:** 2023.01.26~ynh2
**演示:** <https://standardnotes.org/demo> **演示:** <https://standardnotes.org/demo>
## 免责声明 / 重要信息
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel
## :red_circle: 负面特征 ## :red_circle: 负面特征
- **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license. - **Non-free assets**: Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license.
@ -35,9 +29,9 @@ Standard Notes is an end-to-end encrypted note-taking app for digitalists and pr
## 文档与资源 ## 文档与资源
- 官方应用网站: <https://standardnotes.org/> - 官方应用网站: <https://standardnotes.org>
- 官方用户文档: <https://standardnotes.com/help> - 官方用户文档: <https://standardnotes.com/help>
- 官方管理文档: <https://docs.standardnotes.org/> - 官方管理文档: <https://docs.standardnotes.org>
- 上游应用代码库: <https://github.com/standardnotes/server> - 上游应用代码库: <https://github.com/standardnotes/server>
- YunoHost 商店: <https://apps.yunohost.org/app/snserver> - YunoHost 商店: <https://apps.yunohost.org/app/snserver>
- 报告 bug <https://github.com/YunoHost-Apps/snserver_ynh/issues> - 报告 bug <https://github.com/YunoHost-Apps/snserver_ynh/issues>

View file

@ -1,24 +0,0 @@
;; Test complet
; Manifest
domain="domain.tld"
path="/path"
; Checks
pkg_linter=1
setup_sub_dir=1
setup_root=1
setup_nourl=0
setup_private=0
setup_public=1
upgrade=1
# 2022.09.16~yhn1
upgrade=1 from_commit=62b95a36cb6b8bc991cc4cd4fccc1b0365d13b11
backup_restore=1
multi_instance=1
port_already_use=0
change_url=1
;;; Options
Email=
Notificationnone
;;; Upgrade options
; commit=62b95a36cb6b8bc991cc4cd4fccc1b0365d13b11
name=2022.09.16~ynh1

View file

@ -1,7 +0,0 @@
SOURCE_URL=https://github.com/standardnotes/server/archive/5ea91aeafc6c986391e6f4acc5cad20584a90828.tar.gz
SOURCE_SUM=87d98db93233f88da30e5b89fa9df02bc0d2ee2ddadc9087a42b90987ec3c581
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=
SOURCE_EXTRACT=true

View file

@ -1 +1 @@
*/5 * * * * __APP__ __FINALPATH__/cron.sh > /var/log/__APP__/cron.log 2>&1 */5 * * * * __APP__ __INSTALL_DIR__/cron.sh > /var/log/__APP__/cron.log 2>&1

View file

@ -34,4 +34,4 @@ SQS_QUEUE_URL=
SQS_AWS_REGION= SQS_AWS_REGION=
# (Optional) File upload path (relative to root directory) # (Optional) File upload path (relative to root directory)
FILE_UPLOAD_PATH=__DATADIR__/uploads/ FILE_UPLOAD_PATH=__DATA_DIR__/uploads/

View file

@ -1,6 +1,6 @@
[INCLUDES] [INCLUDES]
before = common.conf before = common.conf
[Definition] [Definition]
failregex = <HOST> .* .POST __PATH_URL__.*auth/sign_in HTTP/.... 401 failregex = <HOST> .* .POST __PATH__.*auth/sign_in HTTP/.... 401
ignoreregex = ignoreregex =
datepattern = %%d/%%b/%%Y:%%H:%%M:%%S datepattern = %%d/%%b/%%Y:%%H:%%M:%%S

View file

@ -2,7 +2,7 @@
location __PATH__/ { location __PATH__/ {
proxy_pass http://127.0.0.1:__PORT_API_GATEWAY__/; proxy_pass http://127.0.0.1:__PORT_API_GATEWAY__/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade; proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
@ -17,7 +17,7 @@ location = __PATH__/ {
location __PATH__/files/ { location __PATH__/files/ {
proxy_pass http://127.0.0.1:__PORT_FILES__/; proxy_pass http://127.0.0.1:__PORT_FILES__/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade; proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;

View file

@ -8,8 +8,8 @@ After=__APP__-auth.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live/ WorkingDirectory=__INSTALL_DIR__/live/
EnvironmentFile=__FINALPATH__/live/api-gateway.env EnvironmentFile=__INSTALL_DIR__/live/api-gateway.env
ExecStart=/usr/bin/yarn start:api-gateway ExecStart=/usr/bin/yarn start:api-gateway
StandardOutput=append:/var/log/__APP__/api-gateway.log StandardOutput=append:/var/log/__APP__/api-gateway.log
StandardError=inherit StandardError=inherit

View file

@ -9,8 +9,8 @@ After=__APP__-auth.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live WorkingDirectory=__INSTALL_DIR__/live
EnvironmentFile=__FINALPATH__/live/auth-worker.env EnvironmentFile=__INSTALL_DIR__/live/auth-worker.env
ExecStart=/usr/bin/yarn start:auth-worker ExecStart=/usr/bin/yarn start:auth-worker
StandardOutput=append:/var/log/__APP__/auth-worker.log StandardOutput=append:/var/log/__APP__/auth-worker.log
StandardError=inherit StandardError=inherit

View file

@ -9,8 +9,8 @@ After=__APP__-syncing-server-js.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live WorkingDirectory=__INSTALL_DIR__/live
EnvironmentFile=__FINALPATH__/live/auth.env EnvironmentFile=__INSTALL_DIR__/live/auth.env
ExecStart=/usr/bin/yarn start:auth ExecStart=/usr/bin/yarn start:auth
StandardOutput=append:/var/log/__APP__/auth.log StandardOutput=append:/var/log/__APP__/auth.log
StandardError=inherit StandardError=inherit

View file

@ -9,8 +9,8 @@ After=__APP__-syncing-server.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live WorkingDirectory=__INSTALL_DIR__/live
EnvironmentFile=__FINALPATH__/live/files.env EnvironmentFile=__INSTALL_DIR__/live/files.env
ExecStart=/usr/bin/yarn start:files ExecStart=/usr/bin/yarn start:files
StandardOutput=append:/var/log/__APP__/files.log StandardOutput=append:/var/log/__APP__/files.log
StandardError=inherit StandardError=inherit

View file

@ -9,8 +9,8 @@ After=__APP__-syncing-server.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live WorkingDirectory=__INSTALL_DIR__/live
EnvironmentFile=__FINALPATH__/live/syncing-server-worker.env EnvironmentFile=__INSTALL_DIR__/live/syncing-server-worker.env
ExecStart=/usr/bin/yarn start:syncing-server-worker ExecStart=/usr/bin/yarn start:syncing-server-worker
StandardOutput=append:/var/log/__APP__/syncing-server-worker.log StandardOutput=append:/var/log/__APP__/syncing-server-worker.log
StandardError=inherit StandardError=inherit

View file

@ -8,8 +8,8 @@ After=redis.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live WorkingDirectory=__INSTALL_DIR__/live
EnvironmentFile=__FINALPATH__/live/syncing-server.env EnvironmentFile=__INSTALL_DIR__/live/syncing-server.env
ExecStart=/usr/bin/yarn start:syncing-server ExecStart=/usr/bin/yarn start:syncing-server
StandardOutput=append:/var/log/__APP__/syncing-server.log StandardOutput=append:/var/log/__APP__/syncing-server.log
StandardError=inherit StandardError=inherit

View file

@ -7,8 +7,8 @@ After=__APP__-auth.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
WorkingDirectory=__FINALPATH__/live/ WorkingDirectory=__INSTALL_DIR__/live/
EnvironmentFile=__FINALPATH__/live/workspace.env EnvironmentFile=__INSTALL_DIR__/live/workspace.env
ExecStart=/usr/bin/yarn start:workspace ExecStart=/usr/bin/yarn start:workspace
StandardOutput=append:/var/log/__APP__/workspace.log StandardOutput=append:/var/log/__APP__/workspace.log
StandardError=inherit StandardError=inherit

View file

@ -3,25 +3,25 @@ version = "1.0"
[main] [main]
name = "StandardNotes Server configuration" name = "StandardNotes Server configuration"
[main.new_user] [main.new_user]
name = "New User Options" name = "New User Options"
[main.new_user.disable_user_registration] [main.new_user.disable_user_registration]
ask = "Disable user registration?" ask = "Disable user registration?"
type = "boolean" type = "boolean"
default = "false" default = "false"
help = "false = New users can register\ntrue = No new user registrations allowed" help = "false = New users can register\ntrue = No new user registrations allowed"
[main.new_user.files_limit] [main.new_user.files_limit]
ask = "Default files limit" ask = "Default files limit"
type = "number" type = "number"
default = "100" default = "100"
help = "Choose a default limit in MB for the user file upload space.\n 100 = 100 MB\n 1024 = 1GB\n 10240 = 10GB" help = "Choose a default limit in MB for the user file upload space.\n 100 = 100 MB\n 1024 = 1GB\n 10240 = 10GB"
[main.subscription] [main.subscription]
name = "User Subscription" name = "User Subscription"
[main.subscription.info] [main.subscription.info]
ask = "" ask = ""
type = "alert" type = "alert"
style = "info" style = "info"

View file

@ -1,3 +0,0 @@
* No single-sign on or LDAP integration
* Ram requirements ( 4GB swap memory will be created during install ):
* Configuration can be changed under: https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel

View file

@ -1,3 +0,0 @@
* Pas d'authentification unique ou d'intégration LDAP.
* Besoins en mémoire vive (4 Go de mémoire swap seront créés pendant l'installation) :
* La configuration peut être modifiée sous : https://my_domain.tld/yunohost/admin/#/apps/$app_id/config-panel

1
doc/PRE_INSTALL.md Normal file
View file

@ -0,0 +1 @@
* 4GB swap memory will be created during install

1
doc/PRE_INSTALL_fr.md Normal file
View file

@ -0,0 +1 @@
* 4 Go de mémoire swap seront créés pendant l'installation

View file

@ -1,45 +0,0 @@
{
"name": "Standard Notes Server",
"id": "snserver",
"packaging_format": 1,
"description": {
"en": "The Standard Notes syncing server. An end-to-end encrypted note-taking app."
},
"version": "2023.01.26~ynh1",
"url": "https://github.com/standardnotes/standalone",
"upstream": {
"license": "AGPL-3.0-or-later",
"website": "https://standardnotes.org/",
"demo": "https://standardnotes.org/demo",
"admindoc": "https://docs.standardnotes.org/",
"userdoc": "https://standardnotes.com/help",
"code": "https://github.com/standardnotes/server"
},
"license": "AGPL-3.0-or-later",
"maintainer": {
"name": "Fabian Wilkens",
"email": "46000361+FabianWilkens@users.noreply.github.com"
},
"requirements": {
"yunohost": ">= 11.2.12"
},
"multi_instance": true,
"services": [
"nginx",
"mysql"
],
"arguments": {
"install": [
{
"name": "domain",
"type": "domain"
},
{
"name": "path",
"type": "path",
"example": "/example",
"default": "/"
}
]
}
}

84
manifest.toml Normal file
View file

@ -0,0 +1,84 @@
#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json
packaging_format = 2
id = "snserver"
name = "Standard Notes Server"
description.en = "End-to-end encrypted note-taking app syncing server"
description.fr = "Serveur de synchronisation de prise de notes cryptées de bout en bout"
version = "2023.01.26~ynh2"
maintainers = ["Fabian Wilkens"]
[upstream]
license = "AGPL-3.0-or-later"
website = "https://standardnotes.org"
demo = "https://standardnotes.org/demo"
admindoc = "https://docs.standardnotes.org"
userdoc = "https://standardnotes.com/help"
code = "https://github.com/standardnotes/server"
[integration]
yunohost = ">= 11.2.12"
architectures = "all"
multi_instance = true
ldap = false
sso = false
disk = "50M"
ram.build = "50M"
ram.runtime = "50M"
[install]
[install.domain]
type = "domain"
[install.path]
type = "path"
default = "/"
[install.init_main_permission]
type = "group"
default = "visitors"
[resources]
[resources.sources.main]
url = "https://github.com/standardnotes/server/archive/5ea91aeafc6c986391e6f4acc5cad20584a90828.tar.gz"
sha256 = "87d98db93233f88da30e5b89fa9df02bc0d2ee2ddadc9087a42b90987ec3c581"
autoupdate.strategy = "latest_github_release"
autoupdate.asset = "tarball"
[resources.system_user]
[resources.install_dir]
[resources.data_dir]
subdirs = ["uploads"]
[resources.permissions]
main.url = "/"
[resources.ports]
api_gateway.default = 3000
auth.default = 3001
auth_worker.default = 3002
files.default = 3003
syncing_server.default = 3004
syncing_server_worker.default = 3005
workspace.default = 3006
[resources.apt]
packages = [
"mariadb-server",
]
[resources.apt.extras.yarn]
repo = "deb https://dl.yarnpkg.com/debian/ stable main"
key = "https://dl.yarnpkg.com/debian/pubkey.gpg"
packages = "yarn"
[resources.database]
type = "mysql"

View file

@ -9,8 +9,13 @@ nodejs_version=16.13.1
swap_needed=4096 swap_needed=4096
node_max_old_space_size=6144 node_max_old_space_size=6144
# dependencies used by the app (must be on a single line) config_api_gateway="$install_dir/live/api-gateway.env"
pkg_dependencies="" config_auth="$install_dir/live/auth.env"
config_auth_worker="$install_dir/live/auth-worker.env"
config_files="$install_dir/live/files.env"
config_syncing_server="$install_dir/live/syncing-server.env"
config_syncing_server_worker="$install_dir/live/syncing-server-worker.env"
config_workspace="$install_dir/live/workspace.env"
#================================================= #=================================================
# PERSONAL HELPERS # PERSONAL HELPERS
@ -18,7 +23,7 @@ pkg_dependencies=""
# Reset failed systemd services. # Reset failed systemd services.
ynh_reset_systemd(){ ynh_reset_systemd(){
systemctl reset-failed systemctl reset-failed
} }
# Substitute/replace a string (or expression) by another in a file on a line # Substitute/replace a string (or expression) by another in a file on a line
@ -33,24 +38,24 @@ ynh_reset_systemd(){
# sub-expressions can be used (see sed manual page for more information) # sub-expressions can be used (see sed manual page for more information)
# #
ynh_replace_string_on_line() { ynh_replace_string_on_line() {
# Declare an array to define the options of this helper. # Declare an array to define the options of this helper.
local legacy_args=lmrf local legacy_args=lmrf
local -A args_array=([l]=line= [m]=match_string= [r]=replace_string= [f]=target_file=) local -A args_array=([l]=line= [m]=match_string= [r]=replace_string= [f]=target_file=)
local line local line
local match_string local match_string
local replace_string local replace_string
local target_file local target_file
# Manage arguments with getopts # Manage arguments with getopts
ynh_handle_getopts_args "$@" ynh_handle_getopts_args "$@"
set +o xtrace # set +x set +o xtrace # set +x
local delimit=@ local delimit=@
# Escape the delimiter if it's in the string. # Escape the delimiter if it's in the string.
match_string=${match_string//${delimit}/"\\${delimit}"} match_string=${match_string//${delimit}/"\\${delimit}"}
replace_string=${replace_string//${delimit}/"\\${delimit}"} replace_string=${replace_string//${delimit}/"\\${delimit}"}
set -o xtrace # set -x set -o xtrace # set -x
sed --in-place "${line} s${delimit}${match_string}${delimit}${replace_string}${delimit}" "$target_file" sed --in-place "${line} s${delimit}${match_string}${delimit}${replace_string}${delimit}" "$target_file"
} }
#================================================= #=================================================

View file

@ -2,24 +2,18 @@
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# RETRIEVE ARGUMENTS
#=================================================
app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# LOAD ENV FILE # LOAD ENV FILE
#================================================= #=================================================
if [ ! -f .env ] if [ ! -f .env ]; then
then set -a
export $(cat $final_path/cron.env | grep -v -E "^#" | xargs) source "$install_dir/cron.env"
set +a
fi fi
FILE_UPLOAD_BYTES_PER_MB=1048576 FILE_UPLOAD_BYTES_PER_MB=1048576
FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB)) FILE_UPLOAD_BYTES_LIMIT="$((FILES_SIZE * FILE_UPLOAD_BYTES_PER_MB))"
#================================================= #=================================================
# ADD SUBSCRIPTION AND FILES SPACE TO ALL USERS # ADD SUBSCRIPTION AND FILES SPACE TO ALL USERS
@ -28,28 +22,26 @@ FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB))
ynh_script_progression --message="Add a subscription and $FILES_SIZE MB of file space to all users without a subscription" ynh_script_progression --message="Add a subscription and $FILES_SIZE MB of file space to all users without a subscription"
# Searching for new users in the last 10 minutes without a Pro_Plan subscription. # Searching for new users in the last 10 minutes without a Pro_Plan subscription.
mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \ mysql --password="$db_pwd" --database="$db_name" <<< " \
SELECT email FROM users WHERE NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ SELECT email FROM users WHERE NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \
" 2>/dev/null | " 2>/dev/null | \
# Read through the piped result until it's empty.
while IFS='\n' read email; do while IFS='\n' read email; do
if [[ ${email} = "email" ]]; then if [[ ${email} = "email" ]]; then
ynh_print_info --message="New users found:" ynh_print_info --message="New users found:"
ynh_print_info --message="----------------------------------------" ynh_print_info --message="----------------------------------------"
else else
# ADD new user with Email $EMAIL a PRO_PLAN subscription # ADD new user with Email $EMAIL a PRO_PLAN subscription
ynh_print_info --message="[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription." ynh_print_info --message="[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription."
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password="$db_pwd" --database="$db_name" -e \
"INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);" "INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);"
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password="$db_pwd" --database="$db_name" -e \
"INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";" "INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";"
# Add new user Files space. Size is 1GB*$FILES_SIZE # Add new user Files space. Size is 1GB*$FILES_SIZE
ynh_print_info --message="[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae." ynh_print_info --message="[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae."
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password="$db_pwd" --database="$db_name" -e \
"INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));" "INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));"
fi fi
done done
ynh_script_progression --message="Execution completed" --last ynh_script_progression --message="Execution completed" --last

View file

@ -10,28 +10,6 @@
source ../settings/scripts/_common.sh source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
ynh_clean_setup () {
true
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
ynh_print_info --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
domain=$(ynh_app_setting_get --app=$app --key=domain)
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
#================================================= #=================================================
# DECLARE DATA AND CONF FILES TO BACKUP # DECLARE DATA AND CONF FILES TO BACKUP
#================================================= #=================================================
@ -41,39 +19,20 @@ ynh_print_info --message="Declaring files to be backed up..."
# BACKUP THE APP MAIN DIR # BACKUP THE APP MAIN DIR
#================================================= #=================================================
ynh_backup --src_path="$final_path" ynh_backup --src_path="$install_dir"
#================================================= #=================================================
# BACKUP THE DATA DIR # BACKUP THE DATA DIR
#================================================= #=================================================
ynh_backup --src_path="$datadir" --is_big ynh_backup --src_path="$data_dir" --is_big
#================================================= #=================================================
# BACKUP THE NGINX CONFIGURATION # SYSTEM CONFIGURATION
#================================================= #=================================================
ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# BACKUP FAIL2BAN CONFIGURATION
#=================================================
ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf"
ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf"
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP LOGROTATE
#=================================================
ynh_backup --src_path="/etc/logrotate.d/$app"
#=================================================
# BACKUP SYSTEMD
#=================================================
ynh_backup --src_path="/etc/systemd/system/$app-api-gateway.service" ynh_backup --src_path="/etc/systemd/system/$app-api-gateway.service"
ynh_backup --src_path="/etc/systemd/system/$app-auth.service" ynh_backup --src_path="/etc/systemd/system/$app-auth.service"
ynh_backup --src_path="/etc/systemd/system/$app-auth-worker.service" ynh_backup --src_path="/etc/systemd/system/$app-auth-worker.service"
@ -82,12 +41,15 @@ ynh_backup --src_path="/etc/systemd/system/$app-syncing-server.service"
ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-worker.service" ynh_backup --src_path="/etc/systemd/system/$app-syncing-server-worker.service"
ynh_backup --src_path="/etc/systemd/system/$app-workspace.service" ynh_backup --src_path="/etc/systemd/system/$app-workspace.service"
#================================================= ynh_backup --src_path="/etc/logrotate.d/$app"
# BACKUP VARIOUS FILES
#================================================= ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf"
ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf"
ynh_backup --src_path="/etc/cron.d/$app" ynh_backup --src_path="/etc/cron.d/$app"
ynh_backup --src_path="/var/log/$app/"
#================================================= #=================================================
# BACKUP THE MYSQL DATABASE # BACKUP THE MYSQL DATABASE
#================================================= #=================================================

View file

@ -9,70 +9,6 @@
source _common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# RETRIEVE ARGUMENTS
#=================================================
old_domain=$YNH_APP_OLD_DOMAIN
old_path=$YNH_APP_OLD_PATH
new_domain=$YNH_APP_NEW_DOMAIN
new_path=$YNH_APP_NEW_PATH
app=$YNH_APP_INSTANCE_NAME
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --weight=1
# Needed for helper "ynh_add_nginx_config"
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
# Add settings here as needed by your application
port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway)
port_auth=$(ynh_app_setting_get --app=$app --key=port_auth)
port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker)
port_files=$(ynh_app_setting_get --app=$app --key=port_files)
port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server)
port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker)
port_workspace=$(ynh_app_setting_get --app=$app --key=port_workspace)
config_api_gateway="$final_path/live/api-gateway.env"
#=================================================
# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP
#=================================================
ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." --weight=1
# Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () {
# Remove the new domain config file, the remove script won't do it as it doesn't know yet its location.
ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
# Restore it if the upgrade fails
ynh_restore_upgradebackup
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# CHECK WHICH PARTS SHOULD BE CHANGED
#=================================================
change_domain=0
if [ "$old_domain" != "$new_domain" ]
then
change_domain=1
fi
change_path=0
if [ "$old_path" != "$new_path" ]
then
change_path=1
fi
#================================================= #=================================================
# STANDARD MODIFICATIONS # STANDARD MODIFICATIONS
#================================================= #=================================================
@ -81,29 +17,7 @@ fi
#================================================= #=================================================
ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2 ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf ynh_change_url_nginx_config
# Change the path in the NGINX config file
if [ $change_path -eq 1 ]
then
# Make a backup of the original NGINX config file if modified
ynh_backup_if_checksum_is_different --file="$nginx_conf_path"
# Set global variables for NGINX helper
domain="$old_domain"
path_url="$new_path"
# Create a dedicated NGINX config
ynh_add_nginx_config
fi
# Change the domain for NGINX
if [ $change_domain -eq 1 ]
then
# Delete file checksum for the old conf file location
ynh_delete_file_checksum --file="$nginx_conf_path"
mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
# Store file checksum for the new config file location
ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
fi
#================================================= #=================================================
# SPECIFIC MODIFICATIONS # SPECIFIC MODIFICATIONS
@ -120,22 +34,9 @@ ynh_store_file_checksum --file="$config_api_gateway"
#================================================= #=================================================
ynh_script_progression --message="Configuring Fail2Ban..." --weight=1 ynh_script_progression --message="Configuring Fail2Ban..." --weight=1
domain=$new_domain
path_url=$new_path
# Create a dedicated Fail2Ban config # Create a dedicated Fail2Ban config
touch "/var/log/$app/$app.log"
ynh_add_fail2ban_config --use_template ynh_add_fail2ban_config --use_template
#=================================================
# GENERIC FINALISATION
#=================================================
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================

View file

@ -10,38 +10,27 @@ source /usr/share/yunohost/helpers
ynh_abort_if_errors ynh_abort_if_errors
#=================================================
# RETRIEVE ARGUMENTS
#=================================================
app=$(ynh_app_setting_get $app id)
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# SPECIFIC GETTERS FOR TOML SHORT KEY # SPECIFIC GETTERS FOR TOML SHORT KEY
#================================================= #=================================================
get__disable_user_registration(){ get__disable_user_registration(){
disabled=$(ynh_read_var_in_file --file="$install_dir/live/auth.env" --key="DISABLE_USER_REGISTRATION")
disabled=$(ynh_read_var_in_file --file="$final_path/live/auth.env" --key="DISABLE_USER_REGISTRATION") echo "$disabled"
echo $disabled
} }
get__files_limit(){ get__files_limit(){
limit=$(ynh_read_var_in_file --file="$final_path/cron.env" --key="FILES_SIZE") limit=$(ynh_read_var_in_file --file="$install_dir/cron.env" --key="FILES_SIZE")
echo "$limit"
echo $limit
} }
get__info(){ get__info(){
domain="$(cat /etc/yunohost/current_host)" domain="$(cat /etc/yunohost/current_host)"
limit=$(ynh_read_var_in_file --file="$final_path/cron.env" --key="FILES_SIZE") limit=$(ynh_read_var_in_file --file="$install_dir/cron.env" --key="FILES_SIZE")
link="https://$domain/yunohost/admin/#/apps/$app/actions" link="https://$domain/yunohost/admin/#/apps/$app/actions"
cat << EOF cat << EOF
ask: "Add subscriptions:\nAdd a subscription and $limit MB of file space to all users without a subscription.\n$link" ask: "Add subscriptions:\nAdd a subscription and $limit MB of file space to all users without a subscription.\n$link"
EOF EOF
} }
#================================================= #=================================================
@ -53,56 +42,56 @@ EOF
#================================================= #=================================================
set__disable_user_registration(){ set__disable_user_registration(){
#--------------------------------------------- #---------------------------------------------
# IMPORTANT: setter are trigger only if a change is detected # IMPORTANT: setter are trigger only if a change is detected
#--------------------------------------------- #---------------------------------------------
if [ $disable_user_registration = "1" ]; then if [ "$disable_user_registration" = "1" ]; then
disabled="true" disabled="true"
fi fi
if [ $disable_user_registration = "0" ]; then if [ "$disable_user_registration" = "0" ]; then
disabled="false" disabled="false"
fi fi
config_auth="$final_path/live/auth.env" config_auth="$install_dir/live/auth.env"
config_auth_worker="$final_path/live/auth-worker.env" config_auth_worker="$install_dir/live/auth-worker.env"
ynh_write_var_in_file --file="$config_auth" --key="DISABLE_USER_REGISTRATION" --value="$disabled"
ynh_write_var_in_file --file="$config_auth_worker" --key="DISABLE_USER_REGISTRATION" --value="$disabled"
ynh_store_file_checksum --file="$config_auth" ynh_write_var_in_file --file="$config_auth" --key="DISABLE_USER_REGISTRATION" --value="$disabled"
ynh_store_file_checksum --file="$config_auth_worker" ynh_write_var_in_file --file="$config_auth_worker" --key="DISABLE_USER_REGISTRATION" --value="$disabled"
ynh_systemd_action \ ynh_store_file_checksum --file="$config_auth"
--service_name="$app-auth" \ ynh_store_file_checksum --file="$config_auth_worker"
--action="restart" \
--log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth-worker" \
--action="restart" \
--log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
#--------------------------------------------- ynh_systemd_action \
# IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too --service_name="$app-auth" \
#--------------------------------------------- --action="restart" \
ynh_app_setting_set --app="$app" --key="disable_user_registration" --value="$disabled" --log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth-worker" \
--action="restart" \
--log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
#---------------------------------------------
# IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too
#---------------------------------------------
ynh_app_setting_set --app="$app" --key="disable_user_registration" --value="$disabled"
} }
set__files_limit(){ set__files_limit(){
#--------------------------------------------- #---------------------------------------------
# IMPORTANT: setter are trigger only if a change is detected # IMPORTANT: setter are trigger only if a change is detected
#--------------------------------------------- #---------------------------------------------
config_cron="$final_path/cron.env" config_cron="$install_dir/cron.env"
ynh_write_var_in_file --file="$config_cron" --key="FILES_SIZE" --value="$files_limit" ynh_write_var_in_file --file="$config_cron" --key="FILES_SIZE" --value="$files_limit"
ynh_store_file_checksum --file="$config_cron" ynh_store_file_checksum --file="$config_cron"
#--------------------------------------------- #---------------------------------------------
# IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too # IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too
#--------------------------------------------- #---------------------------------------------
ynh_app_setting_set --app="$app" --key="files_size" --value="$files_limit" ynh_app_setting_set --app="$app" --key="files_size" --value="$files_limit"
} }
#================================================= #=================================================

View file

@ -11,159 +11,43 @@ source ynh_add_swap
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# MANAGE SCRIPT FAILURE # INITIALIZE AND STORE SETTINGS
#================================================= #=================================================
ynh_clean_setup () {
true
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST
#=================================================
domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH
app=$YNH_APP_INSTANCE_NAME
redis_db=$(ynh_redis_get_free_db) redis_db=$(ynh_redis_get_free_db)
disable_user_registration=false disable_user_registration=false
files_size=100 files_size=100
#================================================= ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db"
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS ynh_app_setting_set --app="$app" --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration
#================================================= ynh_app_setting_set --app="$app" --key=FILES_SIZE --value=$files_size
ynh_script_progression --message="Validating installation parameters..." --weight=1
final_path=/opt/yunohost/$app
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
# Register (book) web path
ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
#================================================= #=================================================
# STORE SETTINGS FROM MANIFEST # INSTALL NODEJS
#================================================= #=================================================
ynh_script_progression --message="Storing installation settings..." --weight=3 ynh_script_progression --message="Installing NodeJS..." --weight=17
ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_install_nodejs --nodejs_version="$nodejs_version"
ynh_app_setting_set --app=$app --key=path --value=$path_url
ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db"
ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration
ynh_app_setting_set --app=$app --key=FILES_SIZE --value=$files_size
#=================================================
# STANDARD MODIFICATIONS
#=================================================
# FIND AND OPEN A PORT
#=================================================
ynh_script_progression --message="Finding an available port..." --weight=1
# Find an available port
port_api_gateway=$(ynh_find_port --port=3000)
port_auth=$(ynh_find_port --port=$((port_api_gateway+1)))
port_auth_worker=$(ynh_find_port --port=$((port_auth+1)))
port_files=$(ynh_find_port --port=$((port_auth_worker+1)))
port_syncing_server=$(ynh_find_port --port=$((port_files+1)))
port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1)))
port_workspace=$(ynh_find_port --port=$((port_syncing_server_worker+1)))
ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway
ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth
ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker
ynh_app_setting_set --app=$app --key=port_files --value=$port_files
ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server
ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker
ynh_app_setting_set --app=$app --key=port_workspace --value=$port_workspace
#=================================================
# INSTALL DEPENDENCIES
#=================================================
ynh_script_progression --message="Installing dependencies..." --weight=17
ynh_install_app_dependencies $pkg_dependencies
ynh_install_nodejs --nodejs_version=$nodejs_version
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_script_progression --message="Configuring system user..." --weight=1
# Create a system user
ynh_system_user_create --username=$app --home_dir="$final_path"
#=================================================
# CREATE A MYSQL DATABASE
#=================================================
ynh_script_progression --message="Creating a MySQL database..." --weight=2
db_name=$(ynh_sanitize_dbid --db_name=$app)
db_user=$db_name
ynh_app_setting_set --app=$app --key=db_name --value=$db_name
ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_script_progression --message="Setting up source files..." --weight=2 ynh_script_progression --message="Setting up source files..." --weight=2
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source --source_id=app --dest_dir="$final_path/live" ynh_setup_source --dest_dir="$install_dir/live"
cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$final_path/cron.sh" cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$install_dir/cron.sh"
chmod 750 "$final_path" chmod -R o-rwx "$install_dir"
chmod -R o-rwx "$final_path" chown -R "$app:$app" "$install_dir"
chown -R $app:$app "$final_path"
#================================================= chmod -R o-rwx "$data_dir"
# NGINX CONFIGURATION chown -R "$app:$app" "$data_dir"
#=================================================
ynh_script_progression --message="Configuring NGINX web server..." --weight=3
# Create a dedicated NGINX config
ynh_add_nginx_config
#=================================================
# SPECIFIC SETUP
#=================================================
# ADD SWAP
#=================================================
ynh_script_progression --message="Adding swap..."
if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then
ynh_add_swap --size=$swap_needed
fi
#=================================================
# CREATE DATA DIRECTORY
#=================================================
ynh_script_progression --message="Creating a data directory..." --weight=1
datadir=/home/yunohost.app/$app
ynh_app_setting_set --app=$app --key=datadir --value=$datadir
mkdir -p $datadir/uploads
chmod 750 "$datadir"
chmod -R o-rwx "$datadir"
chown -R $app:$app "$datadir"
#================================================= #=================================================
# ADD A CONFIGURATION # ADD A CONFIGURATION
#================================================= #=================================================
ynh_script_progression --message="Adding a configuration file..." --weight=2 ynh_script_progression --message="Adding configuration files..." --weight=2
config_api_gateway="$final_path/live/api-gateway.env"
config_auth="$final_path/live/auth.env"
config_auth_worker="$final_path/live/auth-worker.env"
config_files="$final_path/live/files.env"
config_syncing_server="$final_path/live/syncing-server.env"
config_syncing_server_worker="$final_path/live/syncing-server-worker.env"
config_workspace="$final_path/live/workspace.env"
jwt_secret=$(ynh_string_random --length=48 | base64) jwt_secret=$(ynh_string_random --length=48 | base64)
legacy_jwt_secret=$(ynh_string_random --length=48 | base64) legacy_jwt_secret=$(ynh_string_random --length=48 | base64)
@ -187,21 +71,26 @@ ynh_add_config --template="env_syncing-server.env.sample" --destination="$config
ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker" ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker"
ynh_add_config --template="env_workspace.env.sample" --destination="$config_workspace" ynh_add_config --template="env_workspace.env.sample" --destination="$config_workspace"
ynh_add_config --template="cron.env" --destination="$install_dir/cron.env"
#================================================= #=================================================
# INSTALLING Standard Notes - Syncing Server # INSTALLING Standard Notes - Syncing Server
#================================================= #=================================================
ynh_script_progression --message="Installing Standard Notes - Syncing Server..." --weight=93 ynh_script_progression --message="Building Standard Notes - Syncing Server..." --weight=93
ynh_use_nodejs ynh_use_nodejs
pushd "$final_path/live" pushd "$install_dir/live"
ynh_exec_warn_less ynh_exec_as $app env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" $ynh_node_load_PATH yarn install --immutable ynh_exec_warn_less ynh_exec_as "$app" env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" "$ynh_node_load_PATH" yarn install --immutable
ynh_exec_warn_less ynh_exec_as $app env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" $ynh_node_load_PATH yarn build ynh_exec_warn_less ynh_exec_as "$app" env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" "$ynh_node_load_PATH" yarn build
popd popd
#================================================= #=================================================
# SETUP SYSTEMD # SYSTEM CONFIGURATION
#================================================= #=================================================
ynh_script_progression --message="Configuring a systemd service..." --weight=4 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 # Create a dedicated systemd config
ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service"
@ -212,26 +101,13 @@ ynh_add_systemd_config --service="$app-syncing-server" --template="systemd_synci
ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service" ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service"
ynh_add_systemd_config --service="$app-workspace" --template="systemd_workspace.service" ynh_add_systemd_config --service="$app-workspace" --template="systemd_workspace.service"
#================================================= yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log"
# SETUP A CRON yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log"
#================================================= yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log"
ynh_script_progression --message="Setup a cron..." yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log"
ynh_add_config --template="../conf/cron.env" --destination="$final_path/cron.env" yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log"
ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log"
chown root: "/etc/cron.d/$app"
chmod 640 "/etc/cron.d/$app"
#=================================================
# GENERIC FINALIZATION
#=================================================
# SETUP LOGROTATE
#=================================================
ynh_script_progression --message="Configuring log rotation..." --weight=1
mkdir -p "/var/log/$app"
chown -R "$app": "/var/log/$app"
# Use logrotate to manage application logfile(s) # Use logrotate to manage application logfile(s)
ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log"
@ -242,84 +118,58 @@ ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log"
ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log"
ynh_use_logrotate --logfile="/var/log/$app/workspace.log" ynh_use_logrotate --logfile="/var/log/$app/workspace.log"
#================================================= # Create a dedicated Fail2Ban config
# INTEGRATE SERVICE IN YUNOHOST ynh_add_fail2ban_config --use_template
#=================================================
ynh_script_progression --message="Integrating service in YunoHost..." --weight=1
yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" ynh_add_config --template="cron" --destination="/etc/cron.d/$app"
yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log" chmod 640 "/etc/cron.d/$app"
yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log" chown root: "/etc/cron.d/$app"
yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log" if [ "${PACKAGE_CHECK_EXEC:-0}" -eq 0 ]; then
yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log" ynh_add_swap --size="$swap_needed"
yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log" fi
#================================================= #=================================================
# START SYSTEMD SERVICE # START SYSTEMD SERVICE
#================================================= #=================================================
ynh_script_progression --message="Starting a systemd service..." --weight=1 ynh_script_progression --message="Starting systemd services..." --weight=1
# Start a systemd service # Start a systemd service
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-api-gateway" \ --service_name="$app-api-gateway" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/api-gateway.log" \ --log_path="/var/log/$app/api-gateway.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth" \ --service_name="$app-auth" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/auth.log" \ --log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth-worker" \ --service_name="$app-auth-worker" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/auth-worker.log" \ --log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-files" \ --service_name="$app-files" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/files.log" \ --log_path="/var/log/$app/files.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server" \ --service_name="$app-syncing-server" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/syncing-server.log" \ --log_path="/var/log/$app/syncing-server.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server-worker" \ --service_name="$app-syncing-server-worker" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/syncing-server-worker.log" \ --log_path="/var/log/$app/syncing-server-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-workspace" \ --service_name="$app-workspace" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/workspace.log" \ --log_path="/var/log/$app/workspace.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
#=================================================
# SETUP FAIL2BAN
#=================================================
ynh_script_progression --message="Configuring Fail2Ban..." --weight=1
# Create a dedicated Fail2Ban config
ynh_add_fail2ban_config --use_template
#=================================================
# SETUP SSOWAT
#=================================================
ynh_script_progression --message="Configuring permissions..." --weight=3
# Everyone can access the app.
# The "main" permission is automatically created before the install script.
ynh_permission_update --permission="main" --add="visitors" --show_tile="false"
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT

View file

@ -11,73 +11,40 @@ source ynh_add_swap
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # REMOVE SYSTEM CONFIGURATIONS
#=================================================
ynh_script_progression --message="Loading installation settings..." --weight=1
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get --app=$app --key=domain)
port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway)
port_auth=$(ynh_app_setting_get --app=$app --key=port_auth)
port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker)
port_files=$(ynh_app_setting_get --app=$app --key=port_files)
port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server)
port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker)
port_workspace=$(ynh_app_setting_get --app=$app --key=port_workspace)
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$db_name
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
#=================================================
# STANDARD REMOVE
#=================================================
# REMOVE SERVICE INTEGRATION IN YUNOHOST
#================================================= #=================================================
ynh_script_progression --message="Removing system configurations related to $app..." --weight=1
# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) # Remove the service from the list of services known by YunoHost (added from `yunohost service add`)
if ynh_exec_warn_less yunohost service status "$app-api-gateway" >/dev/null if ynh_exec_warn_less yunohost service status "$app-api-gateway" >/dev/null; then
then ynh_script_progression --message="Removing $app-api-gateway service..." --weight=1
ynh_script_progression --message="Removing $app-api-gateway service..." --weight=1 yunohost service remove "$app-api-gateway"
yunohost service remove "$app-api-gateway"
fi fi
if ynh_exec_warn_less yunohost service status "$app-auth" >/dev/null if ynh_exec_warn_less yunohost service status "$app-auth" >/dev/null; then
then ynh_script_progression --message="Removing $app-auth service..." --weight=1
ynh_script_progression --message="Removing $app-auth service..." --weight=1 yunohost service remove "$app-auth"
yunohost service remove "$app-auth"
fi fi
if ynh_exec_warn_less yunohost service status "$app-auth-worker" >/dev/null if ynh_exec_warn_less yunohost service status "$app-auth-worker" >/dev/null; then
then ynh_script_progression --message="Removing $app-auth-worker service..." --weight=1
ynh_script_progression --message="Removing $app-auth-worker service..." --weight=1 yunohost service remove "$app-auth-worker"
yunohost service remove "$app-auth-worker"
fi fi
if ynh_exec_warn_less yunohost service status "$app-files" >/dev/null if ynh_exec_warn_less yunohost service status "$app-files" >/dev/null; then
then ynh_script_progression --message="Removing $app-files service..." --weight=1
ynh_script_progression --message="Removing $app-files service..." --weight=1 yunohost service remove "$app-files"
yunohost service remove "$app-files"
fi fi
if ynh_exec_warn_less yunohost service status "$app-syncing-server" >/dev/null if ynh_exec_warn_less yunohost service status "$app-syncing-server" >/dev/null; then
then ynh_script_progression --message="Removing $app-syncing-server service..." --weight=1
ynh_script_progression --message="Removing $app-syncing-server service..." --weight=1 yunohost service remove "$app-syncing-server"
yunohost service remove "$app-syncing-server"
fi fi
if ynh_exec_warn_less yunohost service status "$app-syncing-server-worker" >/dev/null if ynh_exec_warn_less yunohost service status "$app-syncing-server-worker" >/dev/null; then
then ynh_script_progression --message="Removing $app-syncing-server-worker service..." --weight=1
ynh_script_progression --message="Removing $app-syncing-server-worker service..." --weight=1 yunohost service remove "$app-syncing-server-worker"
yunohost service remove "$app-syncing-server-worker"
fi fi
if ynh_exec_warn_less yunohost service status "$app-workspace" >/dev/null if ynh_exec_warn_less yunohost service status "$app-workspace" >/dev/null; then
then ynh_script_progression --message="Removing $app-workspace service..." --weight=1
ynh_script_progression --message="Removing $app-workspace service..." --weight=1 yunohost service remove "$app-workspace"
yunohost service remove "$app-workspace"
fi fi
#=================================================
# STOP AND REMOVE SERVICE
#=================================================
ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1
# Remove the dedicated systemd config # Remove the dedicated systemd config
ynh_remove_systemd_config --service="$app-api-gateway" ynh_remove_systemd_config --service="$app-api-gateway"
ynh_remove_systemd_config --service="$app-auth" ynh_remove_systemd_config --service="$app-auth"
@ -89,73 +56,24 @@ ynh_remove_systemd_config --service="$app-workspace"
ynh_reset_systemd ynh_reset_systemd
#=================================================
# REMOVE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Removing logrotate configuration..." --weight=1
# Remove the app-specific logrotate config # Remove the app-specific logrotate config
ynh_remove_logrotate ynh_remove_logrotate
#=================================================
# REMOVE THE MYSQL DATABASE
#=================================================
ynh_script_progression --message="Removing the MySQL database..." --weight=1
# Remove a database if it exists, along with the associated user
ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name
#=================================================
# REMOVE REDIS DB
#=================================================
ynh_script_progression --message="Removing the Redis database..." --weight=1
ynh_redis_remove_db ynh_redis_remove_db
#=================================================
# REMOVE APP MAIN DIR
#=================================================
ynh_script_progression --message="Removing app main directory..." --weight=1
# Remove the app directory securely
ynh_secure_remove --file="$final_path"
#=================================================
# REMOVE DATA DIR
#=================================================
# Remove the data directory if --purge option is used
if [ "${YNH_APP_PURGE:-0}" -eq 1 ]
then
ynh_script_progression --message="Removing app data directory..." --weight=1
ynh_secure_remove --file="$datadir"
fi
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Removing NGINX web server configuration..." --weight=1
# Remove the dedicated NGINX config # Remove the dedicated NGINX config
ynh_remove_nginx_config ynh_remove_nginx_config
#=================================================
# REMOVE DEPENDENCIES
#=================================================
ynh_script_progression --message="Removing dependencies..." --weight=10
# Remove metapackage and its dependencies
ynh_remove_app_dependencies
ynh_remove_nodejs
#=================================================
# REMOVE FAIL2BAN CONFIGURATION
#=================================================
ynh_script_progression --message="Removing Fail2Ban configuration..." --weight=1
# Remove the dedicated Fail2Ban config # Remove the dedicated Fail2Ban config
ynh_remove_fail2ban_config ynh_remove_fail2ban_config
#=================================================
# REMOVE NODEJS
#=================================================
ynh_script_progression --message="Removing NodeJS..." --weight=10
ynh_remove_nodejs
#================================================= #=================================================
# SPECIFIC REMOVE # SPECIFIC REMOVE
#================================================= #=================================================
@ -175,19 +93,9 @@ ynh_secure_remove --file="/var/log/$app"
ynh_script_progression --message="Removing swap..." ynh_script_progression --message="Removing swap..."
if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then
ynh_del_swap ynh_del_swap
fi fi
#=================================================
# GENERIC FINALIZATION
#=================================================
# REMOVE DEDICATED USER
#=================================================
ynh_script_progression --message="Removing the dedicated system user..." --weight=1
# Delete a system user
ynh_system_user_delete --username=$app
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT
#================================================= #=================================================

View file

@ -11,142 +11,85 @@ source ../settings/scripts/_common.sh
source ../settings/scripts/ynh_add_swap source ../settings/scripts/ynh_add_swap
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
ynh_clean_setup () {
true
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --weight=2
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get --app=$app --key=domain)
path_url=$(ynh_app_setting_get --app=$app --key=path)
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$db_name
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
redis_db=$(ynh_redis_get_free_db) 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"
config_api_gateway="$final_path/live/api-gateway.env"
config_auth="$final_path/live/auth.env"
config_auth_worker="$final_path/live/auth-worker.env"
config_files="$final_path/live/files.env"
config_syncing_server="$final_path/live/syncing-server.env"
config_syncing_server_worker="$final_path/live/syncing-server-worker.env"
config_workspace="$final_path/live/workspace.env"
config_nginx="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
ynh_script_progression --message="Validating restoration parameters..." --weight=2
test ! -d $final_path \
|| ynh_die --message="There is already a directory: $final_path "
#=================================================
# STANDARD RESTORATION STEPS
#=================================================
# FIND AND OPEN A PORT
#=================================================
ynh_script_progression --message="Finding an available port..." --weight=1
# Find an available port
port_api_gateway=$(ynh_find_port --port=3000)
port_auth=$(ynh_find_port --port=$((port_api_gateway+1)))
port_auth_worker=$(ynh_find_port --port=$((port_auth+1)))
port_files=$(ynh_find_port --port=$((port_auth_worker+1)))
port_syncing_server=$(ynh_find_port --port=$((port_files+1)))
port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1)))
port_workspace=$(ynh_find_port --port=$((port_syncing_server_worker+1)))
ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway
ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth
ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker
ynh_app_setting_set --app=$app --key=port_files --value=$port_files
ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server
ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker
ynh_app_setting_set --app=$app --key=port_workspace --value=$port_workspace
#=================================================
# RECREATE THE DEDICATED USER
#=================================================
ynh_script_progression --message="Recreating the dedicated system user..." --weight=1
# Create the dedicated user (if not existing)
ynh_system_user_create --username=$app --home_dir="$final_path"
#================================================= #=================================================
# RESTORE THE APP MAIN DIR # RESTORE THE APP MAIN DIR
#================================================= #=================================================
ynh_script_progression --message="Restoring the app main directory..." --weight=1 ynh_script_progression --message="Restoring the app main directory..." --weight=1
ynh_restore_file --origin_path="$final_path" ynh_restore_file --origin_path="$install_dir"
chmod 750 "$final_path" chown -R "$app:$app" "$install_dir"
chmod -R o-rwx "$final_path"
chown -R $app:$app "$final_path"
#================================================= #=================================================
# RESTORE THE DATA DIRECTORY # RESTORE THE DATA DIRECTORY
#================================================= #=================================================
ynh_script_progression --message="Restoring the data directory..." --weight=1 ynh_script_progression --message="Restoring the data directory..." --weight=1
ynh_restore_file --origin_path="$datadir" --not_mandatory ynh_restore_file --origin_path="$data_dir" --not_mandatory
mkdir -p "$datadir/uploads" chown -R "$app:$app" "$data_dir"
chmod 750 "$datadir"
chmod -R o-rwx "$datadir"
chown -R $app:$app "$datadir"
#=================================================
# RESTORE FAIL2BAN CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=1
ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
ynh_systemd_action --action=restart --service_name=fail2ban
#=================================================
# SPECIFIC RESTORATION
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
ynh_script_progression --message="Reinstalling dependencies..." --weight=17
# Define and install dependencies
ynh_install_app_dependencies $pkg_dependencies
ynh_install_nodejs --nodejs_version=$nodejs_version
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
#=================================================
# RESTORE THE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# RESTORE THE MYSQL DATABASE # RESTORE THE MYSQL DATABASE
#================================================= #=================================================
ynh_script_progression --message="Restoring the MySQL database..." --weight=2 ynh_script_progression --message="Restoring the MySQL database..." --weight=2
db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) ynh_mysql_connect_as --user="$db_user" --password="$db_pwd" --database="$db_name" < ./db.sql
ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd
ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #=================================================
# RESTORE SYSTEM CONFIGURATIONS
#=================================================
ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
ynh_restore_file --origin_path="/etc/systemd/system/$app-api-gateway.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-auth.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-auth-worker.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-files.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server-worker.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-workspace.service"
systemctl enable "$app-api-gateway.service" --quiet
systemctl enable "$app-auth.service" --quiet
systemctl enable "$app-auth-worker.service" --quiet
systemctl enable "$app-files.service" --quiet
systemctl enable "$app-syncing-server.service" --quiet
systemctl enable "$app-syncing-server-worker.service" --quiet
systemctl enable "$app-workspace.service" --quiet
yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log"
yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log"
yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log"
yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log"
yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log"
yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log"
ynh_restore_file --origin_path="/etc/logrotate.d/$app"
ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
ynh_systemd_action --action=restart --service_name=fail2ban
ynh_restore_file --origin_path="/etc/cron.d/$app"
ynh_restore_file --origin_path="/var/log/$app/"
if [ "${PACKAGE_CHECK_EXEC:-0}" -eq 0 ]; then
ynh_add_swap --size="$swap_needed"
fi
#=================================================
# REINSTALL NODEJS
#=================================================
ynh_script_progression --message="Reinstalling NodeJS..." --weight=17
ynh_install_nodejs --nodejs_version="$nodejs_version"
#================================================= #=================================================
# MODIFY CONFIG # MODIFY CONFIG
@ -177,121 +120,56 @@ ynh_replace_string --match_string="^AUTH_SERVER_URL.*$" --replace_string="AUTH_S
ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker" ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_auth_worker" --target_file="$config_auth_worker"
# API-Gateway Port # API-Gateway Port
ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway" ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_api_gateway" --target_file="$config_api_gateway"
ynh_replace_string_on_line --line="2" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="$config_nginx" ynh_replace_string_on_line --line="2" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_api_gateway/;" --target_file="/etc/nginx/conf.d/$domain.d/$app.conf"
# Files Port # Files Port
ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files" ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_files" --target_file="$config_files"
ynh_replace_string_on_line --line="17" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="$config_nginx" ynh_replace_string_on_line --line="17" --match_string="proxy_pass.*$" --replace_string="proxy_pass http://127.0.0.1:$port_files/;" --target_file="/etc/nginx/conf.d/$domain.d/$app.conf"
# Workspace Port # Workspace Port
ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_workspace" --target_file="$config_workspace" ynh_replace_string --match_string="^PORT.*$" --replace_string="PORT=$port_workspace" --target_file="$config_workspace"
ynh_replace_string --match_string="^WORKSPACE_SERVER_URL.*$" --replace_string="WORKSPACE_SERVER_URL=http://localhost:$port_workspace" --target_file="$config_api_gateway" ynh_replace_string --match_string="^WORKSPACE_SERVER_URL.*$" --replace_string="WORKSPACE_SERVER_URL=http://localhost:$port_workspace" --target_file="$config_api_gateway"
#=================================================
# RESTORE VARIOUS FILES
#=================================================
ynh_script_progression --message="Restoring various files..." --weight=1
ynh_restore_file --origin_path="/etc/cron.d/$app"
#=================================================
# ADD SWAP
#=================================================
ynh_script_progression --message="Adding swap..."
if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then
ynh_add_swap --size=$swap_needed
fi
#=================================================
# RESTORE SYSTEMD
#=================================================
ynh_script_progression --message="Restoring the systemd configuration..." --weight=1
ynh_restore_file --origin_path="/etc/systemd/system/$app-api-gateway.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-auth.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-auth-worker.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-files.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-syncing-server-worker.service"
ynh_restore_file --origin_path="/etc/systemd/system/$app-workspace.service"
systemctl enable $app-api-gateway.service --quiet
systemctl enable $app-auth.service --quiet
systemctl enable $app-auth-worker.service --quiet
systemctl enable $app-files.service --quiet
systemctl enable $app-syncing-server.service --quiet
systemctl enable $app-syncing-server-worker.service --quiet
systemctl enable $app-workspace.service --quiet
#=================================================
# RESTORE THE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1
mkdir -p "/var/log/$app"
chown -R $app: "/var/log/$app"
ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#=================================================
# INTEGRATE SERVICE IN YUNOHOST
#=================================================
ynh_script_progression --message="Integrating service in YunoHost..." --weight=1
yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log"
yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log"
yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log"
yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log"
yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log"
yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log"
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting a systemd service..." --weight=1
ynh_systemd_action \
--service_name="$app-api-gateway" \
--action="start" \
--log_path="/var/log/$app/api-gateway.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth" \
--action="start" \
--log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth-worker" \
--action="start" \
--log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-files" \
--action="start" \
--log_path="/var/log/$app/files.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-syncing-server" \
--action="start" \
--log_path="/var/log/$app/syncing-server.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-syncing-server-worker" \
--action="start" \
--log_path="/var/log/$app/syncing-server-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-workspace" \
--action="start" \
--log_path="/var/log/$app/workspace.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX AND PHP-FPM OR THE APP SERVICE
#================================================= #=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=2 ynh_script_progression --message="Reloading NGINX web server and $app's services..." --weight=1
ynh_systemd_action \
--service_name="$app-api-gateway" \
--action="start" \
--log_path="/var/log/$app/api-gateway.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth" \
--action="start" \
--log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-auth-worker" \
--action="start" \
--log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-files" \
--action="start" \
--log_path="/var/log/$app/files.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-syncing-server" \
--action="start" \
--log_path="/var/log/$app/syncing-server.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-syncing-server-worker" \
--action="start" \
--log_path="/var/log/$app/syncing-server-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \
--service_name="$app-workspace" \
--action="start" \
--log_path="/var/log/$app/workspace.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action --service_name=nginx --action=reload ynh_systemd_action --service_name=nginx --action=reload

View file

@ -10,314 +10,135 @@ source _common.sh
source ynh_add_swap source ynh_add_swap
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --weight=1
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get --app=$app --key=domain)
path_url=$(ynh_app_setting_get --app=$app --key=path)
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$db_name
db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd)
port_api_gateway=$(ynh_app_setting_get --app=$app --key=port_api_gateway)
port_auth=$(ynh_app_setting_get --app=$app --key=port_auth)
port_auth_worker=$(ynh_app_setting_get --app=$app --key=port_auth_worker)
port_files=$(ynh_app_setting_get --app=$app --key=port_files)
port_syncing_server=$(ynh_app_setting_get --app=$app --key=port_syncing_server)
port_syncing_server_worker=$(ynh_app_setting_get --app=$app --key=port_syncing_server_worker)
port_workspace=$(ynh_app_setting_get --app=$app --key=port_workspace)
redis_db=$(ynh_app_setting_get --app=$app --key=redis_db)
jwt_secret=$(ynh_app_setting_get --app=$app --key=jwt_secret)
legacy_jwt_secret=$(ynh_app_setting_get --app=$app --key=legacy_jwt_secret)
auth_jwt_secret=$(ynh_app_setting_get --app=$app --key=auth_jwt_secret)
pseudo_key_params_key=$(ynh_app_setting_get --app=$app --key=pseudo_key_params_key)
encryption_server_key=$(ynh_app_setting_get --app=$app --key=encryption_server_key)
valet_token_secret=$(ynh_app_setting_get --app=$app --key=valet_token_secret)
disable_user_registration=$(ynh_app_setting_get --app=$app --key=DISABLE_USER_REGISTRATION)
files_size=$(ynh_app_setting_get --app=$app --key=FILES_SIZE)
config_api_gateway="$final_path/live/api-gateway.env"
config_auth="$final_path/live/auth.env"
config_auth_worker="$final_path/live/auth-worker.env"
config_files="$final_path/live/files.env"
config_syncing_server="$final_path/live/syncing-server.env"
config_syncing_server_worker="$final_path/live/syncing-server-worker.env"
config_workspace="$final_path/live/workspace.env"
nodejs_version_installed=$(ynh_app_setting_get --app=$app --key=nodejs_version)
#=================================================
# CHECK VERSION
#=================================================
ynh_script_progression --message="Checking version..."
upgrade_type=$(ynh_check_app_version_changed)
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=1
# Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () {
# Restore it if the upgrade fails
ynh_restore_upgradebackup
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# STANDARD UPGRADE STEPS # STANDARD UPGRADE STEPS
#================================================= #=================================================
# STOP SYSTEMD SERVICE # STOP SYSTEMD SERVICE
#================================================= #=================================================
ynh_script_progression --message="Stopping a systemd service..." --weight=1 ynh_script_progression --message="Stopping systemd services..." --weight=1
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-api-gateway" \ --service_name="$app-api-gateway" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/api-gateway.log" --log_path="/var/log/$app/api-gateway.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth" \ --service_name="$app-auth" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/auth.log" --log_path="/var/log/$app/auth.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth-worker" \ --service_name="$app-auth-worker" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/auth-worker.log" --log_path="/var/log/$app/auth-worker.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-files" \ --service_name="$app-files" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/files.log" --log_path="/var/log/$app/files.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server" \ --service_name="$app-syncing-server" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/syncing-server.log" --log_path="/var/log/$app/syncing-server.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server-worker" \ --service_name="$app-syncing-server-worker" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/syncing-server-worker.log" --log_path="/var/log/$app/syncing-server-worker.log"
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-workspace" \ --service_name="$app-workspace" \
--action="stop" \ --action="stop" \
--log_path="/var/log/$app/workspace.log" --log_path="/var/log/$app/workspace.log"
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
#================================================= #=================================================
ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 ynh_script_progression --message="Ensuring downward compatibility..." --weight=1
# If final_path doesn't exist, create it # Create non existing settings
if [ -z "$final_path" ]; then if [ -z "${jwt_secret:-}" ]; then
final_path=/opt/yunohost/$app jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=final_path --value=$final_path ynh_app_setting_set --app="$app" --key=jwt_secret --value="$jwt_secret"
fi
if [ -z "${legacy_jwt_secret:-}" ]; then
legacy_jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app="$app" --key=legacy_jwt_secret --value="$legacy_jwt_secret"
fi
if [ -z "${auth_jwt_secret:-}" ]; then
auth_jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app="$app" --key=auth_jwt_secret --value="$auth_jwt_secret"
fi
if [ -z "${pseudo_key_params_key:-}" ]; then
pseudo_key_params_key=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app="$app" --key=pseudo_key_params_key --value="$pseudo_key_params_key"
fi
if [ -z "${encryption_server_key:-}" ]; then
encryption_server_key=$(hexdump -n 32 -e '4/4 "%08X"' /dev/random) # 32bytes hex key is required
ynh_app_setting_set --app="$app" --key=encryption_server_key --value="$encryption_server_key"
fi
if [ -z "${valet_token_secret:-}" ]; then
valet_token_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app="$app" --key=valet_token_secret --value="$valet_token_secret"
fi
if [ -z "${disable_user_registration:-}" ]; then
disable_user_registration=false
ynh_app_setting_set --app="$app" --key=DISABLE_USER_REGISTRATION --value="$disable_user_registration"
fi
if [ -z "${files_size:-}" ]; then
files_size=100
ynh_app_setting_set --app="$app" --key=FILES_SIZE --value="$files_size"
fi fi
# If redis_db doesn't exist, create it # Delete legacy settings
if [ -z "$redis_db" ]; then if [ -n "${api_gateway_version_installed+x}" ]; then
redis_db=$(ynh_redis_get_free_db) ynh_app_setting_delete --app="$app" --key=api_gateway_version_installed
ynh_app_setting_set --app=$app --key=redis_db --value="$redis_db"
fi fi
if [ -n "${auth_version_installed+x}" ]; then
ynh_app_setting_delete --app="$app" --key=auth_version_installe
# If one port_* doesn't exist, create all new
if [[ -z "$port_api_gateway" || \
-z "$port_auth" || \
-z "$port_auth_worker" || \
-z "$port_files" || \
-z "$port_syncing_server" || \
-z "$port_syncing_server_worker" || \
-z "$port_workspace" ]]; then
port_api_gateway=$(ynh_find_port --port=3000)
port_auth=$(ynh_find_port --port=$((port_api_gateway+1)))
port_auth_worker=$(ynh_find_port --port=$((port_auth+1)))
port_files=$(ynh_find_port --port=$((port_auth_worker+1)))
port_syncing_server=$(ynh_find_port --port=$((port_files+1)))
port_syncing_server_worker=$(ynh_find_port --port=$((port_syncing_server+1)))
port_workspace=$(ynh_find_port --port=$((port_syncing_server_worker+1)))
ynh_app_setting_set --app=$app --key=port_api_gateway --value=$port_api_gateway
ynh_app_setting_set --app=$app --key=port_auth --value=$port_auth
ynh_app_setting_set --app=$app --key=port_auth_worker --value=$port_auth_worker
ynh_app_setting_set --app=$app --key=port_files --value=$port_files
ynh_app_setting_set --app=$app --key=port_syncing_server --value=$port_syncing_server
ynh_app_setting_set --app=$app --key=port_syncing_server_worker --value=$port_syncing_server_worker
ynh_app_setting_set --app=$app --key=port_workspace --value=$port_workspace
fi fi
if [ -n "${syncing_server_version_installed+x}" ]; then
# If jwt_secret doesn't exist, create it ynh_app_setting_delete --app="$app" --key=syncing_server_version_installed
if [ -z "$jwt_secret" ]; then
jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=jwt_secret --value=$jwt_secret
fi fi
# If legacy_jwt_secret doesn't exist, create it if [ -n "${install_dir_www+x}" ]; then
if [ -z "$legacy_jwt_secret" ]; then ynh_app_setting_delete --app="$app" --key=install_dir_www
legacy_jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=legacy_jwt_secret --value=$legacy_jwt_secret
fi fi
# If auth_jwt_secret doesn't exist, create it if [ -n "${install_dir_extensions+x}" ]; then
if [ -z "$auth_jwt_secret" ]; then ynh_app_setting_delete --app="$app" --key=install_dir_extensions
auth_jwt_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=auth_jwt_secret --value=$auth_jwt_secret
fi
# If pseudo_key_params_key doesn't exist, create it
if [ -z "$pseudo_key_params_key" ]; then
pseudo_key_params_key=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=pseudo_key_params_key --value=$pseudo_key_params_key
fi
# If encryption_server_key doesn't exist, create it
if [ -z "$encryption_server_key" ]; then
encryption_server_key=$(hexdump -n 32 -e '4/4 "%08X"' /dev/random) # 32bytes hex key is required
ynh_app_setting_set --app=$app --key=encryption_server_key --value=$encryption_server_key
fi
# If valet_token_secret doesn't exist, create it
if [ -z "$valet_token_secret" ]; then
valet_token_secret=$(ynh_string_random --length=48 | base64)
ynh_app_setting_set --app=$app --key=valet_token_secret --value=$valet_token_secret
fi
# If disable_user_registration doesn't exist, create it
if [ -z "$disable_user_registration" ]; then
disable_user_registration=false
ynh_app_setting_set --app=$app --key=DISABLE_USER_REGISTRATION --value=$disable_user_registration
fi
# If files_zise doesn't exist, create it
if [ -z "$files_size" ]; then
files_size=100
ynh_app_setting_set --app=$app --key=FILES_SIZE --value=$files_size
fi
# Remove old Settings, Services, Files, Dependencies
# If final_path_www exist, delete it
api_gateway_version_installed=$(ynh_app_setting_get --app=$app --key=api_gateway_version)
auth_version_installed=$(ynh_app_setting_get --app=$app --key=auth_version)
syncing_server_version_installed=$(ynh_app_setting_get --app=$app --key=syncing_server_version)
final_path_www=$(ynh_app_setting_get --app=$app --key=final_path_www)
final_path_extensions=$(ynh_app_setting_get --app=$app --key=final_path_extensions)
if [ -n ${api_gateway_version_installed+x} ]; then
ynh_app_setting_delete --app=$app --key=api_gateway_version_installed
fi
if [ -n ${auth_version_installed+x} ]; then
ynh_app_setting_delete --app=$app --key=auth_version_installe
fi
if [ -n ${syncing_server_version_installed+x} ]; then
ynh_app_setting_delete --app=$app --key=syncing_server_version_installed
fi
if [ -n ${final_path_www+x} ]; then
ynh_app_setting_delete --app=$app --key=final_path_www
fi
# If final_path_extensions exist, delete it
if [ -n ${final_path_extensions+x} ]; then
ynh_app_setting_delete --app=$app --key=final_path_extensions
fi
# If permission help exists, delete it
if ynh_permission_exists --permission="help"
then
ynh_permission_delete --permission="help"
fi fi
# If old service exsits; remove it # If old service exsits; remove it
if ynh_exec_warn_less yunohost service status "$app-syncing-server-js" >/dev/null if ynh_exec_warn_less yunohost service status "$app-syncing-server-js" >/dev/null; then
then ynh_script_progression --message="Removing old service..." --weight=1
ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js"
yunohost service remove "$app-syncing-server-js" ynh_remove_systemd_config --service="$app-syncing-server-js"
ynh_remove_systemd_config --service="$app-syncing-server-js" ynh_reset_systemd
ynh_reset_systemd
fi fi
if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null if ynh_exec_warn_less yunohost service status "$app-syncing-server-js-worker" >/dev/null; then
then ynh_script_progression --message="Removing old service..." --weight=1
ynh_script_progression --message="Removing old service..." --weight=1 yunohost service remove "$app-syncing-server-js-worker"
yunohost service remove "$app-syncing-server-js-worker" ynh_remove_systemd_config --service="$app-syncing-server-js-worker"
ynh_remove_systemd_config --service="$app-syncing-server-js-worker" ynh_reset_systemd
ynh_reset_systemd
fi
# Remove unneeded data
if [ -e "/var/www/$app" ]; then
ynh_secure_remove --file="/var/www/$app"
fi
# If datadir doesn't exist, create it
# CREATE DATA DIRECTORY
if [ -z "$datadir" ]; then
datadir=/home/yunohost.app/$app
ynh_app_setting_set --app=$app --key=datadir --value=$datadir
mkdir -p $datadir/uploads
chmod -R 750 "$datadir"
chmod -R o-rwx "$datadir"
chown -R $app:$app "$datadir"
fi fi
#================================================= #=================================================
# CREATE DEDICATED USER # UPGRADE NODEJS
#================================================= #=================================================
ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 ynh_script_progression --message="Upgrading NodeJS..." --weight=1
# Create a dedicated user (if not existing) ynh_install_nodejs --nodejs_version="$nodejs_version"
ynh_system_user_create --username=$app --home_dir="$final_path"
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_script_progression --message="Upgrading source files..." --weight=1
if [ "$upgrade_type" == "UPGRADE_APP" ] # Download, check integrity, uncompress and patch the source from app.src
then ynh_setup_source --dest_dir="$install_dir/live" --full_replace=1
ynh_script_progression --message="Upgrading source files..." --weight=1 cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$install_dir/cron.sh"
# Download, check integrity, uncompress and patch the source from app.src chmod -R o-rwx "$install_dir"
ynh_secure_remove --file="$final_path/live" chown -R "$app:$app" "$install_dir"
mkdir -p "$final_path/live"
ynh_setup_source --source_id=app --dest_dir="$final_path/live"
cp "$YNH_APP_BASEDIR/sources/extra_files/cron.sh" "$final_path/cron.sh"
chmod 750 "$final_path"
chmod -R o-rwx "$final_path"
chown -R $app:$app "$final_path"
fi
#================================================= #=================================================
# UPGRADE DEPENDENCIES # ADD A CONFIGURATION
#================================================= #=================================================
ynh_script_progression --message="Upgrading dependencies..." --weight=1 ynh_script_progression --message="Adding configuration files..." --weight=2
ynh_install_app_dependencies $pkg_dependencies
ynh_install_nodejs --nodejs_version=$nodejs_version
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
#=================================================
# NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=1
# Create a dedicated NGINX config
ynh_add_nginx_config
#=================================================
# SPECIFIC UPGRADE
#=================================================
# ADD SWAP
#=================================================
ynh_script_progression --message="Adding swap..."
if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then
ynh_add_swap --size=$swap_needed
fi
#=================================================
# UPDATE A CONFIG FILE
#=================================================
ynh_script_progression --message="Updating a configuration file..." --weight=2
ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway" ynh_add_config --template="env_api-gateway.env.sample" --destination="$config_api_gateway"
ynh_add_config --template="env_auth.env.sample" --destination="$config_auth" ynh_add_config --template="env_auth.env.sample" --destination="$config_auth"
@ -327,23 +148,26 @@ ynh_add_config --template="env_syncing-server.env.sample" --destination="$config
ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker" ynh_add_config --template="env_syncing-server-worker.env.sample" --destination="$config_syncing_server_worker"
ynh_add_config --template="env_workspace.env.sample" --destination="$config_workspace" ynh_add_config --template="env_workspace.env.sample" --destination="$config_workspace"
ynh_add_config --template="cron.env" --destination="$install_dir/cron.env"
#================================================= #=================================================
# INSTALLING Standard Notes - Syncing Server # INSTALLING Standard Notes - Syncing Server
#================================================= #=================================================
if [ "$upgrade_type" == "UPGRADE_APP" ] ynh_script_progression --message="Building Standard Notes - Syncing Server..." --weight=93
then
ynh_script_progression --message="Installing Standard Notes - Syncing Server..." --weight=93 ynh_use_nodejs
ynh_use_nodejs pushd "$install_dir/live"
pushd "$final_path/live" ynh_exec_warn_less ynh_exec_as "$app" env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" "$ynh_node_load_PATH" yarn install --immutable
ynh_exec_warn_less ynh_exec_as $app env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" $ynh_node_load_PATH yarn install --immutable ynh_exec_warn_less ynh_exec_as "$app" env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" "$ynh_node_load_PATH" yarn build
ynh_exec_warn_less ynh_exec_as $app env NODE_ENV="production" NODE_OPTIONS="--max-old-space-size=$node_max_old_space_size" $ynh_node_load_PATH yarn build popd
popd
fi
#================================================= #=================================================
# SETUP SYSTEMD # REAPPLY SYSTEM CONFIGURATIONS
#================================================= #=================================================
ynh_script_progression --message="Upgrading systemd configuration..." --weight=1 ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1
# Create a dedicated NGINX config
ynh_add_nginx_config
# Create a dedicated systemd config # Create a dedicated systemd config
ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service" ynh_add_systemd_config --service="$app-api-gateway" --template="systemd_api-gateway.service"
@ -354,15 +178,13 @@ ynh_add_systemd_config --service="$app-syncing-server" --template="systemd_synci
ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service" ynh_add_systemd_config --service="$app-syncing-server-worker" --template="systemd_syncing-server-worker.service"
ynh_add_systemd_config --service="$app-workspace" --template="systemd_workspace.service" ynh_add_systemd_config --service="$app-workspace" --template="systemd_workspace.service"
#================================================= yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log"
# GENERIC FINALIZATION yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log"
#================================================= yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log"
# SETUP LOGROTATE yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
#================================================= yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log"
ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log"
yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log"
mkdir -p "/var/log/$app"
chown -R "$app": "/var/log/$app"
# Use logrotate to manage application logfile(s) # Use logrotate to manage application logfile(s)
ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log" ynh_use_logrotate --logfile="/var/log/$app/api-gateway.log"
@ -373,86 +195,58 @@ ynh_use_logrotate --logfile="/var/log/$app/syncing-server.log"
ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log" ynh_use_logrotate --logfile="/var/log/$app/syncing-server-worker.log"
ynh_use_logrotate --logfile="/var/log/$app/workspace.log" ynh_use_logrotate --logfile="/var/log/$app/workspace.log"
#================================================= # Create a dedicated Fail2Ban config
# INTEGRATE SERVICE IN YUNOHOST ynh_add_fail2ban_config --use_template
#=================================================
ynh_script_progression --message="Integrating service in YunoHost..." --weight=1
yunohost service add "$app-api-gateway" --description="Standard Notes - API Gateway" --log="/var/log/$app/api-gateway.log" ynh_add_config --template="cron" --destination="/etc/cron.d/$app"
yunohost service add "$app-auth" --description="Standard Notes - Auth" --log="/var/log/$app/auth.log" chown root: "/etc/cron.d/$app"
yunohost service add "$app-auth-worker" --description="Standard Notes - Auth - Worker" --log="/var/log/$app/auth-worker.log" chmod 640 "/etc/cron.d/$app"
yunohost service add "$app-files" --description="Standard Notes - Files" --log="/var/log/$app/files.log"
yunohost service add "$app-syncing-server" --description="Standard Notes - Syncing Server" --log="/var/log/$app/syncing-server.log" if [ "${PACKAGE_CHECK_EXEC:-0}" -eq 0 ]; then
yunohost service add "$app-syncing-server-worker" --description="Standard Notes - Syncing Server - Worker" --log="/var/log/$app/syncing-server-worker.log" ynh_add_swap --size="$swap_needed"
yunohost service add "$app-workspace" --description="Standard Notes - Workspace" --log="/var/log/$app/workspace.log" fi
#================================================= #=================================================
# START SYSTEMD SERVICE # START SYSTEMD SERVICE
#================================================= #=================================================
ynh_script_progression --message="Starting a systemd service..." --weight=1 ynh_script_progression --message="Starting systemd services..." --weight=1
# Start a systemd service # Start a systemd service
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-api-gateway" \ --service_name="$app-api-gateway" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/api-gateway.log" \ --log_path="/var/log/$app/api-gateway.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth" \ --service_name="$app-auth" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/auth.log" \ --log_path="/var/log/$app/auth.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-auth-worker" \ --service_name="$app-auth-worker" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/auth-worker.log" \ --log_path="/var/log/$app/auth-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-files" \ --service_name="$app-files" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/files.log" \ --log_path="/var/log/$app/files.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server" \ --service_name="$app-syncing-server" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/syncing-server.log" \ --log_path="/var/log/$app/syncing-server.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-syncing-server-worker" \ --service_name="$app-syncing-server-worker" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/syncing-server-worker.log" \ --log_path="/var/log/$app/syncing-server-worker.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
ynh_systemd_action \ ynh_systemd_action \
--service_name="$app-workspace" \ --service_name="$app-workspace" \
--action="start" \ --action="start" \
--log_path="/var/log/$app/workspace.log" \ --log_path="/var/log/$app/workspace.log" \
--line_match='^.*Server started on port.*$|^.*Starting worker.*$' --line_match='^.*Server started on port.*$|^.*Starting worker.*$'
#=================================================
# SETUP A CRON
#=================================================
ynh_script_progression --message="Setup a cron..."
ynh_add_config --template="../conf/cron.env" --destination="$final_path/cron.env"
ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app"
chown root: "/etc/cron.d/$app"
chmod 640 "/etc/cron.d/$app"
#=================================================
# UPGRADE FAIL2BAN
#=================================================
ynh_script_progression --message="Reconfiguring Fail2Ban..." --weight=1
# Create a dedicated Fail2Ban config
ynh_add_fail2ban_config --use_template
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#================================================= #=================================================
# END OF SCRIPT # END OF SCRIPT

View file

@ -2,7 +2,7 @@
if [ ! -f .env ] if [ ! -f .env ]
then then
export $(cat cron.env | grep -v -E "^#" | xargs) export $(cat cron.env | grep -v -E "^#" | xargs)
fi fi
FILE_UPLOAD_BYTES_PER_MB=1048576 FILE_UPLOAD_BYTES_PER_MB=1048576
@ -10,28 +10,28 @@ FILE_UPLOAD_BYTES_LIMIT=$(($FILES_SIZE*$FILE_UPLOAD_BYTES_PER_MB))
# Searching for new users in the last 10 minutes without a Pro_Plan subscription. # Searching for new users in the last 10 minutes without a Pro_Plan subscription.
mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \ mysql --password=$DB_PASSWORD --database=$DB_DATABASE <<< " \
SELECT email FROM users WHERE created_at >= DATE_SUB( TIMESTAMP(NOW()), INTERVAL 10 MINUTE) AND NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \ SELECT email FROM users WHERE created_at >= DATE_SUB( TIMESTAMP(NOW()), INTERVAL 10 MINUTE) AND NOT EXISTS( SELECT * FROM user_subscriptions WHERE user_subscriptions.plan_name = \"PRO_PLAN\" AND user_subscriptions.user_uuid = users.uuid ); \
" 2>/dev/null | " 2>/dev/null |
# Read through the piped result until it's empty. # Read through the piped result until it's empty.
while IFS='\n' read email; do while IFS='\n' read email; do
if [[ $email = "0" ]]; then if [[ $email = "0" ]]; then
echo "No new users registered" echo "No new users registered"
fi fi
if [[ ${email} = "email" ]]; then if [[ ${email} = "email" ]]; then
echo "New users found:" echo "New users found:"
echo "----------------------------------------" echo "----------------------------------------"
else else
# ADD new user with Email $EMAIL a PRO_PLAN subscription # ADD new user with Email $EMAIL a PRO_PLAN subscription
echo "[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription." echo "[$(date -Iseconds)] User: $email added to the PRO_PLAN subscription."
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \
"INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);" "INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"$email\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);"
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \
"INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";" "INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"$email\"), subscription_id=1, subscription_type=\"regular\";"
# Add new user Files space. Size is 1GB*$FILES_SIZE # Add new user Files space. Size is 1GB*$FILES_SIZE
echo "[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae." echo "[$(date -Iseconds)] User: $email added $FILES_SIZE MB of file spcae."
mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \ mysql --password=$DB_PASSWORD --database=$DB_DATABASE -e \
"INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));" "INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), \"FILE_UPLOAD_BYTES_LIMIT\", \"$FILE_UPLOAD_BYTES_LIMIT\", FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email=\"$email\"));"
fi fi
done done

11
tests.toml Normal file
View file

@ -0,0 +1,11 @@
#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json
test_format = 1.0
[default]
# ------------
# Tests to run
# ------------
test_upgrade_from.62b95a36.name = "2022.09.16~ynh1"