diff options
Diffstat (limited to 'scripts/install')
| -rw-r--r-- | scripts/install | 181 |
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 |
