Added redis and discourse with plus support
This commit is contained in:
parent
32dc3e2ff0
commit
6594e44b3a
@ -3,10 +3,13 @@
|
|||||||
# Discourse Service
|
# Discourse Service
|
||||||
|
|
||||||
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
. /etc/federated
|
||||||
get_appvars
|
get_appvars
|
||||||
|
|
||||||
config_discourse() {
|
config_discourse() {
|
||||||
echo -ne "\n* Configuring discourse container.."
|
echo -ne "* Configuring discourse container.."
|
||||||
|
|
||||||
|
[[ ! -d "/federated/apps/redis" ]] && failcheck "Redis needs installed first. Run installapp redis"
|
||||||
|
|
||||||
if [ ! -d "/federated/apps/discourse" ]; then
|
if [ ! -d "/federated/apps/discourse" ]; then
|
||||||
mkdir -p /federated/apps/discourse/data/discourse/bitnami/discourse
|
mkdir -p /federated/apps/discourse/data/discourse/bitnami/discourse
|
||||||
@ -14,7 +17,6 @@ config_discourse() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cat > /federated/apps/discourse/docker-compose.yml <<EOF
|
cat > /federated/apps/discourse/docker-compose.yml <<EOF
|
||||||
version: "3.7"
|
|
||||||
services:
|
services:
|
||||||
discourse:
|
discourse:
|
||||||
image: docker.io/bitnami/discourse:\${IMAGE_VERSION}
|
image: docker.io/bitnami/discourse:\${IMAGE_VERSION}
|
||||||
@ -30,7 +32,7 @@ services:
|
|||||||
- ./data/discourse/bitnami/discourse:/bitnami/discourse
|
- ./data/discourse/bitnami/discourse:/bitnami/discourse
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.discourse.rule=Host(\`discourse.$DOMAIN\`)"
|
- "traefik.http.routers.discourse.rule=Host(\`discourse.$DOMAIN\`, \`forum.$DOMAIN\`)"
|
||||||
- "traefik.http.routers.discourse.entrypoints=websecure"
|
- "traefik.http.routers.discourse.entrypoints=websecure"
|
||||||
- "traefik.http.routers.discourse.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.discourse.tls.certresolver=letsencrypt"
|
||||||
|
|
||||||
@ -56,63 +58,76 @@ networks:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
DISCOURSE_SECRET=$(create_password);
|
DISCOURSE_SECRET=$(create_password);
|
||||||
|
REDIS_SECRET=$(awk -F= '/REDIS_PASSWORD/ { print $2 }' /federated/apps/redis/.env)
|
||||||
|
[[ "${PLUS}" = "true" ]] && sed -i "s/letsencrypt/httpresolver/g" /federated/apps/discourse/docker-compose.yml
|
||||||
|
|
||||||
cat > /federated/apps/discourse/.env <<EOF
|
cat > /federated/apps/discourse/.env <<EOF
|
||||||
IMAGE_VERSION="3.2.5"
|
IMAGE_VERSION="3.3.3"
|
||||||
DISCOURSE_HOST=discourse.$DOMAIN
|
DISCOURSE_HOST=discourse.$DOMAIN
|
||||||
DISCOURSE_USERNAME=admin@$DOMAIN
|
DISCOURSE_USERNAME=admin
|
||||||
DISCOURSE_PASSWORD=$ADMINPASS
|
DISCOURSE_PASSWORD=$ADMINPASS
|
||||||
DISCOURSE_EMAIL=admin@$DOMAIN
|
DISCOURSE_EMAIL=admin@$DOMAIN
|
||||||
DISCOURSE_SITE_NAME="$COMPANY Forum"
|
DISCOURSE_SITE_NAME="$COMPANY Forum"
|
||||||
DISCOURSE_DATABASE_HOST=10.0.0.2
|
DISCOURSE_DATABASE_HOST=postgresql.$DOMAIN
|
||||||
DISCOURSE_DATABASE_PORT_NUMBER=5432
|
DISCOURSE_DATABASE_PORT_NUMBER=5432
|
||||||
DISCOURSE_DATABASE_USER=discourse
|
DISCOURSE_DATABASE_USER=discourse
|
||||||
DISCOURSE_DATABASE_NAME=discourse
|
DISCOURSE_DATABASE_NAME=discourse
|
||||||
DISCOURSE_DATABASE_PASSWORD=$DISCOURSE_SECRET
|
DISCOURSE_DATABASE_PASSWORD=$DISCOURSE_SECRET
|
||||||
#DISCOURSE_REDIS_HOST=redis.$DOMAIN
|
DISCOURSE_REDIS_HOST=redis.$DOMAIN
|
||||||
#DISCOURSE_REDIS_PORT_NUMBER=6379
|
DISCOURSE_REDIS_PORT_NUMBER=6379
|
||||||
#DISCOURSE_REDIS_PASSWORD=$REDIS_SECRET
|
DISCOURSE_REDIS_PASSWORD=$REDIS_SECRET
|
||||||
DISCOURSE_SMTP_HOST=mail.$DOMAIN
|
DISCOURSE_SMTP_HOST=mail.$DOMAIN
|
||||||
DISCOURSE_SMTP_PORT=587
|
DISCOURSE_SMTP_PORT=587
|
||||||
DISCOURSE_SMTP_USER=fcore
|
DISCOURSE_SMTP_USER=fcore
|
||||||
DISCOURSE_SMTP_PASSWORD=$ADMINPASS
|
DISCOURSE_SMTP_PASSWORD=$ADMINPASS
|
||||||
DISCOURSE_SMTP_PROTOCOL=tls
|
DISCOURSE_SMTP_PROTOCOL=tls
|
||||||
BITNAMI_DEBUG=true
|
BITNAMI_DEBUG=true
|
||||||
|
DISCOURSE_HOSTNAME=forum.$DOMAIN
|
||||||
|
DISCOURSE_SMTP_ADDRESS=mail.$DOMAIN
|
||||||
|
DISCOURSE_SMTP_USER_NAME=fcore
|
||||||
|
DISCOURSE_SMTP_ENABLE_START_TLS=true
|
||||||
|
RAILS_ENV=production
|
||||||
|
DISCOURSE_DB_HOST=postgresql.$DOMAIN
|
||||||
|
DISCOURSE_DB_PORT=5432
|
||||||
|
DISCOURSE_DB_USERNAME=discourse
|
||||||
|
DISCOURSE_DB_PASSWORD=$DISCOURSE_SECRET
|
||||||
|
DISCOURSE_DB_NAME=discourse
|
||||||
|
DISCOURSE_REDIS_PORT=6379
|
||||||
|
DISCOURSE_PASSENGER_EXTRA_FLAGS="--max-request-queue-size 1500 --min-instances 25 --max-pool-size 150 --pool-idle-time 800"
|
||||||
|
DISCOURSE_ASSET_RATE_LIMITERS=limiter60
|
||||||
|
DISCOURSE_RATE_LIMITERS=limiter60
|
||||||
|
DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS=172.99.0.13
|
||||||
EOF
|
EOF
|
||||||
chmod 600 /federated/apps/discourse/.env
|
chmod 600 /federated/apps/discourse/.env
|
||||||
|
|
||||||
MYSQL_ROOTPASSWORD="BOwSp7RpdmjulTY5XH1ULKOVwZpyNeDI"
|
# Tune discourse for each memory size
|
||||||
# Create database and user in mysql
|
MEMTOTAL=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo)
|
||||||
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e 'create database discourse;'" &> /dev/null
|
[[ "${MEMTOTAL}" = "3815" ]] && sed -i "s/DISCOURSE_PASSENGER_EXTRA_FLAGS=.*/DISCOURSE_PASSENGER_EXTRA_FLAGS=\"--max-request-queue-size 100 --min-instances 3 --max-pool-size 15 --pool-idle-time 400\"/g" /federated/apps/discourse/.env
|
||||||
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e \"CREATE USER 'discourse'@'%' IDENTIFIED BY '$DISCOURSE_SECRET';\"" &> /dev/null
|
[[ "${MEMTOTAL}" = "7747" ]] && sed -i "s/DISCOURSE_PASSENGER_EXTRA_FLAGS=.*/DISCOURSE_PASSENGER_EXTRA_FLAGS=\"--max-request-queue-size 200 --min-instances 5 --max-pool-size 25 --pool-idle-time 500\"/g" /federated/apps/discourse/.env
|
||||||
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e \"grant all privileges on discourse.* to 'discourse'@'%';\"" &> /dev/null
|
[[ "${MEMTOTAL}" = "15610" ]] && sed -i "s/DISCOURSE_PASSENGER_EXTRA_FLAGS=.*/DISCOURSE_PASSENGER_EXTRA_FLAGS=\"--max-request-queue-size 400 --min-instances 10 --max-pool-size 50 --pool-idle-time 600\"/g" /federated/apps/discourse/.env
|
||||||
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e 'flush privileges;'" &> /dev/null
|
[[ "${MEMTOTAL}" = "31334" ]] && sed -i "s/DISCOURSE_PASSENGER_EXTRA_FLAGS=.*/DISCOURSE_PASSENGER_EXTRA_FLAGS=\"--max-request-queue-size 750 --min-instances 15 --max-pool-size 75 --pool-idle-time 700\"/g" /federated/apps/discourse/.env
|
||||||
|
[[ "${MEMTOTAL}" = "62786" ]] && sed -i "s/DISCOURSE_PASSENGER_EXTRA_FLAGS=.*/DISCOURSE_PASSENGER_EXTRA_FLAGS=\"--max-request-queue-size 1500 --min-instances 25 --max-pool-size 150 --pool-idle-time 800\"/g" /federated/apps/discourse/.env
|
||||||
|
|
||||||
# Create database and user in postgresql
|
# Create database and user in postgresql
|
||||||
docker exec postgresql bash -c "PGPASSWORD=LUemlFaADvgD0QCVn9KDaqy9qKpn05Ed psql -U postgres -h 10.0.0.2 -w -c \"CREATE USER discourse WITH PASSWORD '$DISCOURSE_SECRET'\""
|
docker exec postgresql psql -U postgres -c "CREATE USER discourse WITH PASSWORD '$DISCOURSE_SECRET'" &> /dev/null
|
||||||
docker exec postgresql bash -c "PGPASSWORD=LUemlFaADvgD0QCVn9KDaqy9qKpn05Ed psql -U postgres -h 10.0.0.2 -w -c \"CREATE DATABASE discourse\""
|
docker exec postgresql psql -U postgres -c "CREATE DATABASE discourse" &> /dev/null
|
||||||
docker exec postgresql bash -c "PGPASSWORD=LUemlFaADvgD0QCVn9KDaqy9qKpn05Ed psql -U postgres -h 10.0.0.2 -w -c \"GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse\""
|
docker exec postgresql psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse" &> /dev/null
|
||||||
#docker exec postgresql psql -U postgres -c "CREATE USER discourse WITH PASSWORD '$DISCOURSE_SECRET'" &> /dev/null
|
|
||||||
#docker exec postgresql psql -U postgres -c "CREATE DATABASE discourse" &> /dev/null
|
|
||||||
#docker exec postgresql psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse" &> /dev/null
|
|
||||||
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
start_discourse() {
|
start_discourse() {
|
||||||
# Start service with command to make sure it's up before proceeding
|
# Start service with command to make sure it's up before proceeding
|
||||||
start_service "discourse" "nc -z 192.168.0.43 8080 &> /dev/null" "7"
|
start_service "discourse" "nc -z 192.168.0.43 8080 &> /dev/null" "19"
|
||||||
|
|
||||||
|
if [[ "${PLUS}" != "true" ]]; then
|
||||||
docker exec pdns pdnsutil add-record $DOMAIN discourse A 86400 $EXTERNALIP &> /dev/null
|
docker exec pdns pdnsutil add-record $DOMAIN discourse A 86400 $EXTERNALIP &> /dev/null
|
||||||
[ $? -ne 0 ] && fail "Couldn't add dns record for discourse"
|
docker exec pdns pdnsutil add-record $DOMAIN forum A 86400 $EXTERNALIP &> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
kill -9 $SPINPID &> /dev/null
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
email_discourse() {
|
email_discourse() {
|
||||||
echo -ne "* Sending email to customer.."
|
echo -ne "* Sending email to customer.."
|
||||||
spin &
|
|
||||||
SPINPID=$!
|
|
||||||
|
|
||||||
cat > /federated/apps/mail/data/root/certs/mailfile <<EOF
|
cat > /federated/apps/mail/data/root/certs/mailfile <<EOF
|
||||||
<html>
|
<html>
|
||||||
@ -184,13 +199,10 @@ EOF
|
|||||||
docker exec mail bash -c "mail -r admin@$DOMAIN -a \"Content-type: text/html\" -s \"Application installed on $DOMAIN\" $EMAIL < /root/certs/mailfile"
|
docker exec mail bash -c "mail -r admin@$DOMAIN -a \"Content-type: text/html\" -s \"Application installed on $DOMAIN\" $EMAIL < /root/certs/mailfile"
|
||||||
rm /federated/apps/mail/data/root/certs/mailfile
|
rm /federated/apps/mail/data/root/certs/mailfile
|
||||||
|
|
||||||
kill -9 $SPINPID &> /dev/null
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
uninstall_discourse() {
|
uninstall_discourse() {
|
||||||
echo -ne "* Uninstalling discourse container.."
|
echo -ne "* Uninstalling discourse container.."
|
||||||
spin &
|
|
||||||
SPINPID=$!
|
|
||||||
|
|
||||||
# First stop the service
|
# First stop the service
|
||||||
cd /federated/apps/discourse && docker compose -f docker-compose.yml -p discourse down &> /dev/null
|
cd /federated/apps/discourse && docker compose -f docker-compose.yml -p discourse down &> /dev/null
|
||||||
@ -202,6 +214,10 @@ uninstall_discourse() {
|
|||||||
# Delete the app directory
|
# Delete the app directory
|
||||||
rm -rf /federated/apps/discourse
|
rm -rf /federated/apps/discourse
|
||||||
|
|
||||||
kill -9 $SPINPID &> /dev/null
|
if [[ "${PLUS}" != "true" ]]; then
|
||||||
|
docker exec pdns pdnsutil delete-rrset $DOMAIN discourse A &> /dev/null
|
||||||
|
docker exec pdns pdnsutil delete-rrset $DOMAIN forum A &> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
|
16
lib/redis.sh
16
lib/redis.sh
@ -3,10 +3,11 @@
|
|||||||
# Redis Service
|
# Redis Service
|
||||||
|
|
||||||
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
. /etc/federated
|
||||||
get_appvars
|
get_appvars
|
||||||
|
|
||||||
config_redis() {
|
config_redis() {
|
||||||
echo -ne "\n* Configuring redis container.."
|
echo -ne "* Configuring redis container.."
|
||||||
|
|
||||||
if [ ! -d "/federated/apps/redis" ]; then
|
if [ ! -d "/federated/apps/redis" ]; then
|
||||||
mkdir -p /federated/apps/redis/data/bitnami/redis/data
|
mkdir -p /federated/apps/redis/data/bitnami/redis/data
|
||||||
@ -14,7 +15,6 @@ config_redis() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cat > /federated/apps/redis/docker-compose.yml <<EOF
|
cat > /federated/apps/redis/docker-compose.yml <<EOF
|
||||||
version: "3.7"
|
|
||||||
services:
|
services:
|
||||||
redis:
|
redis:
|
||||||
image: bitnami/redis:\${IMAGE_VERSION}
|
image: bitnami/redis:\${IMAGE_VERSION}
|
||||||
@ -28,11 +28,6 @@ services:
|
|||||||
- ./.env
|
- ./.env
|
||||||
volumes:
|
volumes:
|
||||||
- ./data/bitnami/redis/data:/bitnami/redis/data
|
- ./data/bitnami/redis/data:/bitnami/redis/data
|
||||||
# labels:
|
|
||||||
# - "traefik.enable=true"
|
|
||||||
# - "traefik.http.routers.redis.rule=Host(\`redis.$DOMAIN\`)"
|
|
||||||
# - "traefik.http.routers.redis.entrypoints=websecure"
|
|
||||||
# - "traefik.http.routers.redis.tls.certresolver=letsencrypt"
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
core:
|
core:
|
||||||
@ -47,7 +42,7 @@ REDIS_PASSWORD=$REDIS_SECRET
|
|||||||
EOF
|
EOF
|
||||||
chmod 600 /federated/apps/redis/.env
|
chmod 600 /federated/apps/redis/.env
|
||||||
|
|
||||||
sysctl "vm.overcommit_memory=1"
|
sysctl "vm.overcommit_memory=1" &> /dev/null
|
||||||
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
@ -55,19 +50,14 @@ start_redis() {
|
|||||||
# Start service with command to make sure it's up before proceeding
|
# Start service with command to make sure it's up before proceeding
|
||||||
start_service "redis" "nc -z 192.168.0.45 6379 &> /dev/null" "7"
|
start_service "redis" "nc -z 192.168.0.45 6379 &> /dev/null" "7"
|
||||||
|
|
||||||
kill -9 $SPINPID &> /dev/null
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
uninstall_redis() {
|
uninstall_redis() {
|
||||||
spin &
|
|
||||||
SPINPID=$!
|
|
||||||
|
|
||||||
# First stop the service
|
# First stop the service
|
||||||
cd /federated/apps/redis && docker compose -f docker-compose.yml -p redis down &> /dev/null
|
cd /federated/apps/redis && docker compose -f docker-compose.yml -p redis down &> /dev/null
|
||||||
|
|
||||||
# Delete the app directory
|
# Delete the app directory
|
||||||
rm -rf /federated/apps/redis
|
rm -rf /federated/apps/redis
|
||||||
|
|
||||||
kill -9 $SPINPID &> /dev/null
|
|
||||||
echo -ne "done.\n"
|
echo -ne "done.\n"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user