Compare commits
18 Commits
feature/st
...
7cddc059b5
| Author | SHA1 | Date | |
|---|---|---|---|
|
7cddc059b5
|
|||
|
dd4d97ffc9
|
|||
|
6d28cf7431
|
|||
|
287567a513
|
|||
|
8e9055dcd3
|
|||
|
37158f410e
|
|||
|
fd3e9ba760
|
|||
|
bc1b27a504
|
|||
|
d005c5796e
|
|||
|
b2f731ce8d
|
|||
|
62770ff0ec
|
|||
|
b0ab46562f
|
|||
|
46096f0e84
|
|||
|
166e223429
|
|||
|
bc3f813b29
|
|||
|
aa11014ab9
|
|||
|
fc8a0c3193
|
|||
|
38526d5e08
|
@@ -22,11 +22,25 @@ jobs:
|
||||
cd master
|
||||
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
|
||||
tag_num=$(git rev-parse --short HEAD)
|
||||
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
|
||||
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
|
||||
tag=${tag//\//-}
|
||||
if [[ "$tag" == "main" ]]; then
|
||||
tag="latest"
|
||||
else
|
||||
tag_num="${tag}-${tag_num}"
|
||||
fi
|
||||
|
||||
|
||||
docker build -t hnshosting-master:$tag_num .
|
||||
docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-master:$tag_num
|
||||
docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:latest
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-master:latest
|
||||
docker tag hnshosting-master:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-master:$tag
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-master:$tag
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Build Bot:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -47,8 +61,18 @@ jobs:
|
||||
cd discord-bot
|
||||
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
|
||||
tag_num=$(git rev-parse --short HEAD)
|
||||
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
|
||||
tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
|
||||
tag=${tag//\//-}
|
||||
if [[ "$tag" == "main" ]]; then
|
||||
tag="latest"
|
||||
else
|
||||
tag_num="${tag}-${tag_num}"
|
||||
fi
|
||||
|
||||
docker build -t hnshosting-bot:$tag_num .
|
||||
docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag_num
|
||||
docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:latest
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:latest
|
||||
docker tag hnshosting-bot:$tag_num git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag
|
||||
docker push git.woodburn.au/nathanwoodburn/hnshosting-bot:$tag
|
||||
|
||||
@@ -60,7 +60,7 @@ SMTP_HOST: smtp-server
|
||||
SMTP_PORT: smtp-port
|
||||
SMTP_USER: smtp-user
|
||||
SMTP_PASS: smtp-pass
|
||||
SMTP_FROM: smtp-from <Optional>
|
||||
SMTP_FROM: smtp-from (eg. HNSHosting <hosting@nathan.woodburn.au>) This is optional
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -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'])
|
||||
@@ -251,8 +257,7 @@ def stripeapi():
|
||||
return jsonify({'success': 'false'})
|
||||
except stripe.error.SignatureVerificationError as e:
|
||||
return jsonify({'success': 'false'})
|
||||
|
||||
# Handle the event
|
||||
|
||||
if event.type == 'payment_intent.succeeded':
|
||||
payment_intent = event.data.object
|
||||
# Get email
|
||||
@@ -270,12 +275,12 @@ def stripeapi():
|
||||
password = os.getenv('SMTP_PASS')
|
||||
from_email = os.getenv('SMTP_FROM')
|
||||
if from_email == None:
|
||||
from_email = user
|
||||
from_email = "Hosting <"+user + ">"
|
||||
|
||||
context = ssl.create_default_context()
|
||||
with smtplib.SMTP_SSL(host, port, context=context) as server:
|
||||
server.login(user, password)
|
||||
message = "From: Hosting <" + from_email + ">\nTo: " + email + \
|
||||
message = "From: " + from_email + "\nTo: " + email + \
|
||||
"\nSubject: Your Licence key\n\nHello,\n\n"\
|
||||
+"This email contains your licence key for your new wordpress site.\n" \
|
||||
+"You can redeem this key via the discord bot or api.\n\n"\
|
||||
@@ -283,16 +288,12 @@ def stripeapi():
|
||||
|
||||
server.sendmail(from_email, email, message)
|
||||
|
||||
|
||||
|
||||
print('PaymentIntent was successful!', flush=True)
|
||||
print('Licence sent via email for stripe payment', flush=True)
|
||||
else:
|
||||
print('Unhandled event type {}'.format(event.type))
|
||||
return jsonify({'success': 'true'})
|
||||
|
||||
|
||||
|
||||
|
||||
def get_sites_count():
|
||||
# If file doesn't exist, create it
|
||||
try:
|
||||
|
||||
@@ -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
|
||||
@@ -26,7 +26,7 @@ def new_site():
|
||||
sites_file.close()
|
||||
|
||||
# New site in background
|
||||
thread = threading.Thread(target=new_site, args=(domain, 5000 + count))
|
||||
thread = threading.Thread(target=new_site_script, args=(domain,))
|
||||
thread.start()
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -93,8 +88,8 @@ def site_exists(domain):
|
||||
else:
|
||||
return False
|
||||
|
||||
def new_site(domain,port):
|
||||
script = 'bash wp.sh ' + domain + ' '+ str(port)
|
||||
def new_site_script(domain):
|
||||
script = 'bash wp.sh ' + domain
|
||||
os.system(script)
|
||||
|
||||
# Start the server
|
||||
|
||||
23
worker/wp.sh
23
worker/wp.sh
@@ -4,10 +4,8 @@
|
||||
# Then it will create an NGINX reverse proxy to the container.
|
||||
|
||||
# USAGE:
|
||||
# ./wp.sh [domain] [port offset]
|
||||
# ./wp.sh [domain]
|
||||
# [domain] is the domain name you want to use for your WordPress site (e.g. docker.freeconcept)
|
||||
# [port offset] is the offset you want to use for the port numbers.
|
||||
# This is used if you want to run multiple instances of WordPress on the same server. (e.g. 0, 1, 2, 3, etc.)
|
||||
|
||||
# Variables
|
||||
# Set the domain name
|
||||
@@ -21,15 +19,6 @@ fi
|
||||
DOMAIN="$1"
|
||||
echo "Setting up on domain name: $DOMAIN"
|
||||
|
||||
# Set port offset
|
||||
# This is used to offset the port numbers so you can run multiple instances of WordPress on the same server.
|
||||
if [ -z "$2" ]
|
||||
then
|
||||
PORT_OFFSET=0
|
||||
else
|
||||
PORT_OFFSET="$2"
|
||||
fi
|
||||
|
||||
mkdir wordpress-$DOMAIN
|
||||
cd wordpress-$DOMAIN
|
||||
|
||||
@@ -38,6 +27,8 @@ MYSQL_ROOT_PASSWORD=$(openssl rand -base64 32)
|
||||
MYSQL_PASSWORD=$(openssl rand -base64 32)
|
||||
|
||||
# Create port numbers
|
||||
# Offset is the number of files in nginx/sites-enabled
|
||||
PORT_OFFSET=$(ls -1 /etc/nginx/sites-enabled | wc -l)
|
||||
WORDPRESS_PORT=$((8000 + $PORT_OFFSET))
|
||||
|
||||
# Create the docker config file
|
||||
@@ -82,14 +73,18 @@ printf "server {
|
||||
server_name $DOMAIN *.$DOMAIN;
|
||||
proxy_ssl_server_name on;
|
||||
location / {
|
||||
proxy_set_header Accept-Encoding \"\";
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header Host \$http_host;
|
||||
proxy_set_header X-Forwarded-Host \$http_host;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
|
||||
proxy_pass $URL;
|
||||
}
|
||||
|
||||
sub_filter '</body>' '<script src=\"https://nathan.woodburn/https.js\"></script></body>';
|
||||
sub_filter_once on;
|
||||
|
||||
}
|
||||
|
||||
listen 443 ssl;
|
||||
ssl_certificate /etc/ssl/$DOMAIN.crt;
|
||||
|
||||
Reference in New Issue
Block a user