import paramiko
import time

host = '8.140.221.49'
username = 'root'
private_key_path = r'C:\Users\FZX\.ssh\FzxBdsh-ECS.pem'

def run_command(ssh, cmd):
    stdin, stdout, stderr = ssh.exec_command(cmd)
    return stdout.read().decode().strip(), stderr.read().decode().strip()

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=username, key_filename=private_key_path, timeout=30)

print('='*80)
print('手动启动容器')
print('='*80)

print('\n1. 检查网络')
output, error = run_command(ssh, 'podman network ls')
print('网络列表:', output)

print('\n2. 确保网络存在')
output, error = run_command(ssh, 'podman network inspect fzx-aliyun-dev-network 2>/dev/null || podman network create fzx-aliyun-dev-network')
print('网络状态:', output)

print('\n3. 启动 MariaDB')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-mariadb \
  --network fzx-aliyun-dev-network --network-alias mariadb \
  -p 0.0.0.0:3306:3306 \
  -e MARIADB_ROOT_PASSWORD=fzx@2024!root \
  -e MARIADB_DATABASE=fzx_local_life \
  -e MARIADB_USER=fzx_app \
  -e MARIADB_PASSWORD=fzx@2024!dev \
  -v /opt/Fzxpodman/mariadb/data:/var/lib/mysql \
  docker.m.daocloud.io/library/mariadb:10.11 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake
''')
print('MariaDB容器ID:', output)

print('\n等待MariaDB启动...')
time.sleep(15)

print('\n4. 启动 Redis')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-redis \
  --network fzx-aliyun-dev-network --network-alias redis \
  -p 0.0.0.0:6379:6379 \
  -v /opt/Fzxpodman/redis/data:/data \
  docker.m.daocloud.io/library/redis:7.2.4 \
  redis-server --requirepass ${REDIS_PASSWORD:-} --maxmemory 768mb --maxmemory-policy allkeys-lru --appendonly yes
''')
print('Redis容器ID:', output)

print('\n5. 启动 Nacos')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-nacos \
  --network fzx-aliyun-dev-network --network-alias nacos \
  -p 0.0.0.0:8848:8848 -p 0.0.0.0:9848:9848 \
  -e MODE=standalone \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e MYSQL_SERVICE_HOST=mariadb \
  -e MYSQL_SERVICE_DB_NAME=fzx_local_life \
  -e MYSQL_SERVICE_USER=fzx_app \
  -e MYSQL_SERVICE_PASSWORD=fzx@2024!dev \
  -e MYSQL_SERVICE_PORT=3306 \
  -e NACOS_AUTH_ENABLE=false \
  -e NACOS_JVM_ARGS="-Xms384M -Xmx768M" \
  -v /opt/Fzxpodman/nacos/data:/home/nacos/data \
  docker.m.daocloud.io/nacos/nacos-server:v2.4.3
''')
print('Nacos容器ID:', output)

print('\n等待Nacos启动...')
time.sleep(30)

print('\n6. 启动 Registry')
output, error = run_command(ssh, '''
podman run -d --name fzx-registry \
  --network fzx-aliyun-dev-network --network-alias registry \
  -p 0.0.0.0:5000:5000 \
  -v /opt/Fzxpodman/registry/data:/var/lib/registry \
  docker.m.daocloud.io/library/registry:2.8
''')
print('Registry容器ID:', output)

print('\n7. 启动 API Gateway')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-api-gateway \
  --network fzx-aliyun-dev-network --network-alias api-gateway \
  -p 0.0.0.0:8080:8080 \
  -e SPRING_PROFILES_ACTIVE=aliyun-dev \
  -e SPRING_DATASOURCE_URL="jdbc:mariadb://mariadb:3306/fzx_local_life?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8mb4" \
  -e SPRING_DATASOURCE_USERNAME=fzx_app \
  -e SPRING_DATASOURCE_PASSWORD=fzx@2024!dev \
  -e SPRING_REDIS_HOST=redis \
  -e SPRING_REDIS_PORT=6379 \
  -e SPRING_REDIS_PASSWORD=${REDIS_PASSWORD:-} \
  -e NACOS_SERVER_ADDR=nacos:8848 \
  -e NACOS_NAMESPACE=public \
  -e JWT_SECRET_KEY=fzx_local_life_jwt_secret_key_2024_secure_key \
  -e JAVA_OPTS="-Xms384M -Xmx576M" \
  localhost:5000/fzx/api-gateway:v1.1.0
''')
print('API Gateway容器ID:', output)

print('\n8. 启动 User Service')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-user-service \
  --network fzx-aliyun-dev-network --network-alias user-service \
  -e SPRING_PROFILES_ACTIVE=aliyun-dev \
  -e SPRING_DATASOURCE_URL="jdbc:mariadb://mariadb:3306/fzx_local_life?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8mb4" \
  -e SPRING_DATASOURCE_USERNAME=fzx_app \
  -e SPRING_DATASOURCE_PASSWORD=fzx@2024!dev \
  -e SPRING_REDIS_HOST=redis \
  -e SPRING_REDIS_PORT=6379 \
  -e SPRING_REDIS_PASSWORD=${REDIS_PASSWORD:-} \
  -e NACOS_SERVER_ADDR=nacos:8848 \
  -e JWT_SECRET_KEY=fzx_local_life_jwt_secret_key_2024_secure_key \
  -e JAVA_OPTS="-Xms384M -Xmx576M" \
  localhost:5000/fzx/user-service:v1.1.0
''')
print('User Service容器ID:', output)

print('\n9. 启动 Auth Service')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-auth-service \
  --network fzx-aliyun-dev-network --network-alias auth-service \
  -p 0.0.0.0:8082:8082 \
  -e SPRING_PROFILES_ACTIVE=aliyun-dev \
  -e SPRING_DATASOURCE_URL="jdbc:mariadb://mariadb:3306/fzx_local_life?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=utf8mb4" \
  -e SPRING_DATASOURCE_USERNAME=fzx_app \
  -e SPRING_DATASOURCE_PASSWORD=fzx@2024!dev \
  -e SPRING_REDIS_HOST=redis \
  -e SPRING_REDIS_PORT=6379 \
  -e SPRING_REDIS_PASSWORD=${REDIS_PASSWORD:-} \
  -e NACOS_SERVER_ADDR=nacos:8848 \
  -e JWT_SECRET_KEY=fzx_local_life_jwt_secret_key_2024_secure_key \
  -e JAVA_OPTS="-Xms384M -Xmx576M" \
  localhost:5000/fzx/auth-service:v1.1.0
''')
print('Auth Service容器ID:', output)

print('\n10. 启动 Nginx')
output, error = run_command(ssh, '''
podman run -d --name fzx-aliyun-nginx \
  --network fzx-aliyun-dev-network --network-alias nginx \
  -p 0.0.0.0:80:80 -p 0.0.0.0:443:443 \
  -v /opt/Fzxpodman/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v /opt/Fzxpodman/nginx/html:/usr/share/nginx/html:ro \
  docker.m.daocloud.io/library/nginx:1.25.5
''')
print('Nginx容器ID:', output)

print('\n等待服务启动...')
time.sleep(30)

print('\n' + '='*80)
print('检查服务状态')
print('='*80)

output, error = run_command(ssh, 'podman ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"')
print(output)

print('\n' + '='*80)
print('测试服务')
print('='*80)

print('\n1. 测试Nginx')
output, error = run_command(ssh, 'curl -s http://localhost/health')
print('Nginx:', output)

print('\n2. 测试API Gateway')
output, error = run_command(ssh, 'curl -s http://localhost:8080/actuator/health')
print('API Gateway:', output[:200])

print('\n3. 测试前端')
output, error = run_command(ssh, 'curl -s http://localhost/user/ | head -3')
print('前端:', output)

ssh.close()

print('\n' + '='*80)
print('启动完成!')
print('='*80)