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

Merge branch 'testing' into fix-attachment-limit

This commit is contained in:
ljf (zamentur) 2019-04-02 13:16:27 +02:00 committed by GitHub
commit eb14312870
17 changed files with 922 additions and 3026 deletions

2666
LICENSE

File diff suppressed because it is too large Load diff

View file

@ -1,19 +1,25 @@
# Wekan for Yunohost # Wekan for Yunohost
[![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan)
[![Install Wekan with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan)
> *This package allow you to install wekan quickly and simply on a YunoHost server.
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
## Overview
Wekan is an open-source kanban board (task manager and organizer) Wekan is an open-source kanban board (task manager and organizer)
[![Integration level](https://dash.yunohost.org/integration/wekan.svg)](https://dash.yunohost.org/appci/app/wekan) **Shipped version:** 2.48
[![Install Wordpress with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wekan)
## Screenshot ## Screenshots
![](screenshot.jpg) ![](screenshot.jpg)
## Status ## Status
- This app only works on x86, 64bits architecture ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)... - This app **only works on x86, 64bits architecture** ! In particular, it won't work on 32 bit machines or ARM. See the discussion [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/1#issuecomment-401612500). On the long term, [support for ARM64 might happen](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html)...
- There is currently no SSO/LDAP integration though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. c.f. discussion in [here](https://github.com/YunoHost-Apps/wekan_ynh/issues/4). In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan. - There is currently **no SSO integration** though it might be integrated at some point in the app, now that it's supported in Meteor/Wekan. In the meantime, users can create accounts (in fact, they can create infinite number of accounts) manually, and need to login manually specifically in Wekan.
## Infos ## Infos
@ -27,4 +33,43 @@ Wekan is an open-source kanban board (task manager and organizer)
**Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan. **Private/Public mode:** In private mode, only authorized YunoHost members can access to the wekan.
**SSO/LDAP:** SSO and LDAP are not configured. ## Configuration
First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Wekan Admin Panel.
## Documentation
* Official documentation: https://github.com/wekan/wekan/wiki
## YunoHost specific features
#### Multi-users support
LDAP is supported but HTTP auth is still not supported
#### Supported architectures
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wekan%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/wekan/)
* ARMv8-A - Not supported
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/wekan%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/wekan/)
## Links
* Report a bug: https://github.com/YunoHost-Apps/wekan_ynh/issues
* App website: https://wekan.github.io/
* Github App website: https://github.com/wekan/wekan
* YunoHost website: https://yunohost.org/
---
Developers info
----------------
**Only if you want to use a testing branch for coding, instead of merging directly into master.**
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/wekan_ynh/tree/testing).
To try the testing branch, please proceed like that.
```
sudo yunohost app install https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug
or
sudo yunohost app upgrade wekan -u https://github.com/YunoHost-Apps/wekan_ynh/tree/testing --debug
```

View file

@ -1,5 +1,3 @@
# See here for more informations
# https://github.com/YunoHost/package_check#syntax-check_process-file
;; Test complet ;; Test complet
; Manifest ; Manifest
domain="domain.tld" (DOMAIN) domain="domain.tld" (DOMAIN)
@ -13,18 +11,20 @@
setup_private=1 setup_private=1
setup_public=1 setup_public=1
upgrade=1 upgrade=1
upgrade=1 from_commit=4fe78843712dc1adc189830d2dde5f78bb17d747
backup_restore=1 backup_restore=1
multi_instance=1 multi_instance=1
incorrect_path=1 incorrect_path=1
port_already_use=1 port_already_use=0
change_url=0 change_url=1
;;; Levels ;;; Levels
Level 1=auto Level 1=auto
Level 2=auto Level 2=auto
Level 3=auto Level 3=auto
# Level 4: # Level 4: If the app supports LDAP and SSOwat, turn level 4 to '1' and add a link to an issue or a part of your code to show it.
# If the app does not use LDAP nor SSOwat, and can't use them, turn level 4 to 'na' and explain as well.
#LDAP Implemented but not SSOwat
Level 4=0 Level 4=0
# Level 5:
Level 5=auto Level 5=auto
Level 6=auto Level 6=auto
Level 7=auto Level 7=auto

378
conf/.env Normal file
View file

@ -0,0 +1,378 @@
# The Node Environnement
NODE_ENV=production
# The path to NODEJS
PATH=__NODEJS_PATH__
# Activate Debug mode
#DEBUG=true
# URL of the mongodb
MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__
# Root URL
ROOT_URL=https://__DOMAIN_URI__
# Mail URL
MAIL_URL=smtp://localhost
# This is local port where Wekan Node.js runs
PORT=__PORT__
#---------------------------------------------
# Wekan Export Board works when WITH_API=true.
# If you disable Wekan API with false, Export Board does not work.
WITH_API='true'
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#CORS=*
#---------------------------------------------
## Optional: Integration with Matomo https://matomo.org that is installed to your server
## The address of the server where Matomo is hosted:
# Example: MATOMO_ADDRESS=https://example.com/matomo
#MATOMO_ADDRESS=
## The value of the site ID given in Matomo server for Wekan
# Example: MATOMO_SITE_ID=123456789
#MATOMO_SITE_ID=''
## The option do not track which enables users to not be tracked by matomo"
#Example: MATOMO_DO_NOT_TRACK=false
#MATOMO_DO_NOT_TRACK=true
## The option that allows matomo to retrieve the username:
# Example: MATOMO_WITH_USERNAME=true
#MATOMO_WITH_USERNAME='false'
#---------------------------------------------
# Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside.
# Setting this to false is not recommended, it also disables all other browser policy protections
# and allows all iframing etc. See wekan/server/policy.js
# Default value: true
BROWSER_POLICY_ENABLED=true
# When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside.
# Example: TRUSTED_URL=http://example.com
TRUSTED_URL=''
# What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId .
# Example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
WEBHOOKS_ATTRIBUTES=''
#---------------------------------------------
# ==== OAUTH2 AZURE ====
# https://github.com/wekan/wekan/wiki/Azure
# 1) Register the application with Azure. Make sure you capture
# the application ID as well as generate a secret key.
# 2) Configure the environment variables. This differs slightly
# by installation type, but make sure you have the following:
#OAUTH2_ENABLED=true
# Application GUID captured during app registration:
#OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
# Secret key generated during app registration:
#OAUTH2_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#OAUTH2_SERVER_URL=https://login.microsoftonline.com/
#OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize
#OAUTH2_USERINFO_ENDPOINT=https://graph.microsoft.com/oidc/userinfo
#OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token
# The claim name you want to map to the unique ID field:
#OAUTH2_ID_MAP=email
# The claim name you want to map to the username field:
#OAUTH2_USERNAME_MAP=email
# The claim name you want to map to the full name field:
#OAUTH2_FULLNAME_MAP=name
# The claim name you want to map to the email field:
#OAUTH2_EMAIL_MAP=email
#-----------------------------------------------------------------
# ==== OAUTH2 KEYCLOAK ====
# https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED
#OAUTH2_ENABLED=true
#OAUTH2_CLIENT_ID=<Keycloak create Client ID>
#OAUTH2_SERVER_URL=<Keycloak server name>/auth
#OAUTH2_AUTH_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/auth
#OAUTH2_USERINFO_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/userinfo
#OAUTH2_TOKEN_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/token
#OAUTH2_SECRET=<keycloak client secret>
#-----------------------------------------------------------------
# ==== OAUTH2 DOORKEEPER ====
# https://github.com/wekan/wekan/issues/1874
# https://github.com/wekan/wekan/wiki/OAuth2
# Enable the OAuth2 connection
#OAUTH2_ENABLED=true
# OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
# OAuth2 Client ID.
#OAUTH2_CLIENT_ID=abcde12345
# OAuth2 Secret.
#OAUTH2_SECRET=54321abcde
# OAuth2 Server URL.
#OAUTH2_SERVER_URL=https://chat.example.com
# OAuth2 Authorization Endpoint.
#OAUTH2_AUTH_ENDPOINT=/oauth/authorize
# OAuth2 Userinfo Endpoint.
#OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
# OAuth2 Token Endpoint.
#OAUTH2_TOKEN_ENDPOINT=/oauth/token
# OAuth2 ID Mapping
#OAUTH2_ID_MAP=
# OAuth2 Username Mapping
#OAUTH2_USERNAME_MAP=
# OAuth2 Fullname Mapping
#OAUTH2_FULLNAME_MAP=
# OAuth2 Email Mapping
#OAUTH2_EMAIL_MAP=
#---------------------------------------------
# LDAP_ENABLE : Enable or not the connection by the LDAP
# example : LDAP_ENABLE=true
#LDAP_ENABLE=false
LDAP_ENABLE=true
# LDAP_PORT : The port of the LDAP server
# example : LDAP_PORT=389
#LDAP_PORT=389
LDAP_PORT=389
# LDAP_HOST : The host server for the LDAP server
# example : LDAP_HOST=localhost
#LDAP_HOST=
LDAP_HOST=localhost
# LDAP_BASEDN : The base DN for the LDAP Tree
# example : LDAP_BASEDN=ou=user,dc=example,dc=org
#LDAP_BASEDN=
LDAP_BASEDN=dc=yunohost,dc=org
# LDAP_LOGIN_FALLBACK : Fallback on the default authentication method
# example : LDAP_LOGIN_FALLBACK=true
#LDAP_LOGIN_FALLBACK=false
LDAP_LOGIN_FALLBACK=true
# LDAP_RECONNECT : Reconnect to the server if the connection is lost
# example : LDAP_RECONNECT=false
#LDAP_RECONNECT=true
LDAP_RECONNECT=true
# LDAP_TIMEOUT : Overall timeout, in milliseconds
# example : LDAP_TIMEOUT=12345
#LDAP_TIMEOUT=10000
LDAP_TIMEOUT=10000
# LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds
# example : LDAP_IDLE_TIMEOUT=12345
#LDAP_IDLE_TIMEOUT=10000
LDAP_IDLE_TIMEOUT=10000
# LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds
# example : LDAP_CONNECT_TIMEOUT=12345
#LDAP_CONNECT_TIMEOUT=10000
LDAP_CONNECT_TIMEOUT=10000
# LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search
# example : LDAP_AUTHENTIFICATION=true
#LDAP_AUTHENTIFICATION=false
LDAP_AUTHENTIFICATION=false
# LDAP_AUTHENTIFICATION_USERDN : The search user DN
# example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
#LDAP_AUTHENTIFICATION_USERDN=
# LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
# example : AUTHENTIFICATION_PASSWORD=admin
#LDAP_AUTHENTIFICATION_PASSWORD=
# LDAP_LOG_ENABLED : Enable logs for the module
# example : LDAP_LOG_ENABLED=true
#LDAP_LOG_ENABLED=false
LDAP_LOG_ENABLED=true
# LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
# example : LDAP_BACKGROUND_SYNC=true
#LDAP_BACKGROUND_SYNC=false
LDAP_BACKGROUND_SYNC=true
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# example : LDAP_BACKGROUND_SYNC_INTERVAL=12345
#LDAP_BACKGROUND_SYNC_INTERVAL=100
LDAP_BACKGROUND_SYNC_INTERVAL=100
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
#LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
# LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
# example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
#LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
# LDAP_ENCRYPTION : If using LDAPS
# example : LDAP_ENCRYPTION=ssl
#LDAP_ENCRYPTION=false
# LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
# example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE-----
#LDAP_CA_CERT=
# LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
# example : LDAP_REJECT_UNAUTHORIZED=true
#LDAP_REJECT_UNAUTHORIZED=false
# LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
# example : LDAP_USER_SEARCH_FILTER=
#LDAP_USER_SEARCH_FILTER=
LDAP_USER_SEARCH_FILTER="(objectclass=posixAccount)"
# LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
# example : LDAP_USER_SEARCH_SCOPE=one
#LDAP_USER_SEARCH_SCOPE=
LDAP_USER_SEARCH_SCOPE=sub
# LDAP_USER_SEARCH_FIELD : Which field is used to find the user
# example : LDAP_USER_SEARCH_FIELD=uid
#LDAP_USER_SEARCH_FIELD=
LDAP_USER_SEARCH_FIELD=uid
# LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited)
# example : LDAP_SEARCH_PAGE_SIZE=12345
#LDAP_SEARCH_PAGE_SIZE=0
LDAP_SEARCH_PAGE_SIZE=0
# LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited)
# example : LDAP_SEARCH_SIZE_LIMIT=12345
#LDAP_SEARCH_SIZE_LIMIT=0
LDAP_SEARCH_SIZE_LIMIT=0
# LDAP_GROUP_FILTER_ENABLE : Enable group filtering
# example : LDAP_GROUP_FILTER_ENABLE=true
#LDAP_GROUP_FILTER_ENABLE=false
LDAP_GROUP_FILTER_ENABLE=true
# LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
# example : LDAP_GROUP_FILTER_OBJECTCLASS=group
#LDAP_GROUP_FILTER_OBJECTCLASS=
LDAP_GROUP_FILTER_OBJECTCLASS=posixGroup
# LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
# example :
#LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=
LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=cn
# LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
# example :
#LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=
LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=memberUid
# LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
# example :
#LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=
LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=uid
# LDAP_GROUP_FILTER_GROUP_NAME :
# example : LDAP_GROUP_FILTER_GROUP_NAME=wekan_user
#LDAP_GROUP_FILTER_GROUP_NAME=
LDAP_GROUP_FILTER_GROUP_NAME=sftpusers
# LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
# example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid
#LDAP_UNIQUE_IDENTIFIER_FIELD=
LDAP_UNIQUE_IDENTIFIER_FIELD=entryUUID
# LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8
# example : LDAP_UTF8_NAMES_SLUGIFY=false
#LDAP_UTF8_NAMES_SLUGIFY=true
LDAP_UTF8_NAMES_SLUGIFY=true
# LDAP_USERNAME_FIELD : Which field contains the ldap username
# example : LDAP_USERNAME_FIELD=username
#LDAP_USERNAME_FIELD=
LDAP_USERNAME_FIELD=uid
# LDAP_FULLNAME_FIELD : Which field contains the ldap fullname
# example : LDAP_FULLNAME_FIELD=fullname
#LDAP_FULLNAME_FIELD=
LDAP_FULLNAME_FIELD=cn
# LDAP_MERGE_EXISTING_USERS :
# example : LDAP_MERGE_EXISTING_USERS=true
#LDAP_MERGE_EXISTING_USERS=false
LDAP_MERGE_EXISTING_USERS=true
# LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match
# example: LDAP_EMAIL_MATCH_ENABLE=true
#LDAP_EMAIL_MATCH_ENABLE=false
LDAP_EMAIL_MATCH_ENABLE=true
# LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match
# example: LDAP_EMAIL_MATCH_REQUIRE=true
#LDAP_EMAIL_MATCH_REQUIRE=false
LDAP_EMAIL_MATCH_REQUIRE=false
# LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching
# example: LDAP_EMAIL_MATCH_VERIFIED=true
#LDAP_EMAIL_MATCH_VERIFIED=false
LDAP_EMAIL_MATCH_VERIFIED=false
# LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address
# example: LDAP_EMAIL_FIELD=mail
#LDAP_EMAIL_FIELD=
LDAP_EMAIL_FIELD=mail
# LDAP_SYNC_USER_DATA :
# example : LDAP_SYNC_USER_DATA=true
#LDAP_SYNC_USER_DATA=false
LDAP_SYNC_USER_DATA=true
# LDAP_SYNC_USER_DATA_FIELDMAP :
# example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
#LDAP_SYNC_USER_DATA_FIELDMAP=
LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name"}
# LDAP_SYNC_GROUP_ROLES :
# example :
#LDAP_SYNC_GROUP_ROLES=
LDAP_SYNC_GROUP_ROLES=admins
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#LDAP_DEFAULT_DOMAIN=
# Enable/Disable syncing of admin status based on ldap groups:
#LDAP_SYNC_ADMIN_STATUS=true
LDAP_SYNC_ADMIN_STATUS=true
# Comma separated list of admin group names to sync.
#LDAP_SYNC_ADMIN_GROUPS=group1,group2
LDAP_SYNC_ADMIN_GROUPS=admins
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#LOGOUT_IN=
#LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#LOGOUT_ON_MINUTES=

View file

@ -1,8 +1,8 @@
# This is on YunoHost server just to avoid the file from disappearing # This is on YunoHost server just to avoid the file from disappearing
# Original source is https://releases.wekan.team/ # Original source is https://releases.wekan.team/
SOURCE_URL=https://build.yunohost.org/apps/wekan-2.09.tar.gz SOURCE_URL=https://github.com/yalh76/wekan_ynh/releases/download/v2.48/wekan-2.48.tar.gz
SOURCE_SUM=1956dd19f17d76a6d820a15bcf93a3eb12172f9f5cb1dd40d9925b977e8f930d SOURCE_SUM=1d6ae104487cb29029e6187531432a9c3dd2d9c4e1aef4f848ae48286010b0e8
SOURCE_SUM_PRG=sha256sum SOURCE_SUM_PRG=sha256sum
ARCH_FORMAT=tar.gz ARCH_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=wekan-1.07.tar.gz SOURCE_FILENAME=

View file

@ -7,6 +7,7 @@ location __PATH__
proxy_pass http://127.0.0.1:__PORT__; proxy_pass http://127.0.0.1:__PORT__;
proxy_http_version 1.1; proxy_http_version 1.1;
client_max_body_size 100M; client_max_body_size 100M;
proxy_set_header Accept-Encoding "";
# allow websockets # allow websockets
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
@ -23,7 +24,7 @@ location __PATH__
# on every applicaiton update the name of CSS and JS file is different, # on every applicaiton update the name of CSS and JS file is different,
# so they can be cache infinitely (here: 30 days) # so they can be cache infinitely (here: 30 days)
# the root path MUST NOT be cached # the root path MUST NOT be cached
if ($uri != '/wekan') if ($uri != '__PATH__')
{ {
expires 30d; expires 30d;
} }

View file

@ -7,13 +7,9 @@ After=network.target mongodb.service
Type=simple Type=simple
User=__APP__ User=__APP__
Group=__APP__ Group=__APP__
ExecStartPre=__NODEJS__ EnvironmentFile=__FINALPATH__/.env
Environment="PATH=__ENV_PATH__"
Environment=NODE_ENV=production
Environment=MONGO_URL=mongodb://127.0.0.1:27017/__DB_NAME__
Environment=ROOT_URL=https://__DOMAIN____URI__ PORT=__PORT__
WorkingDirectory=__FINALPATH__ WorkingDirectory=__FINALPATH__
ExecStart=/opt/node_n/bin/node __FINALPATH__/main.js ExecStart=__NODEJS_PATH__/node __FINALPATH__/main.js
Restart=on-failure Restart=on-failure
#StartLimitInterval=86400 #StartLimitInterval=86400
#StartLimitBurst=5 #StartLimitBurst=5

View file

@ -2,11 +2,11 @@
"name": "Wekan", "name": "Wekan",
"id": "wekan", "id": "wekan",
"packaging_format": 1, "packaging_format": 1,
"version": "1.07~ynh2",
"description": { "description": {
"en": "Trello-like kanban", "en": "Trello-like kanban",
"fr": "Un kanban similaire à Trello" "fr": "Un kanban similaire à Trello"
}, },
"version": "2.48~ynh1",
"url": "https://wekan.io", "url": "https://wekan.io",
"license": "MIT", "license": "MIT",
"maintainer": { "maintainer": {
@ -15,12 +15,11 @@
"url": "https://github.com/alexAubin/" "url": "https://github.com/alexAubin/"
}, },
"requirements": { "requirements": {
"yunohost": ">= 3.0.0" "yunohost": ">= 3.4"
}, },
"multi_instance": true, "multi_instance": true,
"services": [ "services": [
"nginx", "nginx"
"mongod"
], ],
"arguments": { "arguments": {
"install" : [ "install" : [

20
scripts/_common.sh Normal file
View file

@ -0,0 +1,20 @@
#!/bin/bash
#=================================================
# COMMON VARIABLES
#=================================================
# dependencies used by the app
pkg_dependencies="mongodb mongodb-server"
#=================================================
# PERSONAL HELPERS
#=================================================
#=================================================
# EXPERIMENTAL HELPERS
#=================================================
#=================================================
# FUTURE OFFICIAL HELPERS
#=================================================

View file

@ -1,217 +0,0 @@
log() {
echo "${1}"
}
info() {
log "[INFO] ${1}"
}
warn() {
log "[WARN] ${1}"
}
err() {
log "[ERR] ${1}"
}
to_logs() {
# When yunohost --verbose or bash -x
if $_ISVERBOSE; then
cat
else
cat > /dev/null
fi
}
read_json () {
sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
}
read_manifest () {
if [ -f '../manifest.json' ] ; then
read_json '../manifest.json' "$1"
else
read_json '../settings/manifest.json' "$1"
fi
}
abort_if_up_to_date () {
version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7')
last_version=$(read_manifest 'version')
if [ "${version}" = "${last_version}" ]; then
info "Up-to-date, nothing to do"
ynh_die "" 0
fi
}
#=================================================
# NODEJS
#=================================================
# INFOS
# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser.
# C'est ainsi qu'il change de version
# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n
# ynh_use_nodejs active une version de nodejs dans le script courant
# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app
# - nodejs_path: Le chemin absolu de cette version de node
# Utilisé pour des appels directs à node.
# - nodejs_version: Simplement le numéro de version de nodejs pour cette application
# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant.
# Utilisé pour démarrer un service ou un script qui utilise node ou npm
# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire.
n_install_dir="/opt/node_n"
node_version_path="/opt/node_n/n/versions/node"
# N_PREFIX est le dossier de n, il doit être chargé dans les variables d'environnement pour n.
export N_PREFIX="$n_install_dir"
ynh_use_nodejs () {
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"; N_PREFIX="$n_install_dir""
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
# "Load" a version of node
eval $load_n_path; $nodejs_use_version
# Get the absolute path of this version of node
nodejs_path="$(n bin $nodejs_version)"
# Make an alias for node use
ynh_node_exec="eval $load_n_path; n use $nodejs_version"
}
ynh_install_nodejs () {
# Use n, https://github.com/tj/n to manage the nodejs versions
nodejs_version="$1"
local n_install_script="https://git.io/n-install"
# Create $n_install_dir
mkdir -p "$n_install_dir"
# Load n path in PATH
CLEAR_PATH="$n_install_dir/bin:$PATH"
# Remove /usr/local/bin in PATH in case of node has already setup.
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
# Move an existing node binary, to avoid to block n.
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
# If n is not previously setup, install it
n --version > /dev/null 2>&1 || \
(curl -sL $n_install_script | N_PREFIX=$N_PREFIX bash -s -- -y - 2>&1 )
# Modify the default N_PREFIX in n script
ynh_replace_string "^N_PREFIX=\${N_PREFIX-.*}$" "N_PREFIX=\${N_PREFIX-$N_PREFIX}" "$n_install_dir/bin/n"
# Restore /usr/local/bin in PATH
PATH=$CLEAR_PATH
# And replace the old node binary.
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
# Install the requested version of nodejs
n $nodejs_version
# Find the last "real" version for this major version of node.
real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1)
real_nodejs_version=$(basename $real_nodejs_version)
# Create a symbolic link for this major version. If the file doesn't already exist
if [ ! -e "$node_version_path/$nodejs_version" ]
then
ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version
fi
# Store the ID of this app and the version of node requested for it
echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version"
# Store nodejs_version into the config of this app
ynh_app_setting_set $app nodejs_version $nodejs_version
# Build the update script and set the cronjob
ynh_cron_upgrade_node
ynh_use_nodejs
}
ynh_remove_nodejs () {
ynh_use_nodejs
# Remove the line for this app
sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version"
# If none another app uses this version of nodejs, remove it.
if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version"
then
n rm $nodejs_version
fi
# If none another app uses n, remove n
if [ ! -s "$n_install_dir/ynh_app_version" ]
then
ynh_secure_remove "$n_install_dir"
ynh_secure_remove "/usr/local/n"
sed --in-place "/N_PREFIX/d" /root/.bashrc
rm -f /etc/cron.daily/node_update
fi
}
ynh_cron_upgrade_node () {
# Build the update script
cat > "$n_install_dir/node_update.sh" << EOF
#!/bin/bash
version_path="$node_version_path"
n_install_dir="$n_install_dir"
# Log the date
date
# List all real installed version of node
all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")"
# Keep only the major version number of each line
all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//')
# Remove double entries
all_real_version=\$(echo "\$all_real_version" | sort --unique)
# Read each major version
while read version
do
echo "Update of the version \$version"
sudo \$n_install_dir/bin/n \$version
# Find the last "real" version for this major version of node.
real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1)
real_nodejs_version=\$(basename \$real_nodejs_version)
# Update the symbolic link for this version
sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version
done <<< "\$(echo "\$all_real_version")"
EOF
chmod +x "$n_install_dir/node_update.sh"
# Build the cronjob
cat > "/etc/cron.daily/node_update" << EOF
#!/bin/bash
$n_install_dir/node_update.sh >> $n_install_dir/node_update.log
EOF
chmod +x "/etc/cron.daily/node_update"
}
ynh_version_gt ()
{
dpkg --compare-versions "$1" gt "$2"
}

View file

@ -5,6 +5,9 @@
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -17,25 +20,48 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# STANDARD BACKUP STEPS # STANDARD BACKUP STEPS
#================================================= #=================================================
# BACKUP OF THE MAIN DIR OF THE APP # BACKUP THE APP MAIN DIR
#================================================= #=================================================
ynh_print_info "Backing up the main app directory..."
ynh_backup "$final_path" ynh_backup "$final_path"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
ynh_print_info "Backing up nginx web server configuration..."
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# BACKUP THE MONGODB DATABASE
#=================================================
ynh_print_info "Backing up the MongoDB database..."
mongodump --db "$db_name" -o "./dump"
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP SYSTEMD
#=================================================
ynh_print_info "Backing up systemd configuration..."
ynh_backup "/etc/systemd/system/$app.service" ynh_backup "/etc/systemd/system/$app.service"
#================================================= #=================================================
# BACKUP OF MONGODB # END OF SCRIPT
#================================================= #=================================================
mongodump --db "$app" -o "./dump" ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."

109
scripts/change_url Normal file
View file

@ -0,0 +1,109 @@
#!/bin/bash
#=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source _common.sh
source ynh_systemd_action
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_print_info "Loading installation settings..."
# Needed for helper "ynh_add_nginx_config"
final_path=$(ynh_app_setting_get $app final_path)
# Add settings here as needed by your application
port=$(ynh_app_setting_get $app port)
#=================================================
# 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
#=================================================
# MODIFY URL IN NGINX CONF
#=================================================
ynh_print_info "Updating nginx web server configuration..."
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf
# 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 "$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 "$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 "/etc/nginx/conf.d/$new_domain.d/$app.conf"
fi
#=================================================
# SPECIFIC MODIFICATIONS
#=================================================
# MODIFY URL IN .ENV
#=================================================
ynh_print_info "Updating .env configuration..."
ynh_systemd_action --action=stop --service_name=$app --log_path="systemd"
ynh_replace_string "$old_domain$old_path" "$new_domain$new_path" "$final_path/.env"
ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app"
sleep 10
#=================================================
# GENERIC FINALISATION
#=================================================
# RELOAD NGINX
#=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Change of URL completed for $app"

View file

@ -1,23 +1,26 @@
#!/bin/bash #!/bin/bash
#================================================= #=================================================
# GENERIC START # GENERIC START
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
source _future.sh
source _common.sh
source ynh_systemd_action source ynh_systemd_action
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# MANAGE SCRIPT FAILURE # MANAGE SCRIPT FAILURE
#================================================= #=================================================
# Exit if an error occurs during the execution of the script # Exit if an error occurs during the execution of the script
ynh_abort_if_errors ynh_abort_if_errors
#================================================= #=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST # RETRIEVE ARGUMENTS FROM THE MANIFEST
#================================================= #=================================================
domain=$YNH_APP_ARG_DOMAIN domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH path_url=$YNH_APP_ARG_PATH
is_public=$YNH_APP_ARG_IS_PUBLIC is_public=$YNH_APP_ARG_IS_PUBLIC
@ -27,6 +30,7 @@ app=$YNH_APP_INSTANCE_NAME
#================================================= #=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
ynh_print_info "Validating installation parameters..."
# Check machine architecture (in particular, we don't support ARM and 32bit machines) # Check machine architecture (in particular, we don't support ARM and 32bit machines)
[[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :(" [[ $(uname -m) == "x86_64" ]] || ynh_die "Sorry, but this app can only be installed on a x86, 64 bits machine :("
@ -34,125 +38,154 @@ app=$YNH_APP_INSTANCE_NAME
final_path=/var/www/$app final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die "This path already contains a folder"
path_url=$(ynh_normalize_url_path $path_url)
# Register (book) web path # Register (book) web path
ynh_webpath_register $app $domain $path_url ynh_webpath_register $app $domain $path_url
#================================================= #=================================================
# STORE SETTINGS FROM MANIFEST # STORE SETTINGS FROM MANIFEST
#================================================= #=================================================
ynh_print_info "Storing installation settings..."
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path_url
ynh_app_setting_set $app is_public $is_public ynh_app_setting_set $app is_public $is_public
#=================================================
# STANDARD MODIFICATIONS
#================================================= #=================================================
# FIND AND OPEN A PORT # FIND AND OPEN A PORT
#================================================= #=================================================
ynh_print_info "Configuring firewall..."
# Find a free port # Find a free port
port=$(ynh_find_port 8081) port=$(ynh_find_port 8095)
ynh_app_setting_set $app port $port ynh_app_setting_set $app port $port
#================================================= #=================================================
# INSTALL DEPENDENCIES # INSTALL DEPENDENCIES
#================================================= #=================================================
ynh_print_info "Installing dependencies..."
ynh_print_info "Installing nodejs ..." ynh_install_nodejs 8.15.1
ynh_install_nodejs 8.9.3 ynh_use_nodejs
ynh_print_info "Installing mongodb dependencies ..." ynh_install_app_dependencies $pkg_dependencies
ynh_install_app_dependencies "mongodb mongodb-server"
#=================================================
# START MONGODB
#=================================================
ynh_print_info "Starting mongodb ..."
# Start mongodb
systemctl enable mongodb
systemctl start mongodb
# Registering db name
db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set $app db_name $db_name
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_print_info "Setting up source files..."
ynh_print_info "Setting up Wekan's sources ..."
ynh_app_setting_set $app final_path $final_path ynh_app_setting_set $app final_path $final_path
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
# For this app sources are in app subdirectory
ynh_setup_source "$final_path" ynh_setup_source "$final_path"
#================================================= #=================================================
# NGINX CONFIGURATION # NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Configuring nginx web server..."
# Create a dedicated nginx config # Create a dedicated nginx config
ynh_print_info "Configuring nginx ..."
ynh_add_nginx_config ynh_add_nginx_config
#================================================= #=================================================
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_print_info "Configuring system user..."
# Create a system user # Create a system user
ynh_system_user_create $app "$final_path" ynh_system_user_create $app "$final_path"
#================================================= #=================================================
# SPECIFIC SETUP # SPECIFIC SETUP
#=================================================
# Install wekan dependencies
ynh_print_info "Installing npm dependencies ..."
chown -R $app $final_path
pushd $final_path/programs/server
ynh_use_nodejs
npm install
popd
# Start mogodb
ynh_print_info "Starting mongodb ..."
systemctl enable mongodb
systemctl restart mongodb
#================================================= #=================================================
# SETUP SYSTEMD # SETUP SYSTEMD
#================================================= #=================================================
ynh_print_info "Configuring a systemd service..."
# Create a dedicated systemd config # Create a dedicated systemd config
ynh_print_info "Adding wekan systemd service ..." ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service"
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service"
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
ynh_replace_string "__URI__" "$path_url" "../conf/systemd.service"
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
ynh_add_systemd_config ynh_add_systemd_config
#=================================================
# MODIFY A CONFIG FILE
#=================================================
cp "../conf/.env" "$final_path/.env"
ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env"
ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env"
ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env"
ynh_replace_string "__PORT__" "$port" "$final_path/.env"
#=================================================
# STORE THE CONFIG FILE CHECKSUM
#=================================================
# Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$final_path/.env"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
# SECURE FILES AND DIRECTORIES # SECURE FILES AND DIRECTORIES
#================================================= #=================================================
ynh_print_info "Fixing permissions ..." ynh_print_info "Configuring file permissions ..."
# Set strong right permissions to app files # Set strong right permissions to app files
chown -R $app: "$final_path" chown -R $app: "$final_path"
chmod -R 640 "$final_path" chmod -R 640 "$final_path"
find "$final_path" -type d -print0 | xargs -0 chmod 750 find "$final_path" -type d -print0 | xargs -0 chmod 750
#================================================= #=================================================
# ADD SERVICE IN ADMIN PANEL # ADVERTISE SERVICE IN ADMIN PANEL
#================================================= #=================================================
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
yunohost service add $app yunohost service add $app
#================================================= #=================================================
# SETUP SSOWAT # SETUP SSOWAT
#================================================= #=================================================
ynh_print_info "Configuring SSOwat..."
# Make app public if necessary or protect it # Make app public if necessary
if [ $is_public -eq 1 ] if [ $is_public -eq 1 ]
then then
# unprotected_uris allows SSO credentials to be passed anyway. # unprotected_uris allows SSO credentials to be passed anyway.
ynh_app_setting_set "$app" unprotected_uris "/" ynh_app_setting_set $app unprotected_uris "/"
fi fi
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx systemctl reload nginx
#================================================= #=================================================
# START SERVICE # START SERVICE
#================================================= #=================================================
ynh_print_info "Now starting Wekan service..."
ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Finishing add-custom-html-before-body-end migration" ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app"
sleep 10 sleep 10
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Installation of $app completed"

View file

@ -1,72 +1,99 @@
#!/bin/bash #!/bin/bash
#================================================= #=================================================
# GENERIC STARTING # GENERIC START
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
source _future.sh
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
readonly app=$YNH_APP_INSTANCE_NAME ynh_print_info "Loading installation settings..."
readonly domain=$(ynh_app_setting_get "$app" domain)
readonly final_path=$(ynh_app_setting_get "$app" final_path) app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain)
port=$(ynh_app_setting_get $app port)
db_name=$(ynh_app_setting_get $app db_name)
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
#================================================= #=================================================
# STOP AND REMOVE SERVICE # REMOVE SERVICE FROM ADMIN PANEL
#================================================= #=================================================
ynh_remove_systemd_config # Remove a service from the admin panel, added by `yunohost service add`
if yunohost service status $app >/dev/null 2>&1
#=================================================
# DISABLE SERVICE IN ADMIN PANEL
#=================================================
if yunohost service status | grep -q $app # Test l'existence du service dans Yunohost
then then
echo "Remove $app service" ynh_print_info "Removing $app service"
yunohost service remove $app yunohost service remove $app
fi fi
#================================================= #=================================================
# REMOVE DB # STOP AND REMOVE SERVICE
#================================================= #=================================================
mongo $app --eval "db.dropDatabase()" ynh_print_info "Stopping and removing the systemd service"
# Remove the dedicated systemd config
ynh_remove_systemd_config
#=================================================
# REMOVE THE MONGODB DATABASE
#=================================================
ynh_print_info "Removing the MongoDB database"
# Remove a database if it exists, along with the associated user
mongo $db_name --eval "db.dropDatabase()"
#================================================= #=================================================
# REMOVE DEPENDENCIES # REMOVE DEPENDENCIES
#================================================= #=================================================
ynh_print_info "Removing dependencies"
# Remove metapackage and its dependencies
ynh_remove_app_dependencies ynh_remove_app_dependencies
#================================================= #=================================================
# REMOVE NODEJS # REMOVE NODEJS
#================================================= #=================================================
ynh_print_info "Removing nodejs"
ynh_remove_nodejs ynh_remove_nodejs
#================================================= #=================================================
# REMOVE THE MAIN DIR OF THE APP # REMOVE APP MAIN DIR
#================================================= #=================================================
ynh_print_info "Removing app main directory"
ynh_secure_remove "/var/www/$app" # Remove the app directory securely
ynh_secure_remove "$final_path"
#================================================= #=================================================
# REMOVE THE NGINX CONFIGURATION # REMOVE NGINX CONFIGURATION
#================================================= #=================================================
ynh_print_info "Removing nginx web server configuration"
# Remove the dedicated nginx config
ynh_remove_nginx_config ynh_remove_nginx_config
#================================================= #=================================================
# GENERIC FINALISATION # GENERIC FINALIZATION
#================================================= #=================================================
# REMOVE DEDICATED USER # REMOVE DEDICATED USER
#================================================= #=================================================
ynh_print_info "Removing the dedicated system user"
# Delete a system user
ynh_system_user_delete $app ynh_system_user_delete $app
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Removal of $app completed"

View file

@ -5,7 +5,8 @@
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
source ../settings/scripts/_future.sh
source ../settings/scripts/_common.sh
source ../settings/scripts/ynh_systemd_action source ../settings/scripts/ynh_systemd_action
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
@ -19,18 +20,19 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
path_url=$(ynh_app_setting_get $app path) path_url=$(ynh_app_setting_get $app path)
is_public=$(ynh_app_setting_get $app is_public)
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
port=$(ynh_app_setting_get $app final_path) db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
ynh_print_info "Validating restoration parameters..."
ynh_webpath_available $domain $path_url \ ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}${path_url}" || ynh_die "Path not available: ${domain}${path_url}"
@ -38,81 +40,95 @@ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
#================================================= #=================================================
# STANDARD RESTORE STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
ynh_restore # RESTORE THE NGINX CONFIGURATION
#=================================================
# CREATE DEDICATED USER
#================================================= #=================================================
# Create a system user ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
ynh_print_info "Restoring the app main directory..."
ynh_restore_file "$final_path"
#=================================================
# RECREATE THE DEDICATED USER
#=================================================
ynh_print_info "Recreating the dedicated system user..."
# Create the dedicated user (if not existing)
ynh_system_user_create $app "$final_path" ynh_system_user_create $app "$final_path"
#================================================= #=================================================
# INSTALL DEPENDENCIES # RESTORE USER RIGHTS
#=================================================
ynh_install_nodejs 8.9.3
# Install mongodb
ynh_install_app_dependencies "mongodb mongodb-server"
#=================================================
# RESTORE DB
#=================================================
# Start mogodb
systemctl enable mongodb
systemctl start mongodb
mongorestore --db $app ./dump/$app
#=================================================
# SPECIFIC SETUP
#================================================= #=================================================
# Install wekan dependencies # Restore permissions on app files
#chown -R $app $final_path
#pushd $final_path/programs/server
#ynh_use_nodejs
#npm install
#popd
#=================================================
# GENERIC FINALIZATION
#=================================================
# SECURE FILES AND DIRECTORIES
#=================================================
# Set strong right permissions to app files
chown -R $app: "$final_path" chown -R $app: "$final_path"
chmod -R 640 "$final_path" chmod -R 640 "$final_path"
find "$final_path" -type d -print0 | xargs -0 chmod 750 find "$final_path" -type d -print0 | xargs -0 chmod 750
#================================================= #=================================================
# ADD SERVICE IN ADMIN PANEL # SPECIFIC RESTORATION
#================================================= #=================================================
# REINSTALL DEPENDENCIES
#=================================================
ynh_print_info "Reinstalling dependencies..."
# Define and install dependencies
ynh_install_nodejs 8.15.1
ynh_use_nodejs
ynh_install_app_dependencies $pkg_dependencies
#=================================================
# RESTORE THE MONGODB DATABASE
#=================================================
ynh_print_info "Restoring the MongoDB database..."
# Start mongodb
systemctl enable mongodb
systemctl start mongodb
mongorestore --db $db_name ./dump/$db_name
#=================================================
# RESTORE SYSTEMD
#=================================================
ynh_print_info "Restoring the systemd configuration..."
ynh_restore_file "/etc/systemd/system/$app.service"
systemctl daemon-reload
systemctl enable $app.service
#=================================================
# ADVERTISE SERVICE IN ADMIN PANEL
#=================================================
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
yunohost service add $app yunohost service add $app
#================================================= #=================================================
# SETUP SSOWAT # GENERIC FINALIZATION
#=================================================
# Make app public if necessary or protect it
if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway.
ynh_app_setting_set "$app" unprotected_uris "/"
fi
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx systemctl reload nginx
#================================================= #=================================================
# START SERVICE # START SERVICE
#================================================= #=================================================
ynh_print_info "Now starting Wekan service..."
ynh_systemd_action --action=start --service_name=$app --log_path="systemd" ynh_systemd_action --action=start --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app"
sleep 10 sleep 10
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Restoration completed for $app"

View file

@ -6,13 +6,15 @@
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
source _future.sh source _common.sh
source ynh_package_version
source ynh_systemd_action source ynh_systemd_action
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_print_info "Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -20,11 +22,20 @@ domain=$(ynh_app_setting_get $app domain)
path_url=$(ynh_app_setting_get $app path) path_url=$(ynh_app_setting_get $app path)
is_public=$(ynh_app_setting_get $app is_public) is_public=$(ynh_app_setting_get $app is_public)
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
db_name=$(ynh_app_setting_get $app db_name)
port=$(ynh_app_setting_get $app port) port=$(ynh_app_setting_get $app port)
# Previous versions of the app did not have the db_name setting
if [ -z "$db_name" ]
then
db_name=$app
ynh_app_setting_set "$app" db_name "$db_name"
fi
#================================================= #=================================================
# Check version # CHECK VERSION
#================================================= #=================================================
abort_if_up_to_date abort_if_up_to_date
# previous function is what defines 'version', more precisely the 'previous version' # previous function is what defines 'version', more precisely the 'previous version'
previous_version="${version}" previous_version="${version}"
@ -32,24 +43,31 @@ previous_version="${version}"
#================================================= #=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#================================================= #=================================================
ynh_print_info "Backing up the app before upgrading (may take a while)..."
ynh_backup_before_upgrade # Backup the current version of the app # Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () { ynh_clean_setup () {
ynh_restore_upgradebackup # restore it if the upgrade fails # restore it if the upgrade fails
ynh_restore_upgradebackup
} }
ynh_abort_if_errors # Exit if an error occurs during the execution of the script # Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
#================================================= #=================================================
ynh_print_info "Ensuring downward compatibility..."
if ynh_version_gt "0.45-2" "${previous_version}" ; then if ynh_version_gt "0.45-2" "${previous_version}" ; then
ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service" ynh_replace_string "Environment=ROOT_URL=http://127.0.0.1:$port$path_url" "Environment=ROOT_URL=https://$domain$path_url/" "/etc/systemd/system/$app.service"
systemctl daemon-reload systemctl daemon-reload
fi fi
if ynh_version_gt "0.45-3" "${previous_version}" ; then if ynh_version_gt "0.45-3" "${previous_version}" ; then
yunohost service add $app yunohost service add $app
fi fi
if ynh_version_gt "0.77-2" "${previous_version}" ; then if ynh_version_gt "0.77-2" "${previous_version}" ; then
ynh_install_nodejs 8.9.3 ynh_install_nodejs 8.9.3
# Create a dedicated systemd config # Create a dedicated systemd config
@ -61,6 +79,7 @@ if ynh_version_gt "0.77-2" "${previous_version}" ; then
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service" ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
ynh_add_systemd_config ynh_add_systemd_config
fi fi
if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then
# Replace mongodb packages # Replace mongodb packages
@ -72,54 +91,96 @@ if ynh_version_gt "1.07~ynh2" "${previous_version}" ; then
yunohost service add mongodb --log "/var/log/mongodb/mongodb.log" yunohost service add mongodb --log "/var/log/mongodb/mongodb.log"
# Gotta regen the systemd config because mongodb service name changed # Gotta regen the systemd config because mongodb service name changed
nodejs_version=$(ynh_app_setting_get $app nodejs_version) ynh_use_nodejs
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version" ynh_replace_string "__ENV_PATH__" "$nodejs_path" "../conf/systemd.service"
ynh_replace_string "__NODEJS__" "$nodejs_use_version" "../conf/systemd.service" ynh_replace_string "__DB_NAME__" "$db_name" "../conf/systemd.service"
ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service" ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "../conf/systemd.service"
ynh_replace_string "__DB_NAME__" "$app" "../conf/systemd.service"
ynh_replace_string "__URI__" "$path_url/" "../conf/systemd.service"
ynh_replace_string "__PORT__" "$port" "../conf/systemd.service" ynh_replace_string "__PORT__" "$port" "../conf/systemd.service"
ynh_replace_string "__DOMAIN__" "$domain" "../conf/systemd.service"
ynh_add_systemd_config ynh_add_systemd_config
fi fi
if ynh_version_gt "2.48~ynh1" "${previous_version}" ; then
ynh_remove_nodejs
ynh_install_nodejs 8.15.1
ynh_use_nodejs
# Create a dedicated systemd config
ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "../conf/systemd.service"
ynh_add_systemd_config
# Create a dedicated .env config
ynh_backup_if_checksum_is_different "$final_path/.env"
cp "../conf/.env" "$final_path/.env"
ynh_replace_string "__NODEJS_PATH__" "$nodejs_path" "$final_path/.env"
ynh_replace_string "__DB_NAME__" "$db_name" "$final_path/.env"
ynh_replace_string "__DOMAIN_URI__" "$domain$path_url" "$final_path/.env"
ynh_replace_string "__PORT__" "$port" "$final_path/.env"
ynh_store_file_checksum "$final_path/.env"
fi
#=================================================
# CHECK THE PATH
#=================================================
# Normalize the URL path syntax
path_url=$(ynh_normalize_url_path $path_url)
#================================================= #=================================================
# STANDARD UPGRADE STEPS # STANDARD UPGRADE STEPS
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_print_info "Upgrading source files..."
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
# For this app sources are in app subdirectory
ynh_setup_source "$final_path" ynh_setup_source "$final_path"
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_print_info "Making sure dedicated system user exists..."
# Create a dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
# SECURE FILES AND DIRECTORIES # SECURE FILES AND DIRECTORIES
#================================================= #=================================================
# Set strong right permissions to app files # Set permissions on app files
chown -R $app: "$final_path" chown -R $app: "$final_path"
chmod -R 640 "$final_path" chmod -R 640 "$final_path"
find "$final_path" -type d -print0 | xargs -0 chmod 750 find "$final_path" -type d -print0 | xargs -0 chmod 750
# Relaunch a npm install #=================================================
pushd $final_path/programs/server # SETUP SSOWAT
ynh_use_nodejs #=================================================
npm install ynh_print_info "Upgrading SSOwat configuration..."
popd
# Make app public if necessary
if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway
ynh_app_setting_set $app unprotected_uris "/"
fi
#================================================= #=================================================
# RELOAD NGINX # RELOAD NGINX
#================================================= #=================================================
ynh_print_info "Reloading nginx web server..."
systemctl reload nginx systemctl reload nginx
#================================================= #=================================================
# START SERVICE # START SERVICE
#================================================= #=================================================
ynh_print_info "Now restarting Wekan service..."
ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" ynh_systemd_action --action=restart --service_name=$app --log_path="systemd" --line_match="Kadira: completed instrumenting the app"
sleep 10 sleep 10
#=================================================
# END OF SCRIPT
#=================================================
ynh_print_info "Upgrade of $app completed"

View file

@ -0,0 +1,26 @@
#!/bin/bash
read_json () {
sudo python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
}
read_manifest () {
if [ -f '../manifest.json' ] ; then
read_json '../manifest.json' "$1"
else
read_json '../settings/manifest.json' "$1"
fi
}
abort_if_up_to_date () {
version=$(read_json "/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" 'version' 2> /dev/null || echo '20160501-7')
last_version=$(read_manifest 'version')
if [ "${version}" = "${last_version}" ]; then
ynh_print_info "Up-to-date, nothing to do"
ynh_die "" 0
fi
}
ynh_version_gt ()
{
dpkg --compare-versions "$1" gt "$2"
}