-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathliman_installer.sh
executable file
·291 lines (247 loc) · 9.58 KB
/
liman_installer.sh
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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#!/bin/bash
# Bu betik, Liman MYS 2.0'nin kurulumu, kaldırılması ve yönetimi için kullanılır.
# Liman MYS 2.0'nin kurulumunu, kaldırılmasını, yönetici parolasını sıfırlamayı,
# servis durumlarını kontrol etmeyi, veritabanını yedeklemeyi ve geri yüklemeyi,
# uygulama anahtarını almayı sağlayan işlevleri sağlar.
# Betik ayrıca günlük tutma ve sudo yetkilerini kontrol etme yardımcı işlevlerini içerir.
# Betiği kullanmak için, çalıştırırken bir komutu argüman olarak geçirin.
# Örneğin: ./liman_installer.sh kur (Liman MYS 2.0'ı kurmak için)
# Kullanılabilir komutların listesi için 'yardım' komutunu kullanın.
# Not: Bu betiğin çalıştırılması için sudo yetkilerine ihtiyaç vardır.
log_file="liman_installation.log"
liman_deb="liman-2.0-RC2-863.deb"
# ANSI renk kodları
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Bir mesajı bir dosyaya ve standart çıktıya kaydetmek için işlev
function log() {
local message="$1"
local is_error="$2"
local timestamp="$(date +"%Y-%m-%d %H:%M:%S")"
# Log dosyasına yaz
echo "$timestamp $message" >> "$log_file"
# Standart çıktıya yaz
if [ "$is_error" = true ]; then
echo -e "${RED}$message${NC}"
else
echo -e "${GREEN}$message${NC}"
fi
}
# Betiğin sudo yetkileriyle çalıştırılıp çalıştırılmadığını kontrol etmek için işlev
function check_sudo() {
if [ "$(id -u)" -ne 0 ]; then
log "HATA: Bu betiğin çalıştırılması için sudo yetkisi gereklidir. Lütfen sudo ile tekrar deneyin." true
exit 1
fi
}
# Liman MYS 2.0'ı kurmak için işlev
function install_liman() {
log "Liman MYS 2.0 kurulumu başlatılıyor..."
NODE_MAJOR=18
# NodeJS deposunu ekle
log "NodeJS deposu ekleniyor..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
if sudo apt-get update; then
log "NodeJS deposu başarıyla eklendi."
else
log "HATA: NodeJS deposu eklenemedi." true
exit 1
fi
# PHP deposunu ekle
log "PHP deposu ekleniyor..."
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
if sudo apt-get update; then
log "PHP deposu başarıyla eklendi."
else
log "HATA: PHP deposu eklenemedi." true
exit 1
fi
# PostgreSQL deposunu ekle
log "PostgreSQL deposu ekleniyor..."
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > pgsql.gpg
sudo mv pgsql.gpg /etc/apt/trusted.gpg.d/pgsql.gpg
# Liman MYS 2.0'ı indir ve kur
log "Liman MYS 2.0 indiriliyor ve kuruluyor..."
sudo apt update
wget https://github.com/limanmys/core/releases/download/release.feature-new-ui.863/"$liman_deb"
# .deb dosyası için izinleri ayarla
sudo chmod +x ./"$liman_deb"
sudo apt install ./"$liman_deb"
# .deb dosyasını kaldır
if [ -f "$liman_deb" ]; then
log ".deb dosyası temizleniyor..."
rm -f "$liman_deb"
else
log "HATA: .deb dosyası bulunamadı."
fi
log "Liman MYS 2.0 kurulumu tamamlandı."
}
# Liman MYS 2.0'ı kaldırmak için işlev
function uninstall_liman() {
log "Liman MYS 2.0 kaldırılıyor..."
sudo apt-get remove --purge liman
sudo apt-get autoremove
log "Liman MYS 2.0 kaldırma işlemi tamamlandı."
}
# Yönetici parolasını sıfırlamak için işlev
function reset_admin_password() {
log "Admin kullanıcısı için yeni parola oluşturuluyor..."
sudo limanctl reset [email protected]
log "Yeni parola oluşturuldu."
}
function logo() {
echo -e "${BLUE}"
cat << "EOF"
$$\ $$\
$$ | \__|
$$ | $$\ $$$$$$\$$$$\ $$$$$$\ $$$$$$$\
$$ | $$ |$$ _$$ _$$\ \____$$\ $$ __$$\
$$ | $$ |$$ / $$ / $$ | $$$$$$$ |$$ | $$ |
$$ | $$ |$$ | $$ | $$ |$$ __$$ |$$ | $$ |
$$$$$$$$\ $$ |$$ | $$ | $$ |\$$$$$$$ |$$ | $$ |
\________|\__|\__| \__| \__| \_______|\__| \__|
EOF
echo -e "Liman MYS 2.0 Otomasyon Scripti\n${NC}"
}
# Yardım mesajını yazdırmak için işlev
function print_help() {
echo "Kullanım: ./liman_installer.sh [command] [options]"
echo " kur: Liman MYS 2.0'ı kurar."
echo " kaldir: Liman MYS 2.0'ı kaldırır."
echo " administrator: Admin kullanıcısı için yeni parola oluşturur."
echo " reset: Liman MYS 2.0'ı kaldırır ve tekrar kurar."
echo " help: Bu yardım mesajını gösterir."
echo " print_all_logs: Tüm logları ekrana yazdırır."
echo " check_services: Liman MYS 2.0 servislerinin durumunu kontrol eder."
echo " reset_services: Liman MYS 2.0 servislerini yeniden başlatır."
echo " backup_database: Veritabanını yedekler. Parametre olarak yedek dosyasının kaydedileceği dizini alır."
echo " restore_database: Veritabanını yedekten geri yükler. Parametre olarak yedek dosyasının adını alır."
echo " get_app_key: App key'i alır ve dosyaya kaydeder. Parametre olarak dosya adını alır."
echo -e "${NC}"
}
# Tüm logları yazdırmak için işlev
function print_all_logs() {
echo "Tüm loglar ekrana yazdırılıyor..."
cat "$log_file"
}
# Kontrol edilecek servislerin dizisi
services=("liman-render" "liman-socket" "liman-system" "liman-ui")
# Servis durumlarını kontrol etmek için işlev
function check_services() {
local status_codes=()
for service in "${services[@]}"; do
# Servis durumunu kontrol et
if systemctl is-active --quiet "$service.service"; then
status_codes+=("$service: aktif")
else
status_codes+=("$service: pasif")
fi
done
# Durum kodlarını yazdır
echo -e "${RED}Servis Durumları:${NC}"
for status_code in "${status_codes[@]}"; do
echo -e "${GREEN}$status_code${NC}"
done
}
# Servisleri sıfırlamak için işlev
function reset_services() {
for service in "${services[@]}"; do
# Servisi yeniden başlat
systemctl restart "$service.service"
done
log "Liman MYS 2.0 servisleri yeniden başlatıldı."
}
# Veritabanını yedeklemek için işlev
function backup_database() {
local db_password=$(cat /liman/server/.env | grep DB_PASSWORD | cut -d"=" -f2)
local backup_path="$1"
[ -z "$db_password" ] && log "HATA: Veritabanı parolası bulunamadı." true && exit 1
[ -z "$backup_path" ] && log "Yedek dosyası adı belirtilmedi. Varsayılan ad kullanılacak." && backup_path="/opt/liman-yedek.sql"
log "Veritabanı yedekleme işlemi başlatılıyor..."
pg_dump --dbname=postgresql://liman:"$db_password"@127.0.0.1:5432/liman > "$backup_path"
log "Veritabanı yedekleme işlemi tamamlandı. Yedek dosyası: $backup_path"
}
# Veritabanını geri yüklemek için işlev
function restore_database() {
local liman_db_backup="$1"
[ -z "$1" ] && log "HATA: Yedek dosyası adı belirtilmedi. Varsayılan ad kullanılacak." && liman_db_backup="/opt/liman-yedek.sql"
[ ! -f "$liman_db_backup" ] && log "HATA: Yedek dosyası bulunamadı." true && exit 1
log "Veritabanı geri yükleme işlemi başlatılıyor..."
local password=$(cat /liman/server/.env | grep DB_PASSWORDs | cut -d"=" -f2)
# Servisleri durdur
for service in "${services[@]}"; do
systemctl stop "$service.service"
done
# Veritabanını sıfırla
sudo psql -U postgres -c "drop database liman" --dbname=postgresql://liman:"$password"@localhost:5432/liman
log "Veritabanı sıfırlandı."
# Veritabanını geri yükle
psql -f "$liman_db_backup" --dbname=postgresql://liman:"$password"@localhost:5432/liman
}
# App key'ini almak için işlev
function get_app_key() {
local liman_app_key_file="$1"
[ -z "$1" ] && log "HATA: App Key dosyası adı belirtilmedi. Varsayılan ad kullanılacak." && liman_app_key_file="/opt/liman-app-key.txt"
local app_key=$(cat /liman/server/.env | grep APP_KEY | cut -d"=" -f2)
echo "$app_key" > "$liman_app_key_file"
log "App Key başarıyla alındı ve '$liman_app_key_file' dosyasına kaydedildi."
}
# Sudo yetkilerini kontrol et
check_sudo
# Bir komutun sağlanıp sağlanmadığını kontrol et
if [ "$#" -eq 0 ]; then
log "HATA: Lütfen bir komut girin. Yardım için './liman_installer.sh help' komutunu kullanın." true
exit 1
fi
# Argümana göre komutu çalıştır
case "$1" in
"kur")
install_liman
;;
"kaldir")
uninstall_liman
;;
"administrator")
reset_admin_password
;;
"reset")
uninstall_liman
install_liman
;;
"help")
logo
print_help
;;
"print_all_logs")
print_all_logs
;;
"check_services")
check_services
;;
"reset_services")
reset_services
;;
"backup_database")
backup_database "$2"
;;
"restore_database")
restore_database "$2"
reset_services
;;
"get_app_key")
get_app_key "$2"
;;
*)
log "Geçersiz komut! Lütfen './liman_installer.sh help' komutunu kullanarak yardım alın." true
exit 1
;;
esac
exit 0