1 Star 0 Fork 1

Snovel/install

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
install.sh 7.21 KB
一键复制 编辑 原始数据 按行查看 历史
#!/bin/bash
set -e
# 参数检查
if [ "$(id -u)" -eq 0 ]; then
echo "错误:请使用非root用户运行此脚本" >&2
exit 1
fi
# 初始化参数
FRAPPE_USER="${1:-frappe}"
DEVELOPMENT=false
# 检查并创建用户
if ! id "$FRAPPE_USER" &>/dev/null; then
echo "用户 ${FRAPPE_USER} 不存在,正在创建..."
sudo useradd -m -s /bin/bash "$FRAPPE_USER"
sudo usermod -aG sudo "$FRAPPE_USER"
echo "已创建用户 ${FRAPPE_USER} 并添加到 sudo 组"
# 将脚本复制到新用户的主目录
sudo cp "$0" "/home/${FRAPPE_USER}/install.sh"
sudo chown ${FRAPPE_USER}:${FRAPPE_USER} "/home/${FRAPPE_USER}/install.sh"
sudo chmod +x "/home/${FRAPPE_USER}/install.sh"
# 使用新用户重新执行脚本
echo "切换到用户 ${FRAPPE_USER} 继续安装..."
exec sudo -u "${FRAPPE_USER}" "/home/${FRAPPE_USER}/install.sh" "$@"
exit 0
fi
# 参数初始化
DB_ROOT_PASSWORD="root"
SITE_NAME="site1.local"
ADMIN_PASSWORD="admin"
APPS=()
DEFAULT_APP_REPO="https://atomgit.com/frappe"
FRAPPE_BRANCH="version-15"
BENCH_DIR="frappe-bench"
FRAPPE_REPO="" # 初始化FRAPPE_REPO变量
SILENT_MODE=false # 初始化静默模式变量
declare -A APP_REPOS
declare -A APP_BRANCHES
# 参数解析
while [[ $# -gt 0 ]]; do
case $1 in
--develop) DEVELOPMENT=true; shift ;;
--install) APPS+=("$2"); shift 2 ;;
--db-password) DB_ROOT_PASSWORD="$2"; shift 2 ;;
--site-name) SITE_NAME="$2"; shift 2 ;;
--admin-password) ADMIN_PASSWORD="$2"; shift 2 ;; # 添加管理员密码参数
--silent) SILENT_MODE=true; shift ;; # 添加静默模式参数
--repo) FRAPPE_REPO="$2"; shift 2 ;;
--branch) FRAPPE_BRANCH="$2"; shift 2 ;;
--bench-dir) BENCH_DIR="$2"; shift 2 ;;
--default-app-repo) DEFAULT_APP_REPO="$2"; shift 2 ;;
--*-repo)
app_name=$(echo $1 | sed 's/^--//; s/-repo//')
APP_REPOS[$app_name]="$2"
shift 2 ;;
--*-branch)
app_name=$(echo $1 | sed 's/^--//; s/-branch//')
APP_BRANCHES[$app_name]="$2"
shift 2 ;;
*) shift ;;
esac
done
# 系统更新和依赖安装
if [ "$SILENT_MODE" = true ]; then
# 静默模式下使用DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND=noninteractive
# 添加debconf预配置,避免交互式提示
sudo debconf-set-selections <<EOF
# 预配置openssh-server
openssh-server openssh-server/permit-root-login boolean false
openssh-server openssh-server/password-authentication boolean true
# 预配置postfix
postfix postfix/main_mailer_type select No configuration
postfix postfix/mailname string localhost
# 预配置其他可能需要交互的软件包
wireshark-common wireshark-common/install-setuid boolean false
msttcorefonts msttcorefonts/accepted-mscorefonts-eula boolean true
EOF
sudo -E apt update -y && sudo -E apt upgrade -y
sudo -E apt install -y \
python3-dev python3.12-dev python3-setuptools python3-pip python3-venv \
mariadb-server mariadb-client redis-server \
libmysqlclient-dev curl libffi-dev libssl-dev \
software-properties-common xvfb \
fontconfig libfreetype6 libjpeg8 libpng16-16 libx11-6 libxext6 libxrender1 \
wkhtmltopdf \
ttf-wqy-zenhei ttf-wqy-microhei git \
fail2ban
else
# 交互模式
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y \
python3-dev python3.12-dev python3-setuptools python3-pip python3-venv \
mariadb-server mariadb-client redis-server \
libmysqlclient-dev curl libffi-dev libssl-dev \
software-properties-common xvfb \
fontconfig libfreetype6 libjpeg8 libpng16-16 libx11-6 libxext6 libxrender1 \
wkhtmltopdf \
ttf-wqy-zenhei ttf-wqy-microhei git \
fail2ban
fi
# 数据库配置
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASSWORD}';"
if [ "$SILENT_MODE" = true ]; then
# 静默模式下使用预设答案
sudo mysql -u root -p"${DB_ROOT_PASSWORD}" <<EOF
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.db WHERE Db='test' OR Db='test_%';
FLUSH PRIVILEGES;
EOF
else
# 交互模式
sudo mysql_secure_installation <<EOF
y
${DB_ROOT_PASSWORD}
y
y
n
y
y
EOF
fi
# Node.js环境配置
curl -o- https://gitee.com/wolone/nvm/raw/develop/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
source ~/.bashrc
# 创建并激活Python虚拟环境
python3 -m venv env
source env/bin/activate
# 配置npm和pip国内镜像
npm config set registry https://registry.npmmirror.com
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set install.trusted-host mirrors.aliyun.com
# 安装frappe-bench
pip install frappe-bench --break-system-packages
# 安装和配置yarn
npm install -g yarn
yarn config set registry https://registry.npmmirror.com/ --global
# 移除此处的权限设置,因为BENCH_DIR还未创建
# sudo chown -R ${FRAPPE_USER}:${FRAPPE_USER} "${BENCH_DIR}"
nvm install 20
# 初始化Bench环境
bench_init_cmd="bench init"
[ -n "$FRAPPE_REPO" ] && bench_init_cmd+=" --frappe-path $FRAPPE_REPO"
bench_init_cmd+=" --frappe-branch ${FRAPPE_BRANCH} --python $(which python3) ${BENCH_DIR}"
eval "$bench_init_cmd"
cd "${BENCH_DIR}"
# 设置bench目录权限
sudo chown -R ${FRAPPE_USER}:${FRAPPE_USER} "$(pwd)"
# 应用安装逻辑
install_app() {
local app=$1
local repo="${APP_REPOS[$app]:-${DEFAULT_APP_REPO}/${app}}"
local branch_opts=""
[ -n "${APP_BRANCHES[$app]}" ] && branch_opts="--branch ${APP_BRANCHES[$app]}"
# 简化case语句,因为处理逻辑相同
bench get-app $branch_opts "$app" "$repo"
}
# 核心应用安装
install_app frappe
# 可选应用安装
for app in "${APPS[@]}"; do
install_app "$app"
done
# 开发模式配置
[ "$DEVELOPMENT" = true ] && {
bench config set developer_mode 1
bench config set restart_supervisor_on_update 1
} || {
# 生产模式配置
echo "配置生产环境..."
sudo pip3 install ansible --break-system-packages
bench setup production ${FRAPPE_USER}
sudo supervisorctl restart all
}
# 创建默认站点
bench new-site ${SITE_NAME} --admin-password ${ADMIN_PASSWORD} --mariadb-root-password ${DB_ROOT_PASSWORD}
bench use ${SITE_NAME}
# 为站点安装所有应用
for app in "${APPS[@]}"; do
bench --site ${SITE_NAME} install-app $app
done
echo "安装完成!"
echo "============================================"
echo "安装信息:"
echo "站点地址:http://${SITE_NAME}"
echo "管理员账号:Administrator"
echo "管理员密码:${ADMIN_PASSWORD}"
echo "数据库root密码:${DB_ROOT_PASSWORD}"
echo "============================================"
[ "$DEVELOPMENT" = true ] && {
echo "开发环境说明:"
echo "1. 使用以下命令启动开发服务器:"
echo " cd ${BENCH_DIR} && bench start"
echo "2. 默认端口:8000"
} || {
echo "生产环境说明:"
echo "1. 环境已配置完成"
echo "2. 请确保已正确设置域名解析指向本机IP"
echo "3. 服务已通过 supervisor 自动启动"
}
echo "============================================"
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Shell
1
https://gitee.com/jyinet/install.git
git@gitee.com:jyinet/install.git
jyinet
install
install
master

搜索帮助