Compare commits
No commits in common. "b56ece2216588ac427451659e845fa615a50a131" and "0383b47b8e1dcd37161e0f3b1e9fb3ffbcfc09ad" have entirely different histories.
b56ece2216
...
0383b47b8e
14
README.md
14
README.md
@ -11,14 +11,6 @@ The master server will be used to manage the worker servers.
|
|||||||
The worker servers will be used to host the wordpress sites.
|
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.
|
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
|
## Usage
|
||||||
|
|
||||||
After installing the master and discord bot you can use the following commands (as bot owner).
|
After installing the master and discord bot you can use the following commands (as bot owner).
|
||||||
@ -82,14 +74,12 @@ cd hnshosting-wp/worker
|
|||||||
chmod +x install.sh
|
chmod +x install.sh
|
||||||
./install.sh
|
./install.sh
|
||||||
```
|
```
|
||||||
Just press enter when it shows any prompts.
|
Then to start the worker api server
|
||||||
|
|
||||||
Start the worker api server using
|
|
||||||
```sh
|
```sh
|
||||||
screen -dmS hnshosting-worker python3 main.py
|
screen -dmS hnshosting-worker python3 main.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Add worker to master server pool:
|
Add worker to master server:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl -X POST http://master-server-ip:5000/add-worker?worker=worker-name&ip=worker-server-ip -H "key: api-key"
|
curl -X POST http://master-server-ip:5000/add-worker?worker=worker-name&ip=worker-server-ip -H "key: api-key"
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 144 KiB |
@ -168,23 +168,17 @@ def list_workers():
|
|||||||
for worker in workers:
|
for worker in workers:
|
||||||
# Check worker status
|
# Check worker status
|
||||||
if not worker.__contains__(':'):
|
if not worker.__contains__(':'):
|
||||||
continue
|
return jsonify({'error': 'No workers available', 'success': 'false'})
|
||||||
|
|
||||||
online=True
|
online=True
|
||||||
resp=requests.get("http://"+worker.split(':')[1].strip('\n') + ":5000/status",timeout=2)
|
resp=requests.get("http://"+worker.split(':')[1].strip('\n') + ":5000/status",timeout=2)
|
||||||
if (resp.status_code != 200):
|
if (resp.status_code != 200):
|
||||||
online=False
|
online=False
|
||||||
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': 0, 'status': 'offline'})
|
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': 0, 'ready': 0})
|
||||||
continue
|
continue
|
||||||
sites = resp.json()['num_sites']
|
sites = resp.json()['num_sites']
|
||||||
availability = resp.json()['availability']
|
worker_list.append({'worker': worker.split(':')[0],'ip': worker.split(':')[1].strip('\n'), 'online': online, 'sites': sites, 'ready': 1})
|
||||||
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})
|
return jsonify({'success': 'true', 'workers': worker_list})
|
||||||
|
|
||||||
@app.route('/site-info', methods=['GET'])
|
@app.route('/site-info', methods=['GET'])
|
||||||
|
@ -2,28 +2,23 @@
|
|||||||
# Initial install for all prerequisites for the project.
|
# Initial install for all prerequisites for the project.
|
||||||
# This makes it quicker to get each site up and running.
|
# This makes it quicker to get each site up and running.
|
||||||
|
|
||||||
# Stop kernel prompts
|
# Update the system
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
sudo apt update && sudo apt upgrade -y
|
||||||
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
|
# Install Docker
|
||||||
sudo apt install apt-transport-https ca-certificates curl software-properties-common python3-pip nginx -y
|
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
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
|
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
|
sudo apt update
|
||||||
apt-cache policy docker-ce
|
apt-cache policy docker-ce
|
||||||
sudo apt install docker-ce docker-compose -y
|
sudo apt install docker-ce -y
|
||||||
|
sudo apt install docker-compose -y
|
||||||
|
|
||||||
|
# Install NGINX
|
||||||
|
sudo apt install nginx -y
|
||||||
|
|
||||||
# Install python prerequisites
|
# Install python prerequisites
|
||||||
|
sudo apt install python3-pip -y
|
||||||
python3 -m pip install -r requirements.txt
|
python3 -m pip install -r requirements.txt
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
chmod +x wp.sh tlsa.sh
|
chmod +x wp.sh tlsa.sh
|
||||||
|
|
||||||
# Pull docker images to save time later
|
|
||||||
docker pull mysql:5.7 &
|
|
||||||
docker pull wordpress:latest &
|
|
||||||
wait
|
|
@ -67,11 +67,16 @@ def ping():
|
|||||||
return 'pong'
|
return 'pong'
|
||||||
|
|
||||||
def get_sites_count():
|
def get_sites_count():
|
||||||
# Get number of files in nginx/sites
|
# If file doesn't exist, create it
|
||||||
dir = os.listdir('/etc/nginx/sites-available')
|
try:
|
||||||
num_Sites = len(dir) - 1
|
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())
|
||||||
# Return number of lines in file
|
# Return number of lines in file
|
||||||
return num_Sites
|
return len(sites_file.readlines())
|
||||||
|
|
||||||
def site_exists(domain):
|
def site_exists(domain):
|
||||||
# If file doesn't exist, create it
|
# If file doesn't exist, create it
|
||||||
|
Loading…
Reference in New Issue
Block a user