Popush部署文档 - Linux版
By Levy
一. 所需要提前知道的
1. 简单的终端命令
基础的命令操作,如提权(sudo),文件夹的创建(mkdir)、删除(rmdir)、移动(mv),文件(夹)的权限更改(chmod),更改工作目录(cd)等的基础用法。
2. 常见应用程序源码的编译
对于下载得到的源代码包,如若根目录包含configure,则可通过以下方法进行配置安装:
./configure
sudo make
sudo make install
3. Apt-get的使用
对于相当多的软件,可通过命令
sudo apt-get install <name>
来安装,需要注意的是安装不一定能补全所有的依赖程序。
二. 部署环境
1. Ubuntu 14.04
Ubuntu 14.04版,优点在于默认配置好gcc,python2.7,gdb,perl以及lua(不确定),从而一定程度简化了配置环境的过程。
2. 各语言编译环境
Node.js: 进入nodejs官网http://www.nodejs.org/并下载源代码包(部署时使用node-v0.10.32.tar.gz)。解压后使用上文提及make方式安装。(验证方式: 终端输入node –v,如出现版本号提醒则成功)
GCC: Ubuntu自带组件,忽略。
G++: 使用Apt-get方式安装。(验证方式: 终端输入 g++ -v,如出现版本号提醒则成功)
GDB: Ubuntu自带组件,忽略。
Python: Ubuntu自带组件,忽略。
Perl: Ubuntu自带组件,忽略。
Ruby: 进入ruby官网https://www.ruby-lang.org/zh_cn/下载源代码包,使用make安装。(验证方式: 终端输入ruby –v,如出现版本号提醒则成功)
Lua: Ubuntu自带组件,忽略。
JDK: 进入oracle官网http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK,得到编译好的可执行文件包,将其放置于主目录下(假设其名为jdk8),而后终端输入以下代码
sudo mv ~/jdk8 /usr/local/jdk
sudo gedit ~/.bashrc
在打开的gedit编辑文件末尾添加
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存关闭,回到终端输入以下代码
source ~/.bashrc
便配置完成,验证方式: 输入java –version,如出现版本信息则成功。
3. Nginx
(1) 在官网http://nginx.org/得到nginx的代码包并解压,但注意不要configure
(2) 在官网http://www.zlib.net/得到zlib的代码包并解压,整个文件夹复制入nginx解压后的目录中,重命名文件夹为zlib
(3) 在官网http://www.pcre.org/得到PCRE的代码包并解压,整个文件夹复制入nginx解压后的目录,重命名为pcre
(4) 进行make,但注意configure时命令为
./configure --with-pcre=pcre --with-zlib=zlib
(5) 验证: 终端中运行nginx:
sudo ./nginx
使用浏览器打开localhost,如出现网页则成功。
4. MongoDB
(1) 在官网http://www.mongodb.org/下载可执行文件包,解压于工作目录下并重命名为mangodb2
(2) 终端输入以下代码,建立数据库工作路径
sudo mv ~/mangodb2 /usr/local/mongodb2
cd /usr/local/mongodb2/bin
sudo mkdir -p /data/db/journal
sudo chmod –R 777 /data/db/
(3) 终端输入以下命令启动mangodb:
cd /usr/local/mongodb2/bin
./mongod --quiet -journal -maxConns=1000 -rest --logpath /data/db/journal/mongdb.log
(4) 需要注意的是,为了保持程序运行,终端不能关闭。同时,每次开机使需执行第三步以启动数据库服务。
三. 部署popush
在确定以上先决条件全部满足后,便可开始着手部署popush:
1. 将popush源代码包解压至工作目录下
2. 进入终端输入以下代码:
sudo mv ~/popush /popush
cd /popush
sudo chmod -R 777 /popush
make deploy
sudo service popush start
sudo service nginx start
3. 解压文件etc/mongojs.zip,并将解压后的mongojs文件夹复制替换node_modules/mongojs文件夹;使用node_modules/socket.io/node_modules/socket.io-client/socket.io.js文件替换static/js/lib/socket.io.js文件。
4. 用浏览器打开localhost或本机ip,进入部署完成的popush
四. 调整bug
部署完成后,进行一些微调以修复bug:
1. static/js/views/file-view.js中40行后新增行,输入代码
e.preventDefault();
从而避免打开编辑器时的异常卡顿现象发生。
2. 如果java文件不能正确运行,则在终端中输入
sudo ln –s /usr/local/jdk/bin/javac /usr/local/bin/javac
以帮助后台找到javac地址
3. 如果ruby不能正确运行,则提权打开/etc/apparmor.d/abstractions/ruby文件并在末尾追加/usr/local/lib/ruby/2.1.0/** mr(具体版本请根据本机ruby确定),并在终端输入命令
sudo service apparmor restart
使之生效
4. 如果python不能正确运行,将models/runner.js中169行删除,并在此处增加代码:
var env2=process.env;
env2.HOME="/popush/tmp";
that.child=spawn(s.cmd,s.args,{cwd:that.dir,env:env2});
五. 遇到的问题
在Linux下配置过程相对顺利,遇到的问题主要体现于对linux权限管理机制不清楚造成的各种bug中。详细如下:
1. 随便使用su的后遗症
为了方便,我在操作很多命令时使用了su(而非sudo)提权,将操作者身份提升至root,但问题就出在此:在root权限下修改的~/.bashrc并不能在普通用户的终端中得到使用,故会出现找不到java的情况。另外,在root权限下建立并设置权限的/data目录在普通权限下也有无法访问的问题,从而导致MongoDB不能顺利启动。
2. MongoDB端口占用
当有其他MongoDB运行(哪怕因为权限原因不能正常工作)时,其侦听端口会被占用,重新打开的数据库服务会因为无法访问端口而退出。只需kill掉原进程即可。
3. 虚拟机网站发布问题
当一切都正常工作后,却发现部署好的网站只能在虚拟机内部访问,这是由于虚拟机网络服务策略导致。以VMWare Workstation为例,进入虚拟机设置(Ctrl+D)页面将网络适配器属性设置为桥接模式并复制参数后,即可在局域网任何设备通过ip地址访问发布的网站。
六. 感受 & 总结
经过大半天在Ubuntu上的折腾,也算是配置好了网站的所需环境,Linux的确是程序员系统,文件组织、权限控制等方面都充满着程序员式的严谨,如果严格做好每一步,出现奇怪问题的几率远远小于Windows。而正式这种严谨,带来了方便同时也带来了不便,重要还是体现在各种方面的不熟悉上,如果长年使用,在写程序、配置服务器等方面效率应该远远高于Windows。
2014.10.6