AMH 使用与开发
AMH使用帮助与软件开发文档AMH 国内领先的云主机面板
- AMH 使用帮助入门
- AMH 软件开发文档 高级
AMH安装说明
AMH支持极速与定制编译两种方式安装。
极速安装版本:AMH官网对相应的系统编译集成的版本,用户可免除编译快速完成AMH安装。
定制编译版本:用户可自由定制选择相应服务器软件组件版本进行编译安装,安装时间相对需要多些,适合对默认组件版本有要求的用户。
详细安装教程请查看:https://amh.sh/install.htm
安装AMH时,如有遇到无法解析amh.sh域名问题,可看安装页面的小提示更换系统的DNS,
国内个别服务器[CN]内网镜像不通的情况可以选择[JP]节点安装使用。
AMH使用帮助
AMH所有软件用户都可按需下载安装,在面板上方的导航可对软件进行安装管理等操作。
点击导航菜单的软件小图标或面板导航可进入相应分类的软件列表,
在软件列表可查看各个软件介绍说明、运行状况及CPU、内存使用情况,卸载、删除软件操作同样在列表完成。
AMH软件类型分为:桌面、服务器软件、环境软件、应用软件类别。
桌面:是AMH面板首页面,可以直观查看服务器各项资源使用情况,包括统计报表等。
服务器软件:包括web服务器软件nginx/apache,数据库软件、脚本语言软件等,用户可按需安装多套服务器软件运行。
环境软件:可使用不同服务器软件组建成特定运行环境的软件,常用有LNMP环境,即由服务器软件Nginx+MySQL+PHP组合。另外还有LAMP、LNGX、LNMH等。
应用软件:应用软件通常是用于环境软件的扩充,扩展环境部件、增加对系统管理等功能。
总体为,服务器软件为环境软件提供基础层服务,同时应用软件又可扩展环境软件加强对系统管理。
常用软件安装
桌面程序可全部安装,服务器软件可按需安装,需要nginx即使用nginx、需要apache即安装apache。
使用nginx用户环境软件即安装lnmp,apache用户即使用lamp,需要部署cdn缓存加速节点用户可以使用lngx等,
一般建站推荐使用lnmp环境软件。
数据库管理方面可以使用madmin与phpmyadmin,
另外,需要使用FTP的用户可以安装pure-ftp与amftp。
应用软件方面需要伪静态管理可以安装amrewrite,需要ssl证书管理可安装amssl,数据备份可使用amdata、邮局组建可以使用amsmtp等等,
其余需要使用的php扩展同样在软件商店搜索下载安装。
用户提供教程推荐
https://amh.sh/bbs/post-3848-1-1.htm
AMH5软件开发介绍
从AMH首个版本发布起始,AMH一直都十分注重软件的灵活、扩展性。
在AMH5所有软件用户都可按需下载安装,同时支持用户自由开发软件扩展面板功能,最新AMH5.3已经整合支持软件商店,支持第三方软件开发商家加入提供软件服务,您可以使用AMH开放自由的商店平台销售您的软件或是推广您的免费软件。
新版本AMH5的软件开发、软件工作环境等与以往版本相似,熟悉AMH旧版本开发的用户可以很快掌握应用。
相比以往版本,AMH5在原基础上增添了更加完善丰富的接口支持,开发者完全可以开发控制软件运行、管理等事件。
AMH5开发使用语言
AMH5用户可以使用单一linux/shell脚本开发,如nginx、apache、mysql各类服务器软件 (仅shell/AMHScrip脚本控制软件安装、运行停止、卸载等),
也可以单一使用web/php脚本开发,如d-ram、d-cpu等AMH的桌面程序 (单一AMHScript.php脚本开发,调用系统信息显示统计等),
也可以linux/shell+web/php脚本结合开发,相互调用触发事件,如shell端进行软件安装启动等操作,
web端进行异步同步数据、提供管理等页面操作 (shell/AMHScrip+AMHScript.php等php控制程序)
AMH5开发环境介绍
AMH软件linux/shell脚本工作位置:
/root/amh/modules/
其中以软件名称存放每一软件脚本、程序文件:
/root/amh/modules/软件名-版本/
每一软件shell核心脚本文件:
/root/amh/modules/软件名-版本/AMHScript
web/php端程序工作位置:
/usr/local/amh-版本/web/
访问面板 http://ip:端口/index.php
即访问/usr/local/amh-版本/web/index.php文件。
AMH的web端是使用MVC框架开发,开发者可随时增减定义的软件控制器、数据模型、软件页面模板,
/usr/local/amh-版本/web/Controller (控制器)
/usr/local/amh-版本/web/Model (数据模型)
/usr/local/amh-版本/web/View (页面视图模板)
AMH5软件开发实例 (linux/shell+web/php类型)
您只需简单了解AMH工作目录,即可使用shell脚本语言开发AMH的软件。
下面以AMH的FTP软件pure-ftpd-1.0.36进行实例介绍
主要编写软件的shell程序文件AMHScript (软件的核心脚本文件)
新建软件目录 /root/amh/modules/pure-ftpd-1.0.36
建立软件程序文件与配置文件:
1) AMHScript
为软件的shell核心脚本文件,定义软件基本信息与编写软件的安装、卸载、重启等函数事件。
2) AMHScript.php
为软件的web端响应程序文件,同样编写软件的web端的函数事件,用户在面板操作软件时响应shell核心脚本完成后会再次执行AMHScript.php的函数事件。
可用于实时刷新软件的安装状态,软件运行进程状态等。
3) pure-ftpd.conf
为FTP软件的配置文件,软件需要多少配置文件由开发者建立,您可以建立相关配置目录、其它配置文件等。
4) logo.gif
为软件的图标文件,在AMHScript软件基本信息中有定义变量设置软件使用这个名称的图标文件。
5) install_process.log
为软件安装进度文件,用于判断显示软件当前安装进度,在软件安装过程面板会显示软件安装百分比进度。
1) AMHScript 核心脚本文件分析: #!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin; #定义环境PATH变量常用值通常不需更改 ModuleName='pure-ftpd-1.0.36'; #定义软件名称与版本号 ModuleSort='server'; #定义软件类别server为服务器软件 ModuleType='FTPServer'; #定义软件类型为FTP服务器软件 ModuleMainVersion='1'; #定义软件主分支版本号 ModuleVersion='1.0.36'; #定义软件版本号 ModuleDescription='PureFTPd (Pure FTP Server) 是一个快速、稳定的支持全功能的FTP服务器软件,专门为现在的Linux核心进行设计。支持PAM认证、IPv6、chroot、虚拟域名、内建ls命令、FXP协议、带宽限制、Passive模式、LDAP认证以及XML输出等等。'; #定义软件描述介绍 ModuleInstallPath=/usr/local/${ModuleName}; #定义软件安装目录,通常AMH软件安装在/usr/local/ 软件数据存储在/home/usrdata/ ModuleDate='2015-11-09'; #定义软件发布日期 ModuleWebSite='http://amh.sh'; #定义软件官方网站 ModuleIco='logo.gif'; #定义软件使用的图标文件 ModuleScriptBy='amysql'; #定义软件开发者名称,填写您在AMH官网的账号名称 ModuleProcessTag='pure-ftpd (SERVER)'; #定义软件进程标识,面板会以此变量判断软件是否在运行 ModuleProcessFunctions='cmd:stop,txt:停止|cmd:restart,txt:重启'; #定义软件运行中可响应的函数事件,以|符号分开事件,其中有stop停止软件事件与restart重启软件事件 ModuleNotProcessFunctions='cmd:start,txt:启动'; #定义软件未运行时可响应的软件,其中有start启动事件 ModuleInstallFunctions='cmd:uninstall,txt:卸载,class:red'; #定义软件已安装时可响应的事件,其中有uninstall卸载事件 ModuleNotInstallFunctions='cmd:install,txt:安装|cmd:delete,txt:删除,class:red'; #定义软件未安装时可响应的事件,其中有install事件与delete事件 ModuleVid='1'; #定义软件版本ID值,面板以此值判断软件是否需要升级,如有软件新版本发布定义为2,当有用户已经安装软件旧版本Vid值小于2时软件会旧软件会提示升级 #到这里软件基本信息与函数事件已经定义完成,以下编写软件响应的函数事件。 #函数名称前需要增加amh_module_统一规范命名。 #upgrade 软件升级事件,根据ModuleVid值判断是否升级。这里升级无任何事件响应。如软件没有升级情况时可以不需编写upgrade函数。 #升级函数为固定的函数事件,upgrade不可更换为其它名称。 function amh_module_upgrade() { return 0; } #install 为软件安装事件,上面ModuleNotInstallFunctions基本信息已经定义软件在未安装时,用户可执行instll函数事件,用户在面板点击『安装』或执行:amh 软件名称 install 命令时即会响应此函数。 #函数名称可由开发者定义,用户可自行更变。一般建议不做改变,便于用户记忆使用命令执行等。 function amh_module_install() { if amh_module_status ; then #这里调用了状态函数,软件已经安装时直接返回,避免用户重复提交安装软件。 return; else cd /tmp; amh_wget ${ModuleName}.tar.gz bbcb48e8aa6ec1abff9775b89f84af91; #这里使用amh自带的amh_wget函数进行下载源码,AMH会根据用户当前使用的镜像位置自动取最快的节点下载源码,并校验源码文件md5值。开发者如需上传源码到amh的镜像服务器,请在发布软件时做一备份说明。 tar -zxvf ${ModuleName}.tar.gz; cd ${ModuleName}; rm -rf ${ModuleInstallPath}; ./configure --prefix=${ModuleInstallPath} --with-puredb --with-quotas --with-throttling --with-ratios --with-peruserlimits; amh_make_install; #amh自带的amh_make_install函数进行编译,会自动判断cpu核心数进行编译,完成make && make install过程。 #以下脚本为软件安装完成后做一些配置初始化,您开发其它软件时自行编写您需要的脚本。 \cp contrib/redhat.init ${ModuleInstallPath}/sbin/; chmod 755 ${ModuleInstallPath}/sbin/redhat.init; sed -i "s#/usr/local#${ModuleInstallPath}#" ${ModuleInstallPath}/sbin/redhat.init; sed -i "s#/var/run/pure-ftpd.pid#${ModuleInstallPath}/pure-ftpd.pid#" ${ModuleInstallPath}/sbin/redhat.init; sed -i "s#/etc/pure-ftpd.conf#${ModuleInstallPath}/pure-ftpd.conf#" ${ModuleInstallPath}/sbin/redhat.init; \cp ${amh_home}/modules/${ModuleName}/pure-ftpd.conf ${ModuleInstallPath}; chmod 744 ${ModuleInstallPath}/pure-ftpd.conf; mkdir ${ModuleInstallPath}/etc/; touch ${ModuleInstallPath}/etc/pureftpd.passwd; \cp configuration-file/pure-config.pl ${ModuleInstallPath}/sbin/pure-config.pl; chmod 755 ${ModuleInstallPath}/sbin/pure-config.pl; sed -i "s#/usr/local#${ModuleInstallPath}#" ${ModuleInstallPath}/sbin/pure-config.pl; groupadd ftpgroup; useradd -d /home/wwwroot/ -s /sbin/nologin -g ftpgroup ftpuser; /sbin/iptables-save > /etc/amh-iptables; sed -i '/--dport 21 -j ACCEPT/d' /etc/amh-iptables; sed -i '/--dport 10100:10110 -j ACCEPT/d' /etc/amh-iptables; /sbin/iptables-restore < /etc/amh-iptables; /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT; /sbin/iptables -I INPUT -p tcp --dport 10100:10180 -j ACCEPT; /sbin/iptables-save > /etc/amh-iptables; #/etc/amh-iptables为amh的防火墙配置文件,如您需要有对防火墙做更改操作,记得保存/etc/amh-iptables echo 'IPTABLES_MODULES="ip_conntrack_ftp"' >>/etc/sysconfig/iptables-config; amh_module_status && amh_module_start; #如有安装成功调用start启动事件 cd /tmp/; rm -rf /tmp/${ModuleName} /tmp/${ModuleName}.tar.gz; fi; } #boot 为系统启动时执行的函数,这里调用start启动函数,在系统启动时也就会启动软件。 #boot 函数为固定的函数事件,boot不可更换为其它名称。 function amh_module_boot() { amh_module_start; } #start 软件的启动事件,与install安装事件相似,可查看以上install事件的说明。 function amh_module_start() { if amh_module_status ; then ${ModuleInstallPath}/sbin/redhat.init start; else return 1; fi; } #stop 软件的停止事件,与install安装事件相似,可查看以上install事件的说明。 function amh_module_stop() { if amh_module_status ; then ${ModuleInstallPath}/sbin/redhat.init stop; else return 1; fi; } #restart 软件的重启事件,与install安装事件相似,可查看以上install事件的说明。 function amh_module_restart() { if amh_module_status ; then ${ModuleInstallPath}/sbin/redhat.init restart; else return 1; fi; } #uninstall 软件的卸载事件,与install安装事件相似,可查看以上install事件的说明。 function amh_module_uninstall() { if amh_module_status ; then amh_module_stop; rm -rf ${ModuleInstallPath} && \ echo "[OK] ${ModuleName} Uninstall successful." && return 0; return 1; else exit; fi; } #status 为软件的安装状态判断的函数。以上安装、启动等事件都有调用amh_module_status,开发者可自行定义便于统一判断软件当前安装状态,在软件已安装时才响应事件。 function amh_module_status() { if [ -f "${ModuleInstallPath}/bin/pure-pw" ]; then echo "[OK] ${ModuleName} is already installed."; return 0; else echo "[Notice] ${ModuleName} is not installed."; return 1; fi; } #到这里您已经编写完成软件的核心脚本程序,您基本已经完成80%开发工作量。 2) AMHScript.php 程序文件分析 <?php // 以下编写一AMHScript类,其中包含软件各项事件函数。执行事件与AMHScript核心脚本相应。 class AMHScript { // 初始化 软件初始化事件,任何函数执行前都会先调用init事件。(如有需要在AMHScript核心脚本中也可以定义amh_module_init) function amh_module_init() { // 这里判断如是在执行安装事件时,设置软件安装进度为0.01、安装状态为未安装。 if ($this -> action == 'install') $this -> modules -> update_module($this -> name, array('module_install_process' => '0.01', 'module_status' => '0')); } // 安装 软件安装事件,软件安装完成后会执行。 function amh_module_install() { // 软件安装完成后实时更新面板软件状态与刷新系统进程。 global $result_status; $this -> modules -> update_module($this -> name, array('module_install_process' => '-1')); $this -> modules -> update_module($this -> name, array('module_status' => $result_status ? '1' : '0')); echo "<script>amh_ajax_list.push('/index.php?c=module&a=up_process_list');</script>"; } // 卸载 软件卸载事件,软件卸载完成后会执行。 function amh_module_uninstall() { // 软件卸载完成后实时更新面板软件状态与刷新系统进程。 global $result_status; $this -> modules -> update_module($this -> name, array('module_status' => $result_status ? '0' : '1')); echo "<script>amh_ajax_list.push('/index.php?c=module&a=up_process_list');</script>"; } // 删除 软件删除事件,软件删除完成后会执行。 function amh_module_delete() { // 软件删除成功后实时删除面板中软件记录。 global $result_status; if ($result_status) $this -> modules -> delete_module($this -> name); } // 重启 软件重启事件,软件重启完成后会执行。 function amh_module_restart() { // 这里只刷新系统进程 echo "<script>amh_ajax_list.push('/index.php?c=module&a=up_process_list');</script>"; } // 启动 软件启动事件,软件启动完成后会执行。 function amh_module_start() { // 这里只刷新系统进程 echo "<script>amh_ajax_list.push('/index.php?c=module&a=up_process_list');</script>"; } // 停止 软件停止事件,软件停止完成后会执行。 function amh_module_stop() { // 这里只刷新系统进程 echo "<script>amh_ajax_list.push('/index.php?c=module&a=up_process_list');</script>"; } } ?> 3) pure-ftpd.conf 配置文件说明 pure-ftpd.conf 为软件的配置文件,以您开发的软件实际需要情况创建。 4) logo.gif 文件说明 软件的图标文件,开发者自行创建设计。 5) install_process.log 日志文件说明 install_process.log为软件的安装进度文件,缺失install_process.log文件面板即不会显示软件安装进度。 安装时间较长的软件,建议创建install_process.log文件,便于用户实时查看软件当前安装进度情况。 软件程序编写完成后,执行安装命令,创建install_process.log日志文件在当前目录: amh 软件名称 install >./install_process.log 再执行amh命令进行调整即可完成: amh amh-版本 admin opt_install_process install_process.log AMH5软件开发完成 到此您已经完成AMH软件的开发。在测试软件各项功能正确后请您前往开发平台发布您的软件。 以上FTP软件开发完整源码您也可以下载直接查看:pure-ftpd-1.0.36 更多软件实例您也可以参考AMH官方已发布上架的软件。