简体   繁体   中英

NodeJS takes forever to build on AWS EC2

I am trying to setup NodeJS on EC2.

I followed the official guide and it was successful on my local machine. However when compile the source code on EC2, it takes forever to finish (2 hours and counting). I guess it has something to do with CPU limit or timeout.

I am not familiar with Linux and makefiles. Is there a way to bypass that? Thanks,

I'm guessing you're using a micro instance. Yep, it's going to take a while - micro instances get lots of CPU for a short while, then get severely capped if you use CPU for a while. Compiling node.js is CPU intensive.

On the bright side, you only have to do it once. Once it's finished, make an AMI and you can launch as many servers with node.js pre-installed as you like.

Wich distro are you on? I'am using ubuntu 10.04 LTS (ami-ad36fbc4 on a t1.micro)

I have a zip with a precompiled version of nodejs, this make me able to skip the compilation time the next time i need it!

Run this script as root, or put in the userdata field.

#!/bin/bash

apt-get update -y
apt-get upgrade -y
apt-get install -y \
git-core build-essential \
    openssl \
    libssl-dev \
    zip \
    --fix-missing

git clone http://github.com/joyent/node.git && cd node
git checkout v0.4.12
./configure
JOBS=2 make

cd
zip -r node-v0.4.12-c.zip node

git clone http://github.com/isaacs/npm.git && cd npm
git checkout v1.0.104 && make install

cd ../
rm -rf npm
rm -rf node

mkdir s3-uploader && cd s3-uploader
npm install knox

cat < uploader.js >> EOF
var
    knox = require('knox'),
    fs = require('fs');

var client = knox.createClient({
    key: 'S3_API_KEY'
  , secret: 'S3_API_SECRET'
  , bucket: 'S3_BUCKET_ID'
});

fs.readFile('../node-' + process.version + '-c.zip', function(err, buf){
  var req = client.put('node-' + process.version + '-c.zip', {
      'Content-Length': buf.length
    , 'Content-Type': 'text/plain'
  });
  req.on('response', function(res){
    if (200 == res.statusCode) {
      console.log('saved to %s', req.url);
    }
  });
  req.end(buf);
});
EOF

node uploader.js

you can terminate the first server and the next time you run the same instance you have to put in your instance userdata this one, and skip the compilation.

#!/bin/bash

wget –O node-v0.4.12-c.zip https://s3.amazonaws.com/[your-bucket-name]/node-[your-nodejs-version]-c.zip
unzip node-[your-nodejs-version]-c.zip
cd node
make install
cd ../
rm -rf node
rm -rf node-[your-nodejs-version]-c.zip

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM