├── README.md ├── lede-ent.sh ├── oneclick.sh └── onmp.sh /README.md: -------------------------------------------------------------------------------- 1 | ONMP 2 | === 3 | 4 | 适用于安装了Entware固件的onmp一键安装命令 5 | 6 | 目前已经在Padavan、LEDE、梅林上测试成功 7 | 8 | `php-fpm` 和 `mysqld` 启动失败的可以开启swap 9 | 10 | ``` 11 | $ onmp open 12 | # 选择7 13 | ``` 14 | 15 | ## 说明 16 | 17 | ONMP: Opkg + Nginx + MySQL + PHP 18 | 19 | 这是一个用Linux Shell编写的脚本,可以为使用opkg包管理的路由器快速搭建Nginx/MySQL/PHP环境,并且内置了一些好用的网站程序一键免配置快速安装 20 | 21 | ``` 22 | ONMP内置了以下程序的一键安装: 23 | (1) phpMyAdmin(数据库管理工具) 24 | (2) WordPress(使用最广泛的CMS) 25 | (3) Owncloud(经典的私有云) 26 | (4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘) 27 | (5) h5ai(优秀的文件目录) 28 | (6) Lychee(一个很好看,易于使用的Web相册) 29 | (7) Kodexplorer(可道云aka芒果云在线文档管理器) 30 | (8) Typecho (流畅的轻量级开源博客程序) 31 | (9) Z-Blog (体积小,速度快的PHP博客程序) 32 | (10) DzzOffice (开源办公平台) 33 | ``` 34 | 35 | 所有的软件包均通过 opkg 安装,一切配置均在脚本中可见,请放心使用 36 | 37 | ## 使用说明 38 | 39 | [wiki](https://github.com/xzhih/ONMP/wiki) 40 | 41 | [底噪博客](https://zhih.me) 42 | 43 | ## 安装教程 44 | 45 | ### 1. 安装 Entware 46 | 47 | Entware-ng 是一个适用于嵌入式系统的软件包库,使用 opkg 包管理系统进行管理,现在在官方的源上已经有超过 2000 个软件包了,可以说是非常的丰富 48 | 49 | 不同的固件,安装方式都不一样,请认准安装方式(自己是什么固件总该懂得吧😂) 50 | 51 | [在 LEDE 上使用 Entware](https://github.com/xzhih/ONMP/wiki/在-LEDE-上安装-Entware) 52 | 53 | [在梅林上使用 Entware](https://github.com/xzhih/ONMP/wiki/在梅林上安装-Entware) 54 | 55 | [在 Padavan 上使用 entware](https://github.com/xzhih/ONMP/wiki/在-Padavan-上安装-Entware) 56 | 57 | ### 2. 安装onmp 58 | 59 | 一键命令,复制->粘贴->回车 60 | 61 | ``` 62 | 
$ sh -c "$(curl -kfsSl https://raw.githubusercontent.com/xzhih/ONMP/master/oneclick.sh)" 63 | ``` 64 | 65 | 一长串的复制如果出错,可以按照以下给出的命令,一步步进行安装 66 | 67 | ``` 68 | # 进入 entware 挂载目录 69 | 
cd /opt && opkg install wget unzip 70 | 71 | # 下载软件包 72 | wget --no-check-certificate -O /opt/onmp.zip https://github.com/xzhih/ONMP/archive/master.zip 73 | 74 | # 解压 75 | unzip /opt/onmp.zip 76 | cd /opt/ONMP-master 77 | 78 | # 设置权限 79 | chmod +x ./onmp.sh 80 | 81 | # 运行 82 | ./onmp.sh 83 | ``` 84 | 85 | 要是正常运行到脚本,会出现下面的情景,选1安装即可 86 | 87 | ![安装](https://i.loli.net/2018/03/03/5a99ac096c6a1.png) 88 | 89 | 正常安装中要是出现错误,会有错误信息,根据提示操作,目前得到的大多数反馈都是网络问题,因为 entware 的源在国外,而且他们的管理者说之前受到了来自亚洲的DDOS,所以对这边限流了,速度较慢。遇到这种情况,可以去看看剧,没准回来的时候就好了😄 90 | 91 | 安装成功得到的结果是这样的 92 | 93 | ![安装成功](https://i.loli.net/2018/03/03/5a99aeda756ac.png) 94 | 95 | 如果你也是和上图一样,那么恭喜你,成功的安装上了 ONMP,你可以尽情的玩耍了 96 | 97 | ## 更新脚本 98 | 99 | 同样是安装的那条命令,选择 2 即可更新。 100 | 101 | ## ONMP 详细使用教程 102 | 103 | **基本命令:** 104 | 105 | ``` 106 | 管理:onmp open 107 | 启动、停止、重启:onmp start|stop|restart 108 | 查看网站列表:onmp list 109 | ``` 110 | 111 | **主要软件包的管理命令:** 112 | 113 | ``` 114 | Nginx 管理命令 115 | onmp nginx start|restart|stop 116 | 117 | MySQL 管理命令 118 | onmp mysql start|restart|stop 119 | 120 | PHP 管理命令 121 | onmp php start|restart|stop 122 | 123 | Redis 管理命令 124 | onmp redis start|restart|stop 125 | ``` 126 | 127 | **设置数据库密码:** 128 | 129 | 输入 `onmp open` 后选择3,会提示 `Enter password:` ,这个时候要输入当前数据库的密码,比如我初始设置的数据库密码是123456,回车后要是密码正确,会提示输入你要设置的新密码,回车后会提示再次输入确认。也就是,一次旧密码,两次新密码。 130 | 131 | 这个位置很简单,但是很多人都说改不了密码,其实是没看提示,没输入旧密码,所以我写清楚一些。 132 | 133 | ## 其他 134 | 135 | 探针来自 https://github.com/WuSiYu/PHP-Probe 136 | -------------------------------------------------------------------------------- /lede-ent.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # sh -c "$(curl -ksSL http://192.168.4.126:4000/lede-ent.sh)" 3 | export PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin$PATH 4 | 5 | cat << EOF 6 | ___ ___ ___ ___ 7 | / /\ /__/\ /__/\ / /\ 8 | / /::\ \ \:\ | |::\ / /::\ 9 | / /:/\:\ \ \:\ | |:|:\ / /:/\:\ 10 | / /:/ \:\ _____\__\:\ __|__|:|\:\ / /:/~/:/ 11 | /__/:/ \__\:\ /__/::::::::\ /__/::::| \:\ /__/:/ /:/ 12 | \ \:\ / /:/ \ \:\~~\~~\/ \ \:\~~\__\/ \ \:\/:/ 13 | \ \:\ /:/ \ \:\ ~~~ \ \:\ \ \::/ 14 | \ \:\/:/ \ \:\ \ \:\ \ \:\ 15 | \ \::/ \ \:\ \ \:\ \ \:\ 16 | \__\/ \__\/ \__\/ \__\/ 17 | 18 | ======================================================= 19 | EOF 20 | 21 | cd /tmp || exit 22 | 23 | case $(uname -m) in 24 | *armv5*) 25 | INST_URL="http://bin.entware.net/armv5sf-k3.2/installer/generic.sh" 26 | ;; 27 | *armv7l*) 28 | INST_URL="http://bin.entware.net/armv7sf-k3.2/installer/generic.sh" 29 | ;; 30 | *aarch64*) 31 | INST_URL="http://bin.entware.net/aarch64-k3.10/installer/generic.sh" 32 | ;; 33 | *mips*) 34 | INST_URL="http://bin.entware.net/mipselsf-k3.4/installer/generic.sh" 35 | ;; 36 | x86_64) 37 | INST_URL="http://bin.entware.net/x64-k3.2/installer/generic.sh" 38 | ;; 39 | *) 40 | echo "不好意思,你的平台似乎无法安装 Entware" 41 | exit 1 42 | ;; 43 | esac 44 | 45 | echo -e "以下是你的磁盘信息\n" 46 | df -h 47 | echo -e "\n" 48 | 49 | i=1 50 | for mounted in $(mount | grep -E "ext4" | grep -v "overlay" | cut -d" " -f3) ; do 51 | echo "[$i] --> $mounted" 52 | eval mounts$i="$mounted" 53 | i=$((i + 1)) 54 | done 55 | 56 | if [ $i = "1" ] ; then 57 | echo -e "找不到 Ext4 分区,正在退出..." 58 | exit 1 59 | fi 60 | 61 | echo -e "\n找到以上 Ext4 分区" 62 | echo -en "输入分区序号或输入 0 退出 [0-$((i - 1))]: " 63 | read -r partitionNumber 64 | if [ "$partitionNumber" = "0" ] ; then 65 | echo -e "$INFO" 退出... 66 | exit 0 67 | fi 68 | if [ "$partitionNumber" -gt $((i - 1)) ] ; then 69 | echo -e "分区编号错误,正在退出..." 70 | exit 1 71 | fi 72 | 73 | eval entPartition=\$mounts"$partitionNumber" 74 | echo -e "已选择 $entPartition \n" 75 | 76 | entFolder="$entPartition/opt" 77 | 78 | if [ -d "$entFolder" ] ; then 79 | echo -e "在这个分区上发现了旧的 Entware 文件,正在备份..." 80 | mv "$entFolder" "$entFolder-old_$(date +%F_%H-%M)" 81 | echo -e "已经备份到 $entFolder-old_$(date +%F_%H-%M) \n" 82 | fi 83 | 84 | mkdir "$entFolder" 85 | 86 | if [ -d /opt ] ; then 87 | rm -rf /opt 88 | fi 89 | 90 | ln -sf "$entFolder" /opt 91 | echo -e "新的软连接已创建\n" 92 | echo -e "现在开始安装 Entware..." 93 | 94 | wget -qO - $INST_URL | sh 95 | 96 | startup="/etc/rc.d/entware-startup.sh" 97 | 98 | echo "ln -sf "$entFolder" /opt" > $startup 99 | echo "/opt/etc/init.d/rc.unslung start" >> $startup 100 | chmod 777 /etc/rc.d/entware-startup.sh 101 | 102 | sed -e "/^.\ \/opt\/etc\/profile/d" -i /etc/profile 103 | echo ". /opt/etc/profile" >> /etc/profile 104 | source /etc/profile 105 | 106 | if [[ "$(which opkg)" == "/opt/bin/opkg" ]]; then 107 | echo -e "\n安装成功,重启查看是否生效\n" 108 | fi 109 | -------------------------------------------------------------------------------- /oneclick.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 一键安装onmp 3 | # @Author: xzhih 4 | # @Date: 2018-03-19 04:44:09 5 | # @Last Modified by: xzhih 6 | # @Last Modified time: 2018-10-08 01:51:35 7 | # sh -c "$(curl -kfsSL http://192.168.4.126:4000/oneclick.sh)" 8 | 9 | cat << EOF 10 | ___ ___ ___ ___ 11 | / /\ /__/\ /__/\ / /\ 12 | / /::\ \ \:\ | |::\ / /::\ 13 | / /:/\:\ \ \:\ | |:|:\ / /:/\:\ 14 | / /:/ \:\ _____\__\:\ __|__|:|\:\ / /:/~/:/ 15 | /__/:/ \__\:\ /__/::::::::\ /__/::::| \:\ /__/:/ /:/ 16 | \ \:\ / /:/ \ \:\~~\~~\/ \ \:\~~\__\/ \ \:\/:/ 17 | \ \:\ /:/ \ \:\ ~~~ \ \:\ \ \::/ 18 | \ \:\/:/ \ \:\ \ \:\ \ \:\ 19 | \ \::/ \ \:\ \ \:\ \ \:\ 20 | \__\/ \__\/ \__\/ \__\/ 21 | 22 | ======================================================= 23 | 24 | ONMP 是一个 web 环境快速安装脚本,适用于安装了 25 | Entware 的路由器,目前已经在 Padavan、 26 | LEDE(openwrt)、梅林上测试成功。 27 | 28 | 项目地址:https://github.com/xzhih/ONMP 29 | 30 | 更多使用教程:https://zhih.me 31 | 32 | EOF 33 | 34 | Install() 35 | { 36 | rm -rf /opt/bin/onmp /opt/onmp 37 | mkdir -p /opt/onmp 38 | 39 | # 获取onmp脚本 40 | curl -kfsSL https://raw.githubusercontent.com/xzhih/ONMP/master/onmp.sh > /opt/onmp/onmp.sh 41 | # curl -kfsSL http://192.168.4.126:4000/onmp.sh > /opt/onmp/onmp.sh 42 | chmod +x /opt/onmp/onmp.sh 43 | 44 | # 获取php探针文件 45 | curl -kfsSL https://raw.githubusercontent.com/WuSiYu/PHP-Probe/master/tz.php > /opt/onmp/tz.php 46 | 47 | /opt/onmp/onmp.sh 48 | } 49 | 50 | Updata() 51 | { 52 | rm -rf /opt/onmp/onmp.sh 53 | curl -kfsSL https://raw.githubusercontent.com/xzhih/ONMP/master/onmp.sh > /opt/onmp/onmp.sh 54 | # curl -kfsSL http://192.168.4.126:4000/onmp.sh > /opt/onmp/onmp.sh 55 | chmod +x /opt/onmp/onmp.sh 56 | /opt/onmp/onmp.sh renewsh > /dev/null 2>&1 57 | echo "升级完成" 58 | } 59 | 60 | start() 61 | { 62 | # 63 | cat << EOF 64 | (1) 开始安装 65 | (2) 升级脚本 66 | EOF 67 | 68 | read -p "请输入:" input 69 | case $input in 70 | 1 ) Install;; 71 | 2) Updata;; 72 | *) exit;; 73 | esac 74 | 75 | } 76 | 77 | start -------------------------------------------------------------------------------- /onmp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # @Author: xzhih 3 | # @Date: 2017-07-29 06:10:54 4 | # @Last Modified by: Fangshing87 5 | # @Last Modified time: 2019-06-09 11:39:26 6 | 7 | # 软件包列表 8 | pkglist="wget unzip grep sed tar ca-certificates coreutils-whoami php7 php7-cgi php7-cli php7-fastcgi php7-fpm php7-mod-mysqli php7-mod-pdo php7-mod-pdo-mysql nginx-extras mariadb-server mariadb-server-extra mariadb-client mariadb-client-extra" 9 | 10 | phpmod="php7-mod-calendar php7-mod-ctype php7-mod-curl php7-mod-dom php7-mod-exif php7-mod-fileinfo php7-mod-ftp php7-mod-gd php7-mod-gettext php7-mod-gmp php7-mod-hash php7-mod-iconv php7-mod-intl php7-mod-json php7-mod-ldap php7-mod-session php7-mod-mbstring php7-mod-opcache php7-mod-openssl php7-mod-pcntl php7-mod-phar php7-pecl-redis php7-mod-session php7-mod-shmop php7-mod-simplexml php7-mod-snmp php7-mod-soap php7-mod-sockets php7-mod-sqlite3 php7-mod-sysvmsg php7-mod-sysvsem php7-mod-sysvshm php7-mod-tokenizer php7-mod-xml php7-mod-xmlreader php7-mod-xmlwriter php7-mod-zip php7-pecl-dio php7-pecl-http php7-pecl-libevent php7-pecl-propro php7-pecl-raphf redis snmpd snmp-mibs snmp-utils zoneinfo-core zoneinfo-asia" 11 | 12 | # 后续可能增加的包(缺少源支持) 13 | # php7-mod-imagick imagemagick imagemagick-jpeg imagemagick-png imagemagick-tiff imagemagick-tools 14 | 15 | # Web程序 16 | # (1) phpMyAdmin(数据库管理工具) 17 | url_phpMyAdmin="https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.zip" 18 | 19 | # (2) WordPress(使用最广泛的CMS) 20 | url_WordPress="https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip" 21 | 22 | # (3) Owncloud(经典的私有云) 23 | url_Owncloud="https://download.owncloud.org/community/owncloud-10.0.10.zip" 24 | 25 | # (4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘) 26 | url_Nextcloud="https://download.nextcloud.com/server/releases/nextcloud-13.0.6.zip" 27 | 28 | # (5) h5ai(优秀的文件目录) 29 | url_h5ai="https://release.larsjung.de/h5ai/h5ai-0.29.0.zip" 30 | 31 | # (6) Lychee(一个很好看,易于使用的Web相册) 32 | url_Lychee="https://github.com/electerious/Lychee/archive/master.zip" 33 | 34 | # (7) Kodexplorer(可道云aka芒果云在线文档管理器) 35 | url_Kodexplorer="http://static.kodcloud.com/update/download/kodexplorer4.36.zip" 36 | 37 | # (8) Typecho (流畅的轻量级开源博客程序) 38 | url_Typecho="http://typecho.org/downloads/1.1-17.10.30-release.tar.gz" 39 | 40 | # (9) Z-Blog (体积小,速度快的PHP博客程序) 41 | url_Zblog="https://update.zblogcn.com/zip/Z-BlogPHP_1_5_2_1935_Zero.zip" 42 | 43 | # (10) DzzOffice (开源办公平台) 44 | url_DzzOffice="https://codeload.github.com/zyx0814/dzzoffice/zip/master" 45 | 46 | # 通用环境变量获取 47 | get_env() 48 | { 49 | # 获取用户名 50 | if [[ $USER ]]; then 51 | username=$USER 52 | elif [[ -n $(whoami 2>/dev/null) ]]; then 53 | username=$(whoami 2>/dev/null) 54 | else 55 | username=$(cat /etc/passwd | sed "s/:/ /g" | awk 'NR==1' | awk '{printf $1}') 56 | fi 57 | 58 | # 获取路由器IP 59 | localhost=$(ifconfig | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}' | awk 'NR==1') 60 | if [[ ! -n "$localhost" ]]; then 61 | localhost="你的路由器IP" 62 | fi 63 | } 64 | 65 | ##### 软件包状态检测 ##### 66 | install_check() 67 | { 68 | notinstall="" 69 | for data in $pkglist ; do 70 | if [[ `opkg list-installed | grep $data | wc -l` -ne 0 ]];then 71 | echo "$data 已安装" 72 | else 73 | notinstall="$notinstall $data" 74 | echo "$data 正在安装..." 75 | opkg install $data 76 | fi 77 | done 78 | } 79 | 80 | # 安装PHP mod 81 | install_php_mod() 82 | { 83 | notinstall="" 84 | for data in $phpmod ; do 85 | if [[ `opkg list-installed | grep $data | wc -l` -ne 0 ]];then 86 | echo "$data 已安装" 87 | else 88 | notinstall="$notinstall $data" 89 | echo "$data 正在安装..." 90 | opkg install $data 91 | fi 92 | done 93 | } 94 | 95 | ############## 安装软件包 ############# 96 | install_onmp_ipk() 97 | { 98 | opkg update 99 | 100 | # 软件包状态检测 101 | install_check 102 | 103 | for i in 'seq 3'; do 104 | if [[ ${#notinstall} -gt 0 ]]; then 105 | install_check 106 | fi 107 | done 108 | 109 | if [[ ${#notinstall} -gt 0 ]]; then 110 | echo "可能会因为某些问题某些核心软件包无法安装,请保持/opt/目录足够干净,如果是网络问题,请挂全局VPN再次运行命令" 111 | else 112 | echo "----------------------------------------" 113 | echo "|********** ONMP软件包已完整安装 *********|" 114 | echo "----------------------------------------" 115 | echo "是否安装PHP的模块(Nextcloud这类应用需要),你也可以手动安装" 116 | # 117 | read -p "输入你的选择[y/n]: " input 118 | case $input in 119 | y) install_php_mod;; 120 | n) echo "如果程序提示需要安装插件,你可以自行使用opkg命令安装";; 121 | *) echo "你输入的不是 y/n" 122 | exit;; 123 | esac 124 | echo "现在开始初始化ONMP" 125 | init_onmp 126 | echo "" 127 | fi 128 | } 129 | 130 | ################ 初始化onmp ############### 131 | init_onmp() 132 | { 133 | # 初始化网站目录 134 | rm -rf /opt/wwwroot 135 | mkdir -p /opt/wwwroot/default 136 | chmod -R 777 /opt/tmp 137 | 138 | # 初始化Nginx 139 | init_nginx > /dev/null 2>&1 140 | 141 | # 初始化数据库 142 | init_sql > /dev/null 2>&1 143 | 144 | # 初始化PHP 145 | init_php > /dev/null 2>&1 146 | 147 | # 初始化redis 148 | echo 'unixsocket /opt/var/run/redis.sock' >> /opt/etc/redis.conf 149 | echo 'unixsocketperm 777' >> /opt/etc/redis.conf 150 | 151 | # 添加探针 152 | cp /opt/onmp/tz.php /opt/wwwroot/default -R 153 | add_vhost 81 default 154 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/default.conf 155 | chmod -R 777 /opt/wwwroot/default 156 | 157 | # 生成ONMP命令 158 | set_onmp_sh 159 | onmp start 160 | } 161 | 162 | ############### 初始化Nginx ############### 163 | init_nginx() 164 | { 165 | get_env 166 | /opt/etc/init.d/S80nginx stop > /dev/null 2>&1 167 | rm -rf /opt/etc/nginx/vhost 168 | rm -rf /opt/etc/nginx/conf 169 | mkdir -p /opt/etc/nginx/vhost 170 | mkdir -p /opt/etc/nginx/conf 171 | 172 | # 初始化nginx配置文件 173 | cat > "/opt/etc/nginx/nginx.conf" <<-\EOF 174 | user theOne root; 175 | pid /opt/var/run/nginx.pid; 176 | worker_processes auto; 177 | 178 | events { 179 | use epoll; 180 | multi_accept on; 181 | worker_connections 1024; 182 | } 183 | 184 | http { 185 | charset utf-8; 186 | include mime.types; 187 | default_type application/octet-stream; 188 | 189 | sendfile on; 190 | tcp_nopush on; 191 | tcp_nodelay on; 192 | keepalive_timeout 60; 193 | 194 | client_max_body_size 2000m; 195 | client_body_temp_path /opt/tmp/; 196 | 197 | gzip on; 198 | gzip_vary on; 199 | gzip_proxied any; 200 | gzip_min_length 1k; 201 | gzip_buffers 4 8k; 202 | gzip_comp_level 2; 203 | gzip_disable "msie6"; 204 | gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; 205 | 206 | include /opt/etc/nginx/vhost/*.conf; 207 | } 208 | EOF 209 | 210 | sed -e "s/theOne/$username/g" -i /opt/etc/nginx/nginx.conf 211 | 212 | # 特定程序的nginx配置 213 | nginx_special_conf 214 | 215 | } 216 | 217 | ##### 特定程序的nginx配置 ##### 218 | nginx_special_conf() 219 | { 220 | # php-fpm 221 | cat > "/opt/etc/nginx/conf/php-fpm.conf" <<-\OOO 222 | location ~ \.php(?:$|/) { 223 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 224 | fastcgi_pass unix:/opt/var/run/php7-fpm.sock; 225 | fastcgi_index index.php; 226 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 227 | include fastcgi_params; 228 | } 229 | OOO 230 | 231 | # nextcloud 232 | cat > "/opt/etc/nginx/conf/nextcloud.conf" <<-\OOO 233 | add_header X-Content-Type-Options nosniff; 234 | add_header X-XSS-Protection "1; mode=block"; 235 | add_header X-Robots-Tag none; 236 | add_header X-Download-Options noopen; 237 | add_header X-Permitted-Cross-Domain-Policies none; 238 | 239 | location = /robots.txt { 240 | allow all; 241 | log_not_found off; 242 | access_log off; 243 | } 244 | location = /.well-known/carddav { 245 | return 301 $scheme://$host/remote.php/dav; 246 | } 247 | location = /.well-known/caldav { 248 | return 301 $scheme://$host/remote.php/dav; 249 | } 250 | 251 | fastcgi_buffers 64 4K; 252 | gzip on; 253 | gzip_vary on; 254 | gzip_comp_level 4; 255 | gzip_min_length 256; 256 | gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; 257 | gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; 258 | 259 | location / { 260 | rewrite ^ /index.php$request_uri; 261 | } 262 | location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { 263 | deny all; 264 | } 265 | location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { 266 | deny all; 267 | } 268 | 269 | location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) { 270 | fastcgi_split_path_info ^(.+?\.php)(/.*)$; 271 | include fastcgi_params; 272 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 273 | fastcgi_param PATH_INFO $fastcgi_path_info; 274 | fastcgi_param modHeadersAvailable true; 275 | fastcgi_param front_controller_active true; 276 | fastcgi_pass unix:/opt/var/run/php7-fpm.sock; 277 | fastcgi_intercept_errors on; 278 | fastcgi_request_buffering off; 279 | } 280 | 281 | location ~ ^/(?:updater|ocs-provider)(?:$|/) { 282 | try_files $uri/ =404; 283 | index index.php; 284 | } 285 | 286 | location ~ \.(?:css|js|woff|svg|gif)$ { 287 | try_files $uri /index.php$request_uri; 288 | add_header Cache-Control "public, max-age=15778463"; 289 | add_header X-Content-Type-Options nosniff; 290 | add_header X-XSS-Protection "1; mode=block"; 291 | add_header X-Robots-Tag none; 292 | add_header X-Download-Options noopen; 293 | add_header X-Permitted-Cross-Domain-Policies none; 294 | access_log off; 295 | } 296 | 297 | location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ { 298 | try_files $uri /index.php$request_uri; 299 | access_log off; 300 | } 301 | OOO 302 | 303 | # owncloud 304 | cat > "/opt/etc/nginx/conf/owncloud.conf" <<-\OOO 305 | add_header X-Content-Type-Options nosniff; 306 | add_header X-Frame-Options "SAMEORIGIN"; 307 | add_header X-XSS-Protection "1; mode=block"; 308 | add_header X-Robots-Tag none; 309 | add_header X-Download-Options noopen; 310 | add_header X-Permitted-Cross-Domain-Policies none; 311 | 312 | location = /robots.txt { 313 | allow all; 314 | log_not_found off; 315 | access_log off; 316 | } 317 | location = /.well-known/carddav { 318 | return 301 $scheme://$host/remote.php/dav; 319 | } 320 | location = /.well-known/caldav { 321 | return 301 $scheme://$host/remote.php/dav; 322 | } 323 | 324 | gzip off; 325 | fastcgi_buffers 8 4K; 326 | fastcgi_ignore_headers X-Accel-Buffering; 327 | error_page 403 /core/templates/403.php; 328 | error_page 404 /core/templates/404.php; 329 | 330 | location / { 331 | rewrite ^ /index.php$uri; 332 | } 333 | 334 | location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { 335 | return 404; 336 | } 337 | location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { 338 | return 404; 339 | } 340 | 341 | location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { 342 | fastcgi_split_path_info ^(.+\.php)(/.*)$; 343 | include fastcgi_params; 344 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 345 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 346 | fastcgi_param PATH_INFO $fastcgi_path_info; 347 | fastcgi_param modHeadersAvailable true; 348 | fastcgi_param front_controller_active true; 349 | fastcgi_read_timeout 180; 350 | fastcgi_pass unix:/opt/var/run/php7-fpm.sock; 351 | fastcgi_intercept_errors on; 352 | fastcgi_request_buffering on; 353 | } 354 | 355 | location ~ ^/(?:updater|ocs-provider)(?:$|/) { 356 | try_files $uri $uri/ =404; 357 | index index.php; 358 | } 359 | 360 | location ~ \.(?:css|js)$ { 361 | try_files $uri /index.php$uri$is_args$args; 362 | add_header Cache-Control "max-age=15778463"; 363 | add_header X-Content-Type-Options nosniff; 364 | add_header X-Frame-Options "SAMEORIGIN"; 365 | add_header X-XSS-Protection "1; mode=block"; 366 | add_header X-Robots-Tag none; 367 | add_header X-Download-Options noopen; 368 | add_header X-Permitted-Cross-Domain-Policies none; 369 | access_log off; 370 | } 371 | 372 | location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ { 373 | add_header Cache-Control "public, max-age=7200"; 374 | try_files $uri /index.php$uri$is_args$args; 375 | access_log off; 376 | } 377 | OOO 378 | 379 | # wordpress 380 | cat > "/opt/etc/nginx/conf/wordpress.conf" <<-\OOO 381 | location = /favicon.ico { 382 | log_not_found off; 383 | access_log off; 384 | } 385 | location = /robots.txt { 386 | allow all; 387 | log_not_found off; 388 | access_log off; 389 | } 390 | location ~ /\. { 391 | deny all; 392 | } 393 | location ~ ^/wp-content/uploads/.*\.php$ { 394 | deny all; 395 | } 396 | location ~* /(?:uploads|files)/.*\.php$ { 397 | deny all; 398 | } 399 | 400 | location / { 401 | try_files $uri $uri/ /index.php?$args; 402 | } 403 | 404 | location ~ \.php$ { 405 | include fastcgi.conf; 406 | fastcgi_intercept_errors on; 407 | fastcgi_pass unix:/opt/var/run/php7-fpm.sock; 408 | fastcgi_buffers 16 16k; 409 | fastcgi_buffer_size 32k; 410 | } 411 | 412 | location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 413 | expires max; 414 | log_not_found off; 415 | } 416 | OOO 417 | 418 | # typecho 419 | cat > "/opt/etc/nginx/conf/typecho.conf" <<-\OOO 420 | if (!-e $request_filename) { 421 | rewrite ^(.*)$ /index.php$1 last; 422 | } 423 | OOO 424 | 425 | } 426 | 427 | ############## 重置、初始化MySQL ############# 428 | init_sql() 429 | { 430 | get_env 431 | /opt/etc/init.d/S70mysqld stop > /dev/null 2>&1 432 | sleep 10 433 | killall mysqld > /dev/null 2>&1 434 | rm -rf /opt/mysql 435 | rm -rf /opt/var/mysql 436 | mkdir -p /opt/etc/mysql/ 437 | 438 | # MySQL设置 439 | cat > "/opt/etc/mysql/my.cnf" <<-\MMM 440 | [client-server] 441 | port = 3306 442 | socket = /opt/var/run/mysqld.sock 443 | 444 | [mysqld] 445 | user = theOne 446 | socket = /opt/var/run/mysqld.sock 447 | pid-file = /opt/var/run/mysqld.pid 448 | basedir = /opt 449 | lc_messages_dir = /opt/share/mariadb 450 | lc_messages = en_US 451 | innodb_use_native_aio = 0 452 | datadir = /opt/var/mysql/ 453 | tmpdir = /opt/tmp/ 454 | 455 | skip-external-locking 456 | 457 | bind-address = 127.0.0.1 458 | 459 | key_buffer_size = 24M 460 | max_allowed_packet = 24M 461 | thread_stack = 192K 462 | thread_cache_size = 8 463 | 464 | [mysqldump] 465 | quick 466 | quote-names 467 | max_allowed_packet = 24M 468 | 469 | [mysql] 470 | #no-auto-rehash 471 | 472 | [isamchk] 473 | key_buffer_size = 24M 474 | 475 | [mysqlhotcopy] 476 | interactive-timeout 477 | MMM 478 | 479 | sed -e "s/theOne/$username/g" -i /opt/etc/mysql/my.cnf 480 | 481 | chmod 644 /opt/etc/mysql/my.cnf 482 | 483 | mkdir -p /opt/var/mysql 484 | 485 | # 数据库安装 486 | /opt/bin/mysql_install_db --user=$username --basedir=/opt --datadir=/opt/var/mysql/ 487 | echo -e "\n正在初始化数据库,请稍等1分钟" 488 | sleep 20 489 | 490 | # 初次启动MySQL 491 | /opt/etc/init.d/S70mysqld start 492 | sleep 60 493 | 494 | # 设置数据库密码 495 | mysqladmin -u root password 123456 496 | echo -e "\033[41;37m 数据库用户:root, 初始密码:123456 \033[0m" 497 | onmp restart 498 | } 499 | 500 | ############## PHP初始化 ############# 501 | init_php() 502 | { 503 | # PHP7设置 504 | /opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1 505 | 506 | mkdir -p /opt/usr/php/tmp/ 507 | chmod -R 777 /opt/usr/php/tmp/ 508 | 509 | sed -e "/^doc_root/d" -i /opt/etc/php.ini 510 | sed -e "s/.*memory_limit = .*/memory_limit = 128M/g" -i /opt/etc/php.ini 511 | sed -e "s/.*output_buffering = .*/output_buffering = 4096/g" -i /opt/etc/php.ini 512 | sed -e "s/.*post_max_size = .*/post_max_size = 8000M/g" -i /opt/etc/php.ini 513 | sed -e "s/.*max_execution_time = .*/max_execution_time = 2000 /g" -i /opt/etc/php.ini 514 | sed -e "s/.*upload_max_filesize.*/upload_max_filesize = 8000M/g" -i /opt/etc/php.ini 515 | sed -e "s/.*listen.mode.*/listen.mode = 0666/g" -i /opt/etc/php7-fpm.d/www.conf 516 | 517 | # PHP配置文件 518 | cat >> "/opt/etc/php.ini" <<-\PHPINI 519 | session.save_path = "/opt/usr/php/tmp/" 520 | opcache.enable=1 521 | opcache.enable_cli=1 522 | opcache.interned_strings_buffer=8 523 | opcache.max_accelerated_files=10000 524 | opcache.memory_consumption=128 525 | opcache.save_comments=1 526 | opcache.revalidate_freq=60 527 | opcache.fast_shutdown=1 528 | 529 | mysqli.default_socket=/opt/var/run/mysqld.sock 530 | pdo_mysql.default_socket=/opt/var/run/mysqld.sock 531 | PHPINI 532 | 533 | cat >> "/opt/etc/php7-fpm.d/www.conf" <<-\PHPFPM 534 | env[HOSTNAME] = $HOSTNAME 535 | env[PATH] = /opt/bin:/usr/local/bin:/usr/bin:/bin 536 | env[TMP] = /opt/tmp 537 | env[TMPDIR] = /opt/tmp 538 | env[TEMP] = /opt/tmp 539 | PHPFPM 540 | } 541 | 542 | ############# 用户设置数据库密码 ############ 543 | set_passwd() 544 | { 545 | /opt/etc/init.d/S70mysqld start 546 | sleep 3 547 | echo -e "\033[41;37m 初始密码:123456 \033[0m" 548 | mysqladmin -u root -p password 549 | onmp restart 550 | } 551 | 552 | ################ 卸载onmp ############### 553 | remove_onmp() 554 | { 555 | /opt/etc/init.d/S70mysqld stop > /dev/null 2>&1 556 | /opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1 557 | /opt/etc/init.d/S80nginx stop > /dev/null 2>&1 558 | /opt/etc/init.d/S70redis stop > /dev/null 2>&1 559 | killall -9 nginx mysqld php-fpm redis-server > /dev/null 2>&1 560 | for pkg in $pkglist; do 561 | opkg remove $pkg --force-depends 562 | done 563 | for mod in $phpmod; do 564 | opkg remove $mod --force-depends 565 | done 566 | rm -rf /opt/wwwroot 567 | rm -rf /opt/etc/nginx/vhost 568 | rm -rf /opt/bin/onmp 569 | rm -rf /opt/mysql 570 | rm -rf /opt/var/mysql 571 | rm -rf /opt/etc/nginx/ 572 | rm -rf /opt/etc/php* 573 | rm -rf /opt/etc/mysql 574 | rm -rf /opt/etc/redis* 575 | } 576 | 577 | ################ 生成ONMP命令 ############### 578 | set_onmp_sh() 579 | { 580 | # 删除 581 | rm -rf /opt/bin/onmp 582 | 583 | # 写入文件 584 | cat > "/opt/bin/onmp" <<-\EOF 585 | #!/bin/sh 586 | 587 | # 获取路由器IP 588 | localhost=$(ifconfig | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}' | awk 'NR==1') 589 | if [[ ! -n "$localhost" ]]; then 590 | localhost="你的路由器IP" 591 | fi 592 | 593 | vhost_list() 594 | { 595 | echo "网站列表:" 596 | logger -t "【ONMP】" "网站列表:" 597 | for conf in /opt/etc/nginx/vhost/*; 598 | do 599 | path=$(cat $conf | awk 'NR==4' | awk '{print $2}' | sed 's/;//') 600 | port=$(cat $conf | awk 'NR==2' | awk '{print $2}' | sed 's/;//') 601 | echo "$path $localhost:$port" 602 | logger -t "【ONMP】" "$path $localhost:$port" 603 | done 604 | echo "浏览器地址栏输入:$localhost:81 查看php探针" 605 | } 606 | 607 | onmp_restart() 608 | { 609 | /opt/etc/init.d/S70mysqld stop > /dev/null 2>&1 610 | /opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1 611 | /opt/etc/init.d/S80nginx stop > /dev/null 2>&1 612 | killall -9 nginx mysqld php-fpm > /dev/null 2>&1 613 | sleep 3 614 | /opt/etc/init.d/S70mysqld start > /dev/null 2>&1 615 | /opt/etc/init.d/S79php7-fpm start > /dev/null 2>&1 616 | /opt/etc/init.d/S80nginx start > /dev/null 2>&1 617 | sleep 3 618 | num=0 619 | for PROC in 'nginx' 'php-fpm' 'mysqld'; do 620 | if [ -n "`pidof $PROC`" ]; then 621 | echo $PROC "启动成功"; 622 | else 623 | echo $PROC "启动失败"; 624 | num=`expr $num + 1` 625 | fi 626 | done 627 | 628 | if [[ $num -gt 0 ]]; then 629 | echo "onmp启动失败" 630 | logger -t "【ONMP】" "启动失败" 631 | else 632 | echo "onmp已启动" 633 | logger -t "【ONMP】" "已启动" 634 | vhost_list 635 | fi 636 | } 637 | 638 | case $1 in 639 | open ) 640 | /opt/onmp/onmp.sh 641 | ;; 642 | 643 | start ) 644 | echo "onmp正在启动" 645 | logger -t "【ONMP】" "正在启动" 646 | onmp_restart 647 | ;; 648 | 649 | stop ) 650 | echo "onmp正在停止" 651 | logger -t "【ONMP】" "正在停止" 652 | /opt/etc/init.d/S70mysqld stop > /dev/null 2>&1 653 | /opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1 654 | /opt/etc/init.d/S80nginx stop > /dev/null 2>&1 655 | echo "onmp已停止" 656 | logger -t "【ONMP】" "已停止" 657 | ;; 658 | 659 | restart ) 660 | echo "onmp正在重启" 661 | logger -t "【ONMP】" "正在重启" 662 | onmp_restart 663 | ;; 664 | 665 | mysql ) 666 | case $2 in 667 | start ) /opt/etc/init.d/S70mysqld start;; 668 | stop ) /opt/etc/init.d/S70mysqld stop;; 669 | restart ) /opt/etc/init.d/S70mysqld restart;; 670 | * ) echo "onmp mysqld start|restart|stop";; 671 | esac 672 | ;; 673 | 674 | php ) 675 | case $2 in 676 | start ) /opt/etc/init.d/S79php7-fpm start;; 677 | stop ) /opt/etc/init.d/S79php7-fpm stop;; 678 | restart ) /opt/etc/init.d/S79php7-fpm restart;; 679 | * ) echo "onmp php start|restart|stop";; 680 | esac 681 | ;; 682 | 683 | nginx ) 684 | case $2 in 685 | start ) /opt/etc/init.d/S80nginx start;; 686 | stop ) /opt/etc/init.d/S80nginx stop;; 687 | restart ) /opt/etc/init.d/S80nginx restart;; 688 | * ) echo "onmp nginx start|restart|stop";; 689 | esac 690 | ;; 691 | 692 | redis ) 693 | case $2 in 694 | start ) /opt/etc/init.d/S70redis start;; 695 | stop ) /opt/etc/init.d/S70redis stop;; 696 | restart ) /opt/etc/init.d/S70redis restart;; 697 | * ) echo "onmp redis start|restart|stop";; 698 | esac 699 | ;; 700 | 701 | list ) 702 | vhost_list 703 | ;; 704 | * ) 705 | # 706 | cat << HHH 707 | ================================= 708 | onmp 管理命令 709 | onmp open 710 | 711 | 启动 停止 重启 712 | onmp start|stop|restart 713 | 714 | 查看网站列表 onmp list 715 | 716 | Nginx 管理命令 717 | onmp nginx start|restart|stop 718 | MySQL 管理命令 719 | onmp mysql start|restart|stop 720 | PHP 管理命令 721 | onmp php start|restart|stop 722 | Redis 管理命令 723 | onmp redis start|restart|stop 724 | ================================= 725 | HHH 726 | ;; 727 | esac 728 | EOF 729 | 730 | chmod +x /opt/bin/onmp 731 | # 732 | cat << HHH 733 | ================================= 734 | onmp 管理命令 735 | onmp open 736 | 737 | 启动 停止 重启 738 | onmp start|stop|restart 739 | 740 | 查看网站列表 onmp list 741 | 742 | Nginx 管理命令 743 | onmp nginx start|restart|stop 744 | MySQL 管理命令 745 | onmp mysql start|restart|stop 746 | PHP 管理命令 747 | onmp php start|restart|stop 748 | Redis 管理命令 749 | onmp redis start|restart|stop 750 | ================================= 751 | HHH 752 | 753 | } 754 | 755 | ############### 网站程序安装 ############## 756 | install_website() 757 | { 758 | # 通用环境变量获取 759 | get_env 760 | clear 761 | chmod -R 777 /opt/tmp 762 | # 选择程序 763 | cat << AAA 764 | ---------------------------------------- 765 | |************* 选择WEB程序 *************| 766 | ---------------------------------------- 767 | (1) phpMyAdmin(数据库管理工具) 768 | (2) WordPress(使用最广泛的CMS) 769 | (3) Owncloud(经典的私有云) 770 | (4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘) 771 | (5) h5ai(优秀的文件目录) 772 | (6) Lychee(一个很好看,易于使用的Web相册) 773 | (7) Kodexplorer(可道云aka芒果云在线文档管理器) 774 | (8) Typecho (流畅的轻量级开源博客程序) 775 | (9) Z-Blog (体积小,速度快的PHP博客程序) 776 | (10) DzzOffice (开源办公平台) 777 | (0) 退出 778 | AAA 779 | read -p "输入你的选择[0-11]: " input 780 | case $input in 781 | 1) install_phpmyadmin;; 782 | 2) install_wordpress;; 783 | 3) install_owncloud;; 784 | 4) install_nextcloud;; 785 | 5) install_h5ai;; 786 | 6) install_lychee;; 787 | 7) install_kodexplorer;; 788 | 8) install_typecho;; 789 | 9) install_zblog;; 790 | 10) install_dzzoffice;; 791 | 0) exit;; 792 | *) echo "你输入的不是 0 ~ 10 之间的!" 793 | break;; 794 | esac 795 | } 796 | 797 | ############### WEB程序安装器 ############## 798 | web_installer() 799 | { 800 | clear 801 | echo "----------------------------------------" 802 | echo "|*********** WEB程序安装器 ***********|" 803 | echo "----------------------------------------" 804 | echo "安装 $name:" 805 | 806 | # 获取用户自定义设置 807 | read -p "输入服务端口(请避开已使用的端口)[留空默认$port]: " nport 808 | if [[ $nport ]]; then 809 | port=$nport 810 | fi 811 | read -p "输入目录名(留空默认:$name): " webdir 812 | if [[ ! -n "$webdir" ]]; then 813 | webdir=$name 814 | fi 815 | 816 | # 检查目录是否存在 817 | if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then 818 | echo "开始安装..." 819 | else 820 | read -p "网站目录 /opt/wwwroot/$webdir 已存在,是否删除: [y/n(小写)]" ans 821 | case $ans in 822 | y ) rm -rf /opt/wwwroot/$webdir; echo "已删除";; 823 | n ) echo "未删除";; 824 | * ) echo "没有这个选项"; exit;; 825 | esac 826 | fi 827 | 828 | # 下载程序并解压 829 | suffix="zip" 830 | if [[ -n "$istar" ]]; then 831 | suffix="tar" 832 | fi 833 | if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then 834 | rm -rf /opt/etc/nginx/vhost/$webdir.conf 835 | if [[ ! -f /opt/wwwroot/$name.$suffix ]]; then 836 | rm -rf /opt/tmp/$name.$suffix 837 | wget --no-check-certificate -O /opt/tmp/$name.$suffix $filelink 838 | mv /opt/tmp/$name.* /opt/wwwroot/ 839 | fi 840 | if [[ ! -f "/opt/wwwroot/$name.$suffix" ]]; then 841 | echo "下载未成功" 842 | else 843 | echo "正在解压..." 844 | if [[ -n "$hookdir" ]]; then 845 | mkdir /opt/wwwroot/$hookdir 846 | fi 847 | 848 | if [[ -n "$istar" ]]; then 849 | tar zxf /opt/wwwroot/$name.$suffix -C /opt/wwwroot/$hookdir > /dev/null 2>&1 850 | else 851 | unzip /opt/wwwroot/$name.$suffix -d /opt/wwwroot/$hookdir > /dev/null 2>&1 852 | fi 853 | 854 | mv /opt/wwwroot/$dirname /opt/wwwroot/$webdir 855 | echo "解压完成..." 856 | fi 857 | fi 858 | 859 | # 检测是否解压成功 860 | if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then 861 | echo "安装未成功" 862 | exit 863 | fi 864 | } 865 | 866 | # 安装脚本的基本结构 867 | # install_webapp() 868 | # { 869 | # # 默认配置 870 | # filelink="" # 下载链接 871 | # name="" # 程序名 872 | # dirname="" # 解压后的目录名 873 | # port= # 端口 874 | # hookdir=$dirname # 某些程序解压后不是单个目录,用这个hook解决 875 | # istar=true # 是否为tar压缩包, 不是则删除此行 876 | 877 | # # 运行安装程序 878 | # web_installer 879 | # echo "正在配置$name..." 880 | # # chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用 881 | 882 | # # 添加到虚拟主机 883 | # add_vhost $port $webdir 884 | # sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加公共php-fpm支持 885 | # onmp restart >/dev/null 2>&1 886 | # echo "$name安装完成" 887 | # echo "浏览器地址栏输入:$localhost:$port 即可访问" 888 | # } 889 | 890 | ############# 安装phpMyAdmin ############ 891 | install_phpmyadmin() 892 | { 893 | # 默认配置 894 | filelink=$url_phpMyAdmin 895 | name="phpMyAdmin" 896 | dirname="phpMyAdmin-*-languages" 897 | port=82 898 | 899 | # 运行安装程序 900 | web_installer 901 | echo "正在配置$name..." 902 | cp /opt/wwwroot/$webdir/config.sample.inc.php /opt/wwwroot/$webdir/config.inc.php 903 | chmod 644 /opt/wwwroot/$webdir/config.inc.php 904 | mkdir -p /opt/wwwroot/$webdir/tmp 905 | chmod 777 /opt/wwwroot/$webdir/tmp 906 | sed -e "s/.*blowfish_secret.*/\$cfg['blowfish_secret'] = 'onmponmponmponmponmponmponmponmp';/g" -i /opt/wwwroot/$webdir/config.inc.php 907 | 908 | # 添加到虚拟主机 909 | add_vhost $port $webdir 910 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 911 | onmp restart >/dev/null 2>&1 912 | echo "$name安装完成" 913 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 914 | echo "phpMyaAdmin的用户、密码就是数据库用户、密码" 915 | } 916 | 917 | ############# 安装WordPress ############ 918 | install_wordpress() 919 | { 920 | # 默认配置 921 | filelink=$url_WordPress 922 | name="WordPress" 923 | dirname="wordpress" 924 | port=83 925 | 926 | # 运行安装程序 927 | web_installer 928 | echo "正在配置$name..." 929 | chmod -R 777 /opt/wwwroot/$webdir 930 | 931 | # 添加到虚拟主机 932 | add_vhost $port $webdir 933 | # WordPress的配置文件中有php-fpm了, 不需要外部引入 934 | sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/wordpress.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 935 | onmp restart >/dev/null 2>&1 936 | echo "$name安装完成" 937 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 938 | echo "可以用phpMyaAdmin建立数据库,然后在这个站点上一步步配置网站信息" 939 | } 940 | 941 | ############### 安装h5ai ############## 942 | install_h5ai() 943 | { 944 | # 默认配置 945 | filelink=$url_h5ai 946 | name="h5ai" 947 | dirname="_h5ai" 948 | port=85 949 | hookdir=$dirname 950 | 951 | # 运行安装程序 952 | web_installer 953 | echo "正在配置$name..." 954 | cp /opt/wwwroot/$webdir/_h5ai/README.md /opt/wwwroot/$webdir/ 955 | chmod -R 777 /opt/wwwroot/$webdir/ 956 | 957 | # 添加到虚拟主机 958 | add_vhost $port $webdir 959 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 960 | sed -e "s/.*\index index.html.*/ index index.html index.php \/_h5ai\/public\/index.php;/g" -i /opt/etc/nginx/vhost/$webdir.conf 961 | onmp restart >/dev/null 2>&1 962 | echo "$name安装完成" 963 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 964 | echo "配置文件在/opt/wwwroot/$webdir/_h5ai/private/conf/options.json" 965 | echo "你可以通过修改它来获取更多功能" 966 | } 967 | 968 | ################ 安装Lychee ############## 969 | install_lychee() 970 | { 971 | # 默认配置 972 | filelink=$url_Lychee 973 | name="Lychee" 974 | dirname="Lychee-master" 975 | port=86 976 | 977 | # 运行安装程序 978 | web_installer 979 | echo "正在配置$name..." 980 | chmod -R 777 /opt/wwwroot/$webdir/uploads/ /opt/wwwroot/$webdir/data/ 981 | 982 | # 添加到虚拟主机 983 | add_vhost $port $webdir 984 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 985 | onmp restart >/dev/null 2>&1 986 | echo "$name安装完成" 987 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 988 | echo "首次打开会要配置数据库信息" 989 | echo "地址:127.0.0.1 用户、密码你自己设置的或者默认是root 123456" 990 | echo "下面的可以不配置,然后下一步创建个用户就可以用了" 991 | } 992 | 993 | ################# 安装Owncloud ############### 994 | install_owncloud() 995 | { 996 | # 默认配置 997 | filelink=$url_Owncloud 998 | name="Owncloud" 999 | dirname="owncloud" 1000 | port=98 1001 | 1002 | # 运行安装程序 1003 | web_installer 1004 | echo "正在配置$name..." 1005 | chmod -R 777 /opt/wwwroot/$webdir 1006 | 1007 | # 添加到虚拟主机 1008 | add_vhost $port $webdir 1009 | # Owncloud的配置文件中有php-fpm了, 不需要外部引入 1010 | sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/owncloud.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 1011 | 1012 | onmp restart >/dev/null 2>&1 1013 | echo "$name安装完成" 1014 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1015 | echo "首次打开会要配置用户和数据库信息" 1016 | echo "地址默认 localhost 用户、密码你自己设置的或者默认是root 123456" 1017 | echo "安装好之后可以点击左上角三条杠进入market安装丰富的插件,比如在线预览图片、视频等" 1018 | echo "需要先在 web 界面配置完成后,才能使用 onmp open 的第 10 个选项开启 Redis" 1019 | } 1020 | 1021 | ################# 安装Nextcloud ############## 1022 | install_nextcloud() 1023 | { 1024 | # 默认配置 1025 | filelink=$url_Nextcloud 1026 | name="Nextcloud" 1027 | dirname="nextcloud" 1028 | port=99 1029 | 1030 | # 运行安装程序 1031 | web_installer 1032 | echo "正在配置$name..." 1033 | chmod -R 777 /opt/wwwroot/$webdir 1034 | 1035 | # 添加到虚拟主机 1036 | add_vhost $port $webdir 1037 | # nextcloud的配置文件中有php-fpm了, 不需要外部引入 1038 | sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/nextcloud.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 1039 | 1040 | onmp restart >/dev/null 2>&1 1041 | echo "$name安装完成" 1042 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1043 | echo "首次打开会要配置用户和数据库信息" 1044 | echo "地址默认 localhost 用户、密码你自己设置的或者默认是root 123456" 1045 | echo "需要先在 web 界面配置完成后,才能使用 onmp open 的第 10 个选项开启 Redis" 1046 | } 1047 | 1048 | ############## 安装kodexplorer芒果云 ########## 1049 | install_kodexplorer() 1050 | { 1051 | # 默认配置 1052 | filelink=$url_Kodexplorer 1053 | name="Kodexplorer" 1054 | dirname="kodexplorer" 1055 | port=88 1056 | hookdir=$dirname 1057 | 1058 | # 运行安装程序 1059 | web_installer 1060 | echo "正在配置$name..." 1061 | chmod -R 777 /opt/wwwroot/$webdir 1062 | 1063 | # 添加到虚拟主机 1064 | add_vhost $port $webdir 1065 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 1066 | onmp restart >/dev/null 2>&1 1067 | echo "$name安装完成" 1068 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1069 | } 1070 | 1071 | ############# 安装Typecho ############ 1072 | install_typecho() 1073 | { 1074 | # 默认配置 1075 | filelink=$url_Typecho 1076 | name="Typecho" 1077 | dirname="build" 1078 | port=90 1079 | istar=true 1080 | 1081 | # 运行安装程序 1082 | web_installer 1083 | echo "正在配置$name..." 1084 | chmod -R 777 /opt/wwwroot/$webdir 1085 | 1086 | # 添加到虚拟主机 1087 | add_vhost $port $webdir 1088 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持 1089 | sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/typecho.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf 1090 | onmp restart >/dev/null 2>&1 1091 | echo "$name安装完成" 1092 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1093 | echo "可以用phpMyaAdmin建立数据库,然后在这个站点上一步步配置网站信息" 1094 | } 1095 | 1096 | ######## 安装Z-Blog ######## 1097 | install_zblog() 1098 | { 1099 | # 默认配置 1100 | filelink=$url_Zblog 1101 | name="Zblog" 1102 | dirname="Z-BlogPHP_1_5_1_1740_Zero" 1103 | hookdir=$dirname 1104 | port=91 1105 | 1106 | # 运行安装程序 1107 | web_installer 1108 | echo "正在配置$name..." 1109 | chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用 1110 | 1111 | # 添加到虚拟主机 1112 | add_vhost $port $webdir 1113 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持 1114 | onmp restart >/dev/null 2>&1 1115 | echo "$name安装完成" 1116 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1117 | } 1118 | 1119 | ######### 安装DzzOffice ######### 1120 | install_dzzoffice() 1121 | { 1122 | # 默认配置 1123 | filelink=$url_DzzOffice 1124 | name="DzzOffice" 1125 | dirname="dzzoffice-master" 1126 | port=92 1127 | 1128 | # 运行安装程序 1129 | web_installer 1130 | echo "正在配置$name..." 1131 | chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用 1132 | 1133 | # 添加到虚拟主机 1134 | add_vhost $port $webdir 1135 | sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持 1136 | onmp restart >/dev/null 2>&1 1137 | echo "$name安装完成" 1138 | echo "浏览器地址栏输入:$localhost:$port 即可访问" 1139 | echo "DzzOffice应用市场中,某些应用无法自动安装的,请自行参看官网给的手动安装教程" 1140 | } 1141 | 1142 | ############# 添加到虚拟主机 ############# 1143 | add_vhost() 1144 | { 1145 | # 写入文件 1146 | cat > "/opt/etc/nginx/vhost/$2.conf" <<-\EOF 1147 | server { 1148 | listen 81; 1149 | server_name localhost; 1150 | root /opt/wwwroot/www/; 1151 | index index.html index.htm index.php tz.php; 1152 | #php-fpm 1153 | #otherconf 1154 | } 1155 | EOF 1156 | 1157 | sed -e "s/.*listen.*/ listen $1\;/g" -i /opt/etc/nginx/vhost/$2.conf 1158 | sed -e "s/.*\/opt\/wwwroot\/www\/.*/ root \/opt\/wwwroot\/$2\/\;/g" -i /opt/etc/nginx/vhost/$2.conf 1159 | } 1160 | 1161 | ############## 网站管理 ############## 1162 | web_manager() 1163 | { 1164 | onmp stop > /dev/null 2>&1 1165 | i=1 1166 | for conf in /opt/etc/nginx/vhost/*; 1167 | do 1168 | path=$(cat $conf | awk 'NR==4' | awk '{print $2}' | sed 's/;//') 1169 | echo "$i. $path" 1170 | eval web_conf$i="$conf" 1171 | eval web_file$i="$path" 1172 | i=$((i + 1)) 1173 | done 1174 | read -p "请选择要删除的网站:" webnum 1175 | eval conf=\$web_conf"$webnum" 1176 | eval file=\$web_file"$webnum" 1177 | rm -rf "$conf" 1178 | rm -rf "$file" 1179 | onmp start > /dev/null 2>&1 1180 | echo "网站已删除" 1181 | } 1182 | 1183 | ############## Swap交换空间 ############## 1184 | set_swap() 1185 | { 1186 | clear 1187 | # 1188 | cat << SWAP 1189 | ---------------------------------------- 1190 | |**************** SWAP ****************| 1191 | ---------------------------------------- 1192 | (1) 开启Swap 1193 | (2) 关闭Swap 1194 | (3) 删除Swap文件 1195 | 1196 | SWAP 1197 | 1198 | read -p "输入你的选择[1-3]: " input 1199 | case $input in 1200 | 1) on_swap;; 1201 | 2) swapoff /opt/.swap;; 1202 | 3) del_swap;; 1203 | *) echo "你输入的不是 1 ~ 3 之间的!" 1204 | break;; 1205 | esac 1206 | } 1207 | 1208 | #### 开启Swap #### 1209 | on_swap() 1210 | { 1211 | status=$(cat /proc/swaps | awk 'NR==2') 1212 | if [[ -n "$status" ]]; then 1213 | echo "Swap已启用" 1214 | else 1215 | if [[ ! -e "/opt/.swap" ]]; then 1216 | echo "正在生成swap文件,请耐心等待..." 1217 | dd if=/dev/zero of=/opt/.swap bs=1024 count=524288 1218 | # 设置交换文件 1219 | mkswap /opt/.swap 1220 | chmod 0600 /opt/.swap 1221 | fi 1222 | # 启用交换分区 1223 | swapon /opt/.swap 1224 | echo "现在你可以使用free命令查看swap是否启用" 1225 | fi 1226 | } 1227 | 1228 | #### 删除Swap #### 1229 | del_swap() 1230 | { 1231 | # 弃用交换分区 1232 | swapoff /opt/.swap 1233 | rm -rf /opt/.swap 1234 | } 1235 | 1236 | ############## 开启 Redis ############### 1237 | redis() 1238 | { 1239 | i=1 1240 | for conf in /opt/etc/nginx/vhost/*; 1241 | do 1242 | path=$(cat $conf | awk 'NR==4' | awk '{print $2}' | sed 's/;//') 1243 | echo "$i. $path" 1244 | eval web_file$i="$path" 1245 | i=$((i + 1)) 1246 | done 1247 | read -p "请选择 NextCloud 或 OwnCloud 的安装目录:" webnum 1248 | eval file=\$web_file"$webnum" 1249 | 1250 | # 1251 | echo "NC 和 OC 需要先在 web 界面配置完成后,才能使用这个选项开启 Redis" 1252 | read -p "确认安装 [Y/n]: " input 1253 | case $input in 1254 | Y|y ) 1255 | # 1256 | sed -e "/);/d" -i $file/config/config.php 1257 | cat >> "$file/config/config.php" <<-\EOF 1258 | 'memcache.locking' => '\OC\Memcache\Redis', 1259 | 'memcache.local' => '\OC\Memcache\Redis', 1260 | 'redis' => array( 1261 | 'host' => '/opt/var/run/redis.sock', 1262 | 'port' => 0, 1263 | ), 1264 | ); 1265 | EOF 1266 | ;; 1267 | * ) exit;; 1268 | esac 1269 | 1270 | onmp restart >/dev/null 2>&1 1271 | echo "没报错的话就是安装上了,记住以后重启之后要运行 Redis" 1272 | echo "Redis 管理命令 onmp redis start|restart|stop" 1273 | echo "我先帮你运行了" 1274 | onmp redis start 1275 | 1276 | } 1277 | 1278 | ############## 数据库自动备份 ############## 1279 | sql_backup() 1280 | { 1281 | # 输出选项 1282 | cat << EOF 1283 | 数据库自动备份 1284 | (1) 开启 1285 | (2) 关闭 1286 | (0) 退出 1287 | EOF 1288 | 1289 | read -p "输入你的选择: " input 1290 | case $input in 1291 | 1) sql_backup_on;; 1292 | 2) sql_backup_off;; 1293 | 0) exit;; 1294 | *) echo "没有这个选项!" 1295 | exit;; 1296 | esac 1297 | } 1298 | 1299 | ### 数据库自动备份开启 ### 1300 | sql_backup_on() 1301 | { 1302 | if [[ ! -d "/opt/backup" ]]; then 1303 | mkdir /opt/backup 1304 | fi 1305 | read -p "输入你的数据库用户名: " sqlusr 1306 | read -p "输入你的数据库用户密码: " sqlpasswd 1307 | 1308 | # 删除 1309 | rm -rf /opt/bin/sqlbackup 1310 | 1311 | # 写入文件 1312 | cat > "/opt/bin/sqlbackup" <<-\EOF 1313 | #!/bin/sh 1314 | /opt/bin/mysqldump -uusername -puserpasswd -A > /opt/backup/sql_backup_$(date +%Y%m%d%H).sql 1315 | EOF 1316 | 1317 | sed -e 's/username/'"$sqlusr"'/g' -i /opt/bin/sqlbackup 1318 | sed -e 's/userpasswd/'"$sqlpasswd"'/g' -i /opt/bin/sqlbackup 1319 | 1320 | chmod +x /opt/bin/sqlbackup 1321 | 1322 | echo "命令创建成功,你可以直接使用sqlbackup命令直接备份,也可以在路由器管理页添加定时任务 1 */3 * * * /opt/bin/sqlbackup,意思是每3 小时自动备份一次" 1323 | 1324 | } 1325 | 1326 | ### 数据库自动备份关闭 ### 1327 | sql_backup_off() 1328 | { 1329 | rm -rf /opt/bin/sqlbackup 1330 | echo "如果你使用了自动定时备份,请删除配置" 1331 | } 1332 | 1333 | ########################################### 1334 | ################# 脚本开始 ################# 1335 | ########################################### 1336 | start() 1337 | { 1338 | # 输出选项 1339 | cat << EOF 1340 | ___ ___ ___ ___ 1341 | / /\ /__/\ /__/\ / /\ 1342 | / /::\ \ \:\ | |::\ / /::\ 1343 | / /:/\:\ \ \:\ | |:|:\ / /:/\:\ 1344 | / /:/ \:\ _____\__\:\ __|__|:|\:\ / /:/~/:/ 1345 | /__/:/ \__\:\ /__/::::::::\ /__/::::| \:\ /__/:/ /:/ 1346 | \ \:\ / /:/ \ \:\~~\~~\/ \ \:\~~\__\/ \ \:\/:/ 1347 | \ \:\ /:/ \ \:\ ~~~ \ \:\ \ \::/ 1348 | \ \:\/:/ \ \:\ \ \:\ \ \:\ 1349 | \ \::/ \ \:\ \ \:\ \ \:\ 1350 | \__\/ \__\/ \__\/ \__\/ 1351 | 1352 | ======================================================= 1353 | 1354 | (1) 安装ONMP 1355 | (2) 卸载ONMP 1356 | (3) 设置数据库密码 1357 | (4) 重置数据库 1358 | (5) 数据库自动备份 1359 | (6) 全部重置(会删除网站目录,请注意备份) 1360 | (7) 安装网站程序 1361 | (8) 网站管理 1362 | (9) 开启Swap 1363 | (10) 开启 Redis 1364 | (0) 退出 1365 | 1366 | EOF 1367 | 1368 | read -p "输入你的选择[0-9]: " input 1369 | case $input in 1370 | 1) install_onmp_ipk;; 1371 | 2) remove_onmp;; 1372 | 3) set_passwd;; 1373 | 4) init_sql;; 1374 | 5) sql_backup;; 1375 | 6) init_onmp;; 1376 | 7) install_website;; 1377 | 8) web_manager;; 1378 | 9) set_swap;; 1379 | 10) redis;; 1380 | 0) exit;; 1381 | *) echo "你输入的不是 0 ~ 8 之间的!" 1382 | exit;; 1383 | esac 1384 | } 1385 | 1386 | re_sh="renewsh" 1387 | 1388 | if [ "$1" == "$re_sh" ]; then 1389 | set_onmp_sh 1390 | exit; 1391 | fi 1392 | 1393 | start 1394 | --------------------------------------------------------------------------------