195 lines
4.8 KiB
Bash
195 lines
4.8 KiB
Bash
#!/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 |