-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
executable file
·152 lines (114 loc) · 3.69 KB
/
install.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
#! /bin/bash
env='venv'
wdir=$(pwd)
echo "Step 1: Installing needed python dependencies."
# create python virtual-env
if [ ! -d "${env}" ]
then
echo "Creating virtual environment at ${env}"
virtualenv $env
fi
install requirements
source $env/bin/activate
echo "Installing required packages"
pip install -r requirements.txt
# create systemd service
echo "Step 2: Creating systemd service."
# config file
[[ ! -d '/etc/sysconfig' ]] && sudo mkdir /etc/sysconfig
sudo echo \
"PATH=${wdir}/${env}/bin:${PATH}
SPEEK_KEY=$(python -c 'import secrets; print(secrets.token_hex())')" > speek.env
sudo cp speek.env /etc/sysconfig/
rm speek.env
echo \
"[Unit]
Description = SPeek a simple web-based system monitor.
After=network.target
[Service]
User=$(whoami)
Group=www-data
WorkingDirectory=${wdir}
EnvironmentFile=/etc/sysconfig/speek.env
ExecStart=${wdir}/${env}/bin/gunicorn speek:app -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 -b unix:speek.sock -m 007
[Install]
WantedBy=multi-user.target" > speek.service
echo -e "================= speek.service ==================\n"
cat speek.service
echo -e "\n=============== end speek.service ================"
echo -e "Copying Unit file shown above into /etc/systemd/system/ for service setup"
sudo systemctl stop speek
sudo cp speek.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable speek
sudo systemctl start speek
# configure nginx
echo "Step 3: Setting up Nginx configuration."
while true; do
read -p "Would you like to set up a domain through Nginx (Y/n)? " yn
[[ $yn == '' ]] && yn='Y'
case $yn in
[Yy]* ) cont=true; break;;
[Nn]* ) cont=false; break;;
* ) echo "Please answer yes or no.";;
esac
done
if [ $cont = true ]
then
read -p "Please add the domain name you wich to set up for your SPeek: " domain
if [ ! -d '/etc/nginx' ]
then
echo 'No Nginx detected in typical config path /etc/nginx, attempting to install with apt.'
sudo apt install nginx
fi
nginx_site_file="speek.panel"
echo \
"server {
listen 80;
listen [::]:80;
server_name ${domain};
location / {
include proxy_params;
proxy_pass http://unix:${wdir}/speek.sock;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
}
location ^~ /static/ {
include /etc/nginx/mime.types;
root ${wdir}/speek/;
}
location ^~ /templates/ {
include /etc/nginx/mime.types;
root ${wdir}/speek/;
}
}" > $nginx_site_file
[[ ! -d '/etc/nginx/sites-available' ]] && sudo mkdir /etc/nginx/sites-available
[[ ! -d '/etc/nginx/sites-enabled' ]] && sudo mkdir /etc/nginx/sites-enabled
sudo cp $nginx_site_file "/etc/nginx/sites-available/${nginx_site_file}"
[[ ! -e "/etc/nginx/sites-enabled/${nginx_site_file}" ]] && sudo ln -s "/etc/nginx/sites-available/${nginx_site_file}" "/etc/nginx/sites-enabled/${nginx_site_file}"
sudo systemctl restart nginx
echo -e "\nDone!\nSee speek service with: systemctl status speek\nSee nginx service with: systemctl status nginx\n"
echo -e "Step 4: SSL Certificate."
while true; do
read -p "Would you like to set up a SSL certificate from Let's Encrypt (Y/n)? " yn
[[ $yn == '' ]] && yn='Y'
case $yn in
[Yy]* ) cont=true; break;;
[Nn]* ) cont=false; break;;
* ) echo "Please answer yes or no.";;
esac
done
if [ $cont = true ]
then
if ! command -v certbot &> /dev/null
then
echo "Certbot could not be found, installing with apt"
sudo apt install certbot
fi
sudo certbot --nginx -n --redirect -d $domain
fi # "Step 4: SSL Certificate."
fi # Step 3: Setting up Nginx
echo -e "\nStep 5: Creating database and initial user."
python -c 'from speek import init'