irma
irma是一个有效的Web服务框架,源自业务项目,是由于诸如Enterprise要求采用.NET,SaaS&Cloud自动部署以及Linux运行环境等全面irma而创建的。它使用Mono在Linux上实现C#代码的解析和执行,并利用FastCGI和NGINX来处理HTTP交互。 irma有两个部分: irma call ,用C编写的多线程调度引擎,以及用C#编写的开发框架irma kit 。 irma call负责启动和安排在irma kit框架上开发的各种Web应用程序。 irma的设计概念是:简单有效的调度,按需集成和扩展,这确实使irma看起来更像是工具包,而不是框架(实际上,它是工具包)。无论如何,我希望这对您有用:-)
建筑图
汇编和安装
首先对其进行配置:
$ make config在这里,我假设您已经在$HOME/local/ (您可以根据实际情况输入正确的路径)安装了相关库,因此配置过程大致如下:
# #######################################
# mono config:
# #######################################
mono installed location ? [/home/fenkey/local/mono]
# #######################################
# ssl config:
# #######################################
ssl installed location ? [/home/fenkey/local/openssl]
# #######################################
# fcgi config:
# #######################################
fcgi installed location ? [/home/fenkey/local/fcgi]
# #######################################
# curl config:
# #######################################
curl installed location ? [/home/fenkey/local/curl]
c_ares support ? [y]
c_ares installed location ? [/home/fenkey/local/c-ares]
# #######################################
# memcached config:
# #######################################
memcached support ? [y]
memcached installed location ? [/home/fenkey/local/libmemcached]
# #######################################
# redis config:
# #######################################
redis support ? [y]
hiredis installed location ? [/home/fenkey/local/hiredis]
# #######################################
# smtp config:
# #######################################
smtp support ? [y]
# #######################################
# log config:
# #######################################
log prefix (string with valid characters or numbers, of which the length is limited to 20): [ irma ]
log file generated hourly support ? [n]
The irma is now hopefully configured for your setup.
Check the config.in & config.h files and do ' make ' to build it.
上述依赖项的源链接可能会提及以下:
-
mono:https://github.com/mono/mono.git -
openssl:https://github.com/openssl/openssl.git -
fcgi:http://fastcgi.com/或https://gi*thub**.com/jorben/fcgi -
c-ares:https://github.com/c-ares/c-ares -
curl:https://github.com/curl/curl.git -
memcached:https://libmemcached.org/ -
hiredis:https://github.com/redis/hiredis.git
汇编LibCurl时,请注意添加SSL支持(
--with-ssl)。由于libcurl不支持DNS异步分辨率,因此您必须利用signal的方式,或者是第三方c-ares套餐,这是Libcurl的官方建议。我们遵循使用c-ares建议:
$ ./configure --prefix= $HOME /local/c-ares --enable-static
$ make
$ make install编译并安装libcurl:
$ ./buildconf
$ export PKG_CONFIG_PATH= $HOME /local/openssl/lib/pkgconfig
$ ./configure --prefix= $HOME /local/curl --disable-ldap --disable-ldaps --with-ssl --enable-ares= $HOME /local/c-ares --enable-static
$ make
$ make install完成有关irma的配置后,生成了两个文件: config.in和config.h 。现在让我们继续
$ make
$ make install默认情况下,我们在静态上编译irma ,这意味着您可以以最少的方式应用和运行它。您可以通过直接修改Makefile来更改它。我们假设安装路径为$HOME/local/ irma ,并修改文件irma /Makefile :
PREFIX = $( HOME ) /local/ irma设置环境路径并重新加载:
$ echo " export PATH= $HOME /local/ irma /bin: $PATH " >> ~ /.bash_profile
$ . ~ /.bash_profile
执行它:
$ irma call ___ ____ __ __ _ ____ _ _ | _ _ | _ | / | / / ___ | __ _ | | | | || | _) | | / | | / _ | | / _ ` | | | | || _ < | | | | / ___ | __ | (_ | | | | | ___ | _ | __ | | _/_/ __ ___ _ _,_ | _ | _ | +------------------------------------------------------------------------------------------------------------------+ | Usage: irma call [-t < log-type > ] [-x < thread-count > ] [-m < module-invoke > ] [-c < config-of-module > ] [-k] [-v] [-h] | | Options: | | -t: Log lever of ' debug ' , ' event ' , ' warn ' , ' error ' or ' fatal ' | | -x: Threads count of every process | | -m: Module invoking. Normally, it ' s a .Net DLL | | -c: Configuration file of module | | -k: Mock request support | | -v: Version of irma call | | -h: Help information | +------------------------------------------------------------------------------------------------------------------+ $ irma call -v irma call 0.8 Features: fetcher fuse c_ares memcached redis smtp logprefx( ' irma ' )
快速开始
创建并启动第一个名为Foo的项目:
$ cd ~ /tmp
$ irma -genapp Foo
Generated project: ' Foo ' . Check pls !
$ cd Foo
$ make
...
$ ./start.sh
spawn-fcgi: child spawned successfully: PID: 17701
请问我提醒您必须在启动
Foo之前安装命令spawn-fcgi:
$ git clone https://*git*hub*.com/lighttpd/spawn-fcgi
$ cd spawn-fcgi
$ ./autogen.sh
$ ./configure --prefix= $HOME /local/spawn-fcgi
$ make
$ make install
$ echo " export PATH= $HOME /local/spawn-fcgi/bin: $PATH " >> ~ /.bash_profile
$ . ~ /.bash_profile Foo以多进程/多线程的方式运行,并在Bin/Debug/log目录中写入debug日志。您可以在start.sh文件中更新这些:
process_count=1
thread_count=4
log_type= " debug "
...如果Foo无法启动,则应确认是否正在运行Memcached Server(请参阅file conf/Foo.conf中的system.session.server.servers和user.mc的配置)。
$ ./start.sh
!!!!!!!!!!!!!
!!! FATAL !!! - Fail to launch project ' Foo.dll ' ! check log files pls
!!!!!!!!!!!!!
$ cat Bin/Debug/log/fatal/ irma _20200903.log
[14:46:15,554039 | 032126 | 7f4d19fa7700] Kit - Service init failed: Memcached client instance is null: Availability testing is failed
[14:46:15,554132 | 032126 | 7f4d19fa7700] Core - Raise exception while invoking application ! Check it pls
如果还有其他原因,请参阅常见问题解答。如果成功,将生成log文件:
$ cat Bin/Debug/log/event/ irma _20200903.log
[15:01:38,147495 | 032299 | 7f017783e780] Core - irma call version(0.8)
[15:01:38,601612 | 032299 | 7f0173da6700] Kit - Service start
[15:01:38,688583 | 032299 | 7f0171e83700] Kit - Service start
[15:01:38,787017 | 032299 | 7f01710ff700] Kit - Service start
[15:01:38,875054 | 032299 | 7f017783e780] Core - Total (4) workers have been booted up successfully
[15:01:38,875149 | 032299 | 7f0153fff700] Kit - Service start
注意:如果选择支持make config中的loghourly ,则上面的日志文件名称为irma _2020090315.log 。支持loghourly将导致每小时生成日志文件。
配置NGINX(请记住重新加载或重新启动它):
server {
listen 8020 ;
server_name localhost ;
...
location ~ ^/Foo(/ | $) {
fastcgi_pass unix:/home/fenkey/tmp/Foo/Bin/Debug/ irma .sock ;
include nginx_fastcgi.conf ;
}
}
nginx_fastcgi.conf文件描述了nginx和fastcgi之间请求参数的映射关系。例如:
fastcgi_param SERVER_NAME $server_name ;
fastcgi_param SERVER_ADDR $server_addr ;
fastcgi_param SERVER_PORT $server_port ;
fastcgi_param SERVER_PROTOCOL $server_protocol ;
fastcgi_param REMOTE_ADDR $remote_addr ;
fastcgi_param REMOTE_PORT $remote_port ;
fastcgi_param DOCUMENT_ROOT $document_root ;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
fastcgi_param REQUEST_URI $request_uri ;
fastcgi_param QUERY_STRING $query_string ;
fastcgi_param REQUEST_METHOD $request_method ;
fastcgi_param CONTENT_TYPE $content_type ;
fastcgi_param CONTENT_LENGTH $content_length ;在浏览器中输入地址访问:
常问问题
有关irma的更多详细信息,请参阅:常见问题解答
贡献
欢迎您以各种方式加入我们,例如提交您的公关,文件或问题。
通过命令行克隆项目: