oracle install LXC docker
This commit is contained in:
316
system_instructions/oracle/oracle-xe-complete-setup.sh
Normal file
316
system_instructions/oracle/oracle-xe-complete-setup.sh
Normal file
@@ -0,0 +1,316 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Oracle XE 21c Complete Setup Script for Docker LXC on Proxmox
|
||||
# This script creates a Docker LXC container and installs Oracle XE with custom PDBs (ROA and ROA2)
|
||||
#
|
||||
# Prerequisites:
|
||||
# - Proxmox VE server with IP 10.0.20.201
|
||||
# - SSH access to Proxmox as root
|
||||
# - At least 20GB storage and 4GB RAM available
|
||||
#
|
||||
# Usage:
|
||||
# ./oracle-xe-complete-setup.sh
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
PROXMOX_IP="10.0.20.201"
|
||||
CONTAINER_ID="108"
|
||||
CONTAINER_NAME="central-oracle"
|
||||
CONTAINER_IP="" # Will be obtained after creation
|
||||
ORACLE_PASSWORD="OraclePass123"
|
||||
PDB_ADMIN_PASSWORD="AdminPass123"
|
||||
ROA_USER_PASSWORD="RoaPass123"
|
||||
ROA2_USER_PASSWORD="Roa2Pass123"
|
||||
|
||||
echo "=========================================="
|
||||
echo "Oracle XE 21c Complete Setup Script"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Step 1: Create Docker LXC Container using community script
|
||||
echo "📦 Step 1: Creating Docker LXC Container..."
|
||||
echo "This will open an interactive menu. Please select:"
|
||||
echo " - Operating System: debian"
|
||||
echo " - Version: 12"
|
||||
echo " - Container Type: Unprivileged"
|
||||
echo " - Container ID: $CONTAINER_ID"
|
||||
echo " - Hostname: $CONTAINER_NAME"
|
||||
echo " - Disk Size: 50 GB"
|
||||
echo " - CPU Cores: 2"
|
||||
echo " - RAM: 4096 MB"
|
||||
echo " - Install Docker Compose: Yes"
|
||||
echo " - Install Portainer: Yes (optional)"
|
||||
echo ""
|
||||
read -p "Press Enter to continue with container creation..."
|
||||
|
||||
ssh root@$PROXMOX_IP << 'EOF'
|
||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)"
|
||||
EOF
|
||||
|
||||
echo "✅ Docker LXC container created"
|
||||
echo ""
|
||||
|
||||
# Wait for container to be ready
|
||||
echo "⏳ Waiting for container to be ready..."
|
||||
sleep 10
|
||||
|
||||
# Get container IP
|
||||
CONTAINER_IP=$(ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- hostname -I | awk '{print \$1}'")
|
||||
echo "✅ Container IP: $CONTAINER_IP"
|
||||
echo ""
|
||||
|
||||
# Step 2: Create Oracle XE deployment script
|
||||
echo "📝 Step 2: Creating Oracle XE deployment script..."
|
||||
|
||||
cat > /tmp/deploy-oracle-xe.sh << 'DEPLOY_SCRIPT'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Oracle Configuration
|
||||
ORACLE_PASSWORD="OraclePass123"
|
||||
ORACLE_PORT="1521"
|
||||
ORACLE_EM_PORT="5500"
|
||||
CONTAINER_NAME="oracle-xe"
|
||||
|
||||
echo "🚀 Starting Oracle XE 21c Deployment..."
|
||||
|
||||
# Create directories for persistence
|
||||
echo "📁 Creating directories for persistence..."
|
||||
mkdir -p /opt/oracle/oradata
|
||||
mkdir -p /opt/oracle/scripts/setup
|
||||
mkdir -p /opt/oracle/scripts/startup
|
||||
chmod -R 777 /opt/oracle
|
||||
echo "✅ Directories created"
|
||||
|
||||
# Download Oracle XE image
|
||||
echo "📥 Downloading Oracle XE 21c image (this may take several minutes)..."
|
||||
docker pull container-registry.oracle.com/database/express:21.3.0-xe
|
||||
echo "✅ Image downloaded"
|
||||
|
||||
# Run Oracle XE container
|
||||
echo "🚀 Starting Oracle XE container..."
|
||||
docker run -d \
|
||||
--name $CONTAINER_NAME \
|
||||
-p $ORACLE_PORT:1521 \
|
||||
-p $ORACLE_EM_PORT:5500 \
|
||||
-e ORACLE_PWD=$ORACLE_PASSWORD \
|
||||
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||
-v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \
|
||||
-v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \
|
||||
--restart unless-stopped \
|
||||
--shm-size=1g \
|
||||
container-registry.oracle.com/database/express:21.3.0-xe
|
||||
|
||||
echo "✅ Container started"
|
||||
|
||||
# Wait for database to be ready
|
||||
echo "⏳ Waiting for database initialization (5-10 minutes)..."
|
||||
until docker logs $CONTAINER_NAME 2>&1 | grep -q "DATABASE IS READY TO USE!"; do
|
||||
sleep 10
|
||||
echo -n "."
|
||||
done
|
||||
echo ""
|
||||
echo "✅ Database is ready!"
|
||||
|
||||
# Extra wait for stabilization
|
||||
sleep 10
|
||||
|
||||
echo "✅ Oracle XE deployment completed!"
|
||||
DEPLOY_SCRIPT
|
||||
|
||||
# Copy and execute deployment script
|
||||
echo "🚀 Deploying Oracle XE..."
|
||||
scp /tmp/deploy-oracle-xe.sh root@$PROXMOX_IP:/tmp/
|
||||
ssh root@$PROXMOX_IP "sed -i 's/\r$//' /tmp/deploy-oracle-xe.sh"
|
||||
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/deploy-oracle-xe.sh /root/deploy-oracle-xe.sh"
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- chmod +x /root/deploy-oracle-xe.sh"
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash /root/deploy-oracle-xe.sh"
|
||||
|
||||
echo "✅ Oracle XE deployed successfully"
|
||||
echo ""
|
||||
|
||||
# Step 3: Configure PDBs (Remove XEPDB1, Create ROA and ROA2)
|
||||
echo "🔧 Step 3: Configuring Pluggable Databases..."
|
||||
|
||||
cat > /tmp/configure_pdbs.sql << EOF
|
||||
-- Close and drop default XEPDB1
|
||||
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
|
||||
DROP PLUGGABLE DATABASE XEPDB1 INCLUDING DATAFILES;
|
||||
|
||||
-- Create ROA PDB
|
||||
CREATE PLUGGABLE DATABASE ROA
|
||||
ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD
|
||||
STORAGE (MAXSIZE 5G)
|
||||
DEFAULT TABLESPACE USERS
|
||||
DATAFILE '/opt/oracle/oradata/XE/ROA/users01.dbf' SIZE 250M AUTOEXTEND ON
|
||||
FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA/');
|
||||
|
||||
-- Create ROA2 PDB
|
||||
CREATE PLUGGABLE DATABASE ROA2
|
||||
ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD
|
||||
STORAGE (MAXSIZE 5G)
|
||||
DEFAULT TABLESPACE USERS
|
||||
DATAFILE '/opt/oracle/oradata/XE/ROA2/users01.dbf' SIZE 250M AUTOEXTEND ON
|
||||
FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA2/');
|
||||
|
||||
-- Open the new PDBs
|
||||
ALTER PLUGGABLE DATABASE ROA OPEN;
|
||||
ALTER PLUGGABLE DATABASE ROA2 OPEN;
|
||||
|
||||
-- Save state for auto-open on restart
|
||||
ALTER PLUGGABLE DATABASE ROA SAVE STATE;
|
||||
ALTER PLUGGABLE DATABASE ROA2 SAVE STATE;
|
||||
|
||||
-- Show results
|
||||
SELECT con_id, name, open_mode FROM v\$pdbs ORDER BY con_id;
|
||||
exit;
|
||||
EOF
|
||||
|
||||
# Execute PDB configuration
|
||||
scp /tmp/configure_pdbs.sql root@$PROXMOX_IP:/tmp/
|
||||
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/configure_pdbs.sql /tmp/configure_pdbs.sql"
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/configure_pdbs.sql"
|
||||
|
||||
echo "✅ PDBs configured (XEPDB1 removed, ROA and ROA2 created)"
|
||||
echo ""
|
||||
|
||||
# Step 4: Create users in PDBs
|
||||
echo "👤 Step 4: Creating users in PDBs..."
|
||||
|
||||
cat > /tmp/create_users.sql << EOF
|
||||
-- Create user in ROA PDB
|
||||
ALTER SESSION SET CONTAINER = ROA;
|
||||
CREATE USER app_roa IDENTIFIED BY $ROA_USER_PASSWORD;
|
||||
GRANT CONNECT, RESOURCE TO app_roa;
|
||||
GRANT CREATE SESSION TO app_roa;
|
||||
GRANT CREATE TABLE TO app_roa;
|
||||
GRANT CREATE VIEW TO app_roa;
|
||||
GRANT CREATE PROCEDURE TO app_roa;
|
||||
GRANT CREATE SEQUENCE TO app_roa;
|
||||
GRANT UNLIMITED TABLESPACE TO app_roa;
|
||||
|
||||
-- Create user in ROA2 PDB
|
||||
ALTER SESSION SET CONTAINER = ROA2;
|
||||
CREATE USER app_roa2 IDENTIFIED BY $ROA2_USER_PASSWORD;
|
||||
GRANT CONNECT, RESOURCE TO app_roa2;
|
||||
GRANT CREATE SESSION TO app_roa2;
|
||||
GRANT CREATE TABLE TO app_roa2;
|
||||
GRANT CREATE VIEW TO app_roa2;
|
||||
GRANT CREATE PROCEDURE TO app_roa2;
|
||||
GRANT CREATE SEQUENCE TO app_roa2;
|
||||
GRANT UNLIMITED TABLESPACE TO app_roa2;
|
||||
|
||||
-- Verify users
|
||||
ALTER SESSION SET CONTAINER = CDB\$ROOT;
|
||||
SELECT name, network_name FROM v\$active_services WHERE con_id > 1 ORDER BY con_id;
|
||||
exit;
|
||||
EOF
|
||||
|
||||
# Execute user creation
|
||||
scp /tmp/create_users.sql root@$PROXMOX_IP:/tmp/
|
||||
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/create_users.sql /tmp/create_users.sql"
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/create_users.sql"
|
||||
|
||||
echo "✅ Users created in PDBs"
|
||||
echo ""
|
||||
|
||||
# Step 5: Create helper scripts
|
||||
echo "📝 Step 5: Creating helper scripts..."
|
||||
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-status << \"HELPER_EOF\"
|
||||
#!/bin/bash
|
||||
echo \"=== Oracle XE Status ===\"
|
||||
docker ps --filter \"name=oracle-xe\" --format \"table {{.Names}}\t{{.Status}}\t{{.Ports}}\"
|
||||
echo \"\"
|
||||
echo \"=== Database Status ===\"
|
||||
docker exec oracle-xe lsnrctl status 2>/dev/null | grep -E \"Instance|Service|Listening\" || echo \"Listener not ready\"
|
||||
HELPER_EOF
|
||||
chmod +x /usr/local/bin/oracle-status'"
|
||||
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-sqlplus << \"HELPER_EOF\"
|
||||
#!/bin/bash
|
||||
docker exec -it oracle-xe sqlplus sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba
|
||||
HELPER_EOF
|
||||
chmod +x /usr/local/bin/oracle-sqlplus'"
|
||||
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-logs << \"HELPER_EOF\"
|
||||
#!/bin/bash
|
||||
docker logs -f oracle-xe
|
||||
HELPER_EOF
|
||||
chmod +x /usr/local/bin/oracle-logs'"
|
||||
|
||||
echo "✅ Helper scripts created"
|
||||
echo ""
|
||||
|
||||
# Step 6: Test connections
|
||||
echo "🔍 Step 6: Testing connections..."
|
||||
|
||||
echo "Testing ROA connection..."
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa/$ROA_USER_PASSWORD@localhost:1521/ROA'" > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ ROA connection successful"
|
||||
else
|
||||
echo "❌ ROA connection failed"
|
||||
fi
|
||||
|
||||
echo "Testing ROA2 connection..."
|
||||
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa2/$ROA2_USER_PASSWORD@localhost:1521/ROA2'" > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ ROA2 connection successful"
|
||||
else
|
||||
echo "❌ ROA2 connection failed"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Final information
|
||||
echo "=========================================="
|
||||
echo "✅ ORACLE XE SETUP COMPLETE!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Container Information:"
|
||||
echo " - Container ID: $CONTAINER_ID"
|
||||
echo " - Container Name: $CONTAINER_NAME"
|
||||
echo " - Container IP: $CONTAINER_IP"
|
||||
echo " - Portainer UI: https://$CONTAINER_IP:9443"
|
||||
echo ""
|
||||
echo "Oracle XE Information:"
|
||||
echo " - Oracle Port: 1521"
|
||||
echo " - Enterprise Manager: https://$CONTAINER_IP:5500/em"
|
||||
echo " - SYS Password: $ORACLE_PASSWORD"
|
||||
echo ""
|
||||
echo "Pluggable Databases (PDBs):"
|
||||
echo " 1. ROA"
|
||||
echo " - User: app_roa"
|
||||
echo " - Password: $ROA_USER_PASSWORD"
|
||||
echo " - Connection: sqlplus app_roa/$ROA_USER_PASSWORD@$CONTAINER_IP:1521/ROA"
|
||||
echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA"
|
||||
echo ""
|
||||
echo " 2. ROA2"
|
||||
echo " - User: app_roa2"
|
||||
echo " - Password: $ROA2_USER_PASSWORD"
|
||||
echo " - Connection: sqlplus app_roa2/$ROA2_USER_PASSWORD@$CONTAINER_IP:1521/ROA2"
|
||||
echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA2"
|
||||
echo ""
|
||||
echo " PDB Admin (both): pdbadmin / $PDB_ADMIN_PASSWORD"
|
||||
echo ""
|
||||
echo "Helper Commands (run inside container):"
|
||||
echo " - oracle-status : Check Oracle status"
|
||||
echo " - oracle-sqlplus : Connect as SYS"
|
||||
echo " - oracle-logs : View Oracle logs"
|
||||
echo ""
|
||||
echo "To enter the container:"
|
||||
echo " ssh root@$PROXMOX_IP"
|
||||
echo " pct enter $CONTAINER_ID"
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
|
||||
# Cleanup temporary files
|
||||
rm -f /tmp/deploy-oracle-xe.sh
|
||||
rm -f /tmp/configure_pdbs.sql
|
||||
rm -f /tmp/create_users.sql
|
||||
|
||||
echo "🎉 Setup completed successfully!"
|
||||
Reference in New Issue
Block a user