智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

277 lines
6.2 KiB

#!/bin/bash
# 颜色输出函数
print_message() {
echo -e "\033[1;32m[INFO] $1\033[0m"
}
print_warning() {
echo -e "\033[1;33m[WARNING] $1\033[0m"
}
print_error() {
echo -e "\033[1;31m[ERROR] $1\033[0m"
}
# 设置项目名称
PROJECT_NAME="NiuCloud"
# 检查Docker环境
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
}
# 创建必要的目录结构
create_directories() {
print_message "创建必要的目录结构..."
mkdir -p docker/{logs/{nginx,mysql},data/{mysql,redis,node_modules},nginx/conf.d,php,mysql,redis}
}
# 检查并生成配置文件
check_config_files() {
print_message "检查必要的配置文件..."
# Nginx 主配置
if [ ! -f "docker/nginx/nginx.conf" ]; then
print_warning "Nginx主配置文件不存在,创建默认配置..."
cat > docker/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
client_max_body_size 20M;
include /etc/nginx/conf.d/*.conf;
}
EOF
fi
# Nginx 站点配置
if [ ! -f "docker/nginx/conf.d/default.conf" ]; then
print_warning "Nginx站点配置文件不存在,创建默认配置..."
cat > docker/nginx/conf.d/default.conf << 'EOF'
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 8080;
server_name localhost;
root /var/www/admin;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
fi
# PHP 配置
if [ ! -f "docker/php/php.ini" ]; then
print_warning "PHP配置文件不存在,创建默认配置..."
cat > docker/php/php.ini << 'EOF'
[PHP]
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 300
date.timezone = Asia/Shanghai
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
EOF
fi
# PHP-FPM 配置
if [ ! -f "docker/php/www.conf" ]; then
print_warning "PHP-FPM配置文件不存在,创建默认配置..."
cat > docker/php/www.conf << 'EOF'
[www]
user = www-data
group = www-data
listen = 9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
EOF
fi
# MySQL 配置
if [ ! -f "docker/mysql/my.cnf" ]; then
print_warning "MySQL配置文件不存在,创建默认配置..."
cat > docker/mysql/my.cnf << 'EOF'
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-authentication-plugin = mysql_native_password
max_allowed_packet = 64M
sql_mode = ''
[client]
default-character-set = utf8mb4
EOF
fi
# Redis 配置
if [ ! -f "docker/redis/redis.conf" ]; then
print_warning "Redis配置文件不存在,创建默认配置..."
cat > docker/redis/redis.conf << 'EOF'
requirepass niucloud123456
appendonly yes
EOF
fi
}
# 启动服务
start_services() {
print_message "启动 ${PROJECT_NAME} 服务..."
docker-compose up -d
}
# 停止服务
stop_services() {
print_message "停止 ${PROJECT_NAME} 服务..."
docker-compose down
}
# 重启服务
restart_services() {
print_message "重启 ${PROJECT_NAME} 服务..."
docker-compose restart
}
# 查看服务状态
check_status() {
print_message "${PROJECT_NAME} 服务状态:"
docker-compose ps
}
# 查看服务日志
view_logs() {
service=$1
if [ -z "$service" ]; then
print_message "查看所有服务日志..."
docker-compose logs
else
print_message "查看 $service 服务日志..."
docker-compose logs $service
fi
}
# 初始化项目
init_project() {
print_message "初始化 ${PROJECT_NAME} 项目..."
# 检查是否存在 docker-compose.yml
if [ ! -f "docker-compose.yml" ]; then
print_error "缺少 docker-compose.yml 文件,请先创建!"
exit 1
fi
create_directories
check_config_files
# 构建自定义 PHP 镜像
print_message "构建自定义 PHP 镜像..."
docker build -t niucloud-php:8.2 ./docker/php
# 拉取其他 Docker 镜像
print_message "拉取Docker镜像..."
docker-compose pull
print_message "项目初始化完成,现在可以启动服务了"
}
# 显示帮助信息
show_help() {
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " start 启动所有服务"
echo " stop 停止所有服务"
echo " restart 重启所有服务"
echo " status 查看服务状态"
echo " logs 查看所有服务日志"
echo " logs <服务名> 查看指定服务日志"
echo " init 初始化项目"
echo " help 显示此帮助信息"
}
# 主程序入口
main() {
check_docker
case "$1" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
check_status
;;
logs)
view_logs "$2"
;;
init)
init_project
;;
help|*)
show_help
;;
esac
}
main "$@"