aboutsummaryrefslogtreecommitdiff
path: root/scripts/restore
blob: 8bad156a7311f43024ee2efea92077ac2086d7a5 (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
#!/bin/bash
# This restore script is adapted to Yunohost >=2.4

# Exit on command errors and treat unset variables as an error
set -eu

if [ ! -e _common.sh ]; then
	# Get file fonction if not been to the current directory
	sudo cp ../settings/scripts/_common.sh ./_common.sh
	sudo chmod a+rx _common.sh
fi
# Loads the generic functions usually used in the script
source _common.sh
# Source app helpers
source /usr/share/yunohost/helpers

# The parameter $app is the id of the app instance ex: ynhexample__2
app=$YNH_APP_INSTANCE_NAME

# Get old parameter of the app
domain=$(ynh_app_setting_get $app domain)
path=$(ynh_app_setting_get $app path)
is_public=$(ynh_app_setting_get $app is_public)

# Check domain/path availability
sudo yunohost app checkurl "${domain}${path}" -a "$app" \
	|| ynh_die "Path not available: ${domain}${path}"

# Check $final_path
final_path="/opt/${app}"
if [ -d $final_path ]; then
	ynh_die "There is already a directory: $final_path"
fi

# Check configuration files nginx
nginx_conf="/etc/nginx/conf.d/${domain}.d/${app}.conf"
if [ -f $nginx_conf ]; then
	ynh_die "The NGINX configuration already exists at '${nginx_conf}'.
	You should safely delete it before restoring this app."
fi
# Check configuration files php-fpm
crontab_conf="/etc/cron.d/${app}"
if [ -f $crontab_conf ]; then
	ynh_die "The CRONTAB configuration already exists at '${crontab_conf}'.
	You should safely delete it before restoring this app."
fi

# Restore services
web_systemd="/etc/systemd/system/${app}-web.service"
if [ -f "${web_systemd}" ]; then
	ynh_die "The MASTODON WEB configuration already exists at '${web_systemd}'.
	You should safely delete it before restoring this app."
fi
sidekiq_systemd="/etc/systemd/system/${app}-sidekiq.service"
if [ -f "${sidekiq_systemd}" ]; then
	ynh_die "The MASTODON SIDEKIQ configuration already exists at '${sidekiq_systemd}'.
	You should safely delete it before restoring this app."
fi
streaming_systemd="/etc/systemd/system/${app}-streaming.service"
if [ -f "${streaming_systemd}" ]; then
	ynh_die "The MASTODON STREAMING configuration already exists at '${streaming_systemd}'.
	You should safely delete it before restoring this app."
fi

# Create user unix
sudo adduser $app --home /opt/$app --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password --disabled-login

# Reinstall dependencies
	# Install debian package
	ynh_package_install imagemagick libpq-dev libxml2-dev libxslt1-dev file curl apt-transport-https pkg-config libprotobuf-dev protobuf-compiler

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

	# Install debian package backports
	sudo apt-get -t jessie-backports -y install ffmpeg

	# Install de Node.js
	pushd /opt
	curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
	sudo apt-get -y install nodejs

	# Install Yarn
	ynh_package_install yarn

	# Return to home
	popd

 # Restore sources & data
sudo cp -a ./sources/. "$final_path"

# Set permissions
sudo chown -R $app: "$final_path"

# Debug
sudo ls -alh "$final_path"

# Restore PostgreSQL database
db_user=$(ynh_sanitize_dbid "$app")
db_name=$(ynh_sanitize_dbid "$app")
db_pwd=$(ynh_app_setting_get "$app" db_pwd)

ynh_psql_test_if_first_run
ynh_psql_setup_db "$db_name" "$db_name" "$db_pwd"
ynh_psql_execute_file_as_root ./db.sql "$db_name"

# Install 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

# Create user for db postgresql
ynh_psql_create_db_without_password "$app"

# Setup database
#sudo su - $app <<SCOMMANDS
#cd ~/live
#RAILS_ENV=production bin/bundle exec rails db:setup
#SCOMMANDS

# copy database dump
sudo cp $YNH_APP_BACKUP_DIR/mastodon_db.sql $final_path
sudo chmod a+r $final_path/mastodon_db.sql

# Restore database dump
sudo su - $app <<RECOMMANDS
dropdb mastodon_production
createdb mastodon_production
psql mastodon_production < $final_path/mastodon_db.sql
RECOMMANDS

# Remove dump
ynh_secure_remove $final_path/mastodon_db.sql

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

# Upgrade Mastodon
sudo su - $app <<RCOMMANDS
cd ~/live
bin/bundle install
yarn install --pure-lockfile
#RAILS_ENV=production bin/bundle exec rails db:migrate
#RAILS_ENV=production bundle exec rails assets:clean
#RAILS_ENV=production bin/bundle exec rails assets:precompile
RCOMMANDS

# Modify Nginx configuration file and copy it to Nginx conf directory
sudo sed -i "s@__PATH__@$app@g" ./nginx.conf
sudo sed -i "s@__FINALPATH__@$final_path@g" ./nginx.conf
sudo cp -a ./nginx.conf   "$nginx_conf"
# Restore crontab
sudo cp -a ./cron.conf "$crontab_conf"

sudo cp ./systemd_web.service /etc/systemd/system/mastodon-web.service
sudo chown root: /etc/systemd/system/mastodon-web.service
sudo cp ./systemd_sidekiq.service /etc/systemd/system/mastodon-sidekiq.service
sudo chown root: /etc/systemd/system/mastodon-sidekiq.service
sudo cp ./systemd_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

# Reload services
sudo systemctl reload nginx