安装nginx+php+MariaDB
以前用k3安装了onmp,中间踩了不少坑。以前发到贴吧的,现在发过来记录一下,顺便给大家参考一下。
斐讯k3性能比较强,拿来建小型网站还是可以的。但是内置储存太小,需要额外的u盘或是移动硬盘来挂载。我是官改1.6,但是理论上官root也行的。
先说说流程和所遇到的坑吧:
把移动硬盘或是u盘用diskgenius格式化一个ext4的分区(也可以格式化一个ext4分区一个ntfs分区只挂载ext4的分区)。我是把h1硬盘格式化了100g的ext4挂载到/opt下面,一个800g的ext4作为smb和路由器共享盘以及迅雷远程下载,Syncthing同步软件同步文件夹。一个30+g的ntfs分区作为windows下临时拷贝需要的分区。挂载命令:mount -t ext4 /dev/sda1 /opt & sda1换成你需要挂载的分区,使用df命令可以查看挂载分区情况。
挂载之后路由器/opt目录就为挂载盘下面的内容了,但是软件中心的文件就没了,需要重新安装。这里有个深渊巨坑。软件中心安装会重新清除/opt下面的所有文件!也就是你挂载的盘文件会被RM -f ,第一次我的数据盘里文件就被清了…
现在开始安装onmp了,但是网上找了许多版本,包括官网版本。都不能顺利安装!倒腾了无数遍后,发现opkg里的mariadb-client-extra已经被删除了,onmp安装命令里有他就会报错。实际不安装他也能顺利使用mariadb的。所以删除这个包。我会把修改好的onmp安装文件放在最后,安装方法用ssh(shell)到文件目录下 ./onmp.sh 开始安装。你也可以把它复制出来粘贴的shell里敲回车运行~
输入 1 回车就可以开始安装环境了:安装界面借用triton的帖子里的图片:
安装完毕后的界面:可能第一次php和msql数据库启动不了…
接下来就是配置PHP了,新建一个www用户的命令: adduser www ,修改/opt/etc/php7-fpm.d/http://www.conf配置文件
把 /opt/etc/php7-fpm.d/http://www.conf 大约在第22行,user = nobody改成user = www,现在运行命令onmp start的话应该php可以启动了。
最麻烦的是数据库,mariadb(mysql)的配置及其**,我搞了好多天都没搞定。开始是安装不成功,后来安装成功了启动不了,最后是启动了但是没有远程访问的用户和权限… 总之步步是坑…
mariadb(mysql)的配置文件在etc/mysql/my.cnf中,现在我是ubuntu系统,打不开它。容我保存一下博客切换到win10打开它之后在继续说说my.cnf的配置。
如图:
运行msql -r root -p 输入密码后看报什么错,sock命令或是pid命令就去相应路径下建。
有一步不太安全但是能够解决部分问题的方法:吧/opt目录下权限全设为777。命令是到其目录下输入 chmod -R 777 *
onmp restart 反复运行2次,都能成功启动就说明都安装好了。
试试进入数据库 mysql -r root -p ,初始应该没密码按回车就进去了。
现在要建一个远程登录的账户了,因为便于管理。如果只是建网站那现在就不用向下看了…
命令:
GRANT ALL PRIVILEGES ON *.* TO 'an'@'%'IDENTIFIED BY '654321' WITH GRANT OPTION;
这命令意思是建一个用户叫 an 密码为 654321 可以任意位置访问%的账户
然后pc端可以用工具软件连接数据库了,我用的navicat,连接如下:
好了,剩下的就是拷贝php项目到wwwroot下面。使用浏览器安装或是浏览了。
onmp.sh 文件代码块
直接下载:
https://www.anlinxi.top:5001/sharing/zzyIrVKgZ
#!/bin/sh
# @Author: xzhih
# @Date: 2017-07-29 06:10:54
# @Last Modified by: xzhih
# @Last Modified time: 2018-06-07 08:33:18
# 软件包列表
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-client mariadb-client-extra"
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-mcrypt php7-mod-opcache php7-mod-openssl php7-mod-pcntl php7-mod-phar 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 snmpd snmp-mibs snmp-utils zoneinfo-core zoneinfo-asia"
# 后续可能增加的包(缺少源支持)
# php7-mod-imagick imagemagick imagemagick-jpeg imagemagick-png imagemagick-tiff imagemagick-tools
# Web程序
# (1) phpMyAdmin(数据库管理工具)
url_phpMyAdmin="https://files.phpmyadmin.net/phpMyAdmin/4.8.1/phpMyAdmin-4.8.1-all-languages.zip"
# (2) WordPress(使用最广泛的CMS)
url_WordPress="https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip"
# (3) Owncloud(经典的私有云)
url_Owncloud="https://download.owncloud.org/community/owncloud-10.0.8.zip"
# (4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘)
url_Nextcloud="https://download.nextcloud.com/server/releases/nextcloud-13.0.2.zip"
# (5) h5ai(优秀的文件目录)
url_h5ai="https://release.larsjung.de/h5ai/h5ai-0.29.0.zip"
# (6) Lychee(一个很好看,易于使用的Web相册)
url_Lychee="https://github.com/electerious/Lychee/archive/master.zip"
# (7) Kodexplorer(可道云aka芒果云在线文档管理器)
url_Kodexplorer="http://static.kodcloud.com/update/download/kodexplorer4.25.zip"
# (8) Typecho (流畅的轻量级开源博客程序)
url_Typecho="http://typecho.org/downloads/1.1-17.10.30-release.tar.gz"
# (9) Z-Blog (体积小,速度快的PHP博客程序)
url_Zblog="https://update.zblogcn.com/zip/Z-BlogPHP_1_5_2_1935_Zero.zip"
# (10) DzzOffice (开源办公平台)
url_DzzOffice="https://codeload.github.com/zyx0814/dzzoffice/zip/master"
# 通用环境变量获取
get_env()
{
# 获取用户名
if [[ $USER ]]; then
username=$USER
elif [[ -n $(whoami 2>/dev/null) ]]; then
username=$(whoami 2>/dev/null)
else
username=$(cat /etc/passwd | sed "s/:/ /g" | awk 'NR==1' | awk '{printf $1}')
fi
# 获取路由器IP
localhost=$(ifconfig | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}' | awk 'NR==1')
if [[ ! -n "$localhost" ]]; then
localhost="你的路由器IP"
fi
}
##### 软件包状态检测 #####
install_check()
{
notinstall=""
for data in $pkglist ; do
if [[ `opkg list-installed | grep $data | wc -l` -ne 0 ]];then
echo "$data 已安装"
else
notinstall="$notinstall $data"
echo "$data 正在安装..."
opkg install $data
fi
done
}
# 安装PHP mod
install_php_mod()
{
notinstall=""
for data in $phpmod ; do
if [[ `opkg list-installed | grep $data | wc -l` -ne 0 ]];then
echo "$data 已安装"
else
notinstall="$notinstall $data"
echo "$data 正在安装..."
opkg install $data
fi
done
}
############## 安装软件包 #############
install_onmp_ipk()
{
opkg update
# 软件包状态检测
install_check
for i in 'seq 3'; do
if [[ ${#notinstall} -gt 0 ]]; then
install_check
fi
done
if [[ ${#notinstall} -gt 0 ]]; then
echo "可能会因为某些问题某些核心软件包无法安装,请保持/opt/目录足够干净,如果是网络问题,请挂全局VPN再次运行命令"
else
echo "----------------------------------------"
echo "|********** ONMP软件包已完整安装 *********|"
echo "----------------------------------------"
echo "是否安装自动PHP的模块,你也可以手动安装"
#
read -p "输入你的选择[y/n]: " input
case $input in
y) install_php_mod;;
n) echo "如果程序提示需要安装插件,你可以自行使用opkg命令安装";;
*) echo "你输入的不是 y/n"
exit;;
esac
echo "现在开始初始化ONMP"
init_onmp
echo ""
fi
}
################ 初始化onmp ###############
init_onmp()
{
# 初始化网站目录
rm -rf /opt/wwwroot
mkdir -p /opt/wwwroot/default
chmod -R 777 /opt/tmp
# 初始化Nginx
init_nginx > /dev/null 2>&1
# 初始化数据库
init_sql > /dev/null 2>&1
# 初始化PHP
init_php > /dev/null 2>&1
# 添加探针
cp /opt/onmp/tz.php /opt/wwwroot/default -R
add_vhost 81 default
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/default.conf
# 生成ONMP命令
set_onmp_sh
onmp start
}
############### 初始化Nginx ###############
init_nginx()
{
get_env
/opt/etc/init.d/S80nginx stop > /dev/null 2>&1
rm -rf /opt/etc/nginx/vhost
rm -rf /opt/etc/nginx/conf
mkdir -p /opt/etc/nginx/vhost
mkdir -p /opt/etc/nginx/conf
# 初始化nginx配置文件
cat > "/opt/etc/nginx/nginx.conf" <<-\EOF
user theOne root;
pid /opt/var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
use epoll;
multi_accept on;
worker_connections 51200;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
default_type application/octet-stream;
server_tokens off;
keepalive_timeout 60;
client_max_body_size 2000m;
client_body_temp_path /opt/tmp/;
client_header_buffer_size 8k;
large_client_header_buffers 4 32k;
server_names_hash_bucket_size 128;
gzip on;
gzip_vary on;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
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;
gzip_disable "MSIE [1-6]\.";
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_min_length 1k;
gzip_http_version 1.1;
fastcgi_buffers 4 64k;
fastcgi_buffer_size 64k;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_connect_timeout 300;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
include mime.types;
include /opt/etc/nginx/vhost/*.conf;
}
EOF
sed -e "s/theOne/$username/g" -i /opt/etc/nginx/nginx.conf
# 特定程序的nginx配置
nginx_special_conf
}
##### 特定程序的nginx配置 #####
nginx_special_conf()
{
# php-fpm
cat > "/opt/etc/nginx/conf/php-fpm.conf" <<-\OOO
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/opt/var/run/php7-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
OOO
# nextcloud
cat > "/opt/etc/nginx/conf/nextcloud.conf" <<-\OOO
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location / {
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_pass unix:/opt/var/run/php7-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
location ~ \.(?:css|js|woff|svg|gif)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=15778463";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
OOO
# owncloud
cat > "/opt/etc/nginx/conf/owncloud.conf" <<-\OOO
gzip off;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location / {
rewrite ^/remote/(.*) /remote.php last;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ =404;
}
location ~* \.(?:css|js)$ {
add_header Cache-Control "public, max-age=7200";
access_log off;
}
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
access_log off;
}
OOO
# wordpress
cat > "/opt/etc/nginx/conf/wordpress.conf" <<-\OOO
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
OOO
# typecho
cat > "/opt/etc/nginx/conf/typecho.conf" <<-\OOO
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
OOO
}
############## 重置、初始化MySQL #############
init_sql()
{
get_env
/opt/etc/init.d/S70mysqld stop > /dev/null 2>&1
sleep 10
rm -rf /opt/mysql
rm -rf /opt/var/mysql
mkdir -p /opt/etc/mysql/
# MySQL设置
cat > "/opt/etc/mysql/my.cnf" <<-\MMM
[client-server]
port = 3306
socket = /opt/var/run/mysqld.sock
[mysqld]
user = theOne
socket = /opt/var/run/mysqld.sock
pid-file = /opt/var/run/mysqld.pid
basedir = /opt
lc_messages_dir = /opt/share/mysql
lc_messages = en_US
datadir = /opt/var/mysql/
tmpdir = /opt/tmp/
skip-external-locking
bind-address = 127.0.0.0
key_buffer_size = 24M
max_allowed_packet = 24M
thread_stack = 192K
thread_cache_size = 8
[mysqldump]
quick
quote-names
max_allowed_packet = 24M
[mysql]
#no-auto-rehash
[isamchk]
key_buffer_size = 24M
[mysqlhotcopy]
interactive-timeout
MMM
sed -e "s/theOne/$username/g" -i /opt/etc/mysql/my.cnf
chmod 644 /opt/etc/mysql/my.cnf
mkdir -p /opt/var/mysql
# 数据库安装
/opt/bin/mysql_install_db --user=$username --basedir=/opt --datadir=/opt/var/mysql/
echo -e "\n正在初始化数据库,请稍等1分钟"
sleep 20
# 初次启动MySQL
/opt/etc/init.d/S70mysqld start
sleep 60
# 设置数据库密码
mysqladmin -u root password 123456
echo -e "\033[41;37m 数据库用户:root, 初始密码:123456 \033[0m"
onmp restart
}
############## PHP初始化 #############
init_php()
{
# PHP7设置
/opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1
mkdir -p /opt/usr/php/tmp/
chmod -R 777 /opt/usr/php/tmp/
sed -e "/^doc_root/d" -i /opt/etc/php.ini
sed -e "s/.*memory_limit = .*/memory_limit = 128M/g" -i /opt/etc/php.ini
sed -e "s/.*output_buffering = .*/output_buffering = 4096/g" -i /opt/etc/php.ini
sed -e "s/.*post_max_size = .*/post_max_size = 8000M/g" -i /opt/etc/php.ini
sed -e "s/.*max_execution_time = .*/max_execution_time = 2000 /g" -i /opt/etc/php.ini
sed -e "s/.*upload_max_filesize.*/upload_max_filesize = 8000M/g" -i /opt/etc/php.ini
sed -e "s/.*listen.mode.*/listen.mode = 0666/g" -i /opt/etc/php7-fpm.d/www.conf
# PHP配置文件
cat >> "/opt/etc/php.ini" <<-\PHPINI
session.save_path = "/opt/usr/php/tmp/"
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=60
opcache.fast_shutdown=1
PHPINI
cat >> "/opt/etc/php7-fpm.d/www.conf" <<-\PHPFPM
env[HOSTNAME] = $HOSTNAME
env[PATH] = /opt/bin:/usr/local/bin:/usr/bin:/bin
env[TMP] = /opt/tmp
env[TMPDIR] = /opt/tmp
env[TEMP] = /opt/tmp
PHPFPM
}
############# 用户设置数据库密码 ############
set_passwd()
{
/opt/etc/init.d/S70mysqld start
sleep 3
echo -e "\033[41;37m 初始密码:123456 \033[0m"
mysqladmin -u root -p password
onmp restart
}
################ 卸载onmp ###############
remove_onmp()
{
/opt/etc/init.d/S70mysqld stop > /dev/null 2>&1
/opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1
/opt/etc/init.d/S80nginx stop > /dev/null 2>&1
killall -9 nginx mysqld php-fpm > /dev/null 2>&1
for pkg in $pkglist; do
opkg remove $pkg --force-depends
done
for mod in $phpmod; do
opkg remove $mod --force-depends
done
rm -rf /opt/wwwroot
rm -rf /opt/etc/nginx/vhost
rm -rf /opt/bin/onmp
rm -rf /opt/mysql
rm -rf /opt/var/mysql
rm -rf /opt/etc/nginx/
rm -rf /opt/etc/php*
rm -rf /opt/etc/mysql
}
################ 生成ONMP命令 ###############
set_onmp_sh()
{
# 删除
rm -rf /opt/bin/onmp
# 写入文件
cat > "/opt/bin/onmp" <<-\EOF
#!/bin/sh
# 获取路由器IP
localhost=$(ifconfig | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}' | awk 'NR==1')
if [[ ! -n "$localhost" ]]; then
localhost="你的路由器IP"
fi
vhost_list()
{
echo "网站列表:"
logger -t "【ONMP】" "网站列表:"
for conf in /opt/etc/nginx/vhost/*;
do
path=$(cat $conf | awk 'NR==4' | awk '{print $2}' | sed 's/;//')
port=$(cat $conf | awk 'NR==2' | awk '{print $2}' | sed 's/;//')
echo "$path $localhost:$port"
logger -t "【ONMP】" "$path $localhost:$port"
done
echo "浏览器地址栏输入:$localhost:81 查看php探针"
}
onmp_restart()
{
/opt/etc/init.d/S70mysqld stop > /dev/null 2>&1
/opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1
/opt/etc/init.d/S80nginx stop > /dev/null 2>&1
killall -9 nginx mysqld php-fpm > /dev/null 2>&1
sleep 3
/opt/etc/init.d/S70mysqld start > /dev/null 2>&1
/opt/etc/init.d/S79php7-fpm start > /dev/null 2>&1
/opt/etc/init.d/S80nginx start > /dev/null 2>&1
sleep 3
num=0
for PROC in 'nginx' 'php-fpm' 'mysqld'; do
if [ -n "`pidof $PROC`" ]; then
echo $PROC "启动成功";
else
echo $PROC "启动失败";
num=`expr $num + 1`
fi
done
if [[ $num -gt 0 ]]; then
echo "onmp启动失败"
logger -t "【ONMP】" "启动失败"
else
echo "onmp已启动"
logger -t "【ONMP】" "已启动"
vhost_list
fi
}
case $1 in
open )
/opt/onmp/onmp.sh
;;
start )
echo "onmp正在启动"
logger -t "【ONMP】" "正在启动"
onmp_restart
;;
stop )
echo "onmp正在停止"
logger -t "【ONMP】" "正在停止"
/opt/etc/init.d/S70mysqld stop > /dev/null 2>&1
/opt/etc/init.d/S79php7-fpm stop > /dev/null 2>&1
/opt/etc/init.d/S80nginx stop > /dev/null 2>&1
echo "onmp已停止"
logger -t "【ONMP】" "已停止"
;;
restart )
echo "onmp正在重启"
logger -t "【ONMP】" "正在重启"
onmp_restart
;;
list )
vhost_list
;;
* )
echo "----------------------------------------"
echo "|************* onmp 命令 *************|"
echo "|********** 管理 onmp open **********|"
echo "|********* 启动 停止 重启ONMP *********|"
echo "|***** onmp start|stop|restart *****|"
echo "|******* 查看网站列表 onmp list *******|"
echo "----------------------------------------"
;;
esac
EOF
chmod +x /opt/bin/onmp
echo "----------------------------------------"
echo "|********** onmp命令已经生成 **********|"
echo "|********** 管理 onmp open **********|"
echo "|********* 启动 停止 重启ONMP *********|"
echo "|***** onmp start|stop|restart *****|"
echo "|******* 查看网站列表 onmp list *******|"
echo "----------------------------------------"
}
############### 网站程序安装 ##############
install_website()
{
# 通用环境变量获取
get_env
clear
chmod -R 777 /opt/tmp
# 选择程序
cat << AAA
----------------------------------------
|************* 选择WEB程序 *************|
----------------------------------------
(1) phpMyAdmin(数据库管理工具)
(2) WordPress(使用最广泛的CMS)
(3) Owncloud(经典的私有云)
(4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘)
(5) h5ai(优秀的文件目录)
(6) Lychee(一个很好看,易于使用的Web相册)
(7) Kodexplorer(可道云aka芒果云在线文档管理器)
(8) Typecho (流畅的轻量级开源博客程序)
(9) Z-Blog (体积小,速度快的PHP博客程序)
(10) DzzOffice (开源办公平台)
(0) 退出
AAA
read -p "输入你的选择[0-11]: " input
case $input in
1) install_phpmyadmin;;
2) install_wordpress;;
3) install_owncloud;;
4) install_nextcloud;;
5) install_h5ai;;
6) install_lychee;;
7) install_kodexplorer;;
8) install_typecho;;
9) install_zblog;;
10) install_dzzoffice;;
0) exit;;
*) echo "你输入的不是 0 ~ 10 之间的!"
break;;
esac
}
############### WEB程序安装器 ##############
web_installer()
{
clear
echo "----------------------------------------"
echo "|*********** WEB程序安装器 ***********|"
echo "----------------------------------------"
echo "安装 $name:"
# 获取用户自定义设置
read -p "输入服务端口(请避开已使用的端口)[留空默认$port]: " nport
if [[ $nport ]]; then
port=$nport
fi
read -p "输入目录名(留空默认:$name): " webdir
if [[ ! -n "$webdir" ]]; then
webdir=$name
fi
# 检查目录是否存在
if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then
echo "开始安装..."
else
read -p "网站目录 /opt/wwwroot/$webdir 已存在,是否删除: [y/n(小写)]" ans
case $ans in
y ) rm -rf /opt/wwwroot/$webdir; echo "已删除";;
n ) echo "未删除";;
* ) echo "没有这个选项"; exit;;
esac
fi
# 下载程序并解压
suffix="zip"
if [[ -n "$istar" ]]; then
suffix="tar"
fi
if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then
rm -rf /opt/etc/nginx/vhost/$webdir.conf
if [[ ! -f /opt/wwwroot/$name.$suffix ]]; then
rm -rf /opt/tmp/$name.$suffix
wget --no-check-certificate -O /opt/tmp/$name.$suffix $filelink
mv /opt/tmp/$name.* /opt/wwwroot/
fi
if [[ ! -f "/opt/wwwroot/$name.$suffix" ]]; then
echo "下载未成功"
else
echo "正在解压..."
if [[ -n "$hookdir" ]]; then
mkdir /opt/wwwroot/$hookdir
fi
if [[ -n "$istar" ]]; then
tar zxf /opt/wwwroot/$name.$suffix -C /opt/wwwroot/$hookdir > /dev/null 2>&1
else
unzip /opt/wwwroot/$name.$suffix -d /opt/wwwroot/$hookdir > /dev/null 2>&1
fi
mv /opt/wwwroot/$dirname /opt/wwwroot/$webdir
echo "解压完成..."
fi
fi
# 检测是否解压成功
if [[ ! -d "/opt/wwwroot/$webdir" ]] ; then
echo "安装未成功"
exit
fi
}
# 安装脚本的基本结构
# install_webapp()
# {
# # 默认配置
# filelink="" # 下载链接
# name="" # 程序名
# dirname="" # 解压后的目录名
# port= # 端口
# hookdir=$dirname # 某些程序解压后不是单个目录,用这个hook解决
# istar=true # 是否为tar压缩包, 不是则删除此行
# # 运行安装程序
# web_installer
# echo "正在配置$name..."
# # chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用
# # 添加到虚拟主机
# add_vhost $port $webdir
# sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持
# onmp restart >/dev/null 2>&1
# echo "$name安装完成"
# echo "浏览器地址栏输入:$localhost:$port 即可访问"
# }
############# 安装phpMyAdmin ############
install_phpmyadmin()
{
# 默认配置
filelink=$url_phpMyAdmin
name="phpMyAdmin"
dirname="phpMyAdmin-*-languages"
port=82
# 运行安装程序
web_installer
echo "正在配置$name..."
cp /opt/wwwroot/$webdir/config.sample.inc.php /opt/wwwroot/$webdir/config.inc.php
chmod 644 /opt/wwwroot/$webdir/config.inc.php
sed -e "s/.*blowfish_secret.*/\$cfg['blowfish_secret'] = 'onmponmponmponmponmponmponmponmp';/g" -i /opt/wwwroot/$webdir/config.inc.php
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "phpMyaAdmin的用户、密码就是数据库用户、密码"
}
############# 安装WordPress ############
install_wordpress()
{
# 默认配置
filelink=$url_WordPress
name="WordPress"
dirname="wordpress"
port=83
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/wordpress.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "可以用phpMyaAdmin建立数据库,然后在这个站点上一步步配置网站信息"
}
############### 安装h5ai ##############
install_h5ai()
{
# 默认配置
filelink=$url_h5ai
name="h5ai"
dirname="_h5ai"
port=85
hookdir=$dirname
# 运行安装程序
web_installer
echo "正在配置$name..."
cp /opt/wwwroot/$webdir/_h5ai/README.md /opt/wwwroot/$webdir/
chmod -R 777 /opt/wwwroot/$webdir/
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
sed -e "s/.*\index index.html.*/ index index.html index.php \/_h5ai\/public\/index.php;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "配置文件在/opt/wwwroot/$webdir/_h5ai/private/conf/options.json"
echo "你可以通过修改它来获取更多功能"
}
################ 安装Lychee ##############
install_lychee()
{
# 默认配置
filelink=$url_Lychee
name="Lychee"
dirname="Lychee-master"
port=86
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir/uploads/ /opt/wwwroot/$webdir/data/
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "首次打开会要配置数据库信息"
echo "地址:127.0.0.1 用户、密码你自己设置的或者默认是root 123456"
echo "下面的可以不配置,然后下一步创建个用户就可以用了"
}
################# 安装Owncloud ###############
install_owncloud()
{
# 默认配置
filelink=$url_Owncloud
name="Owncloud"
dirname="owncloud"
port=98
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/owncloud.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "首次打开会要配置用户和数据库信息"
echo "地址默认 localhost 用户、密码你自己设置的或者默认是root 123456"
echo "安装好之后可以点击左上角三条杠进入market安装丰富的插件,比如在线预览图片、视频等"
}
################# 安装Nextcloud ##############
install_nextcloud()
{
# 默认配置
filelink=$url_Nextcloud
name="Nextcloud"
dirname="nextcloud"
port=99
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir
# 添加到虚拟主机
add_vhost $port $webdir
# nextcloud的配置文件中有php-fpm了, 不需要外部引入
sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/nextcloud.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "首次打开会要配置用户和数据库信息"
echo "地址默认 localhost 用户、密码你自己设置的或者默认是root 123456"
}
############## 安装kodexplorer芒果云 ##########
install_kodexplorer()
{
# 默认配置
filelink=$url_Kodexplorer
name="Kodexplorer"
dirname="kodexplorer"
port=88
hookdir=$dirname
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
}
############# 安装Typecho ############
install_typecho()
{
# 默认配置
filelink=$url_Typecho
name="Typecho"
dirname="build"
port=90
istar=true
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持
sed -e "s/.*\#otherconf.*/ include \/opt\/etc\/nginx\/conf\/typecho.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "可以用phpMyaAdmin建立数据库,然后在这个站点上一步步配置网站信息"
}
######## 安装Z-Blog ########
install_zblog()
{
# 默认配置
filelink=$url_Zblog
name="Zblog"
dirname="Z-BlogPHP_1_5_1_1740_Zero"
hookdir=$dirname
port=91
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
}
######### 安装DzzOffice #########
install_dzzoffice()
{
# 默认配置
filelink=$url_DzzOffice
name="DzzOffice"
dirname="dzzoffice-master"
port=92
# 运行安装程序
web_installer
echo "正在配置$name..."
chmod -R 777 /opt/wwwroot/$webdir # 目录权限看情况使用
# 添加到虚拟主机
add_vhost $port $webdir
sed -e "s/.*\#php-fpm.*/ include \/opt\/etc\/nginx\/conf\/php-fpm.conf\;/g" -i /opt/etc/nginx/vhost/$webdir.conf # 添加php-fpm支持
onmp restart >/dev/null 2>&1
echo "$name安装完成"
echo "浏览器地址栏输入:$localhost:$port 即可访问"
echo "DzzOffice应用市场中,某些应用无法自动安装的,请自行参看官网给的手动安装教程"
}
############# 添加到虚拟主机 #############
add_vhost()
{
# 写入文件
cat > "/opt/etc/nginx/vhost/$2.conf" <<-\EOF
server {
listen 81;
server_name localhost;
root /opt/wwwroot/www/;
index index.html index.htm index.php tz.php;
#php-fpm
#otherconf
}
EOF
sed -e "s/.*listen.*/ listen $1\;/g" -i /opt/etc/nginx/vhost/$2.conf
sed -e "s/.*\/opt\/wwwroot\/www\/.*/ root \/opt\/wwwroot\/$2\/\;/g" -i /opt/etc/nginx/vhost/$2.conf
}
############## 网站管理 ##############
web_manager()
{
onmp stop > /dev/null 2>&1
i=1
for conf in /opt/etc/nginx/vhost/*;
do
path=$(cat $conf | awk 'NR==4' | awk '{print $2}' | sed 's/;//')
echo "$i. $path"
eval web_conf$i="$conf"
eval web_file$i="$path"
i=$((i + 1))
done
read -p "请选择要删除的网站:" webnum
eval conf=\$web_conf"$webnum"
eval file=\$web_file"$webnum"
rm -rf "$conf"
rm -rf "$file"
onmp start > /dev/null 2>&1
echo "网站已删除"
}
############## Swap交换空间 ##############
set_swap()
{
clear
#
cat << SWAP
----------------------------------------
|**************** SWAP ****************|
----------------------------------------
(1) 开启Swap
(2) 关闭Swap
(3) 删除Swap文件
SWAP
read -p "输入你的选择[1-3]: " input
case $input in
1) on_swap;;
2) swapoff /opt/.swap;;
3) del_swap;;
*) echo "你输入的不是 1 ~ 3 之间的!"
break;;
esac
}
#### 开启Swap ####
on_swap()
{
status=$(cat /proc/swaps | awk 'NR==2')
if [[ -n "$status" ]]; then
echo "Swap已启用"
else
if [[ ! -e "/opt/.swap" ]]; then
echo "正在生成swap文件,请耐心等待..."
dd if=/dev/zero of=/opt/.swap bs=1024 count=524288
# 设置交换文件
mkswap /opt/.swap
# 启用交换分区
fi
swapon /opt/.swap
echo "现在你可以使用free命令查看swap是否启用"
fi
}
#### 删除Swap ####
del_swap()
{
# 弃用交换分区
swapoff /opt/.swap
rm -rf /opt/.swap
}
############## 数据库自动备份 ##############
sql_backup()
{
# 输出选项
cat << EOF
数据库自动备份
(1) 开启
(2) 关闭
(0) 退出
EOF
read -p "输入你的选择: " input
case $input in
1) sql_backup_on;;
2) sql_backup_off;;
0) exit;;
*) echo "没有这个选项!"
exit;;
esac
}
### 数据库自动备份开启 ###
sql_backup_on()
{
if [[ ! -d "/opt/backup" ]]; then
mkdir /opt/backup
fi
read -p "输入你的数据库用户名: " sqlusr
read -p "输入你的数据库用户密码: " sqlpasswd
# 删除
rm -rf /opt/bin/sqlbackup
# 写入文件
cat > "/opt/bin/sqlbackup" <<-\EOF
#!/bin/sh
/opt/bin/mysqldump -uusername -puserpasswd -A > /opt/backup/sql_backup_$(date +%Y%m%d%H).sql
EOF
sed -e 's/username/'"$sqlusr"'/g' -i /opt/bin/sqlbackup
sed -e 's/userpasswd/'"$sqlpasswd"'/g' -i /opt/bin/sqlbackup
chmod +x /opt/bin/sqlbackup
echo "命令创建成功,你可以直接使用sqlbackup命令直接备份,也可以在路由器管理页添加定时任务 1 */3 * * * /opt/bin/sqlbackup,意思是每3 小时自动备份一次"
}
### 数据库自动备份关闭 ###
sql_backup_off()
{
rm -rf /opt/bin/sqlbackup
echo "如果你使用了自动定时备份,请删除配置"
}
###########################################
################# 脚本开始 #################
###########################################
start()
{
# 输出选项
cat << EOF
___ ___ ___ ___
/ /\ /__/\ /__/\ / /\
/ /::\ \ \:\ | |::\ / /::\
/ /:/\:\ \ \:\ | |:|:\ / /:/\:\
/ /:/ \:\ _____\__\:\ __|__|:|\:\ / /:/~/:/
/__/:/ \__\:\ /__/::::::::\ /__/::::| \:\ /__/:/ /:/
\ \:\ / /:/ \ \:\~~\~~\/ \ \:\~~\__\/ \ \:\/:/
\ \:\ /:/ \ \:\ ~~~ \ \:\ \ \::/
\ \:\/:/ \ \:\ \ \:\ \ \:\
\ \::/ \ \:\ \ \:\ \ \:\
\__\/ \__\/ \__\/ \__\/
=======================================================
(1) 安装ONMP
(2) 卸载ONMP
(3) 设置数据库密码
(4) 重置数据库
(5) 数据库自动备份
(6) 全部重置(会删除网站目录,请注意备份)
(7) 安装网站程序
(8) 网站管理
(9) 开启Swap
(0) 退出
EOF
read -p "输入你的选择[0-9]: " input
case $input in
1) install_onmp_ipk;;
2) remove_onmp;;
3) set_passwd;;
4) init_sql;;
5) sql_backup;;
6) init_onmp;;
7) install_website;;
8) web_manager;;
9) set_swap;;
0) exit;;
*) echo "你输入的不是 0 ~ 8 之间的!"
exit;;
esac
}
re_sh="renewsh"
if [ "$1" == "$re_sh" ]; then
set_onmp_sh
exit;
fi
start