购买ecs服务器,我选择的是centos镜像,硬件配置是单核2g内存1M宽带;
购买成功之后,进入控制台确认当前镜像是运行中的,然后记住公ip地址,在客户端cmd命令窗口执行:
// 首次连接会有提示,输入yes,然后再次输入密码就行了
ssh root@ip地址(公)
安装ngixn:
阿里云ECS服务器部署Node.js项目全过程详解
nginx的部署(补充) by royluck
cd /usr/local
yum -y install pcre pcre-devel
yum install -y zlib-devel
下载的安装包,统一放在/usr/local/src
目录下
cd /usr/local/src
wget http://nginx.org/download/nginx-1.13.3.tar.gz
// 解压缩
tar -xvzf nginx-1.13.3.tar.gz
配置nginx:
// 下载解压openssl
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
tar -xvzf openssl-1.0.2l.tar.gz
// cd 进入nginx解压包里,执行之前安装的pcre-devel与openssl-devel解决依赖问题
cd nginx-1.13.3
yum -y install pcre-devel openssl openssl-devel
// 再执行配置脚本来进行编译预处理
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.2l
// 编译安装
make && make install
ssl证书:(注:这里的ssl没配成功)
// 使用 openssl 生成证书
openssl req -new -x509 -nodes -out server.crt -keyout server.key
// 移动证书到nginx文件夹
mv server.crt /usr/local/nginx
mv server.key /usr/local/nginx
修改 nginx 配置文件:
// 这里之前按照别人的教程,一顿操作,特别是vi操作不会,然后就去阿里云重置镜像了,
// 所以在修改一些重要配置文件时候,最好备份一下;
vi /usr/local/nginx/nginx.conf
// 这里我没有修改配置,原先访问不了,以为是这里的serve_name 需要改为公ip地址或者域名才行,
// 结果是我用阿里云的私网ip访问,应该用公网ip访问才对的 (欲哭无泪lol)
server {
listen 80;
server_name localhost;
...
}
启动nginx:(注:这里后面需要做优化:系统开机自动启动nginx)
/usr/local/nginx/sbin/nginx
在浏览器输入ip地址,如果能进入nginx欢迎页,则配置成功
安装node相关依赖:
安装升级gcc
安装node,需要gcc编译软件
升级gcc
gcc编译出错---make[5]: *** [s-attrtab] Killed (注:这里的开启swap,菜鸟还是了解清楚了再配,特别是修改配置文件,添加到开机启动项:vim /etc/fstab
,我把磁盘改到自动挂载 ,ssh登录不了,然后我把swap删了,照着阿里客服的指引重新把/etc/fstab 给改回去了 )
sudo yum install gcc gcc-c++
// 但是默认安装的gcc版本是最老的4.0,高版本的node要求高版本的gcc支持,
// 因此需要升级gcc (网上有yum update gcc gcc-c++的方法更新gcc版本,没试过,不知道可不可以,有些文章又说不可以)
cd /usr/local/src
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
tar -jxvf gcc-6.1.0.tar.bz2
// 参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
cd gcc-6.1.0
./contrib/download_prerequisites
// 建立一个目录供编译出的文件存放
mkdir gcc-build-6.1.0
cd gcc-build-6.1.0
// 生成Makefile文件
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
// 编译
// 配置低的就不要开启线程了 -j4
// 最早执行操作发现编译失败
// 然后按照网上教程,开了swap线程,安装成功之后,重启镜像,
// 发现ssh进入不了系统,后面开了工单,在客服的帮助下才解决的
// 所以配置低单核,还是老实make编译
make -j4
// 查看安装
// ls /usr/local/bin | grep gcc
// 重启,然后查看gcc版本 (注意这里不要指令重启镜像,要在阿里云控制台重启)
// 输出gcc version 6.1.0 (GCC) 证明更新成功
gcc -v
// 升级gcc,生成的动态库没有替换老版本gcc的动态库
// 运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
// 执行以下命令,查找编译gcc时生成的最新动态库:
find / -name "libstdc++.so*"
// 将上面的最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下
cd /usr/lib64
cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
// 删除原来软连接:
rm -rf libstdc++.so.6
// 将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
// 默认动态库升级完成。重新运行以下命令检查动态库:
// 可以看到 输出有"GLIBCXX_3.4.21" 了
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
安装node
部署Node.js项目(CentOS)
node镜像地址
最早我是照着这个教程(阿里云ECS服务器部署Node.js项目全过程详解)通过编译安装的方法安装node,但是在升级了gcc之后,通过长时间地等待,最后还是安装失败,所以就放弃了。这是这两种安装方法(直接部署和安装部署)的区别介绍CentOS安装NodeJS,里面说的:"但是如果遇到nodejs插件全局安装时,需要自行去创建关联...",则在node全局安装好安装包之后,需要再次通过软连接去配置,参考Linux 下安装pm2后找不到pm2命令解决方法
cd /usr/local/src
// 下载node.js
// node镜像地址:https://npm.taobao.org/mirrors/node
wget https://npm.taobao.org/mirrors/node/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar -xvf node-v10.16.3-linux-x64.tar.xz
cd node-v10.16.3-linux-x64/bin && ls
// 如果有版本出来,则证明安装成功
./node -v
// 打印当前地址,在下面进行软链接需要用到
// 打印的内容:/usr/local/src/node-v10.16.3-linux-x64
pwd
// 打印环境变量
// 这里打印出来的变量,也是为了后面进行软链接需要用到
// 打印的内容:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH
// 进行软链接
// 需要确定环境变量有这个变量:/usr/local/bin/node,有些人环境没有,所以需要变通下
ln -s /usr/local/src/node-v10.16.3-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/src/node-v10.16.3-linux-x64/bin/npm /usr/local/bin/npm
回到任意目录文件,执行node -v
,如果出来版本号,则表示node部署成功
安装好node之后,需要再安装PM2插件,执行
npm install -g pm2
PM2的介绍和作用见:PM2 部署 nodejs 项目
安装mysql
阿里云你教程:手动部署MySQL数据库(Linux)
按照上述配置好之后,还需要再阿里云控制器,将端口3306加入安全组添加安全组规则
修改Mysql root账号密码:
Windows下Mysql5.7忘记root密码的解决方法
update mysql.user set authentication_string=password('新密码') where user='root';
flush privileges;