2025-03-27 13:49:19 +08:00

195 lines
4.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 导入通用函数
source "$(dirname "$0")/../utils/common.sh"
# 检查root权限
check_root
# 检查Docker是否已安装
check_docker() {
if ! command -v docker &> /dev/null; then
log_info "Docker未安装正在安装..."
install_docker
else
log_info "Docker已安装"
fi
}
# 安装Docker
install_docker() {
log_info "安装Docker..."
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
rm get-docker.sh
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
log_info "Docker安装完成"
}
# 克隆DNMP仓库
clone_dnmp() {
log_info "克隆DNMP仓库..."
# 创建安装目录
sudo mkdir -p /opt/dnmp
# 如果目录已存在且不为空,则清理
if [ -d "/opt/dnmp" ] && [ "$(ls -A /opt/dnmp)" ]; then
log_info "清理已存在的DNMP目录..."
sudo rm -rf /opt/dnmp/*
fi
# 克隆DNMP仓库
sudo git clone https://github.com/garymengcom/dnmp.git /opt/dnmp
# 设置目录权限
sudo chown -R $USER:$USER /opt/dnmp
log_info "DNMP仓库克隆完成"
}
# 配置DNMP
configure_dnmp() {
log_info "配置DNMP..."
cd /opt/dnmp
# 复制配置文件
cp docker-compose.sample.yml docker-compose.yml
cp env.sample .env
# 修改.env文件
sed -i 's/PHP_VERSION=7.4/PHP_VERSION=8.2/' .env
sed -i 's/MYSQL_VERSION=5.7/MYSQL_VERSION=8.0/' .env
sed -i 's/REDIS_VERSION=4.0/REDIS_VERSION=7.0/' .env
# 创建网站目录
mkdir -p www
# 创建默认网站
cat > www/index.php << EOF
<?php
phpinfo();
EOF
log_info "DNMP配置完成"
}
# 启动DNMP
start_dnmp() {
log_info "启动DNMP..."
cd /opt/dnmp
# 启动服务
docker-compose up -d
# 等待服务启动
sleep 10
# 检查服务状态
docker-compose ps
log_info "DNMP启动完成"
}
# 创建别名文件
create_alias_file() {
log_info "创建命令别名文件..."
cat > /opt/dnmp/bash.alias << EOF
# PHP开发环境别名
alias dphp='docker exec -it php82 bash'
alias dcomposer='docker exec -it php82 composer'
alias dphpunit='docker exec -it php82 phpunit'
alias dphpcs='docker exec -it php82 phpcs'
alias dphpcbf='docker exec -it php82 phpcbf'
# 优雅的PHP和Composer命令别名
php () {
tty=
tty -s && tty=--tty
docker run \\
\$tty \\
--interactive \\
--rm \\
--volume \$PWD:/www:rw \\
--workdir /www \\
dnmp_php php "\$@"
}
composer () {
tty=
tty -s && tty=--tty
docker run \\
\$tty \\
--interactive \\
--rm \\
--user www-data:www-data \\
--volume /opt/dnmp/data/composer:\$HOME/dnmp/data/composer \\
--volume \$(pwd):/app \\
--workdir /app \\
dnmp_php composer "\$@"
}
# Laravel开发相关别名
alias laravel='docker exec -it php82 php artisan'
alias laravel-make='docker exec -it php82 php artisan make'
alias laravel-migrate='docker exec -it php82 php artisan migrate'
alias laravel-seed='docker exec -it php82 php artisan db:seed'
alias laravel-test='docker exec -it php82 php artisan test'
alias laravel-route='docker exec -it php82 php artisan route:list'
alias laravel-config='docker exec -it php82 php artisan config:clear'
alias laravel-cache='docker exec -it php82 php artisan cache:clear'
alias laravel-view='docker exec -it php82 php artisan view:clear'
alias laravel-optimize='docker exec -it php82 php artisan optimize'
EOF
# 添加别名到用户shell配置
if [ -f ~/.zshrc ]; then
echo "source /opt/dnmp/bash.alias" >> ~/.zshrc
elif [ -f ~/.bashrc ]; then
echo "source /opt/dnmp/bash.alias" >> ~/.bashrc
fi
log_info "命令别名文件创建完成"
log_info "请运行 'source ~/.zshrc' 或 'source ~/.bashrc' 使别名生效"
}
# 主函数
main() {
log_info "开始安装PHP开发环境..."
# 检查并安装Docker
check_docker
# 克隆DNMP仓库
clone_dnmp
# 配置DNMP
configure_dnmp
# 启动DNMP
start_dnmp
# 创建别名文件
create_alias_file
log_info "PHP环境安装完成"
log_info "访问 http://localhost 查看PHP信息页面。"
log_info "默认MySQL密码123456"
log_info "默认Redis密码123456"
log_info "DNMP安装目录/opt/dnmp"
log_info ""
log_info "如需手动安装Composer请执行以下步骤"
log_info "1. 进入PHP容器: dphp"
log_info "2. 下载Composer: curl -sS https://getcomposer.org/installer | php"
log_info "3. 安装Composer: mv composer.phar /usr/local/bin/composer"
log_info "4. 配置镜像: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/"
}
# 执行主函数
main