13 changed files with 3867 additions and 3356 deletions
File diff suppressed because it is too large
@ -0,0 +1,119 @@ |
|||||
|
version: '3.8' |
||||
|
|
||||
|
services: |
||||
|
# PHP 服务 |
||||
|
php: |
||||
|
image: php:8.2-fpm |
||||
|
container_name: niucloud_php |
||||
|
volumes: |
||||
|
- ./niucloud:/var/www/html |
||||
|
- ./docker/php/php.ini:/usr/local/etc/php/php.ini |
||||
|
- ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf |
||||
|
working_dir: /var/www/html |
||||
|
depends_on: |
||||
|
- mysql |
||||
|
- redis |
||||
|
environment: |
||||
|
- PHP_IDE_CONFIG=serverName=niucloud |
||||
|
command: > |
||||
|
bash -c " |
||||
|
apt-get update && |
||||
|
apt-get install -y libzip-dev zip unzip git libpng-dev libjpeg-dev libfreetype6-dev && |
||||
|
docker-php-ext-configure gd --with-freetype --with-jpeg && |
||||
|
docker-php-ext-install pdo pdo_mysql mysqli zip gd && |
||||
|
pecl install redis && |
||||
|
docker-php-ext-enable redis && |
||||
|
php-fpm |
||||
|
" |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
# Nginx 服务 |
||||
|
nginx: |
||||
|
image: nginx:alpine |
||||
|
container_name: niucloud_nginx |
||||
|
ports: |
||||
|
- "20080:80" # 原本是 80 映射到 20080 |
||||
|
- "20081:8080" # 原本是 8080 映射到 20081 |
||||
|
volumes: |
||||
|
- ./niucloud:/var/www/html |
||||
|
- ./admin/dist:/var/www/admin |
||||
|
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf |
||||
|
- ./docker/nginx/conf.d:/etc/nginx/conf.d |
||||
|
- ./docker/logs/nginx:/var/log/nginx |
||||
|
depends_on: |
||||
|
- php |
||||
|
- node |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
# MySQL 数据库 |
||||
|
mysql: |
||||
|
image: mysql:8.0 |
||||
|
container_name: niucloud_mysql |
||||
|
ports: |
||||
|
- "23306:3306" # 原本是 3306 映射到 23306 |
||||
|
environment: |
||||
|
MYSQL_ROOT_PASSWORD: root123456 |
||||
|
MYSQL_DATABASE: niucloud |
||||
|
MYSQL_USER: niucloud |
||||
|
MYSQL_PASSWORD: niucloud123 |
||||
|
volumes: |
||||
|
- ./docker/data/mysql:/var/lib/mysql |
||||
|
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf |
||||
|
- ./docker/logs/mysql:/var/log/mysql |
||||
|
command: --default-authentication-plugin=mysql_native_password |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
# Redis 缓存 |
||||
|
redis: |
||||
|
image: redis:alpine |
||||
|
container_name: niucloud_redis |
||||
|
ports: |
||||
|
- "26379:6379" # 原本是 6379 映射到 26379 |
||||
|
volumes: |
||||
|
- ./docker/data/redis:/data |
||||
|
- ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf |
||||
|
command: redis-server /usr/local/etc/redis/redis.conf |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
# Node.js 服务 (用于构建前端) |
||||
|
node: |
||||
|
image: node:18-alpine |
||||
|
container_name: niucloud_node |
||||
|
working_dir: /app |
||||
|
volumes: |
||||
|
- ./admin:/app |
||||
|
- ./docker/data/node_modules:/app/node_modules |
||||
|
ports: |
||||
|
- "23000:3000" # 原本是 3000 映射到 23000 |
||||
|
command: > |
||||
|
sh -c " |
||||
|
npm config set registry https://registry.npmmirror.com && |
||||
|
npm install && |
||||
|
npm run dev |
||||
|
" |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
# Composer 服务 (用于 PHP 依赖管理) |
||||
|
composer: |
||||
|
image: composer:latest |
||||
|
container_name: niucloud_composer |
||||
|
volumes: |
||||
|
- ./niucloud:/app |
||||
|
working_dir: /app |
||||
|
command: install --ignore-platform-reqs |
||||
|
networks: |
||||
|
- niucloud_network |
||||
|
|
||||
|
networks: |
||||
|
niucloud_network: |
||||
|
driver: bridge |
||||
|
|
||||
|
volumes: |
||||
|
mysql_data: |
||||
|
redis_data: |
||||
|
node_modules: |
||||
@ -0,0 +1,268 @@ |
|||||
|
#!/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="MyApp" |
||||
|
|
||||
|
# 检查Docker和Docker Compose是否安装 |
||||
|
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 |
||||
|
|
||||
|
[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 |
||||
|
|
||||
|
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 "$@" |
||||
Loading…
Reference in new issue