Fix dynamic API base path for server deployment
This commit is contained in:
Executable
+175
@@ -0,0 +1,175 @@
|
||||
#!/bin/bash
|
||||
# ==============================================================================
|
||||
# Automated Server Setup Script for TPU Survey (survey.tapee.ac.th)
|
||||
# Compatible with Ubuntu 20.04 / 22.04 / 24.04 and Debian 11 / 12
|
||||
# ==============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration Variables
|
||||
DOMAIN="survey.tapee.ac.th"
|
||||
WEB_ROOT="/var/www/survey"
|
||||
DB_NAME="tpu_survey_v2"
|
||||
DB_USER="survey_user"
|
||||
DB_PASS="SurveyTPU2026!Secure" # Change this if needed
|
||||
GIT_REPO="https://git.tapee.ac.th/pongpon/survey.git"
|
||||
|
||||
echo "=========================================================="
|
||||
echo " Starting Setup for ${DOMAIN} on VM 110"
|
||||
echo "=========================================================="
|
||||
|
||||
# 1. Update system packages
|
||||
echo "[1/6] Updating system packages..."
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update -y && apt-get upgrade -y
|
||||
|
||||
# 2. Install Web Server, PHP, and MariaDB
|
||||
echo "[2/6] Installing Apache, PHP, MariaDB, and utilities..."
|
||||
apt-get install -y \
|
||||
apache2 \
|
||||
mariadb-server \
|
||||
mariadb-client \
|
||||
git \
|
||||
curl \
|
||||
unzip \
|
||||
certbot \
|
||||
python3-certbot-apache \
|
||||
php \
|
||||
php-cli \
|
||||
php-fpm \
|
||||
php-mysql \
|
||||
php-mbstring \
|
||||
php-xml \
|
||||
php-curl \
|
||||
php-gd \
|
||||
php-zip \
|
||||
php-intl \
|
||||
libapache2-mod-php
|
||||
|
||||
# Enable Apache Modules
|
||||
a2enmod rewrite ssl headers
|
||||
|
||||
# 3. Setup MariaDB Database
|
||||
echo "[3/6] Configuring Database (${DB_NAME})..."
|
||||
systemctl start mariadb
|
||||
systemctl enable mariadb
|
||||
|
||||
mysql -u root <<EOF
|
||||
CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
|
||||
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EOF
|
||||
|
||||
echo "Database and User created successfully."
|
||||
|
||||
# 4. Deploy Project Source Code
|
||||
echo "[4/6] Setting up project files at ${WEB_ROOT}..."
|
||||
if [ -d "${WEB_ROOT}/.git" ]; then
|
||||
echo "Updating existing repository..."
|
||||
cd "${WEB_ROOT}"
|
||||
git pull origin main || true
|
||||
else
|
||||
mkdir -p "${WEB_ROOT}"
|
||||
if [ -f "./tpu_survey_v2.sql" ]; then
|
||||
echo "Copying local files to ${WEB_ROOT}..."
|
||||
cp -r ./* "${WEB_ROOT}/"
|
||||
else
|
||||
echo "Cloning from Git repository..."
|
||||
git clone "${GIT_REPO}" "${WEB_ROOT}" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Import Database Schema if SQL file exists
|
||||
if [ -f "${WEB_ROOT}/tpu_survey_v2.sql" ]; then
|
||||
echo "Importing database schema from tpu_survey_v2.sql..."
|
||||
mysql -u root "${DB_NAME}" < "${WEB_ROOT}/tpu_survey_v2.sql" || echo "Note: Initial import completed or tables exist."
|
||||
fi
|
||||
|
||||
# Update config/database.php with the server credentials
|
||||
cat <<EOF > "${WEB_ROOT}/config/database.php"
|
||||
<?php
|
||||
/**
|
||||
* Database Configuration
|
||||
* TPU Survey System
|
||||
*/
|
||||
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_NAME', '${DB_NAME}');
|
||||
define('DB_USER', '${DB_USER}');
|
||||
define('DB_PASS', '${DB_PASS}');
|
||||
define('DB_CHARSET', 'utf8mb4');
|
||||
|
||||
function getDB() {
|
||||
static \$pdo = null;
|
||||
if (\$pdo === null) {
|
||||
try {
|
||||
\$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
|
||||
\$pdo = new PDO(\$dsn, DB_USER, DB_PASS, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false
|
||||
]);
|
||||
} catch (PDOException \$e) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Database connection failed: ' . \$e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
return \$pdo;
|
||||
}
|
||||
|
||||
function jsonResponse(\$data, \$code = 200) {
|
||||
http_response_code(\$code);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode(\$data, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
function getInput() {
|
||||
\$json = file_get_contents('php://input');
|
||||
return json_decode(\$json, true) ?: [];
|
||||
}
|
||||
EOF
|
||||
|
||||
# Set proper permissions
|
||||
mkdir -p "${WEB_ROOT}/uploads" "${WEB_ROOT}/temp_certificates"
|
||||
chown -R www-data:www-data "${WEB_ROOT}"
|
||||
chmod -R 755 "${WEB_ROOT}"
|
||||
chmod -R 775 "${WEB_ROOT}/uploads" "${WEB_ROOT}/temp_certificates"
|
||||
|
||||
# 5. Configure Apache VirtualHost
|
||||
echo "[5/6] Creating Apache VirtualHost for ${DOMAIN}..."
|
||||
cat <<EOF > /etc/apache2/sites-available/${DOMAIN}.conf
|
||||
<VirtualHost *:80>
|
||||
ServerName ${DOMAIN}
|
||||
ServerAlias www.${DOMAIN}
|
||||
DocumentRoot ${WEB_ROOT}
|
||||
|
||||
<Directory ${WEB_ROOT}>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
|
||||
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
|
||||
a2dissite 000-default.conf || true
|
||||
a2ensite ${DOMAIN}.conf
|
||||
systemctl restart apache2
|
||||
|
||||
# 6. Summary & SSL Instructions
|
||||
echo "=========================================================="
|
||||
echo " SETUP COMPLETED SUCCESSFULLY!"
|
||||
echo "=========================================================="
|
||||
echo "1. Web Root: ${WEB_ROOT}"
|
||||
echo "2. Database Name: ${DB_NAME}"
|
||||
echo "3. Database User: ${DB_USER}"
|
||||
echo "4. VirtualHost: http://${DOMAIN}"
|
||||
echo ""
|
||||
echo "To enable HTTPS (SSL Certificate via Let's Encrypt), run:"
|
||||
echo " certbot --apache -d ${DOMAIN}"
|
||||
echo "=========================================================="
|
||||
Reference in New Issue
Block a user