Huginn及环境搭建
Huginn 及环境搭建
什么是 Huginn ?
Huginn 是一个可以通过构建 agents 来帮你实现在线自动化任务的系统。它们可以理解 web,监听事件,按你所需地去执行一些行为。Huginn 的 agents 创建和消费事件,通过有向图表来进行转播。你可以把它当作部署在你自己的服务器上的破解版本的 IFTTT 或 Zapier。
你可以用 Huginn 做什么?
- 追踪天气并在明天下雨(雪)的时候邮件通知给你(明天不要忘记带伞)。
- 列出你关心的条目,并在 Twitter 发生改变的时候电子邮件通知给你。(例如,想知道在机器学习领域发生了什么有趣的事情吗?Huginn 将在 Twitter 上观察“machine learning”这个词,并告诉你什么时候讨论会高高峰。)
- 帮你观察旅游机票和购物优惠信息。
- 抓取任意网站并在发生变化时电子邮件通知你。
- 连接到 Adioso, HipChat, Basecamp, Growl, FTP, IMAP, Jabber, JIRA, MQTT, nextbus, Pushbullet, Pushover, RSS, Bash, Slack, StubHub, translation APIs, Twilio, Twitter, Wunderground, and 微博等第三方.
- 发送和接收 WebHooks。
- 其它很多很多你能想到的。
环境搭建
以 Debian
服务器为例,进行环境搭建(大家可以选择购买VPS)。
概述
Huginn 的安装主要包括以下组件:
- Packages / Dependencies
- Ruby
- System Users
- Database
- Huginn
- Nginx
1. Packages / Dependencies
Debian 中 sudo
并没有默认安装。确保你的系统是最新的,然后安装它。
1 | # run as root! |
注意:在安装过程中,需要手动编辑一些文件。如果你熟悉 vim,请使用下面的命令将其设置为默认编辑器。如果你对 vim 不熟悉,请跳过此操作并继续使用默认编辑器。
1 | # Install vim and set as default editor |
导入 node.js 库 (如果是 Ubuntu 或者 Debian Jessie 的话可以跳过):
1 | curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash - |
安装需要的 packages:
1 | sudo apt-get install -y runit build-essential git zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake nodejs graphviz |
Debian Stretch
由于 Debian Stretch 的 runit 不会自动启动,但是这会被init系统处理。另外,Ruby需要 OpenSSL 1.0 开发包而不是 1.1的。对于默认安装使用这些包:
1 | sudo apt-get install -y runit-systemd libssl1.0-dev |
2. Ruby
在生产中使用带有 Huginn 的 Ruby 版本管理器(如 RVM,rbenv 或 chruby)会频繁导致难以诊断的问题。版本管理器不受支持,我们强烈建议所有人按照以下说明使用系统 Ruby。
如果存在的话,删除旧版本的 Ruby:
1 | sudo apt-get remove -y ruby1.8 ruby1.9 |
下载 Ruby,然后编译:
1 | mkdir /tmp/ruby && cd /tmp/ruby |
安装 bundler 和 foreman:
1 | sudo gem install rake bundler foreman --no-ri --no-rdoc |
3. System Users
为 Huginn 创建一个用户:
1 | sudo adduser --disabled-login --gecos 'Huginn' huginn |
4. Database
安装数据库
1 | sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev |
对于 Debian Stretch, 替换 libmysqlclient-dev 为 default-libmysqlclient-dev。
检查你安装的 MySQL 版本:
1 | mysql --version |
1 | sudo mysql_secure_installation |
登录 MySQL:
1 | mysql -u root -p |
为 Huginn 创建一个用户,替换 命令中的 $password 为你真实的密码:
1 | mysql> CREATE USER 'huginn'@'localhost' IDENTIFIED BY '$password'; |
支持 long indexes,你需要确保可以使用 InnoDB engine:
1 | mysql> SET default_storage_engine=INNODB; |
给予 Huginn 用户必要的数据库相关权限:
1 | mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `huginn_production`.* TO 'huginn'@'localhost'; |
退出 database 会话:
1 | mysql> \q |
尝试使用新的用户链接到新的数据库
1 | sudo -u huginn -H mysql -u huginn -p -D huginn_production |
你应该回看到 ERROR 1049 (42000): Unknown database 'huginn_production'
,这是正常的,因为我们会稍后创建数据库。
5. Huginn
Clone 源代码
1 | # We'll install Huginn into the home directory of the user "huginn" |
配置它
1 | # Update Huginn config file and follow the instructions |
1 | DATABASE_ADAPTER=mysql2 |
重要: 取消注释 RAILS_ENV 设置,以便于在生产环节运行 Huginn。
1 | RAILS_ENV=production |
如果需要改变 Unicorn 配置:
1 | # Increase the amount of workers if you expect to have a high load instance. |
重要:确保 .env
和 unicorn.rb
都符合你的配置。
安装 Gems
1 | sudo -u huginn -H bundle install --deployment --without development test |
初始化 Database
1 | # Create the database |
编译 Assets
1 | sudo -u huginn -H bundle exec rake assets:precompile RAILS_ENV=production |
安装初始脚本
Huginn 使用 foreman 来生成基于 Procfile
的初始化脚本。
编辑 Procfile
来针对生产选择一个推荐的版本。
1 | sudo -u huginn -H editor Procfile |
注释这两行:
1 | web: bundle exec rails server -p ${PORT-3000} -b ${IP-0.0.0.0} |
1 | # web: bundle exec unicorn -c config/unicorn.rb |
Export 初始化 scripts:
1 | sudo bundle exec rake production:export |
注意:每次你修改了
.env
或者你的 procfile 文件,你都必须要重新 export 出事 script。
设置 Logrotate
1 | sudo cp deployment/logrotate/huginn /etc/logrotate.d/huginn |
确保你的 Huginn 实例正在运行
sudo bundle exec rake production:status
6. Nginx
注意:Nginx 是 Huginn 官方支持的 web 服务器。如果你不会或者不想使用 Nginx 作为你的 web 服务器,参考 wiki 的文章来使用配置 apache
安装
1 | sudo apt-get install -y nginx |
网站配置
复制示例网站配置:
1 | sudo cp deployment/nginx/huginn /etc/nginx/sites-available/huginn |
确保编辑配置文件以匹配你的设置,如果你正在运行多个nginx站点,请从 listen
指令中删除 default_server
参数:
1 | # Change YOUR_SERVER_FQDN to the fully-qualified |
如果 huginn 是唯一可用的 nginx 网站,删除默认的 nginx 网站:
1 | sudo rm /etc/nginx/sites-enabled/default |
Restart
1 | sudo service nginx restart |
完成。
参考
本文链接:https://blog.wangjiegulu.com/2018/04/02/build_the_environment_for_huginn/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处。