博客搬迁至https://blog.wangjiegulu.comnode
RSS订阅:https://blog.wangjiegulu.com/feed.xmlpython
Huginn 是一个能够经过构建 agents 来帮你实如今线自动化任务的系统。它们能够理解 web,监听事件,按你所需地去执行一些行为。Huginn 的 agents 建立和消费事件,经过有向图表来进行转播。你能够把它看成部署在你本身的服务器上的破解版本的 IFTTT 或 Zapier。mysql
你能够用 Huginn 作什么?ios
以 Debian
服务器为例,进行环境搭建(你们能够选择购买VPS)。nginx
Huginn 的安装主要包括如下组件:git
Debian 中 sudo
并无默认安装。确保你的系统是最新的,而后安装它。github
# run as root! apt-get update -y apt-get upgrade -y apt-get install sudo -y
注意:在安装过程当中,须要手动编辑一些文件。若是你熟悉 vim,请使用下面的命令将其设置为默认编辑器。若是你对 vim 不熟悉,请跳过此操做并继续使用默认编辑器。web
# 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 的话能够跳过):sql
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 的 runit 不会自动启动,可是这会被init系统处理。另外,Ruby须要 OpenSSL 1.0 开发包而不是 1.1的。对于默认安装使用这些包:
sudo apt-get install -y runit-systemd libssl1.0-dev
在生产中使用带有 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
为 Huginn 建立一个用户:
sudo adduser --disabled-login --gecos 'Huginn' huginn
安装数据库
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'
,这是正常的,由于咱们会稍后建立数据库。
# 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
都符合你的配置。
sudo -u huginn -H bundle install --deployment --without development test
# 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
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。
sudo cp deployment/logrotate/huginn /etc/logrotate.d/huginn
sudo bundle exec rake production:status
注意: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
sudo service nginx restart
完成。