无root权限服务器安装部署igv-web与本地化
想在服务器上查看igv,又嫌弃X11转发太丑陋,igv-web是一个不错的方案,看了几篇帖子,都在说响应很慢。直觉上来说,桌面版和web版响应速度应该是一致的,慢应该是下载大文件的,捣鼓一般后,算是能用了。
1.下载
wget https://igv.org/app-archive/igv-webapp.1.12.5.zip
unzip igv-webapp.1.12.5.zip
2.按配置文件资源下载文件
(由于我一般只用hg19,因此只将hg19的资源下载)
less igv-webapp.1.12.5/resources/genomes.json #查看资源配置文件
#索性全部下载有备无患,其实按理来说不同hg19之间也有些不同
mkdir igv-webapp.1.12.5/resources/down_data #将自己下载的文件在source下创建一个目录
cd -
wget https://s3.amazonaws.com/igv.broadinstitute.org/genomes/seq/hg19/hg19.fasta
wget https://s3.amazonaws.com/igv.broadinstitute.org/genomes/seq/hg19/hg19.fasta.fai
wget https://s3.amazonaws.com/igv.broadinstitute.org/genomes/seq/hg19/cytoBand.txt
wget https://s3.amazonaws.com/igv.org.genomes/hg19/hg19_alias.tab
wget https://s3.amazonaws.com/igv.org.genomes/hg19/ncbiRefSeq.sorted.txt.gz
wget https://s3.amazonaws.com/igv.org.genomes/hg19/ncbiRefSeq.sorted.txt.gz.tbi
4.修改配置文件
改好的配置文件如下
需要注意,资源文件的路径是相对于igv-webapp.1.12.5中的index.html的,且在index.html的子目录或同级目录,否则无法找到资源,这个如果熟悉web开发的应该很好理解,我也只是半懂不懂,不多说哈。
5.开启web服务
cd igv-webapp.1.12.5
python3 -m http.server 9999
这时候,访问服务器地址加端口就能打开web网页,打开速度基本能接受
比如192.168.120.91:9999
如果不行,确认下服务器是否开启了此端口,如果你只有一个端口,可以ssh端口转发,这部分可以看我参考的第二篇文章。
我尝试了下,确实有用,但是试了后发现自己不知道怎么关,windows上关于ssh的文档我也不知在哪,如果有人知道还请赐教。
ssh -N -f -L localhost:9999:localhost:9999 -p 22 tanqiang@192.168.120.91
image.png
6.数据准备
查看bam文件,需要导入服务器上的bam与bam.bai,这里也需要注意和index.html的路径关系。
如果使用mv或者cp,有些太耽误时间,且容易造成风险,总不能拷贝一次跑一下md5sum吧。
这里我是在linux里使用软连接
比如:
mkdir igv-webapp.1.12.5/link_bam
ln -s raw_path/raw.bam igv-webapp.1.12.5/link_bam/igv.bam
ln -s raw_path/raw.bam.bai igv-webapp.1.12.5/link_bam/igv.bam.bai
此时网页上则输入 link_bam/igv.bam 和 link_bam/igv.bam.bai
7.后续
除了下载资源拖慢igv外,还有可能是igv-web依赖的js文件在外网。可以在浏览器按F12,刷新页面,点击网络,这里可以看到有两个js文件,耗时20多秒,估计是在外网,可以考虑把按照我们的套路,把它下载到本地后,按上面的套路改路径。其他网络资源需要而要完全本地化,其它同理。
image.png
8.补充
写了个小脚本取名叫igv_web_tolink.sh,之后用的时候运行sh igv_web_tolink.sh x.bam x.bai x.vcf ,然后把打印出的软链接输入网页里。
如果有root权限的应该是有办法直接用绝对路径(极端点index.html直接放根目录),没root我还没有找到啥好办法。另外就是网页输入这步,应该有啥办法直接改配置文件。如有后续我就再开一篇。
#请将此脚本放于igv-webapp.1.12.5文件夹中
scriptpath=$(dirname $0) #脚本目录
for i in "$@"
do
tmp=`basename $i`
ln -s $1 $scriptpath'/link_file/'$tmp
echo 'link_file/'$tmp
done
cd $scriptpath
python3 -m http.server 9999
参考:
如何轻松打造个人专属的IGV Browser - 简书 (jianshu.com)
生信 | IGV Web快速搭建(无需root,无需更改配置文件) - 简书 (jianshu.com)
IGV web 工具部署