Compare commits
7 Commits
0383b47b8e
...
b56ece2216
Author | SHA1 | Date | |
---|---|---|---|
b56ece2216 | |||
6eef78a48f | |||
7cddc059b5 | |||
dd4d97ffc9 | |||
6d28cf7431 | |||
287567a513 | |||
8e9055dcd3 |
14
README.md
14
README.md
@ -11,6 +11,14 @@ The master server will be used to manage the worker servers.
|
||||
The worker servers will be used to host the wordpress sites.
|
||||
The bot will be used to provide an easier way to manage the master server.
|
||||
|
||||
![Overview of system](assets/overview.png)
|
||||
|
||||
| Legend | Description |
|
||||
| --- | --- |
|
||||
| Red Connections | Secured by VPN or over LAN ONLY. (NOT API SECURED) |
|
||||
| Yellow Connections | HTTP/HTTPS public traffic |
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
After installing the master and discord bot you can use the following commands (as bot owner).
|
||||
@ -74,12 +82,14 @@ cd hnshosting-wp/worker
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
```
|
||||
Then to start the worker api server
|
||||
Just press enter when it shows any prompts.
|
||||
|
||||
Start the worker api server using
|
||||
```sh
|
||||
screen -dmS hnshosting-worker python3 main.py
|
||||
```
|
||||
|
||||
Add worker to master server:
|
||||
Add worker to master server pool:
|
||||
|
||||
```sh
|
||||
curl -X POST http://master-server-ip:5000/add-worker?worker=worker-name&ip=worker-server-ip -H "key: api-key"
|
||||
|
BIN
assets/overview.png
Normal file
BIN
assets/overview.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 144 KiB |
@ -168,17 +168,23 @@ def list_workers():
|
||||
for worker in workers:
|
||||
# Check worker status
|
||||
if not worker.__contains__(':'):
|
||||
return jsonify({'error': 'No workers available', 'success': 'false'})
|
||||
continue
|
||||
|
||||
online=True
|
||||
resp=requests.get("http://"+worker.split(':')[1].strip('\n') + ":5000/status",timeout=2)
|
||||
if (resp.status_code != 200):
|
||||
online=False
|
||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': 0, 'ready': 0})
|
||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': 0, 'status': 'offline'})
|
||||
continue
|
||||
sites = resp.json()['num_sites']
|
||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'ready': 1})
|
||||
|
||||
availability = resp.json()['availability']
|
||||
if availability == True:
|
||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'status': 'ready'})
|
||||
else:
|
||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'status': 'full'})
|
||||
|
||||
if len(worker_list) == 0:
|
||||
return jsonify({'error': 'No workers available', 'success': 'false'})
|
||||
return jsonify({'success': 'true', 'workers': worker_list})
|
||||
|
||||
@app.route('/site-info', methods=['GET'])
|
||||
|
@ -2,23 +2,28 @@
|
||||
# Initial install for all prerequisites for the project.
|
||||
# This makes it quicker to get each site up and running.
|
||||
|
||||
# Update the system
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
# Stop kernel prompts
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export NEEDRESTART_MODE=a
|
||||
echo "Dpkg::Options { \"--force-confdef\"; \"--force-confold\"; };" | sudo tee /etc/apt/apt.conf.d/local
|
||||
|
||||
KERNEL_VERSION=$(uname -r)
|
||||
sudo apt-mark hold linux-image-generic linux-headers-generic linux-generic linux-image-$KERNEL_VERSION linux-headers-$KERNEL_VERSION
|
||||
|
||||
# Install Docker
|
||||
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
|
||||
sudo apt install apt-transport-https ca-certificates curl software-properties-common python3-pip nginx -y
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt update
|
||||
apt-cache policy docker-ce
|
||||
sudo apt install docker-ce -y
|
||||
sudo apt install docker-compose -y
|
||||
|
||||
# Install NGINX
|
||||
sudo apt install nginx -y
|
||||
sudo apt install docker-ce docker-compose -y
|
||||
|
||||
# Install python prerequisites
|
||||
sudo apt install python3-pip -y
|
||||
python3 -m pip install -r requirements.txt
|
||||
cp .env.example .env
|
||||
chmod +x wp.sh tlsa.sh
|
||||
|
||||
# Pull docker images to save time later
|
||||
docker pull mysql:5.7 &
|
||||
docker pull wordpress:latest &
|
||||
wait
|
@ -67,16 +67,11 @@ def ping():
|
||||
return 'pong'
|
||||
|
||||
def get_sites_count():
|
||||
# If file doesn't exist, create it
|
||||
try:
|
||||
sites_file = open('sites.txt', 'r')
|
||||
except FileNotFoundError:
|
||||
sites_file = open('sites.txt', 'w')
|
||||
sites_file.close()
|
||||
sites_file = open('sites.txt', 'r')
|
||||
print(sites_file.readlines())
|
||||
# Get number of files in nginx/sites
|
||||
dir = os.listdir('/etc/nginx/sites-available')
|
||||
num_Sites = len(dir) - 1
|
||||
# Return number of lines in file
|
||||
return len(sites_file.readlines())
|
||||
return num_Sites
|
||||
|
||||
def site_exists(domain):
|
||||
# If file doesn't exist, create it
|
||||
|
Loading…
Reference in New Issue
Block a user