init
This commit is contained in:
		
							
								
								
									
										13
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
# owl-installer
 | 
			
		||||
 | 
			
		||||
owl knowledge base installer.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
bash owl_installer.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## TODO
 | 
			
		||||
 | 
			
		||||
1. Обработка исключений.
 | 
			
		||||
2. Установка SSL?
 | 
			
		||||
3. Опции командной строки для задания параметров установки.
 | 
			
		||||
							
								
								
									
										241
									
								
								owl_installer.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								owl_installer.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,241 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
#   owl-installer (v0.4)
 | 
			
		||||
#   Details at: https://owl.gch.icu/deploy/script/
 | 
			
		||||
#   Home page: https://owl.gch.icu/
 | 
			
		||||
#
 | 
			
		||||
#   LICENSE
 | 
			
		||||
#
 | 
			
		||||
# This is free and unencumbered software released into the public domain.
 | 
			
		||||
#
 | 
			
		||||
# Anyone is free to copy, modify, publish, use, compile, sell, or
 | 
			
		||||
# distribute this software, either in source code form or as a compiled
 | 
			
		||||
# binary, for any purpose, commercial or non-commercial, and by any
 | 
			
		||||
# means.
 | 
			
		||||
#
 | 
			
		||||
# In jurisdictions that recognize copyright laws, the author or authors
 | 
			
		||||
# of this software dedicate any and all copyright interest in the
 | 
			
		||||
# software to the public domain. We make this dedication for the benefit
 | 
			
		||||
# of the public at large and to the detriment of our heirs and
 | 
			
		||||
# successors. We intend this dedication to be an overt act of
 | 
			
		||||
# relinquishment in perpetuity of all present and future rights to this
 | 
			
		||||
# software under copyright law.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
			
		||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | 
			
		||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 | 
			
		||||
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 | 
			
		||||
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
			
		||||
# OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#
 | 
			
		||||
# For more information, please refer to <http://unlicense.org/>
 | 
			
		||||
#
 | 
			
		||||
#######################################################################
 | 
			
		||||
 | 
			
		||||
# Edit systemd service, socket and nginx vhost name here
 | 
			
		||||
OWL_SERVICE='/etc/systemd/system/owl.service'
 | 
			
		||||
OWL_SOCKET='/etc/systemd/system/owl.socket'
 | 
			
		||||
OWL_SOCK='/run/owl.sock' # literally socket file
 | 
			
		||||
OWL_VHOST='/etc/nginx/sites-available/owl.vhost'
 | 
			
		||||
# User who runs application. If it changed
 | 
			
		||||
#+don't forgot add www-data to your user's group!
 | 
			
		||||
#   usermod -aG YOUR_USERNAME www-data
 | 
			
		||||
OWL_USER='www-data'
 | 
			
		||||
 | 
			
		||||
# Colors
 | 
			
		||||
R="\e[31m" # red
 | 
			
		||||
G="\e[32m" # green
 | 
			
		||||
Y="\e[33m" # yellow
 | 
			
		||||
B="\e[34m" # blue
 | 
			
		||||
N="\e[0m"  # no color
 | 
			
		||||
 | 
			
		||||
owl_abort() {
 | 
			
		||||
    echo -e "${R}Abort!${N}"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
echo -e "${B}owl installation script v0.4${N}"
 | 
			
		||||
cat <<EOF
 | 
			
		||||
  ,   ,
 | 
			
		||||
  /\\ /\\
 | 
			
		||||
 ((@v@))
 | 
			
		||||
 ((;;; (\\
 | 
			
		||||
  \\ ;;; \\'
 | 
			
		||||
   ,V.V  \`
 | 
			
		||||
  \`\` \`\`
 | 
			
		||||
Home page: https://owl.gch.icu/
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
if [[ ! "$USER" == 'root' ]]; then
 | 
			
		||||
    echo -e "${R}You must run this script as root.${N}"
 | 
			
		||||
    owl_abort
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
owl_get_domain() {
 | 
			
		||||
    echo -n 'Enter your domain name: '
 | 
			
		||||
    read OWL_DOMAIN
 | 
			
		||||
    PATTERN='Yes|yes|Y|y'
 | 
			
		||||
    echo -en "This is correct domain?: ${Y}$OWL_DOMAIN${N} [y/N]: "
 | 
			
		||||
    while read; do
 | 
			
		||||
        if [[ "$REPLY" =~ $PATTERN ]]; then
 | 
			
		||||
            echo -e "${G}Getting started...${N}"
 | 
			
		||||
            break
 | 
			
		||||
        else
 | 
			
		||||
            owl_abort
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_install_requirements() {
 | 
			
		||||
    echo -e "${G}Installing web-server and must have packages...${N}"
 | 
			
		||||
    apt update
 | 
			
		||||
    apt install -y git nginx python3-venv
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_clone_repo() {
 | 
			
		||||
    echo -e "${G}Cloning owl from repo...${N}"
 | 
			
		||||
    git clone https://github.com/gechandesu/owl.git
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_install_venv() {
 | 
			
		||||
    echo -e "${G}Setting up Python virtual environment...${N}"
 | 
			
		||||
    python3 -m venv $PWD/env
 | 
			
		||||
    source $PWD/env/bin/activate
 | 
			
		||||
    pip install -U pip
 | 
			
		||||
    pip install -r $PWD/owl/requirements.txt
 | 
			
		||||
    pip install gunicorn
 | 
			
		||||
    deactivate
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_create_service() {
 | 
			
		||||
echo -e "${G}Creating systemd service: $OWL_SERVICE...${N}"
 | 
			
		||||
if [[ ! -f "$OWL_SERVICE" ]]; then
 | 
			
		||||
cat > "$OWL_SERVICE" <<EOF
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=gunicorn instance to serve owl knowledge base
 | 
			
		||||
Requires=$(basename $OWL_SOCKET)
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=notify
 | 
			
		||||
User=$OWL_USER
 | 
			
		||||
Group=$OWL_USER
 | 
			
		||||
# another option for an even more restricted service is
 | 
			
		||||
# DynamicUser=yes
 | 
			
		||||
# see http://0pointer.net/blog/dynamic-users-with-systemd.html
 | 
			
		||||
Environment="PATH=$PWD/env/bin"
 | 
			
		||||
WorkingDirectory=$PWD/owl
 | 
			
		||||
ExecStart=$PWD/env/bin/gunicorn owl:app
 | 
			
		||||
KillMode=mixed
 | 
			
		||||
TimeoutStopSec=5
 | 
			
		||||
PrivateTmp=true
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_create_socket() {
 | 
			
		||||
echo -e "${G}Creating systemd socket: $OWL_SOCKET...${N}"
 | 
			
		||||
if [[ ! -f "$OWL_SOCKET" ]]; then
 | 
			
		||||
cat > "$OWL_SOCKET" <<EOF
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=gunicorn socket for owl knowledge base
 | 
			
		||||
 | 
			
		||||
[Socket]
 | 
			
		||||
ListenStream=$OWL_SOCK
 | 
			
		||||
# Our service won't need permissions for the socket, since it
 | 
			
		||||
# inherits the file descriptor by socket activation
 | 
			
		||||
# only the nginx daemon will need access to the socket
 | 
			
		||||
User=www-data
 | 
			
		||||
# Optionally restrict the socket permissions even more.
 | 
			
		||||
# Mode=600
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=sockets.target
 | 
			
		||||
EOF
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_enable_socket() {
 | 
			
		||||
SCK=$(basename $OWL_SOCKET)
 | 
			
		||||
systemctl enable --now $SCK && echo -e "${G}$SCK enabled.${N}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_enable_service() {
 | 
			
		||||
SRV=$(basename $OWL_SERVICE)
 | 
			
		||||
systemctl start $SRV  && echo -e "${G}$SRV started.${N}"
 | 
			
		||||
systemctl enable $SRV && echo -e "${G}$SRV enabled.${N}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_create_nginx_vh() {
 | 
			
		||||
echo -e "${G}Creating nginx virtual host: $OWL_VHOST...${N}"
 | 
			
		||||
cat > "$OWL_VHOST" <<EOF
 | 
			
		||||
server {
 | 
			
		||||
        listen 80;
 | 
			
		||||
        #listen 443 ssl http2; # Uncomment if you have SSL certificate.
 | 
			
		||||
 | 
			
		||||
        root $PWD/owl;
 | 
			
		||||
 | 
			
		||||
        server_name $OWL_DOMAIN;
 | 
			
		||||
 | 
			
		||||
        # Let's Encrypt SSL certifcate. Uncomment if you have SSL certificate.
 | 
			
		||||
        #ssl_certificate /etc/letsencrypt/live/$OWL_DOMAIN/fullchain.pem;
 | 
			
		||||
        #ssl_certificate_key /etc/letsencrypt/live/$OWL_DOMAIN/privkey.pem;
 | 
			
		||||
 | 
			
		||||
        # Redirect to HTTPS. Uncomment if you have SSL certificate.
 | 
			
		||||
        #if ($scheme != "https") {
 | 
			
		||||
        #        return 301 https://$host$request_uri;
 | 
			
		||||
        #}
 | 
			
		||||
 | 
			
		||||
        location / {
 | 
			
		||||
                # Proxy to gunicorn
 | 
			
		||||
                proxy_pass http://unix:$OWL_SOCK;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        location ~* \.(css|js|jpg|jpeg|png|gif|woff|ttf)$ {
 | 
			
		||||
                expires 1M;
 | 
			
		||||
                add_header Cache-Control public;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_enable_site() {
 | 
			
		||||
    echo -e "${G}Enabling site $OWL_VHOST...${N}"
 | 
			
		||||
    ln -s "$OWL_VHOST" /etc/nginx/sites-enabled
 | 
			
		||||
    nginx -t
 | 
			
		||||
    service nginx reload
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
owl_done() {
 | 
			
		||||
    echo -e "\e[32;1m@v@\nDone! ${N}"
 | 
			
		||||
    echo -e "${G}Let's check it out in browser:${N} http://$OWL_DOMAIN/"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PATTERN='Yes|yes|Y|y'
 | 
			
		||||
echo -en "Install owl into current directory?: ${Y}$PWD${N} [y/N]: "
 | 
			
		||||
while read; do
 | 
			
		||||
    if [[ "$REPLY" =~ $PATTERN ]]; then
 | 
			
		||||
        owl_get_domain
 | 
			
		||||
        owl_install_requirements
 | 
			
		||||
        owl_clone_repo
 | 
			
		||||
        owl_install_venv
 | 
			
		||||
        owl_create_socket
 | 
			
		||||
        owl_create_service
 | 
			
		||||
        owl_enable_socket
 | 
			
		||||
        owl_enable_service
 | 
			
		||||
        owl_create_nginx_vh
 | 
			
		||||
        owl_enable_site
 | 
			
		||||
        systemctl status "$(basename "$OWL_SERVICE")"
 | 
			
		||||
        owl_done
 | 
			
		||||
        break
 | 
			
		||||
    else
 | 
			
		||||
        owl_abort
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
		Reference in New Issue
	
	Block a user