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
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 "$@"
|