blob: cfee5b23ad3085ae0a8453ba23a37b1b9b40aa72 (
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
|
#!/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
|