aboutsummaryrefslogtreecommitdiff
path: root/scripts/install
blob: d58f08e795b61527dbf60461f81720992b0df72c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/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
	echo ""
}
TRAP_ON	# Active trap to stop the script if an error is detected.

domain=$YNH_APP_ARG_DOMAIN
admin_mastodon=$YNH_APP_ARG_ADMIN
admin_pass=$YNH_APP_ARG_PASSWD
language=$YNH_APP_ARG_LANGUAGE

app=$YNH_APP_INSTANCE_NAME

CHECK_VAR "$app" "app name not set"

CHECK_USER "$admin_mastodon"

CHECK_DOMAINPATH

CHECK_FINALPATH

ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app admin $admin_mastodon
ynh_app_setting_set $app pass $admin_pass
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 apt-transport-https

# 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 source.list debian package backports & yarn
sudo cp ../conf/backports.list /etc/apt/sources.list.d/
sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo cp ../conf/yarn.list /etc/apt/sources.list.d/
ynh_package_update

# Install debian package backports
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 | sudo bash -
sudo apt-get -y install nodejs

# Install Yarn
ynh_package_install yarn

# Set UTF8 encoding by default
sudo su -c "psql" postgres <<< \
        "update pg_database set datistemplate='false' where datname='template1';"
sudo su -c "psql" postgres <<< \
	      "drop database template1;"
sudo su -c "psql" postgres <<< \
	      "create database template1 encoding='UTF8' template template0;"
sudo su -c "psql" postgres <<< \
	      "update pg_database set datistemplate='true' where datname='template1';"

# Create DB without password
ynh_psql_create_db_without_password "$app"
sudo systemctl restart postgresql

# Download all sources rbenv, ruby and mastodon
pushd $final_path/live
sudo su - $app <<CLONECOMMANDS
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
pushd $final_path/live
git checkout $(git tag | tail -n 1)
CLONECOMMANDS

# Be king rewind (/var/cache/yunohost/from_file/scripts)
popd

# # Get Mastodon last version
# sudo mkdir "${final_path}/live"
# SETUP_SOURCE
# sudo chown -R $app: "${final_path}"

# Install de rbenv
sudo su - $app <<COMMANDS
pushd ~/.rbenv
src/configure && make -C src
echo 'export PATH="/opt/mastodon/.rbenv/bin:/opt/mastodon/live/bin:$PATH"' >> ~/.profile
echo 'export PATH="/opt/mastodon/.rbenv/bin:/opt/mastodon/live/bin:$PATH"' >> ~/.bashrc
echo 'eval "\$(rbenv init -)"' >> ~/.profile
COMMANDS

# Install ruby-build
sudo su - $app <<RCOMMANDS
/opt/mastodon/.rbenv/bin/rbenv install 2.4.1
/opt/mastodon/.rbenv/versions/2.4.1/bin/ruby -v
RCOMMANDS

# Create symlink for ruby
sudo ln -s /opt/mastodon/.rbenv/versions/2.4.1/bin/ruby /usr/bin/ruby || true

# Install Mastodon
sudo su - $app <<MCOMMANDS
pushd ~/live
/opt/mastodon/.rbenv/versions/2.4.1/bin/gem install bundler
bin/bundle install --deployment --without development test
yarn install --production
MCOMMANDS

# Adjust Mastodon config
pushd $final_path/live/
sudo cp -a .env.production.sample .env.production
sudo sed -i "s@REDIS_HOST=redis@REDIS_HOST=127.0.0.1@g" "${final_path}/live/.env.production"
sudo sed -i "s@DB_HOST=db@DB_HOST=/var/run/postgresql@g" "${final_path}/live/.env.production"
sudo sed -i "s@DB_USER=postgres@DB_USER=${app}@g" "${final_path}/live/.env.production"
sudo sed -i "s@DB_NAME=postgres@DB_NAME=${app}_production@g" "${final_path}/live/.env.production"
sudo sed -i "s@LOCAL_DOMAIN=example.com@LOCAL_DOMAIN=${domain}@g" "${final_path}/live/.env.production"

language="$(echo $language | head -c 2)"
sudo sed -i "s@# DEFAULT_LOCALE=de@DEFAULT_LOCALE=${language}@g" "${final_path}/live/.env.production"

paperclip_secret=$(head -n128 /dev/urandom | tail -n +1 | tr -dc -d 'a-z0-9' | head -c128)
secret_key_base=$(head -n128 /dev/urandom | tail -n +1 | tr -dc -d 'a-z0-9' | head -c128)
otp_secret=$(head -n128 /dev/urandom | tail -n +1 | tr -dc -d 'a-z0-9' | head -c128)
sudo sed -i "s@PAPERCLIP_SECRET=@PAPERCLIP_SECRET=${paperclip_secret}@g" "${final_path}/live/.env.production"
sudo sed -i "s@SECRET_KEY_BASE=@SECRET_KEY_BASE=${secret_key_base}@g" "${final_path}/live/.env.production"
sudo sed -i "s@OTP_SECRET=@OTP_SECRET=${otp_secret}@g" "${final_path}/live/.env.production"

sudo sed -i 's,SMTP_LOGIN=,SMTP_LOGIN='${admin_mastodon}'@'${domain}',' "${final_path}/live/.env.production"
sudo sed -i "s@SMTP_PASSWORD=@SMTP_PASSWORD=${admin_pass}@g" "${final_path}/live/.env.production"
sudo sed -i "s@SMTP_SERVER=smtp.mailgun.org@SMTP_SERVER=localhost@g" "${final_path}/live/.env.production"
sudo sed -i 's,SMTP_FROM_ADDRESS=notifications@example.com,SMTP_FROM_ADDRESS='${admin_mastodon}'@'${domain}',' "${final_path}/live/.env.production"
sudo sed -i "s@#SMTP_OPENSSL_VERIFY_MODE=peer@SMTP_OPENSSL_VERIFY_MODE=none@g" "${final_path}/live/.env.production"

# Create database
# Preconfig CSS & JS
sudo su - $app <<CCOMMANDS
pushd ~/live
RAILS_ENV=production bin/bundle exec rails db:setup
RAILS_ENV=production bin/bundle exec rails --trace assets:precompile
CCOMMANDS

# init rbenv & create bundle
sudo su - $app <<BCOMMANDS
. ~/.profile
type rbenv
BCOMMANDS

# Add Services
pushd $(popd)

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-sidekiq.service /etc/systemd/system/mastodon-sidekiq.service
sudo chown root: /etc/systemd/system/mastodon-sidekiq.service
sudo cp ../conf/mastodon-streaming.service /etc/systemd/system/mastodon-streaming.service
sudo chown root: /etc/systemd/system/mastodon-streaming.service

sudo systemctl daemon-reload
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

# Add service YunoHost
sudo yunohost service add mastodon-web
sudo yunohost service add mastodon-sidekiq
sudo yunohost service add mastodon-streaming

# Copy nginx config
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf

# Install crontab
sudo cp ../conf/crontab_mastodon /etc/cron.d/$app
sudo sed -i "s@__APP__@$app@g" /etc/cron.d/$app
# Restart crontab
sudo systemctl restart cron

# Unprotected url
ynh_app_setting_set "$app" unprotected_uris "/"

# Reload SSOwat configuration
sudo yunohost app ssowatconf

# Reload Nginx
sudo systemctl reload nginx