宋代:苏轼
缑山仙子,高清云渺,不学痴牛騃女。凤箫声断月明中,举手谢时人欲去。
客槎曾犯,银河波浪,尚带天风海雨。相逢一醉是前缘,风雨散、飘然何处?
group :developmentdo
# deploy
gem 'capistrano-rails', '~> 1.1.5'
gem 'capistrano-rvm'
end
执行bundle install
安装新依赖bundle exec cap install STAGES=development,production
初始化后生成以下文件结构├── Capfile# 控制插件、任务的加载
├── config
│ ├── deploy # 不同stage的配置文件
│ │ ├── development.rb
│ │ └── production.rb
│ └── deploy.rb # 全局配置,各stage共用
└── lib
└── capistrano
└── tasks # 自定义任务的存放位置
若初始化时不指定STAGES,默认创建staging, production两个stage。Capfile
中加入require'capistrano/rails'
require'capistrano/rvm'
# 应用名称
set :application, 'liveneeq'
# 远程仓库地址
set :repo_url, 'git@git.thecampus.cc:yang/liveneeq2.git'
# 服务器端部署目录。可使用fetch(:xxx)获取已设置的变量
set :deploy_to, "/data/app/www/#{fetch(:application)}"
# 在不同版本间共享的文件
set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')
# 在不同版本间共享的目录
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets',
'vendor/bundle', 'public/system', 'public/uploads')
# ruby版本
set :rvm_ruby_version, '2.2.2'
# 默认Rails.env会等于stage的名称而非始终production,导致代码中判断模式错误。此处强制所有stage都为production模式
set :stage, :production
# config/deploy/development.rb:
# 远程服务器的地址、用户、角色
# 可配置多台服务器
server '119.29.107.35', user:'ubuntu', roles:%w(app db web)
# 要部署的分支
set :branch, 'dev'
# config/deploy/production.rb
# 远程服务器的地址、用户、角色
# 可配置多台服务器
server '119.29.107.35', user:'ubuntu', roles:%w(app db web)
# 要部署的分支
set :branch, 'master'
# 查看可用任务
bundle exec cap -T
# 部署
bundle exec cap STAGE_NAME deploy
# 回滚
bundle exec cap STAGE_NAME deploy:rollback
bundle exec
执行cap命令以避免不可预知的风险lib/capistrano/tasks/bower.rake
文件,内容如下:namespace :bowerdo
desc 'Install bower dependencies'
task :installdo
on roles(:web) do |host|
within release_path do
# 安装依赖
execute :bower, :install
# 清理无用包
execute :bower, :prune
info "Bower dependencies installed successfully on #{host}"
end
end
end
end
然后在config/deploy.rb
末尾加入before :'deploy:compile_assets', :'bower:install'
lib/capistrano/tasks/restart.rb
,内容如下:namespace :passengerdo
desc 'Restart passenger app'
task :restartdo
on roles(:app), in::sequence, wait:5, limit:2do |host|
# 若使用的是passenger企业版,可添加参数--rolling-restart以实现无缝重启
execute :'passenger-config', 'restart-app', fetch(:deploy_to), '--ignore-app-not-running'
info "Restart passenger successfully on #{host}"
end
end
end
然后在conig/deploy.rb
末尾加入after :'deploy:publishing', :'passenger:restart'
access 管理用户对应用的访问
addons 用于开发,扩展和操作您的应用程序的工具和服务
apps 管理应用
auth heroku 认证
authorizations OAuth 认证
buildpacks 管理应用程序的构建包
certs SSL证书管理
ci 在Heroku上运行应用程序测试套件
clients 在平台上的OAuth客户端
config 管理应用的配置
container 使用容器构建和部署Heroku应用程序
domains 管理app的域名
drains 应用程序的日志配置
features 管理可选功能
git 管理应用程序的git存储库
keys 管理 ssh
labs 测试功能(不清楚功能)
local在本地运行heroku应用程序
logs 显示最近的日志输出
maintenance 管理应用程序的维护模式
members 管理组织成员
notifications 显示通知
orgs 管理组织
pg 数据库管理
pipelines 管理pipelines中的应用程序集合
plugins 管理插件
ps 管理 dynos (dynos, workers)
redis 管理heroku redis实例
regions 列出部署的可用区域
releases 管理应用的releases
run 在Heroku dyno内运行一次性
sessions OAuth 会话
spaces 管理 heroku 私有空间
status Heroku内应用的状态
teams 管理团队
update 更新heroku
webhooks 设置应用程序活动的HTTP通知
# 重新启动(必须在项目的根目录执行)
heroku restart
# 列出应用名
heroku list或 heroku apps
# 删除应用
heroku apps:destroy 应用名 --confirm
应用名
# 发布应用(必须在项目的根目录执行)
git push heroku master
# 持续查看 log 去掉 --tail为查看最新log
heroku logs --tail
# 向应用程序添加日志
heroku drains:add https://xx.herokuapp.com/
# 显示应用程序的当前维护状态
heroku maintenance
# 连接数据库(必须在项目的根目录执行)如果有多个数据库psql后面跟着数据库名字
heroku pg:psql
# 远程数据拉取(必须在项目的根目录执行)可以将远程数据从Heroku Postgres数据库拉到本地机器上的数据库
heroku pg:psql DATABASE_URL 本地数据库名字 --app 应用名称
# 把本地数据同步到远程DB
heroku pg:push 本地数据库名字 DATABASE_URL --app 应用名称
列出你账号下的所有应用名)
heroku apps:destroy 某个应用名 --confirm
某个应用名
(
删除该应用)
参考:
heroku命令大全
https://devcenter.heroku.com/articles/getting-started-with-rails5在Heroku平台上部署非常简单,而且Heroku提供5个免费的App部署名额,所以如果觉得常规部署Rails应用的方式太过麻烦,那么Heroku是个比较好的选择,那么Heroku部署虽然简单,但是还是有一些要注意的细节,在此记录下来。
gem install bundler
# Run this from your terminal.
# The following will add our apt repository and install the CLI:
sudo add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./"
curl -L https://cli-assets.heroku.com/apt/release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install heroku
然后修改你的Gemfile# 首先加上ruby版本的指定
ruby '2.3.1'
# 然后修改数据库(如果你的开发环境使用的是sqlite的话, 如果使用sqlite3会出现app crashed error), 删除
gem 'sqlite3'
# 加上
group :test, :developmentdo
gem 'sqlite3'
end
group :productiondo
gem 'pg'
end
然后 bundle install
生成新的Gemfileheroku create myApp
(如果没有指定App的名称,Heroku会帮你生成一个随机的名称)git push heroku master
herokurunrakedb:create
herokurunrakedb:migrate
herokurunrakedb:seed
web: bundle exec rails server -p 3000
heroku open
访问heroku run rails c
heroku ps
heroku logs --tail
heroku config --app myApp
Appheroku apps:destroy --app example
最近vpn容易断(大环境所致)。于是思考如何离线浏览一个网站。别说,还真找到了简单粗暴的方法。可以实现:一键离线整个网站(包括图片和视频),以便在火车上,飞机上,断网的情况下浏览网页,尽情学习。
其他配置,各位自行研究下。。。
nanopi-neo_FriendlyCore-Xenial_4.14.0_20171218.img.zip
nmap -p22 --open 192.168.92.0/24
得到机器的大概ip,然后ssh上去,root密码是faapt install ipset
ipset list
modporbe xt_set
lsmod
四、安装dnscrypt-proxyapt install dnscrypt-proxy
注意,这里dnscrypt-proxy是监听在127.0.2.1:53端口的,我们改一下,方法比较古怪,因为实际是systemctl控制了监听端口,直接改/etc/default/dnscrypt-proxy是无效的!!!export SYSTEMD_EDITOR="vi"
systemctl edit dnscrypt-proxy.socket
输入以下内容
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5353
ListenDatagram=127.0.0.1:5353
改好后重启,缺省用的是cisco这个开放dnsapt-get install software-properties-common -y
add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
apt-get update
编辑/etc/config.json文件{
"server":"your-ss-server ip",
"server_port":9001,
"local_port":1080,
"password":"type this user's password",
"timeout":60,
"method":"aes-256-cfb"
}
运行:ss-redir -c /etc/config.json
同时单独建立一个DNS解析的通道,监听到本地端口4321,通过vps来转发请求到google的8.8.8.8:53ss-tunnel -s your-ss-server-ip -p 9001-m aes-256-cfb -k password -b 127.0.0.1-l 4321-L 8.8.8.8:53-u
这样本地就有了两个DNS,一个是dnscrypt-proxy,监听到5353,一个ss-tunnel,监听到4321accelerated-domains.china.conf
apple.china.conf
bogus-nxdomain.china.conf
google.china.conf
然后拿到国内ip地址的范围,没用啊,只是记录一下,说不定将来有用。wget -O-'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest'| grep ipv4 | grep CN | awk -F\|'{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }'>/etc/chinadns_chnroute.txt
拿到https://zohead.com/downloads/dnsmasq.tar.gzdomain-needed
bogus-priv
no-resolv
no-poll
conf-dir=/etc/dnsmasq.d
address=/tms.can.cibntv.net/0.0.0.0
server=114.114.114.114
dhcp-range=192.168.2.50,192.168.2.100,72h
dhcp-option=3,192.168.2.2
dhcp-option=6,192.168.2.2
cache-size=10000
min-cache-ttl=1800
最主要的就是dnsmasq.tar.gz的内容:server=/12bet.com/127.0.0.1#5353
ipset=/12bet.com/gfwlist
很清晰,这里确定了12bet.com走本地5353端口进行dns查询,并且访问的包标记到ipset链gfwlist中,当然这里最好是用4321的dns,会符合就近解析原则ipset -N gfwlist iphash
iptables -t nat -A PREROUTING -p tcp -m set–match-set gfwlist dst -j REDIRECT –to-port 1080
这样一切就ok了