This commit is contained in:
Vague Rabbit 2021-02-04 18:11:19 -08:00
parent 5e65c10f92
commit 9ddad3c290
9 changed files with 239 additions and 70 deletions

View file

@ -1,4 +1,3 @@
#########################################################################################
echo ""
echo "Creating production deployment packages for Saleor Dashboard..."
@ -10,21 +9,23 @@ echo ""
#########################################################################################
# Collect input from the user to assign required installation parameters
#########################################################################################
echo "Please provide details for your Saleor API instillation..."
echo "Please provide details for your Saleor Dashboard installation..."
echo ""
# Get the Dashboard & GraphQL host domain
while [ "$HOST" = "" ]
while [ "$SAME_HOST" = "" ]
do
echo -n "Enter the Dashboard & GraphQL host domain:"
read HOST
echo -n "Are you hosting the Dashboard on the same host domain as the API (yes|no)?"
read SAME_HOST
done
# Get the API host IP or domain
while [ "$API_HOST" = "" ]
do
echo ""
echo -n "Enter the API host IP or domain:"
read API_HOST
done
if [ "SAME_HOST" = "no" ]; then
while [ "$APP_HOST" = "" ]
do
echo ""
echo -n "Enter the Dashboard host domain:"
read APP_HOST
done
fi
# Get the APP Mount (Dashboard) URI
while [ "$APP_MOUNT_URI" = "" ]
do
@ -32,14 +33,6 @@ do
echo -n "Enter the APP Mount (Dashboard) URI:"
read APP_MOUNT_URI
done
# Get an optional custom API port
echo -n "Enter the API port (optional):"
read API_PORT
#
if [[ "$API_PORT" = "" ]]; then
API_PORT="8000"
fi
#
#########################################################################################
@ -48,12 +41,19 @@ fi
# Setup the environment variables for Saleor API
#########################################################################################
# Build the API URL
APIURL="http://$API_HOST:$API_PORT/$APIURI/"
API_URL="http://$API_HOST:$API_PORT/$APIURI/"
# Write the production .env file from template.env
sudo sed "s|{apiuri}|$APIURL|
s|{mounturi}|$APP_MOUNT_URI|
s|{url}|$HOST|" $HD/Deploy_Saleor/resources/saleor-dashboard/template.env > $HD/saleor-dashboard/.env
wait
if [ "SAME_HOST" = "no" ]; then
sudo sed "s|{api_url}|$API_URL|
s|{app_mount_uri}|$APP_MOUNT_URI|
s|{app_host}|$APP_HOST|" $HD/Deploy_Saleor/resources/saleor-dashboard/template.env > $HD/saleor-dashboard/.env
wait
else
sudo sed "s|{api_url}|$API_URL|
s|{app_mount_uri}|$APP_MOUNT_URI|
s|{app_host}|$HOST|" $HD/Deploy_Saleor/resources/saleor-dashboard/template.env > $HD/saleor-dashboard/.env
wait
fi
#########################################################################################
@ -83,11 +83,41 @@ wait
#########################################################################################
#########################################################################################
# Tell the user what's happening
# Setup the nginx block and move the static build files
#########################################################################################
echo "I think we're done here."
echo "Test the installation."
echo "Run python3 manage.py createsuperuser from $HD/saleor"
echo "Moving static files for the Dashboard..."
echo ""
if [ "$SAME_HOST" = "no" ]; then
# Move static files for the Dashboard
sudo mv $HD/saleor-dashboard/build/* /var/www/$APP_HOST/
# Make an empry variable
DASHBOARD_LOCATION=""
# Clean the saleor server block
sudo sed -i "s|{dashboard-location}|$DASHBOARD_LOCATION|" /etc/nginx/sites-available/saleor
# Create the saleor-dashboard server block
sudo sed "s|{hd}|$HD|g
s/{app_mount_uri}/$APP_MOUNT_URI/g
s/{host}/$APP_HOST/g" $HD/Deploy_Saleor/resources/saleor-dashboard/server_block > /etc/nginx/sites-available/saleor-dashboard
wait
echo "Enabling server block and Restarting nginx..."
sudo ln -s /etc/nginx/sites-available/saleor-dashboard /etc/nginx/sites-enabled/
sudo systemctl restart nginx
else
# Move static files for the Dashboard
sudo mv $HD/saleor-dashboard/build/* /var/www/$HOST/
# Populate the DASHBOARD_LOCATION variable
DASHBOARD_LOCATION=$(<$HD/Deploy_Saleor/resources/saleor-dashboard/dashboard-location)
# Modify the new server block
sudo sed -i "s|{dashboard-location}|$DASHBOARD_LOCATION|" /etc/nginx/sites-available/saleor
wait
# Modify the new server block again
sudo sed -i "s|{hd}|$HD|g
s/{app_mount_uri}/$APP_MOUNT_URI/g
s/{host}/$HOST/g" $HD/Deploy_Saleor/resources/saleor-dashboard/server
wait
echo "Enabling server block and Restarting nginx..."
sudo ln -s /etc/nginx/sites-available/saleor /etc/nginx/sites-enabled/
sudo systemctl restart nginx
fi
#########################################################################################

View file

@ -41,20 +41,45 @@ while [ -n "$1" ]; do # while loop starts
;;
-host)
HOST="$2"
shift
;;
-api-host)
API_HOST="$2"
shift
;;
-uri)
-api-port)
API_PORT="$2"
shift
;;
-dashboard-uri)
APP_MOUNT_URI="$2"
shift
;;
-url)
-static-url)
STATIC_URL="$2"
shift
;;
-media-url)
MEDIA_URL="$2"
shift
;;
-admin-email)
ADMIN_EMAIL="$2"
shift
;;
-admin-pw)
ADMIN_PASS="$2"
shift
;;
-dbhost)
PGDBHOST="$2"
shift
@ -65,6 +90,31 @@ while [ -n "$1" ]; do # while loop starts
shift
;;
-graphql-port)
GQL_PORT="$2"
shift
;;
-graphql-uri)
APIURI="$2"
shift
;;
-email)
EMAIL="$2"
shift
;;
-email-pw)
EMAIL_PW="$2"
shift
;;
-email-host)
EMAIL_HOST="$2"
shift
;;
-repo)
REPO="$2"
shift
@ -247,16 +297,22 @@ done
# Get an optional custom API port
echo -n "Enter the API port (optional):"
read API_PORT
# Get the APP Mount (Dashboard) URI
while [ "$APP_MOUNT_URI" = "" ]
do
echo ""
echo -n "Enter the Dashboard URI:"
read APP_MOUNT_URI
done
# Get an optional custom Static URL
echo -n "Enter a custom Static Files URI (optional):"
read STATIC_URL
if [ $STATIC_URL = "" ]; then
echo -n "Enter a custom Static Files URI (optional):"
read STATIC_URL
STATIC_URL="/$STATIC_URL/"
else
STATIC_URL="/$STATIC_URL/"
fi
# Get an optional custom media URL
if [ $MEDIA_URL = "" ]; then
echo -n "Enter a custom Media Files URI (optional):"
read MEDIA_URL
MEDIA_URL="/$MEDIA_URL/"
else
MEDIA_URL="/$MEDIA_URL/"
fi
# Get the Admin's email address
while [ "$ADMIN_EMAIL" = "" ]
do
@ -400,7 +456,7 @@ fi
###### This following section is for future use and will be modified to allow an alternative repo clone ######
# Was the -v (version) option used or Mirumee repo specified?
if [ "vOPT" = "true" ] || [ "$REPO" = "mirumee" ]; then
# Create the new service file
# Create the saleor service file
sudo sed "s/{un}/$UN/
s|{hd}|$HD|" $HD/Deploy_Saleor/resources/saleor/template.service > /etc/systemd/system/saleor.service
wait
@ -409,11 +465,13 @@ if [ "vOPT" = "true" ] || [ "$REPO" = "mirumee" ]; then
# Remove the old service file
sudo rm /etc/nginx/sites-available/saleor
fi
# Create the new server block
# Create the saleor server block
sudo sed "s|{hd}|$HD|g
s/{api_host}/$API_HOST/
s/{host}/$HOST/g
s/{apiport}/$API_PORT/" $HD/Deploy_Saleor/resources/saleor/server_block > /etc/nginx/sites-available/saleor
s|{static}|$STATIC_URL|g
s|{media}|$MEDIA_URL|g
s/{api_port}/$API_PORT/" $HD/Deploy_Saleor/resources/saleor/server_block > /etc/nginx/sites-available/saleor
wait
else
# Create the new service file
@ -429,9 +487,17 @@ else
sudo sed "s|{hd}|$HD|g
s/{api_host}/$API_HOST/
s/{host}/$HOST/g
s/{apiport}/$API_PORT/" $HD/Deploy_Saleor/resources/saleor/server_block > /etc/nginx/sites-available/saleor
s|{static}|$STATIC_URL|g
s|{media}|$MEDIA_URL|g
s/{api_port}/$API_PORT/" $HD/Deploy_Saleor/resources/saleor/server_block > /etc/nginx/sites-available/saleor
wait
fi
# Create the host directory in /var/www/
sudo mkdir /var/www/$HOST
wait
# Create the media directory
sudo mkdir /var/www/${HOST}${MEDIA_URL}
# Static directory will be moved into /var/www/$HOST/ after collectstatic is performed
#########################################################################################
@ -459,8 +525,9 @@ sudo sed "s|{dburl}|$DB_URL|
s|{emailurl}|$EMAIL_URL|
s/{chosts}/$C_HOSTS/
s/{ahosts}/$A_HOSTS/
s|{static}|$STATIC_URL|
s|{media}|$MEDIA_URL|
s/{host}/$HOST/g
s|{static}|$STATIC_URL|g
s|{media}|$MEDIA_URL|g
s/{adminemail}/$ADMIN_EMAIL/
s/{gqlorigins}/$QL_ORIGINS/" $HD/Deploy_Saleor/resources/saleor/template.env > $HD/saleor/.env
wait
@ -545,8 +612,19 @@ wait
# Build the emails
npm run build-emails
wait
# Run the uwsgi socket and create it for the first time
uwsgi --ini $HD/saleor/saleor/wsgi/uwsgi.ini --pidfile $HD/saleortemp.pid
wait
sleep 5
# Stop the uwsgi processes
uwsgi --stop $HD/saleortemp.pid
# Exit the virtual environment here? _#_
deactivate
# Move static files to /var/www/$HOST
sudo mv $HD/saleor/saleor$STATIC_URL /var/www/${HOST}${STATIC_URL}
sudo chown -R www-data:www-data /var/www/$HOST
sudo chmod -R 776 /var/www/$HOST
sudo chown -R $UN:www-data $HD/saleor
#########################################################################################
@ -554,16 +632,12 @@ deactivate
#########################################################################################
# Enable the Saleor service
#########################################################################################
# Update with defaults
# Enable
sudo systemctl enable saleor.service
#########################################################################################
# Reload the daemon
sudo systemctl daemon-reload
systemctl start emperor.uwsgi.service
#########################################################################################
echo "Enabling server block and Restarting nginx..."
sudo ln -s /etc/nginx/sites-available/saleor /etc/nginx/sites-enabled/
sudo systemctl restart nginx
# Start the service
sudo systemctl start saleor.service
#########################################################################################
@ -577,8 +651,18 @@ echo ""
#########################################################################################
#########################################################################################
# Call the dashboard deployment script
#########################################################################################
source ./deploy-dashboard.sh
source $HD/Deploy_Saleor/deploy-dashboard.sh
#########################################################################################
#########################################################################################
# Tell the user what's happening
#########################################################################################
echo "I think we're done here."
echo "Test the installation."
#########################################################################################

View file

@ -0,0 +1,5 @@
location ^~ /{app_mount_uri} {
alias /var/www/{host}/{app_mount_uri};
index index.html;
try_files $uri $uri/ /{app_mount_uri}/index.html;
}

View file

@ -0,0 +1,15 @@
# configuration of the server
server {
listen 80;
server_name {host} www.{host};
charset utf-8;
root /var/www/{host}
# max upload size
client_max_body_size 75M;
location ^~ /{app_mount_uri} {
alias /var/www/{host}/{app_mount_uri};
index index.html;
try_files $uri $uri/ /{app_mount_uri}/index.html;
}
}

View file

@ -1,3 +1,3 @@
API_URI="{apiuri}"
APP_MOUNT_URI="/{dashuri}/"
STATIC_URL="{url}"
API_URI="{api_url}"
APP_MOUNT_URI="/{app_mount_uri}/"
STATIC_URL="http://{app_host}/"

View file

@ -2,20 +2,25 @@
upstream django {
server unix://{hd}/saleor/saleor.sock;
}
# configuration of the server
server {
listen 80;
server_name {host} www.{host};
charset utf-8;
# max upload size
client_max_body_size 75M;
# Django media and static files
location /media {
alias {hd}}/saleor/media;
location {media} {
alias /var/www/{host}{media};
}
location /static {
alias {hd}/saleor/static;
location {static} {
alias /var/www/{host}{static};
}
# Send all non-media requests to the Django server.
location / {
uwsgi_pass django;
@ -23,12 +28,9 @@ server {
}
location /graphql/ {
proxy_pass https://{apihost}:{apiport};
proxy_pass https://{api_host}:{api_port};
}
location /dashboard/ {
path {hd}/saleor-dashboard/build/;
index index.html;
try_files $uri $uri/ /dashboard/index.html;
}
{dashboard-location}
}

View file

@ -14,8 +14,9 @@ EMAIL_URL="{emailurl}"
#SENDGRID_USERNAME="{sguser}"
#SENDGRID_PASSWORD="{sgpass}"
#DEFAULT_FROM_EMAIL="{dfemail}"
STATIC_ROOT="/var/www/{host}{static}"
STATIC_URL="{static}"
MEDIA_ROOT="/var/www/{host}{media}"
MEDIA_URL="{media}"
#MAX_CHECKOUT_LINE_QUANTITY="{mclq}"

View file

@ -4,6 +4,6 @@ After=network.target
[Service]
User={un}
Restart=always
ExecStart={hd}/env/saleor/bin/uwsgi --emperor {hd}/env/saleor/vassals --uid www-data --gid www-data
ExecStart={hd}/env/saleor/bin/uwsgi --master --emperor {hd}/env/saleor/vassals --uid www-data --gid www-data
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,32 @@
[uwsgi]
die-on-term = true
enable-threads = true
http = :$(PORT)
# full path to Django project's root directory
chdir = {hd}/saleor/
# Django's wsgi file
module = saleor.wsgi:application
# full path to python virtual env
home = {hd}/env/saleor
# enable uwsgi master process
master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe
socket = {hd}/saleor/saleor.sock
# socket permissions
chmod-socket = 666
# clear environment on exit
vacuum = true
# daemonize uwsgi and write messages into given log
daemonize = {hd}/uwsgi-emperor.log
log-format = UWSGI uwsgi "%(method) %(uri) %(proto)" %(status) %(size) %(msecs)ms [PID:%(pid):Worker-%(wid)] [RSS:%(rssM)MB]
max-requests = 100
memory-report = true
static-map = /static=/app/static
mimefile = /etc/mime.types
ignore-sigpipe = true
ignore-write-errors = true
disable-write-exception = true