Huginn及环境搭建
博客搬迁至https://blog.wangjiegulu.com
RSS订阅:https://blog.wangjiegulu.com/feed.xml
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
并没有默认安装。确保你的系统是最新的,然后安装它。
# run as root!
apt-get update -y
apt-get upgrade -y
apt-get install sudo -y
注意:在安装过程中,需要手动编辑一些文件。如果你熟悉 vim,请使用下面的命令将其设置为默认编辑器。如果你对 vim 不熟悉,请跳过此操作并继续使用默认编辑器。
# Install vim and set as default editor
sudo apt-get install -y vim
sudo update-alternatives --set editor /usr/bin/vim.basic
导入 node.js 库 (如果是 Ubuntu 或者 Debian Jessie 的话可以跳过):
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
安装需要的 packages:
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的。对于默认安装使用这些包:
sudo apt-get install -y runit-systemd libssl1.0-dev
2. Ruby
在生产中使用带有 Huginn 的 Ruby 版本管理器(如 RVM,rbenv 或 chruby)会频繁导致难以诊断的问题。版本管理器不受支持,我们强烈建议所有人按照以下说明使用系统 Ruby。
如果存在的话,删除旧版本的 Ruby:
sudo apt-get remove -y ruby1.8 ruby1.9
下载 Ruby,然后编译:
mkdir /tmp/ruby && cd /tmp/ruby
curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2 | tar xj
cd ruby-2.4.2
./configure --disable-install-rdoc
make -j`nproc`
sudo make install
安装 bundler 和 foreman:
sudo gem install rake bundler foreman --no-ri --no-rdoc
3. System Users
为 Huginn 创建一个用户:
sudo adduser --disabled-login --gecos 'Huginn' huginn
4. Database
安装数据库
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
# 选择一个 MySQL root 密码 (可以任意), 输入并按回车,
# 重复输入 MySQL root 密码 然后按回车
对于 Debian Stretch, 替换 libmysqlclient-dev 为 default-libmysqlclient-dev。
检查你安装的 MySQL 版本:
mysql --version
sudo mysql_secure_installation
登录 MySQL:
mysql -u root -p
# 输入 MySQL root 密码
为 Huginn 创建一个用户,替换 命令中的 $password 为你真实的密码:
mysql> CREATE USER 'huginn'@'localhost' IDENTIFIED BY '$password';
支持 long indexes,你需要确保可以使用 InnoDB engine:
mysql> SET default_storage_engine=INNODB;
# 如果失败,检查你的 MySQL 配置文件 (e.g. `/etc/mysql/*.cnf`, `/etc/mysql/conf.d/*`)
# 设置 "innodb = off"
给予 Huginn 用户必要的数据库相关权限:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `huginn_production`.* TO 'huginn'@'localhost';
退出 database 会话:
mysql> \q
尝试使用新的用户链接到新的数据库
sudo -u huginn -H mysql -u huginn -p -D huginn_production
# Type the password you replaced $password with earlier
你应该回看到 ERROR 1049 (42000): Unknown database 'huginn_production'
,这是正常的,因为我们会稍后创建数据库。
5. Huginn
Clone 源代码
# We'll install Huginn into the home directory of the user "huginn"
cd /home/huginn
# Clone Huginn repository
sudo -u huginn -H git clone https://github.com/huginn/huginn.git -b master huginn
# Go to Huginn installation folder
cd /home/huginn/huginn
# Copy the example Huginn config
sudo -u huginn -H cp .env.example .env
# Create the log/, tmp/pids/ and tmp/sockets/ directories
sudo -u huginn mkdir -p log tmp/pids tmp/sockets
# Make sure Huginn can write to the log/ and tmp/ directories
sudo chown -R huginn log/ tmp/
sudo chmod -R u+rwX,go-w log/ tmp/
# Make sure permissions are set correctly
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX tmp/
sudo -u huginn -H chmod o-rwx .env
# Copy the example Unicorn config
sudo -u huginn -H cp config/unicorn.rb.example config/unicorn.rb
配置它
# Update Huginn config file and follow the instructions
sudo -u huginn -H editor .env
DATABASE_ADAPTER=mysql2
DATABASE_RECONNECT=true
DATABASE_NAME=huginn_production
DATABASE_POOL=20
DATABASE_USERNAME=huginn
DATABASE_PASSWORD='$password'
#DATABASE_HOST=your-domain-here.com
#DATABASE_PORT=3306
#DATABASE_SOCKET=/tmp/mysql.sock
DATABASE_ENCODING=utf8
# MySQL only: If you are running a MySQL server >=5.5.3, you should
# set DATABASE_ENCODING to utf8mb4 instead of utf8 so that the
# database can hold 4-byte UTF-8 characters like emoji.
#DATABASE_ENCODING=utf8mb4
重要: 取消注释 RAILS_ENV 设置,以便于在生产环节运行 Huginn。
RAILS_ENV=production
如果需要改变 Unicorn 配置:
# Increase the amount of workers if you expect to have a high load instance.
# 2 are enough for most use cases, if the server has less then 2GB of RAM
# decrease the worker amount to 1
sudo -u huginn -H editor config/unicorn.rb
重要:确保 .env
和 unicorn.rb
都符合你的配置。
安装 Gems
sudo -u huginn -H bundle install --deployment --without development test
初始化 Database
# Create the database
sudo -u huginn -H bundle exec rake db:create RAILS_ENV=production
# Migrate to the latest version
sudo -u huginn -H bundle exec rake db:migrate RAILS_ENV=production
# Create admin user and example agents using the default admin/password login
sudo -u huginn -H bundle exec rake db:seed RAILS_ENV=production SEED_USERNAME=admin SEED_PASSWORD=password
编译 Assets
sudo -u huginn -H bundle exec rake assets:precompile RAILS_ENV=production
安装初始脚本
Huginn 使用 foreman 来生成基于 Procfile
的初始化脚本。
编辑 Procfile
来针对生产选择一个推荐的版本。
sudo -u huginn -H editor Procfile
注释这两行:
web: bundle exec rails server -p ${PORT-3000} -b ${IP-0.0.0.0}
jobs: bundle exec rails runner bin/threaded.rb
# web: bundle exec unicorn -c config/unicorn.rb
# jobs: bundle exec rails runner bin/threaded.rb
Export 初始化 scripts:
sudo bundle exec rake production:export
注意:每次你修改了
.env
或者你的 procfile 文件,你都必须要重新 export 出事 script。
设置 Logrotate
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
安装
sudo apt-get install -y nginx
网站配置
复制示例网站配置:
sudo cp deployment/nginx/huginn /etc/nginx/sites-available/huginn
sudo ln -s /etc/nginx/sites-available/huginn /etc/nginx/sites-enabled/huginn
确保编辑配置文件以匹配你的设置,如果你正在运行多个nginx站点,请从 listen
指令中删除 default_server
参数:
# Change YOUR_SERVER_FQDN to the fully-qualified
# domain name of your host serving Huginn.
sudo editor /etc/nginx/sites-available/huginn
如果 huginn 是唯一可用的 nginx 网站,删除默认的 nginx 网站:
sudo rm /etc/nginx/sites-enabled/default
Restart
sudo service nginx restart
完成。
参考
- https://github.com/huginn/huginn
- https://github.com/huginn/huginn/blob/master/doc/manual/installation.md
Huginn及环境搭建的更多相关文章
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...
- Azure Service Fabric 开发环境搭建
微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...
- rnandroid环境搭建
react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~
一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...
- Nexus(一)环境搭建
昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...
- 「译」JUnit 5 系列:环境搭建
原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...
- appium+robotframework环境搭建
appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...
随机推荐
- HDU-1013的解题报告
题目来源:hdu-1013 题意:正整数的数字根是通过求整数的整数而求出的.如果结果值是一个位数,那么这个数字就是数字根.如果结果值包含两个或多个数字,则将这些数字相加并重复该过程.只要需要获得一个数 ...
- [ 中危 ] 发布处存在CSRF及CSRF设想
漏洞存在于菜品发布处,使用A账号在添加/发布菜品的时候拦截数据包,使用burpsuite构造 CSRF的POC,再用B账号打开该HTML POC ,生成菜品. 该CSRF400RMB,主要因为是核心业 ...
- unity3d俄罗斯方块源码教程+源码和程序下载
小时候,大家都应玩过或听说过<俄罗斯方块>,它是红白机,掌机等一些电子设备中最常见的一款游戏.而随着时代的发展,信息的进步,游戏画面从简单的黑白方块到彩色方块,游戏的玩法机制从最简单的消方 ...
- getting data from the keybroad
public static String getString() throws IOException{ InputStreamReader isr = new InoutStreamReader(S ...
- C# MediaHelper
using System.Text; public class MediaHelper { private static MediaHelper media = null; private Media ...
- 56.两数之和.md
描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...
- LR特征维数特别大实时计算问题
美团 https://tech.meituan.com/machinelearning-data-feature-process.html 维数灾难 待续...
- 校园网使用IPV6 tunnel免流量上网
前段时间购买了一个vps,做梯子感觉不错,但是在校园网内,vps流量远超10块钱校园流量,眼看着上个月vps的流量被清零.但是校园网有免费的IPV6,而我的VPS也有个IPV6的地址,于是乎就想着如何 ...
- 潭州课堂25班:Ph201805201 django 项目 第三十课 linux 系统迁移 (课堂笔记)
进入虚拟环境, 冷冻 把安装环境放到这个文档中 pip freeze >> requirements.txt 在另一台机器中 pip install -r requirements.txt ...
- DJI-A2调参详细教程
DJI-A2飞控系统用户手册 https://wenku.baidu.com/view/bb632f88227916888586d749.html DJI-A2调参软件视频教程 http://www. ...