database
Deploy photobooth / deploy (push) Has been cancelled

This commit is contained in:
2026-05-26 10:14:31 +07:00
parent 100e5c3a87
commit 79b959aac7
4 changed files with 669 additions and 59 deletions
+47
View File
@@ -0,0 +1,47 @@
-- Photobooth database setup
CREATE DATABASE IF NOT EXISTS `photobooth`
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
CREATE USER IF NOT EXISTS 'photobooth_app'@'%' IDENTIFIED BY 'photobooth_app_password_placeholder';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ON `photobooth`.* TO 'photobooth_app'@'%';
FLUSH PRIVILEGES;
USE `photobooth`;
CREATE TABLE IF NOT EXISTS users (
id CHAR(36) PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(120) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uq_users_email (email)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS refresh_tokens (
id CHAR(36) PRIMARY KEY,
user_id CHAR(36) NOT NULL,
token_hash VARCHAR(255) NOT NULL,
expires_at DATETIME NOT NULL,
revoked_at DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uq_refresh_token_hash (token_hash),
KEY idx_refresh_user (user_id),
CONSTRAINT fk_refresh_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS media (
id CHAR(36) PRIMARY KEY,
user_id CHAR(36) NOT NULL,
type ENUM('shot','strip') NOT NULL,
url VARCHAR(2048) NOT NULL,
thumb_url VARCHAR(2048) NULL,
theme_id VARCHAR(64) NULL,
meta JSON NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_media_user_created (user_id, created_at),
KEY idx_media_type (type),
CONSTRAINT fk_media_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
+24 -59
View File
@@ -5,79 +5,44 @@ MYSQL_ROOT_USER="${MYSQL_ROOT_USER:-root}"
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-}"
MYSQL_HOST="${MYSQL_HOST:-127.0.0.1}"
MYSQL_PORT="${MYSQL_PORT:-3306}"
MYSQL_DATABASE="${MYSQL_DATABASE:-photobooth}"
MYSQL_APP_USER="${MYSQL_APP_USER:-photobooth_app}"
MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-}"
MARKER_FILE="${MARKER_FILE:-/var/lib/photobooth/db-setup.done}"
if [ -z "$MYSQL_ROOT_PASSWORD" ]; then
echo "MYSQL_ROOT_PASSWORD is required." >&2
exit 1
fi
if [ -z "$MYSQL_APP_PASSWORD" ]; then
echo "MYSQL_APP_PASSWORD is required." >&2
if [ -z "$MYSQL_ROOT_PASSWORD" ] || [ -z "$MYSQL_APP_PASSWORD" ]; then
echo "Error: MYSQL_ROOT_PASSWORD and MYSQL_APP_PASSWORD required" >&2
exit 1
fi
if [ -f "$MARKER_FILE" ]; then
echo "Database already initialized: $MARKER_FILE"
echo "Database already initialized."
exit 0
fi
mkdir -p "$(dirname "$MARKER_FILE")"
# Find mysql command
if ! command -v mysql &> /dev/null; then
echo "Error: mysql not found in PATH" >&2
exit 1
fi
# Create temp SQL file with actual password
TEMP_SQL=$(mktemp)
trap "rm -f $TEMP_SQL" EXIT
sed "s/photobooth_app_password_placeholder/$MYSQL_APP_PASSWORD/g" \
"$(dirname "$0")/photobooth.sql" > "$TEMP_SQL"
# Execute
MYSQL_PWD="$MYSQL_ROOT_PASSWORD" mysql \
--protocol=TCP \
-h "$MYSQL_HOST" \
-P "$MYSQL_PORT" \
-u "$MYSQL_ROOT_USER" <<SQL
CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\`
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_APP_USER'@'%';
FLUSH PRIVILEGES;
USE \`$MYSQL_DATABASE\`;
CREATE TABLE IF NOT EXISTS users (
id CHAR(36) PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
name VARCHAR(120) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uq_users_email (email)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS refresh_tokens (
id CHAR(36) PRIMARY KEY,
user_id CHAR(36) NOT NULL,
token_hash VARCHAR(255) NOT NULL,
expires_at DATETIME NOT NULL,
revoked_at DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uq_refresh_token_hash (token_hash),
KEY idx_refresh_user (user_id),
CONSTRAINT fk_refresh_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS media (
id CHAR(36) PRIMARY KEY,
user_id CHAR(36) NOT NULL,
type ENUM('shot','strip') NOT NULL,
url VARCHAR(2048) NOT NULL,
thumb_url VARCHAR(2048) NULL,
theme_id VARCHAR(64) NULL,
meta JSON NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_media_user_created (user_id, created_at),
KEY idx_media_type (type),
CONSTRAINT fk_media_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
SQL
-u "$MYSQL_ROOT_USER" < "$TEMP_SQL" || {
echo "Error: Database setup failed" >&2
exit 1
}
touch "$MARKER_FILE"
echo "Database initialized."
echo "Database setup completed."