在 Debian 中安装 node.js

背景

以前博客有两篇涉及到nodejs,当时只是轻度使用,不甚熟悉。估计今后使 nodejs 的地方会越来越多,本文整理了node 的一些笔记。

介绍

简单来说,nodejs 就是运行在服务端的JavaScript。

为什么要使用 nodejs ?它跟 java PHP 有什么区别呢?

node.js 有非阻塞,事件驱动I/O等特性,非常适合高并发的应用。

以上说明对于一些人来说可能显得晦涩不少,又要去查什么叫非阻塞、事件驱动等。下面是更简单的解释。

在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。

除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。

鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

Node 解决这个问题的方法是:更改连接的方式。每个连接发生一个在 Node 引擎进程中的事件,而不是为每个连接生成一个新的线程(并为其分配一些配套内存)。Node 不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。

转自:https://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html

安装

我是用的系统为 Debian 8.8,root用户。

安装可用三种方式:

  1. 源安装
  2. PPA安装
  3. mvm安装

1. 源安装

apt-get update
apt-get install nodejs npm

查看版本:

nodejs -v
npm -v

如果你是用普通用户安装,要确保该用户拥有 sudo 权限。

如果使用root用户安装,另外增加如下命令:

npm config set user 0
npm config set unsafe-perm true

使用容器编译 golang 项目

一直推崇开发环境容器化,对于我这种多台电脑同时办公的开发者是十分必要的。最近换了一台工作机器,想起按照原来的方式再走一遍环境配置,不禁恼火。于是还是搞起了容器化编译。下面记录一下过程。

启动环境

编辑 boot.sh 脚本,运行 golang 容器。

#!/usr/bin/env bash

docker run -d -t --name=go --net=host -v /root/golang/go:/go -v /root/golang/code:/code --privileged docker.io/golang bash

其中我把go的依赖文件映射到本地 /root/golang/go,代码仓库映射到 /root/golang/code。至于为什么直接使用host的网络,还是为了编译测试的方便。

进入容器

编辑 exec.sh 脚本,方便进入容器里

docker exec -it go /bin/bash

拉取依赖

这里以gin为例:

go get -u github.com/gin-gonic/gin

编译

以下面这个helloworld为例:

# gohello.go

package main

import (
"github.com/gin-gonic/gin"
"net/http"
)

func main(){
   router := gin.Default()
   router.GET("/", func(c *gin.Context) {
      c.String(http.StatusOK, "Hello World")
   })
   router.Run(":8000")
}

运行命令:

go build gohello.go

生成 gohello 文件。

运行这个文件,在浏览器中访问:

http://{ip}:8000/

可以看到浏览器中显示 hello world 字样。

另外,很多go项目对go的版本是有要求的,所以需要注意下运行的golang的版本号。


1 2 3 4 5 6 86 87 88 89 90