mirror of
https://github.com/YunoHost-Apps/rocketchat_ynh.git
synced 2024-09-03 20:16:25 +02:00
first commit
This commit is contained in:
parent
03fefbb48a
commit
b59bc49ac7
11 changed files with 887 additions and 248 deletions
39
README.md
39
README.md
|
@ -1,36 +1,31 @@
|
||||||
# rocketchat_ynh
|
# RocketChat for YunoHost
|
||||||
|
|
||||||
Rocketchat for yunohost
|
|
||||||
|
|
||||||
[](https://dash.yunohost.org/appci/app/rocketchat)
|
[](https://dash.yunohost.org/appci/app/rocketchat)
|
||||||
[](https://install-app.yunohost.org/?app=rocketchat)
|
[](https://install-app.yunohost.org/?app=rocketchat)
|
||||||
|
|
||||||
## Install with
|
|
||||||
|
|
||||||
You can either :
|
|
||||||
|
|
||||||
* Install from the Yunohost Admin web interface, by providing this URL: [https://github.com/YunoHost-Apps/rocketchat_ynh](https://github.com/YunoHost-Apps/rocketchat_ynh)
|
|
||||||
* Install from the command-line: `yunohost app install https://github.com/YunoHost-Apps/rocketchat_ynh`
|
|
||||||
|
|
||||||
**Please note that currently the installation does not work on raspberry pi or arm architecture in general.**
|
|
||||||
|
|
||||||
## Backup information
|
|
||||||
|
|
||||||
Backup stores:
|
|
||||||
|
|
||||||
- rocketchat app dir
|
|
||||||
- rocketchat mongodb (via mongodump)
|
|
||||||
- nginx configuration
|
|
||||||
- systemd service configuration
|
|
||||||
|
|
||||||
#### Supported architectures
|
#### Supported architectures
|
||||||
|
|
||||||
* x86-64b - [](https://ci-apps.yunohost.org/ci/apps/rocketchat/)
|
* x86-64 - [](https://ci-apps.yunohost.org/ci/apps/rocketchat/)
|
||||||
* ARMv8-A - [](https://ci-apps-arm.yunohost.org/ci/apps/rocketchat/)
|
* ARMv8-A - [](https://ci-apps-arm.yunohost.org/ci/apps/rocketchat/)
|
||||||
* Jessie x86-64b - [](https://ci-stretch.nohost.me/ci/apps/rocketchat/)
|
|
||||||
|
|
||||||
## Links
|
## Links
|
||||||
|
|
||||||
* Report a bug: [Issues](/../../issues)
|
* Report a bug: https://github.com/YunoHost-Apps/rocketchat_ynh/issues
|
||||||
* Rocketchat website: https://rocket.chat/
|
* Rocketchat website: https://rocket.chat/
|
||||||
|
* Upstream app repository: https://github.com/RocketChat/Rocket.Chat
|
||||||
* YunoHost website: https://yunohost.org/
|
* YunoHost website: https://yunohost.org/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Developer info
|
||||||
|
|
||||||
|
Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/rocketchat_ynh/tree/testing).
|
||||||
|
|
||||||
|
To try the testing branch, please proceed like that.
|
||||||
|
```
|
||||||
|
sudo yunohost app install https://github.com/YunoHost-Apps/rocketchat_ynh/tree/testing --debug
|
||||||
|
or
|
||||||
|
sudo yunohost app upgrade rocketchat -u https://github.com/YunoHost-Apps/rocketchat_ynh/tree/testing --debug
|
||||||
|
```
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SOURCE_URL=https://releases.rocket.chat/0.73.2/download
|
SOURCE_URL=https://github.com/RocketChat/Rocket.Chat/archive/3.4.3.tar.gz
|
||||||
SOURCE_SUM=3dc3eb11f383f7b72b0f23fedb305b6a566fa536a1e5087a4398255deeb864d8
|
SOURCE_SUM=b586b1a3ad0ca22ed563fa9339058b481548544c4a9719fb955044496b65a418
|
||||||
SOURCE_SUM_PRG=sha256sum
|
SOURCE_SUM_PRG=sha256sum
|
||||||
SOURCE_FORMAT=tar.gz
|
SOURCE_FORMAT=tar.gz
|
||||||
SOURCE_IN_SUBDIR=true
|
SOURCE_IN_SUBDIR=true
|
||||||
SOURCE_FILENAME=rocket.chat-0.73.2.tgz
|
SOURCE_FILENAME=Rocket.Chat-3.4.3.tar.gz
|
||||||
SOURCE_EXTRACT=true
|
SOURCE_EXTRACT=true
|
|
@ -1,20 +1,19 @@
|
||||||
location ^~ #LOCATION# {
|
#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
|
||||||
|
location ^~ __PATH__/ {
|
||||||
|
|
||||||
# Force HTTPS
|
proxy_pass http://127.0.0.1:__PORT__/;
|
||||||
if ($scheme = http) {
|
proxy_redirect off;
|
||||||
rewrite ^ https://$server_name$request_uri? permanent;
|
proxy_set_header Host $host;
|
||||||
}
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Host $server_name;
|
||||||
|
|
||||||
proxy_pass http://localhost:#PORT##PATH#;
|
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
proxy_set_header Connection "upgrade";
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
# Include SSOWAT user panel.
|
||||||
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
|
include conf.d/yunohost_panel.conf.inc;
|
||||||
proxy_set_header X-Forward-Proto http;
|
more_clear_input_headers 'Accept-Encoding';
|
||||||
proxy_set_header X-Nginx-Proxy true;
|
|
||||||
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=rocketchat
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
WorkingDirectory=#DESTDIR#
|
|
||||||
User=#USER#
|
|
||||||
ExecStart=#NODE# main.js
|
|
||||||
Restart=always
|
|
||||||
SyslogIdentifier=rocketchat
|
|
||||||
Environment="BIND_IP=127.0.0.1"
|
|
||||||
Environment="ROOT_URL=https://#ROOTURL##LOCATION#"
|
|
||||||
Environment="PORT=#PORT#"
|
|
||||||
Environment="MONGO_URL=mongodb://localhost:27017/#DBNAME#"
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
|
@ -1,4 +1,4 @@
|
||||||
use #DBNAME#
|
use __DB_NAME__
|
||||||
|
|
||||||
|
|
||||||
db.rocketchat_settings.update(
|
db.rocketchat_settings.update(
|
||||||
|
|
19
conf/systemd.service
Normal file
19
conf/systemd.service
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
[Unit]
|
||||||
|
Description=The Rocket.Chat server
|
||||||
|
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=__APP__
|
||||||
|
WorkingDirectory=__FINALPATH__
|
||||||
|
Environment="PATH=__ENV_PATH__"
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
ExecStart=__YNH_NODE__ main.js
|
||||||
|
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=rocketchat
|
||||||
|
|
||||||
|
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://__DOMAIN__:__PORT__/ PORT=__PORT__
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -1,13 +1,14 @@
|
||||||
{
|
{
|
||||||
"packaging_format": 1,
|
|
||||||
"name": "RocketChat",
|
"name": "RocketChat",
|
||||||
"id": "rocketchat",
|
"id": "rocketchat",
|
||||||
|
"packaging_format": 1,
|
||||||
"description": {
|
"description": {
|
||||||
"en": "the ultimate chat platform"
|
"en": "the ultimate chat platform",
|
||||||
|
"fr": "the ultimate chat platform"
|
||||||
},
|
},
|
||||||
"url": "https://rocket.chat",
|
"url": "https://rocket.chat",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"version": "0.73.2",
|
"version": "3.4.2~ynh1",
|
||||||
"maintainer": {
|
"maintainer": {
|
||||||
"name": "selamanse",
|
"name": "selamanse",
|
||||||
"email": "selamanse@scheinfrei.info",
|
"email": "selamanse@scheinfrei.info",
|
||||||
|
@ -18,7 +19,7 @@
|
||||||
"nginx"
|
"nginx"
|
||||||
],
|
],
|
||||||
"requirements": {
|
"requirements": {
|
||||||
"yunohost": ">> 2.5.6"
|
"yunohost": ">> 3.8.1"
|
||||||
},
|
},
|
||||||
"arguments": {
|
"arguments": {
|
||||||
"install" : [
|
"install" : [
|
||||||
|
@ -26,7 +27,8 @@
|
||||||
"name": "domain",
|
"name": "domain",
|
||||||
"type": "domain",
|
"type": "domain",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Choose a domain for Rocketchat"
|
"en": "Choose a domain for RocketChat",
|
||||||
|
"fr": "Choose a domain for RocketChat"
|
||||||
},
|
},
|
||||||
"example": "domain.org"
|
"example": "domain.org"
|
||||||
},
|
},
|
||||||
|
@ -34,7 +36,8 @@
|
||||||
"name": "path",
|
"name": "path",
|
||||||
"type": "path",
|
"type": "path",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Choose a path for RocketChat"
|
"en": "Choose a path for RocketChat",
|
||||||
|
"fr": "Choose a path for RocketChat"
|
||||||
},
|
},
|
||||||
"example": "/rocketchat",
|
"example": "/rocketchat",
|
||||||
"default": "/rocketchat"
|
"default": "/rocketchat"
|
||||||
|
@ -43,15 +46,17 @@
|
||||||
"name": "is_public",
|
"name": "is_public",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Is it a public application?"
|
"en": "Is it a public application?",
|
||||||
|
"fr": "Is it a public application ?"
|
||||||
},
|
},
|
||||||
"default": "Yes"
|
"default": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "lang",
|
"name": "lang",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Select default language"
|
"en": "Select default language",
|
||||||
|
"fr": "Select default language"
|
||||||
},
|
},
|
||||||
"choices": ["English"],
|
"choices": ["English"],
|
||||||
"default": "English"
|
"default": "English"
|
||||||
|
|
|
@ -1,82 +1,588 @@
|
||||||
# common.sh
|
#!/bin/bash
|
||||||
|
|
||||||
ROCKETCHAT_VERSION=0.73.2
|
#=================================================
|
||||||
ROCKETCHAT_SHASUM=3dc3eb11f383f7b72b0f23fedb305b6a566fa536a1e5087a4398255deeb864d8
|
# COMMON VARIABLES
|
||||||
ROCKETCHAT_DOWNLOAD_URI=https://releases.rocket.chat/${ROCKETCHAT_VERSION}/download
|
#=================================================
|
||||||
NODE_VERSION=8.11.4
|
|
||||||
DEBIAN_ISSUE=$(grep 9 /etc/debian_version >/dev/null && echo stretch || echo jessie)
|
|
||||||
|
|
||||||
checkcmd() {
|
# dependencies used by the app
|
||||||
curl -m 1 -s localhost:$port$path/api/v1/info | \
|
#pkg_dependencies="apt-transport-https build-essential gzip curl graphicsmagick" dirmngr
|
||||||
python -c "import sys, json; print json.load(sys.stdin)['success']" 2>/dev/null | \
|
|
||||||
grep "True" >/dev/null 2>&1
|
nodejs_version=12
|
||||||
|
|
||||||
|
# dependencies used by the app
|
||||||
|
pkg_dependencies="mongodb mongodb-server mongo-tools apt-transport-https build-essential gzip curl graphicsmagick "
|
||||||
|
pkg_dependencies_buster="mongodb-org mongodb-org-server mongodb-org-tools"
|
||||||
|
|
||||||
|
mongodb_stretch="mongodb"
|
||||||
|
mongodb_buster="mongod"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# PERSONAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# EXPERIMENTAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Evaluate a mongo command
|
||||||
|
#
|
||||||
|
# example: ynh_mongo_eval_as --command='db.getMongo().getDBNames().indexOf("wekan")'
|
||||||
|
# example: ynh_mongo_eval_as --command="db.getMongo().getDBNames().indexOf(\"wekan\")"
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_eval_as [--user=user] [--password=password] [--authenticationdatabase=authenticationdatabase] [--database=database] [--host=host] [--port=port] --command="command"
|
||||||
|
# | arg: -u, --user= - the user name to connect as
|
||||||
|
# | arg: -p, --password= - the user password
|
||||||
|
# | arg: -d, --authenticationdatabase= - the authenticationdatabase to connect to
|
||||||
|
# | arg: -d, --database= - the database to connect to
|
||||||
|
# | arg: -h, --host= - the host to connect to
|
||||||
|
# | arg: -P, --port= - the port to connect to
|
||||||
|
# | arg: -c, --command= - the command to evaluate
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_eval_as() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=upadhPc
|
||||||
|
local -A args_array=( [u]=user= [p]=password= [a]=authenticationdatabase= [d]=database= [h]=host= [P]=port= [c]=command= )
|
||||||
|
local user
|
||||||
|
local password
|
||||||
|
local authenticationdatabase
|
||||||
|
local database
|
||||||
|
local host
|
||||||
|
local port
|
||||||
|
local command
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
user="${user:-}"
|
||||||
|
password="${password:-}"
|
||||||
|
authenticationdatabase="${authenticationdatabase:-"admin"}"
|
||||||
|
database="${database:-"admin"}"
|
||||||
|
host="${host:-}"
|
||||||
|
port="${port:-}"
|
||||||
|
|
||||||
|
# If user is provided
|
||||||
|
if [ -n "$user" ]
|
||||||
|
then
|
||||||
|
user="--username=$user"
|
||||||
|
password="--password=$password"
|
||||||
|
authenticationdatabase="--authenticationDatabase=$authenticationdatabase"
|
||||||
|
else
|
||||||
|
password=""
|
||||||
|
authenticationdatabase=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure dabase connection
|
||||||
|
database="use $database"
|
||||||
|
|
||||||
|
# If host is provided
|
||||||
|
if [ -n "$host" ]
|
||||||
|
then
|
||||||
|
host="--host=$host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If host is provided
|
||||||
|
if [ -n "$port" ]
|
||||||
|
then
|
||||||
|
port="--port=$port"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mongo --quiet $user $password $authenticationdatabase $host $port <<EOF
|
||||||
|
$database
|
||||||
|
${command}
|
||||||
|
quit()
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
waitforservice() {
|
# Create a database
|
||||||
isup=false
|
#
|
||||||
x=90
|
# [internal]
|
||||||
while [ $x -gt 0 ]; do
|
#
|
||||||
echo "Waiting approx. $x seconds..."
|
# usage: ynh_mongo_create_db db_name
|
||||||
x=$(( $x - 1 ))
|
# | arg: db_name - the database name to create
|
||||||
sleep 1
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_create_db() {
|
||||||
|
local db_name=$1
|
||||||
|
local db_user=$2
|
||||||
|
|
||||||
if checkcmd; then
|
}
|
||||||
isup=true; break;
|
|
||||||
fi;
|
|
||||||
done
|
|
||||||
|
|
||||||
if $isup; then
|
# Drop a database
|
||||||
echo "service is up"
|
#
|
||||||
|
# [internal]
|
||||||
|
#
|
||||||
|
# If you intend to drop the database *and* the associated user,
|
||||||
|
# consider using ynh_mongo_remove_db instead.
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_drop_db -database=db
|
||||||
|
# | arg: -d, --database= - the database name to drop
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_drop_db() {
|
||||||
|
local legacy_args=d
|
||||||
|
local -A args_array=( [d]=database= )
|
||||||
|
local database
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
ynh_mongo_eval_as --database="${database}" --command='db.runCommand({dropDatabase: 1})'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dump a database
|
||||||
|
#
|
||||||
|
# example: ynh_mongo_dump_db --database=wekan > ./dump.bson
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_dump_db --database=database
|
||||||
|
# | arg: -d, --database= - the database name to dump
|
||||||
|
# | ret: the mongodump output
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_dump_db() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=d
|
||||||
|
local -A args_array=( [d]=database= )
|
||||||
|
local database
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
mongodump --quiet --db="$database" --archive
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a user
|
||||||
|
#
|
||||||
|
# [internal]
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_create_user --db_user=db_user --db_pwd=db_pwd --db_name=db_name
|
||||||
|
# | arg: -u, --db_user= - the user name to create
|
||||||
|
# | arg: -p, --db_pwd= - the password to identify user by
|
||||||
|
# | arg: -n, --db_name= - Name of the database to grant privilegies
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_create_user() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=unp
|
||||||
|
local -A args_array=( [u]=db_user= [n]=db_name= [p]=db_pwd= )
|
||||||
|
local db_user
|
||||||
|
local db_name
|
||||||
|
local db_pwd
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
# Create the user and set the user as admin of the db
|
||||||
|
ynh_mongo_eval_as --database="$db_name" --command='db.createUser( { user: "'${db_user}'", pwd: "'${db_pwd}'", roles: [ { role: "readWrite", db: "'${db_name}'" } ] } );'
|
||||||
|
|
||||||
|
# Add clustermonitoring rights
|
||||||
|
ynh_mongo_eval_as --database="$db_name" --command='db.grantRolesToUser("'${db_user}'",[{ role: "clusterMonitor", db: "admin" }]);'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if a mongo database exists
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_database_exists --database=database
|
||||||
|
# | arg: -d, --database= - the database for which to check existence
|
||||||
|
# | exit: Return 1 if the database doesn't exist, 0 otherwise
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_database_exists() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=d
|
||||||
|
local -A args_array=([d]=database=)
|
||||||
|
local database
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
if [ $(ynh_mongo_eval_as --command='db.getMongo().getDBNames().indexOf("'${database}'")') -lt 0 ]
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Restore a database
|
||||||
|
#
|
||||||
|
# example: ynh_mongo_restore_db --database=wekan < ./dump.bson
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_restore_db --database=database
|
||||||
|
# | arg: -d, --database= - the database name to restore
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_restore_db() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=d
|
||||||
|
local -A args_array=( [d]=database= )
|
||||||
|
local database
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
mongorestore --quiet --db="$database" --archive
|
||||||
|
}
|
||||||
|
|
||||||
|
# Drop a user
|
||||||
|
#
|
||||||
|
# [internal]
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_drop_user --db_user=user
|
||||||
|
# | arg: -u, --db_user= -the user to drop
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_drop_user() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=u
|
||||||
|
local -A args_array=( [u]=db_user= )
|
||||||
|
local db_user
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
ynh_mongo_eval_as --command='db.dropUser("'${db_user}'", {w: "majority", wtimeout: 5000})'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a database, an user and its password. Then store the password in the app's config
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_setup_db --db_user=user --db_name=name [--db_pwd=pwd]
|
||||||
|
# | arg: -u, --db_user= - Owner of the database
|
||||||
|
# | arg: -n, --db_name= - Name of the database
|
||||||
|
# | arg: -p, --db_pwd= - Password of the database. If not provided, a password will be generated
|
||||||
|
#
|
||||||
|
# After executing this helper, the password of the created database will be available in $db_pwd
|
||||||
|
# It will also be stored as "mongopwd" into the app settings.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_setup_db() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=unp
|
||||||
|
local -A args_array=( [u]=db_user= [n]=db_name= [p]=db_pwd= )
|
||||||
|
local db_user
|
||||||
|
local db_name
|
||||||
|
local db_pwd
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
local new_db_pwd=$(ynh_string_random) # Generate a random password
|
||||||
|
# If $db_pwd is not provided, use new_db_pwd instead for db_pwd
|
||||||
|
db_pwd="${db_pwd:-$new_db_pwd}"
|
||||||
|
|
||||||
|
# Create the user and grant access to the database
|
||||||
|
ynh_mongo_create_user --db_user="$db_user" --db_pwd="$db_pwd" --db_name="$db_name"
|
||||||
|
|
||||||
|
ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove a database if it exists, and the associated user
|
||||||
|
#
|
||||||
|
# usage: ynh_mongo_remove_db --db_user=user --db_name=name
|
||||||
|
# | arg: -u, --db_user= - Owner of the database
|
||||||
|
# | arg: -n, --db_name= - Name of the database
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_mongo_remove_db() {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=un
|
||||||
|
local -A args_array=( [u]=db_user= [n]=db_name= )
|
||||||
|
local db_user
|
||||||
|
local db_name
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
if ynh_mongo_database_exists --database=$db_name
|
||||||
|
then # Check if the database exists
|
||||||
|
ynh_mongo_drop_db --database="$db_name" # Remove the database
|
||||||
|
else
|
||||||
|
ynh_print_warn --message="Database $db_name not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove mongo user if it exists
|
||||||
|
ynh_mongo_drop_user --db_user=$db_user
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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_script_progression --message="Up-to-date, nothing to do"
|
||||||
|
ynh_die "" 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ynh_version_gt ()
|
||||||
|
{
|
||||||
|
dpkg --compare-versions "$1" gt "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Check the architecture
|
||||||
|
#
|
||||||
|
# example: architecture=$(ynh_detect_arch)
|
||||||
|
#
|
||||||
|
# usage: ynh_detect_arch
|
||||||
|
#
|
||||||
|
# Requires YunoHost version 2.2.4 or higher.
|
||||||
|
|
||||||
|
ynh_detect_arch(){
|
||||||
|
local architecture
|
||||||
|
if [ -n "$(uname -m | grep arm64)" ] || [ -n "$(uname -m | grep aarch64)" ]; then
|
||||||
|
architecture="arm64"
|
||||||
|
elif [ -n "$(uname -m | grep 64)" ]; then
|
||||||
|
architecture="x86-64"
|
||||||
|
elif [ -n "$(uname -m | grep 86)" ]; then
|
||||||
|
architecture="i386"
|
||||||
|
elif [ -n "$(uname -m | grep arm)" ]; then
|
||||||
|
architecture="arm"
|
||||||
else
|
else
|
||||||
ynh_die "$app could not be started"
|
architecture="unknown"
|
||||||
fi
|
fi
|
||||||
|
echo $architecture
|
||||||
}
|
}
|
||||||
|
|
||||||
installnode(){
|
|
||||||
if [ $DEBIAN_ISSUE == "stretch" ]; then
|
# Create a dedicated config file
|
||||||
sudo curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
|
#
|
||||||
sudo bash nodesource_setup.sh
|
# usage: ynh_add_config [--origin="origin file"] [--destination="destination file"] [--vars="vars to replace"]
|
||||||
sudo apt-get install -y nodejs
|
# | arg: -o, --origin= - Template config file to use (optionnal, ../conf/.env by default)
|
||||||
else
|
# | arg: -d, --destination= - Destination of the config file (optionnal, $final_path/.env)
|
||||||
sudo apt-get install -y npm
|
# | arg: -v, --vars= - List of variables to replace separated by a space. For example: 'var_1 var_2 ...'
|
||||||
# Using npm install inherits and n, and the node version required by Rocket.Chat:
|
#
|
||||||
sudo npm install -g inherits n
|
# This will use the template $origin or ../conf/.env by default
|
||||||
sudo n $NODE_VERSION
|
# to generate a config file $destination or $final_path/.env by default,
|
||||||
fi
|
# by replacing the following keywords with global variables
|
||||||
echo "node version is now: "
|
# that should be defined before calling this helper :
|
||||||
node --version
|
# __PATH__ by $path_url
|
||||||
|
# __DOMAIN__ by $domain
|
||||||
|
# __PORT__ by $port
|
||||||
|
# __NAME__ by $app
|
||||||
|
# __NAMETOCHANGE__ by $app
|
||||||
|
# __USER__ by $app
|
||||||
|
# __APP__ by $app
|
||||||
|
# __FINALPATH__ by $final_path
|
||||||
|
# __PHPVERSION__ by $YNH_PHP_VERSION
|
||||||
|
# __YNH_NPM__ by $ynh_npm
|
||||||
|
# __YNH_NODE__ by $ynh_node
|
||||||
|
# __YNH_NODE_LOAD_PATH__ by $ynh_node_load_PATH
|
||||||
|
# __NODEJS_PATH__ by $nodejs_path
|
||||||
|
# __NODEJS_VERSION__ by $nodejs_version
|
||||||
|
# __DB_NAME__ by $db_name
|
||||||
|
# __DB_USER__ by $db_user
|
||||||
|
# __DB_PWD__ by $db_pwd
|
||||||
|
#
|
||||||
|
# And dynamic variables (from the last example) :
|
||||||
|
# __VAR_1__ by $var_1
|
||||||
|
# __VAR_2__ by $var_2
|
||||||
|
#
|
||||||
|
# The helper will verify the checksum and backup the destination file
|
||||||
|
# if it's different before applying the new origin file.
|
||||||
|
# And it will calculate and store a destination file checksum
|
||||||
|
# into the app settings when configuraation is done.
|
||||||
|
#
|
||||||
|
ynh_add_config () {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=odv
|
||||||
|
local -A args_array=( [o]=origin= [d]=destination= [v]=vars= )
|
||||||
|
local origin
|
||||||
|
local destination
|
||||||
|
local vars
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
local origin="${origin:-"../conf/.env"}"
|
||||||
|
local destination="${destination:-"$final_path/.env"}"
|
||||||
|
local vars="${vars:-}"
|
||||||
|
|
||||||
|
ynh_backup_if_checksum_is_different --file="$destination"
|
||||||
|
cp "$origin" "$destination"
|
||||||
|
|
||||||
|
ynh_replace_vars --file="$destination" --vars="$vars"
|
||||||
|
|
||||||
|
ynh_store_file_checksum --file="$destination"
|
||||||
}
|
}
|
||||||
|
|
||||||
installdeps(){
|
# Remove the dedicated config
|
||||||
|
#
|
||||||
|
# usage: ynh_remove_config [--file=file]
|
||||||
|
# | arg: -f, --file= - Config file to remove (optionnal, $final_path/.env)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_remove_config () {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=f
|
||||||
|
local -A args_array=( [f]=file= )
|
||||||
|
local file
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
local service="${file:-}"
|
||||||
|
|
||||||
if [ $(dpkg --print-architecture) == "armhf" ]; then
|
# The default behaviour is to use .env file.
|
||||||
#Install mongodb for debian armhf
|
if [ -n "$file" ]; then
|
||||||
sudo apt-get update
|
file="final_path/.env"
|
||||||
sudo apt-get install -y mongodb-server
|
fi
|
||||||
|
|
||||||
# start mongodb service
|
if [ -e "$file" ]
|
||||||
sudo systemctl enable mongodb.service
|
then
|
||||||
sudo systemctl start mongodb.service
|
ynh_secure_remove --file="$file"
|
||||||
|
fi
|
||||||
# add mongodb to services
|
|
||||||
sudo yunohost service add mongodb -l /var/log/mongodb/mongodb.log
|
|
||||||
else
|
|
||||||
#Install mongodb for debian x86/x64
|
|
||||||
sudo apt-get install dirmngr && sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
|
|
||||||
echo "deb http://repo.mongodb.org/apt/debian ${DEBIAN_ISSUE}/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y mongodb-org
|
|
||||||
|
|
||||||
# start mongodb service
|
|
||||||
sudo systemctl enable mongod.service
|
|
||||||
sudo systemctl start mongod.service
|
|
||||||
|
|
||||||
# add mongodb to services
|
|
||||||
sudo yunohost service add mongod -l /var/log/mongodb/mongod.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
#Install other dependencies
|
|
||||||
sudo apt-get install -y build-essential gzip curl graphicsmagick
|
|
||||||
|
|
||||||
installnode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Replace variables in a file
|
||||||
|
#
|
||||||
|
# usage: ynh_replace_vars --file="file" [--vars="vars to replace"]
|
||||||
|
# | arg: -o, --file= - Template config file to use
|
||||||
|
# | arg: -v, --vars= - List of variables to replace separated by a space. For example: 'var_1 var_2 ...'
|
||||||
|
#
|
||||||
|
# This will replace in the the following keywords with global variables
|
||||||
|
# that should be defined before calling this helper :
|
||||||
|
# __PATH__ by $path_url
|
||||||
|
# __DOMAIN__ by $domain
|
||||||
|
# __PORT__ by $port
|
||||||
|
# __NAME__ by $app
|
||||||
|
# __NAMETOCHANGE__ by $app
|
||||||
|
# __USER__ by $app
|
||||||
|
# __APP__ by $app
|
||||||
|
# __FINALPATH__ by $final_path
|
||||||
|
# __PHPVERSION__ by $YNH_PHP_VERSION
|
||||||
|
# __YNH_NPM__ by $ynh_npm
|
||||||
|
# __YNH_NODE__ by $ynh_node
|
||||||
|
# __YNH_NODE_LOAD_PATH__ by $ynh_node_load_PATH
|
||||||
|
# __NODEJS_PATH__ by $nodejs_path
|
||||||
|
# __NODEJS_VERSION__ by $nodejs_version
|
||||||
|
# __DB_NAME__ by $db_name
|
||||||
|
# __DB_USER__ by $db_user
|
||||||
|
# __DB_PWD__ by $db_pwd
|
||||||
|
#
|
||||||
|
# And dynamic variables (from the last example) :
|
||||||
|
# __VAR_1__ by $var_1
|
||||||
|
# __VAR_2__ by $var_2
|
||||||
|
#
|
||||||
|
#
|
||||||
|
ynh_replace_vars () {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=fv
|
||||||
|
local -A args_array=( [f]=file= [v]=vars= )
|
||||||
|
local file
|
||||||
|
local vars
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
local file="${file:-}"
|
||||||
|
local vars="${vars:-}"
|
||||||
|
|
||||||
|
|
||||||
|
#Replace usual YunoHost variables
|
||||||
|
if test -n "${path_url:-}"
|
||||||
|
then
|
||||||
|
# path_url_slash_less is path_url, or a blank value if path_url is only '/'
|
||||||
|
local path_url_slash_less=${path_url%/}
|
||||||
|
ynh_replace_string --match_string="__PATH__/" --replace_string="$path_url_slash_less/" --target_file="$file"
|
||||||
|
ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${domain:-}"; then
|
||||||
|
ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${port:-}"; then
|
||||||
|
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${app:-}"; then
|
||||||
|
ynh_replace_string --match_string="__NAME__" --replace_string="$app" --target_file="$file"
|
||||||
|
ynh_replace_string --match_string="__NAMETOCHANGE__" --replace_string="$app" --target_file="$file"
|
||||||
|
ynh_replace_string --match_string="__USER__" --replace_string="$app" --target_file="$file"
|
||||||
|
ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${final_path:-}"; then
|
||||||
|
ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${YNH_PHP_VERSION:-}"; then
|
||||||
|
ynh_replace_string --match_string="__PHPVERSION__" --replace_string="$YNH_PHP_VERSION" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${ynh_npm:-}"; then
|
||||||
|
ynh_replace_string --match_string="__YNH_NPM__" --replace_string="$ynh_npm" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${ynh_node:-}"; then
|
||||||
|
ynh_replace_string --match_string="__YNH_NODE__" --replace_string="$ynh_node" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${ynh_node_load_PATH:-}"; then
|
||||||
|
ynh_replace_string --match_string="__YNH_NODE_LOAD_PATH__" --replace_string="$ynh_node_load_PATH" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${nodejs_path:-}"; then
|
||||||
|
ynh_replace_string --match_string="__NODEJS_PATH__" --replace_string="$nodejs_path" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${nodejs_version:-}"; then
|
||||||
|
ynh_replace_string --match_string="__NODEJS_VERSION__" --replace_string="$nodejs_version" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${db_name:-}"; then
|
||||||
|
ynh_replace_string --match_string="__DB_NAME__" --replace_string="$db_name" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${db_user:-}"; then
|
||||||
|
ynh_replace_string --match_string="__DB_USER__" --replace_string="$db_user" --target_file="$file"
|
||||||
|
fi
|
||||||
|
if test -n "${db_pwd:-}"; then
|
||||||
|
ynh_replace_string --match_string="__DB_PWD__" --replace_string="$db_pwd" --target_file="$file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Replace all other variables given as arguments
|
||||||
|
for var_to_replace in $vars
|
||||||
|
do
|
||||||
|
# ${var_to_replace^^} make the content of the variable on upper-cases
|
||||||
|
# ${!var_to_replace} get the content of the variable named $var_to_replace
|
||||||
|
ynh_replace_string --match_string="__${var_to_replace^^}__" --replace_string="${!var_to_replace}" --target_file="$file"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# FUTURE OFFICIAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# installdeps(){
|
||||||
|
|
||||||
|
# if [ $(dpkg --print-architecture) == "armhf" ]; then
|
||||||
|
# #Install mongodb for debian armhf
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install -y mongodb-server
|
||||||
|
|
||||||
|
# # start mongodb service
|
||||||
|
# sudo systemctl enable mongodb.service
|
||||||
|
# sudo systemctl start mongodb.service
|
||||||
|
|
||||||
|
# # add mongodb to services
|
||||||
|
# sudo yunohost service add mongodb -l /var/log/mongodb/mongodb.log
|
||||||
|
# else
|
||||||
|
# #Install mongodb for debian x86/x64
|
||||||
|
# sudo apt-get install dirmngr && sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
|
||||||
|
# echo "deb http://repo.mongodb.org/apt/debian ${DEBIAN_ISSUE}/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install -y mongodb-org
|
||||||
|
|
||||||
|
# # start mongodb service
|
||||||
|
# sudo systemctl enable mongod.service
|
||||||
|
# sudo systemctl start mongod.service
|
||||||
|
|
||||||
|
# # add mongodb to services
|
||||||
|
# sudo yunohost service add mongod -l /var/log/mongodb/mongod.log
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# #Install other dependencies
|
||||||
|
# sudo apt-get install -y build-essential gzip curl graphicsmagick
|
||||||
|
|
||||||
|
# }
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eu
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
260
scripts/install
260
scripts/install
|
@ -1,5 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -eu
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC START
|
# GENERIC START
|
||||||
|
@ -14,6 +13,9 @@ source ./_common.sh
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
|
true
|
||||||
|
}
|
||||||
# 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
|
||||||
|
|
||||||
|
@ -22,129 +24,189 @@ ynh_abort_if_errors
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
domain=$YNH_APP_ARG_DOMAIN
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
path=$YNH_APP_ARG_PATH
|
path_url=$YNH_APP_ARG_PATH
|
||||||
is_public=$YNH_APP_ARG_IS_PUBLIC
|
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||||
language=$YNH_APP_ARG_LANG
|
language=$YNH_APP_ARG_LANG
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
dbname=$app
|
|
||||||
serviceuser=rocketchat
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CHECK IF THE APP CAN BE INSTALLED
|
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Validating installation parameters..." --weight=1
|
||||||
|
|
||||||
# Check for supported architecture
|
final_path=/var/www/$app
|
||||||
arch="$(uname -m)"
|
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
|
||||||
if [[ "$arch" != "x86_64" ]]; then
|
|
||||||
script_die "This app requires an x86_64 machine, but this one is '${arch}'."
|
# Register (book) web path
|
||||||
|
ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STORE SETTINGS FROM MANIFEST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Storing installation settings..." --weight=2
|
||||||
|
|
||||||
|
ynh_app_setting_set --app=$app --key=domain --value=$domain
|
||||||
|
ynh_app_setting_set --app=$app --key=path --value=$path_url
|
||||||
|
ynh_app_setting_set --app=$app --key=is_public --value=$is_public
|
||||||
|
ynh_app_setting_set --app=$app --key=language --value=$language
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STANDARD MODIFICATIONS
|
||||||
|
#=================================================
|
||||||
|
# FIND AND OPEN A PORT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring firewall..." --weight=2
|
||||||
|
|
||||||
|
# Find an available port
|
||||||
|
port=$(ynh_find_port --port=3000)
|
||||||
|
ynh_app_setting_set --app=$app --key=port --value=$port
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# INSTALL DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Installing dependencies..." --weight=20
|
||||||
|
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
|
||||||
|
# Install Nodejs
|
||||||
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
|
||||||
|
|
||||||
|
# Install Yarn
|
||||||
|
#ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
|
||||||
|
|
||||||
|
if [ "$(lsb_release --codename --short)" = "buster" ]; then
|
||||||
|
ynh_install_extra_app_dependencies --repo="deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" --package="$pkg_dependencies_buster" --key="https://www.mongodb.org/static/pgp/server-4.2.asc"
|
||||||
|
mongodb_servicename=$mongodb_buster
|
||||||
|
else
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
mongodb_servicename=$mongodb_stretch
|
||||||
fi
|
fi
|
||||||
|
|
||||||
workdir=$(pwd)
|
#=================================================
|
||||||
|
# CREATE A MONGODB DATABASE
|
||||||
|
#=================================================
|
||||||
|
ynh_print_info --message="Creating a MongoDB database..."
|
||||||
|
|
||||||
# find suitable port (default 3000)
|
# Start mongodb
|
||||||
port=$(ynh_find_port 3000)
|
systemctl enable $mongodb_servicename
|
||||||
|
systemctl start $mongodb_servicename
|
||||||
|
|
||||||
# if path do not begin with / add a / at the begining
|
# Registering db name
|
||||||
if [ "${path:0:1}" != "/" ]; then
|
db_name=$(ynh_sanitize_dbid --db_name=$app)
|
||||||
path="/$path"
|
ynh_app_setting_set --app=$app --key=db_name --value=$db_name
|
||||||
fi
|
|
||||||
# if path do not end with / add a / at the end
|
|
||||||
if [ "${path:${#path}-1}" != "/" ] && [ ${#path} -gt 1 ]; then
|
|
||||||
path="$path/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Check domain/path availability
|
|
||||||
ynh_webpath_available $domain $path
|
|
||||||
if [[ ! $? -eq 0 ]]; then
|
|
||||||
ynh_die "domain not available"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Register/book a web path for an app
|
|
||||||
ynh_webpath_register $app $domain $path
|
|
||||||
|
|
||||||
final_path="/var/lib/$app"
|
|
||||||
[[ -d $final_path ]] && ynh_die \
|
|
||||||
"The destination directory '$final_path' already exists.\
|
|
||||||
You should safely delete it before installing this app."
|
|
||||||
|
|
||||||
# Save specific settings
|
|
||||||
ynh_app_setting_set $app node_version $NODE_VERSION
|
|
||||||
ynh_app_setting_set $app rocketchat_version $ROCKETCHAT_VERSION
|
|
||||||
ynh_app_setting_set $app serviceuser $serviceuser
|
|
||||||
ynh_app_setting_set $app port $port
|
|
||||||
ynh_app_setting_set $app final_path $final_path
|
|
||||||
ynh_app_setting_set $app path $path
|
|
||||||
ynh_app_setting_set $app is_public $is_public
|
|
||||||
|
|
||||||
#Install dependencies
|
|
||||||
installdeps
|
|
||||||
|
|
||||||
# Create destination
|
|
||||||
mkdir -p $final_path
|
|
||||||
|
|
||||||
# Create user
|
|
||||||
id -u $serviceuser || useradd -d "$final_path" -M $serviceuser
|
|
||||||
|
|
||||||
# Copy and set systemd configuration
|
|
||||||
ynh_replace_string "#ROOTURL#" "$domain" ../conf/rocketchat.service
|
|
||||||
ynh_replace_string "#LOCATION#" "${path:-/}" ../conf/rocketchat.service
|
|
||||||
ynh_replace_string "#PORT#" "$port" ../conf/rocketchat.service
|
|
||||||
ynh_replace_string "#USER#" "$serviceuser" ../conf/rocketchat.service
|
|
||||||
ynh_replace_string "#DESTDIR#" "$final_path" ../conf/rocketchat.service
|
|
||||||
ynh_replace_string "#DBNAME#" "$dbname" ../conf/rocketchat.service
|
|
||||||
# absolute node path needed
|
|
||||||
NODE_BIN=$(which node)
|
|
||||||
ynh_replace_string "#NODE#" "$NODE_BIN" ../conf/rocketchat.service
|
|
||||||
cp ../conf/rocketchat.service /etc/systemd/system/$app.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
# Copy and set nginx configuration
|
|
||||||
nginx_conf="/etc/nginx/conf.d/${domain}.d/${app}.conf"
|
|
||||||
ynh_replace_string "#APP#" "$app" ../conf/nginx.conf
|
|
||||||
ynh_replace_string "#PATH#" "$path" ../conf/nginx.conf
|
|
||||||
ynh_replace_string "#PORT#" "$port" ../conf/nginx.conf
|
|
||||||
ynh_replace_string "#LOCATION#" "${path:-/}" ../conf/nginx.conf
|
|
||||||
|
|
||||||
#set db name into ldap config
|
|
||||||
ynh_replace_string "#DBNAME#" "$dbname" ../conf/rocketchat_ldap.js
|
|
||||||
|
|
||||||
cp ../conf/nginx.conf "$nginx_conf"
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Setting up source files..." --weight=2
|
||||||
|
|
||||||
ynh_setup_source "$final_path"
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
|
ynh_setup_source --dest_dir=$final_path
|
||||||
|
|
||||||
chown -R $serviceuser: $final_path
|
#=================================================
|
||||||
|
# NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring Nginx web server..." --weight=2
|
||||||
|
|
||||||
cd $final_path/programs/server/
|
# Create a dedicated nginx config
|
||||||
|
ynh_add_nginx_config
|
||||||
|
|
||||||
sudo -u $serviceuser npm install --production
|
#=================================================
|
||||||
|
# CREATE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring system user..." --weight=3
|
||||||
|
|
||||||
cd $workdir
|
# Create a system user
|
||||||
|
ynh_system_user_create --username=$app --home_dir=$final_path
|
||||||
|
|
||||||
systemctl reload nginx
|
#=================================================
|
||||||
if [ "$is_public" = "Yes" ];
|
# SPECIFIC SETUP
|
||||||
|
#==============================================
|
||||||
|
# INSTALL HEDGEDOC
|
||||||
|
#==============================================
|
||||||
|
ynh_script_progression --message="Building $app... (this will take some time and resources!)" --weight=240
|
||||||
|
|
||||||
|
pushd "$final_path" || ynh_die
|
||||||
|
curl https://install.meteor.com/ | sh
|
||||||
|
sudo -u $app meteor ynh_npm install
|
||||||
|
sudo -u $app meteor ynh_npm run postinstall
|
||||||
|
sudo -u $app meteor add rocketchat:lib
|
||||||
|
sudo -u $app meteor build --server-only --directory $final_path
|
||||||
|
cd $final_path/bundle/programs/server
|
||||||
|
ynh_npm install
|
||||||
|
|
||||||
|
popd || ynh_die
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring a systemd service..." --weight=1
|
||||||
|
|
||||||
|
ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service"
|
||||||
|
ynh_replace_string --match_string="__YNH_NPM__" --replace_string="$ynh_npm" --target_file="../conf/systemd.service"
|
||||||
|
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/systemd.service"
|
||||||
|
ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="../conf/systemd.service"
|
||||||
|
|
||||||
|
ynh_add_systemd_config
|
||||||
|
|
||||||
|
# #=================================================
|
||||||
|
# # MODIFY A CONFIG FILE
|
||||||
|
# #=================================================
|
||||||
|
|
||||||
|
ynh_replace_string --match_string=" engine:/" --replace_string="engine: wiredTiger/" --target_file="/etc/mongod.conf"
|
||||||
|
ynh_replace_string --match_string="replication:/replication:\n" --replace_string="replSetName: rs01/" --target_file="/etc/mongod.conf"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
|
#=================================================
|
||||||
|
# SECURE FILES AND DIRECTORIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Securing files and directories..."
|
||||||
|
|
||||||
|
# Set permissions to app files
|
||||||
|
chown -R $app:$app $final_path
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# INTEGRATE SERVICE IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Integrating service in YunoHost..."
|
||||||
|
|
||||||
|
yunohost service add $app --description "Chat" --log="/var/log/$app/$app.log"
|
||||||
|
yunohost service add mongodb --description "MongoDB daemon" --log "/var/log/mongodb/mongodb.log"
|
||||||
|
|
||||||
|
|
||||||
|
mongo --eval "printjson(rs.initiate())"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --weight=2
|
||||||
|
|
||||||
|
# Start a systemd service
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" #--line_match="HTTP Server listening"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SSOWAT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring SSOwat..." --weight=1
|
||||||
|
|
||||||
|
# Make app public if necessary or protect it
|
||||||
|
if [ $is_public -eq 1 ]
|
||||||
then
|
then
|
||||||
ynh_app_setting_set "$app" skipped_uris "/"
|
ynh_permission_update --permission "main" --add "visitors"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
systemctl start $app.service
|
#=================================================
|
||||||
systemctl enable $app.service
|
# RELOAD NGINX
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reloading NGINX web server..." --weight=2
|
||||||
|
|
||||||
# add rocketchat to services
|
ynh_systemd_action --service_name=nginx --action=reload
|
||||||
yunohost service add $app
|
|
||||||
|
|
||||||
# wait for rocketchat to populate db and start
|
#=================================================
|
||||||
waitforservice
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
mongo < ../conf/rocketchat_ldap.js
|
ynh_script_progression --message="Installation of $app completed" --last
|
||||||
|
|
||||||
systemctl restart $app.service
|
|
||||||
|
|
||||||
waitforservice
|
|
||||||
|
|
||||||
yunohost app ssowatconf
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -u
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC START
|
# GENERIC START
|
||||||
|
@ -7,25 +6,97 @@ set -u
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source ./_common.sh
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..." --time --weight=1
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
domain=$(ynh_app_setting_get $app domain)
|
|
||||||
final_path=$(ynh_app_setting_get $app final_path)
|
|
||||||
|
|
||||||
systemctl stop $app.service
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
|
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)
|
||||||
|
|
||||||
# remove Rocketchat from services
|
#=================================================
|
||||||
yunohost service remove $app
|
# STANDARD REMOVE
|
||||||
|
#=================================================
|
||||||
|
# REMOVE SERVICE INTEGRATION IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# 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 >/dev/null
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Removing $app service..." --time --weight=1
|
||||||
|
yunohost service remove $app
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# STOP AND REMOVE SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping and removing the systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
# Remove the dedicated systemd config
|
||||||
|
ynh_remove_systemd_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE THE MYSQL DATABASE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing the Mongodb database..." --time --weight=1
|
||||||
|
|
||||||
ynh_secure_remove $final_path
|
|
||||||
ynh_secure_remove /etc/nginx/conf.d/$domain.d/$app.conf
|
|
||||||
ynh_secure_remove /var/log/$app
|
|
||||||
ynh_secure_remove /etc/systemd/system/$app.service
|
|
||||||
|
|
||||||
# remove database!!!
|
# remove database!!!
|
||||||
mongo rocketchat --eval "db.dropDatabase()"
|
mongo $app --eval "db.dropDatabase()"
|
||||||
|
|
||||||
systemctl daemon-reload
|
#=================================================
|
||||||
systemctl reload nginx
|
# REMOVE DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing dependencies..." --time --weight=1
|
||||||
|
|
||||||
|
# Remove metapackage and its dependencies
|
||||||
|
ynh_remove_app_dependencies
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE APP MAIN DIR
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing app main directory..." --time --weight=1
|
||||||
|
|
||||||
|
# Remove the app directory securely
|
||||||
|
ynh_secure_remove --file="$final_path"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing nginx web server configuration..." --time --weight=1
|
||||||
|
|
||||||
|
# Remove the dedicated nginx config
|
||||||
|
ynh_remove_nginx_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC REMOVE
|
||||||
|
#=================================================
|
||||||
|
# REMOVE VARIOUS FILES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Remove the log files
|
||||||
|
ynh_secure_remove --file="/var/log/$app/"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
|
#=================================================
|
||||||
|
# REMOVE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1
|
||||||
|
|
||||||
|
# Delete a system user
|
||||||
|
ynh_system_user_delete --username=$app
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_script_progression --message="Removal of $app completed" --time --last
|
||||||
|
|
Loading…
Add table
Reference in a new issue