aboutsummaryrefslogtreecommitdiff
path: root/scripts/install
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/install')
-rw-r--r--scripts/install181
1 files changed, 181 insertions, 0 deletions
diff --git a/scripts/install b/scripts/install
new file mode 100644
index 0000000..cfee5b2
--- /dev/null
+++ b/scripts/install
@@ -0,0 +1,181 @@
+#!/bin/bash
+
+# Exit on command errors and treat unset variables as an error
+set -eu
+
+source .fonctions # Loads the generic functions usually used in the script
+source /usr/share/yunohost/helpers # Source app helpers
+
+CLEAN_SETUP () {
+ # Clean installation residues that are not supported by the remove script.
+ # Clean hosts
+ sudo sed -i '/#MASTODON/d' /etc/hosts
+}
+TRAP_ON # Active trap to stop the script if an error is detected.
+
+domain=$YNH_APP_ARG_DOMAIN
+path=$YNH_APP_ARG_PATH
+admin_mastodon=$YNH_APP_ARG_ADMIN
+is_public=$YNH_APP_ARG_IS_PUBLIC
+#language=$YNH_APP_ARG_LANGUAGE
+
+app=$YNH_APP_INSTANCE_NAME
+
+CHECK_VAR "$app" "app name not set"
+
+CHECK_USER "$admin_mastodon"
+
+CHECK_PATH
+
+CHECK_DOMAINPATH
+
+CHECK_FINALPATH
+
+ynh_app_setting_set $app domain $domain
+ynh_app_setting_set $app path $path
+ynh_app_setting_set $app admin $admin_mastodon
+ynh_app_setting_set $app is_public $is_public
+# ynh_app_setting_set $app language $language
+
+# Create user unix
+sudo adduser $app --home /opt/$app --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password --disabled-login
+
+# Install debian package
+ynh_package_install imagemagick libpq-dev libxml2-dev libxslt1-dev file curl
+
+# Install redis package
+ynh_package_install redis-server redis-tools
+
+# Install postgresql
+ynh_package_install postgresql postgresql-contrib
+
+# Install Ruby
+ynh_package_install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
+
+# Install debian package backports
+sudo cp ../conf/backports.list /etc/apt/sources.list.d/
+ynh_package_update
+sudo apt-get -t jessie-backports -y install ffmpeg
+
+# Creates the destination directory and stores its location.
+ynh_app_setting_set $app final_path $final_path
+
+# Install de Node.js
+pushd /opt
+curl -sL https://deb.nodesource.com/setup_4.x | bash -
+sudo apt-get -y install nodejs
+npm install -g yarn
+
+## Install postgresql database
+dbname=$app
+dbuser=$app
+# Generate random password
+dbpass=$(ynh_string_random)
+ynh_psql_create_db "$dbname" "$dbuser" "$dbpass"
+# sudo su -c "psql" postgres <<< \
+# "CREATE EXTENSION mastodon;"
+
+# Download all Ruby source
+sudo git clone https://github.com/rbenv/rbenv.git $final_path/.rbenv
+git clone https://github.com/rbenv/ruby-build.git $final_path/.rbenv/plugins/ruby-build
+git clone https://github.com/tootsuite/mastodon.git $final_path/live
+sudo chown -R $app: "${final_path}"
+
+# Install de rbenv
+# Install ruby-build
+# Install Mastodon
+sudo su - $app <<COMMANDS
+pushd ~/.rbenv
+src/configure && make -C src
+echo 'export PATH="/opt/mastodon/.rbenv/bin:$PATH"' >> ~/.bash_profile
+echo 'export PATH="/opt/mastodon/.rbenv/bin:$PATH"
+eval "$(/opt/mastodon/.rbenv/bin/rbenv init -)"' >> ~/.bashrc
+type /opt/mastodon/.rbenv/bin/rbenv
+
+/opt/mastodon/.rbenv/bin/rbenv init
+
+/opt/mastodon/.rbenv/bin/rbenv install 2.3.1
+/opt/mastodon/.rbenv/versions/2.3.1/bin/ruby -v
+
+/opt/mastodon/.rbenv/versions/2.3.1/bin/gem install bundler
+/opt/mastodon/live/bin/bundle install --deployment --without development test
+yarn install
+COMMANDS
+
+## Generate a new environnement
+# Generate secret key
+# Adjust Mastodon config
+# Create database
+# Preconfig CSS & JS
+sudo su - $app <<ENDCOMMANDS
+type /opt/mastodon/.rbenv/bin/rbenv
+/opt/mastodon/.rbenv/bin/rbenv init
+
+bundle_paperclip_secret=$(/opt/mastodon/live/bin/bundle exec rake secret)
+bundle_secret_key_base=$(/opt/mastodon/live/bin/bundle exec rake secret)
+bundle_otp_secret=$(/opt/mastodon/live/bin/bundle exec rake secret)
+
+pushd ~/live/
+cp .env.production.sample .env.production
+sed -i "s@REDIS_HOST=localhost@REDIS_HOST=localhost@g" "${final_path}/live/.env.production"
+sed -i "s@DB_HOST=db@DB_HOST=/var/run/postgresql@g" "${final_path}/live/.env.production"
+sed -i "s@DB_USER=mastodon@DB_USER=${dbuser}@g" "${final_path}/live/.env.production"
+sed -i "s@DB_NAME=mastodon@DB_NAME=${dbuser}@g" "${final_path}/live/.env.production"
+sed -i "s@LOCAL_DOMAIN=domainedevotreinstance.tld@LOCAL_DOMAIN=${domain}@g" "${final_path}/live/.env.production"
+
+sed -i "s@PAPERCLIP_SECRET=@PAPERCLIP_SECRET=${bundle_paperclip_secret}@g" "${final_path}/live/.env.production"
+sed -i "s@SECRET_KEY_BASE=@SECRET_KEY_BASE=${bundle_secret_key_base}@g" "${final_path}/live/.env.production"
+sed -i "s@OTP_SECRET=@OTP_SECRET=${bundle_otp_secret}@g" "${final_path}/live/.env.production"
+
+sed -i "s@SMTP_SERVER=smtp.mailgun.org@SMTP_SERVER=localhost@g" "${final_path}/live/.env.production"
+sed -i "s@SMTP_FROM_ADDRESS=notifications@example.com@SMTP_FROM_ADDRESS=${user}@${domain}@g" "${final_path}/live/.env.production"
+
+RAILS_ENV=production bundle exec rails db:setup
+
+RAILS_ENV=production bundle exec rails assets:precompile
+ENDCOMMANDS
+
+# Add Services
+pushd /var/cache/yunohost/from_file/scripts
+
+sudo cp ../conf/mastodon-web.service /etc/systemd/system/mastodon-web.service
+sudo chown root: /etc/systemd/system/mastodon-web.service
+sudo cp ../conf/mastodon-web.service /etc/systemd/system/mastodon-sidekiq.service
+sudo chown root: /etc/systemd/system/mastodon-sidekiq.service
+sudo cp ../conf/mastodon-web.service /etc/systemd/system/mastodon-streaming.service
+sudo chown root: /etc/systemd/system/mastodon-streaming.service
+
+sudo systemctl enable /etc/systemd/system/mastodon-*.service
+sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
+# debug
+sudo systemctl status mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
+
+# Copy nginx config
+sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
+sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
+
+# Install crontab
+sudo cp ../conf/crontab_mastodon /etc/cron.d/$app
+sudo sed -i "s@__AP__@$app@g" /etc/cron.d/$app
+
+# Private or not
+if [ "$is_public" = "Yes" ];
+then
+ sudo sed -i "s@#--PRIVATE--@@g" /etc/nginx/conf.d/$domain.d/$app.conf
+fi
+
+# Setup SSOwat
+ynh_app_setting_set "$app" is_public "$is_public"
+if [ "$is_public" = "Yes" ];
+then
+ ynh_app_setting_set "$app" unprotected_uris "/"
+fi
+
+# Reload SSOwat configuration
+sudo yunohost app ssowatconf
+
+# Reload Nginx and regenerate SSOwat conf
+sudo systemctl reload nginx
+
+# Nettoyer hosts
+sudo sed -i '/#MASTODON/d' /etc/hosts \ No newline at end of file