Added redis and discourse with plus support

This commit is contained in:
root 2025-01-29 19:34:30 +00:00
parent 32dc3e2ff0
commit 6594e44b3a
2 changed files with 51 additions and 45 deletions

View File

@ -3,10 +3,13 @@
# Discourse Service
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /etc/federated
get_appvars
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
mkdir -p /federated/apps/discourse/data/discourse/bitnami/discourse
@ -14,7 +17,6 @@ config_discourse() {
fi
cat > /federated/apps/discourse/docker-compose.yml <<EOF
version: "3.7"
services:
discourse:
image: docker.io/bitnami/discourse:\${IMAGE_VERSION}
@ -30,7 +32,7 @@ services:
- ./data/discourse/bitnami/discourse:/bitnami/discourse
labels:
- "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.tls.certresolver=letsencrypt"
@ -56,63 +58,76 @@ networks:
EOF
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
IMAGE_VERSION="3.2.5"
IMAGE_VERSION="3.3.3"
DISCOURSE_HOST=discourse.$DOMAIN
DISCOURSE_USERNAME=admin@$DOMAIN
DISCOURSE_USERNAME=admin
DISCOURSE_PASSWORD=$ADMINPASS
DISCOURSE_EMAIL=admin@$DOMAIN
DISCOURSE_SITE_NAME="$COMPANY Forum"
DISCOURSE_DATABASE_HOST=10.0.0.2
DISCOURSE_DATABASE_HOST=postgresql.$DOMAIN
DISCOURSE_DATABASE_PORT_NUMBER=5432
DISCOURSE_DATABASE_USER=discourse
DISCOURSE_DATABASE_NAME=discourse
DISCOURSE_DATABASE_PASSWORD=$DISCOURSE_SECRET
#DISCOURSE_REDIS_HOST=redis.$DOMAIN
#DISCOURSE_REDIS_PORT_NUMBER=6379
#DISCOURSE_REDIS_PASSWORD=$REDIS_SECRET
DISCOURSE_REDIS_HOST=redis.$DOMAIN
DISCOURSE_REDIS_PORT_NUMBER=6379
DISCOURSE_REDIS_PASSWORD=$REDIS_SECRET
DISCOURSE_SMTP_HOST=mail.$DOMAIN
DISCOURSE_SMTP_PORT=587
DISCOURSE_SMTP_USER=fcore
DISCOURSE_SMTP_PASSWORD=$ADMINPASS
DISCOURSE_SMTP_PROTOCOL=tls
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
chmod 600 /federated/apps/discourse/.env
MYSQL_ROOTPASSWORD="BOwSp7RpdmjulTY5XH1ULKOVwZpyNeDI"
# Create database and user in mysql
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e 'create database discourse;'" &> /dev/null
#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
#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
#docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -h 10.0.0.2 -e 'flush privileges;'" &> /dev/null
# Tune discourse for each memory size
MEMTOTAL=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo)
[[ "${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
[[ "${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
[[ "${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
[[ "${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
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 bash -c "PGPASSWORD=LUemlFaADvgD0QCVn9KDaqy9qKpn05Ed psql -U postgres -h 10.0.0.2 -w -c \"CREATE DATABASE discourse\""
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 "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
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"
}
start_discourse() {
# 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"
docker exec pdns pdnsutil add-record $DOMAIN discourse A 86400 $EXTERNALIP &> /dev/null
[ $? -ne 0 ] && fail "Couldn't add dns record for discourse"
if [[ "${PLUS}" != "true" ]]; then
docker exec pdns pdnsutil add-record $DOMAIN discourse A 86400 $EXTERNALIP &> /dev/null
docker exec pdns pdnsutil add-record $DOMAIN forum A 86400 $EXTERNALIP &> /dev/null
fi
kill -9 $SPINPID &> /dev/null
echo -ne "done.\n"
}
email_discourse() {
echo -ne "* Sending email to customer.."
spin &
SPINPID=$!
cat > /federated/apps/mail/data/root/certs/mailfile <<EOF
<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"
rm /federated/apps/mail/data/root/certs/mailfile
kill -9 $SPINPID &> /dev/null
echo -ne "done.\n"
}
uninstall_discourse() {
echo -ne "* Uninstalling discourse container.."
spin &
SPINPID=$!
# First stop the service
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
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"
}

View File

@ -3,10 +3,11 @@
# Redis Service
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /etc/federated
get_appvars
config_redis() {
echo -ne "\n* Configuring redis container.."
echo -ne "* Configuring redis container.."
if [ ! -d "/federated/apps/redis" ]; then
mkdir -p /federated/apps/redis/data/bitnami/redis/data
@ -14,7 +15,6 @@ config_redis() {
fi
cat > /federated/apps/redis/docker-compose.yml <<EOF
version: "3.7"
services:
redis:
image: bitnami/redis:\${IMAGE_VERSION}
@ -28,11 +28,6 @@ services:
- ./.env
volumes:
- ./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:
core:
@ -47,7 +42,7 @@ REDIS_PASSWORD=$REDIS_SECRET
EOF
chmod 600 /federated/apps/redis/.env
sysctl "vm.overcommit_memory=1"
sysctl "vm.overcommit_memory=1" &> /dev/null
echo -ne "done.\n"
}
@ -55,19 +50,14 @@ start_redis() {
# 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"
kill -9 $SPINPID &> /dev/null
echo -ne "done.\n"
}
uninstall_redis() {
spin &
SPINPID=$!
# First stop the service
cd /federated/apps/redis && docker compose -f docker-compose.yml -p redis down &> /dev/null
# Delete the app directory
rm -rf /federated/apps/redis
kill -9 $SPINPID &> /dev/null
echo -ne "done.\n"
}