本地的Webapp搭建完成,自然要送到外网上,是骡子是马遛一遛先,于是自然而然地选择了拥有一年免费试用权的AWS EC2服务器。闲话少叙,直接上配置(账号申请步骤略去,只需要有有效的Email、信用卡和手机号即可):
一 初见EC2
-
进入EC2控制台后,首先选择EC2节点的地域,目测并没有中国相关的可以选,我先选择了新加坡节点,后来发现并不好用,于是选择了首尔节点。
选择区域 -
依次完成以下步骤:
启动实例 -
选择实例类型
选择实例类型
默认走起
点击启动 -
配置秘钥
选择“创建新密钥对”
填写密钥对名称并下载,然后启动实例
wellDone
可以查看实例状态
至此,免费的EC2实例搞定!
二 配置EC2
- 连接EC2
chmod 400 devildi.pem
ssh -i "devildi.pem" ec2-user@ec2-13-124-88-25.ap-northeast-2.compute.amazonaws.com
- 安装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
source ~/.bashrc
nvm install 8
- 安装配置Nginx
//安装
sudo yum install nginx
//配置
cd /etc/nginx
sudo vim nginx.conf
//配置http反向代理
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name nextsticker.cn;
root /home/ec2-user/mywork/build;
index index.html index.htm;
location / {
try_files $uri /index.html =404 ;
add_header Cache-Control no-cache;
expires 1d;
}
location /api/ {
proxy_pass http://127.0.0.1:4000;
}
}
//配置https
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name nextsticker.cn;
root /home/ec2-user/mywork/build;//静态文件的位置
ssl_certificate "/home/ec2-user/mywork_backend/Nginx/nextsticker.cn.pem";
ssl_certificate_key "/home/ec2-user/mywork_backend/Nginx/nextsticker.cn.key";
# # It is *strongly* recommended to generate unique DH parameters
# # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
# #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
ssl_prefer_server_ciphers on;
include /etc/nginx/default.d/*.conf;
location / {
index index.html index.htm;
try_files $uri /index.html =404 ;
add_header Cache-Control no-cache;
expires 1d;
}
location /api/ {
proxy_pass http://127.0.0.1:4000;
}
}
//重启Nginx
sudo service nginx restart
- 安装git并clone项目
sudo yum install git
git clone https://github.com/devildi/nt-koa.git
- 安装配置mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.7.tgz
tar -zxvf mongodb-linux-x86_64-amazon-3.2.7.tgz
mkdir -p mongodb/data
mkdir -p mongodb/log
touch /home/ec2-user/mongodb/log/master.log
touch /home/ec2-user/mongodb/master.pid
cd mongodb-linux-x86_64-amazon-3.2.7
sudo vim config.conf
//在config.conf文件中编辑
dbpath=/home/ec2-user/mongodb/data
logpath=/home/ec2-user/mongodb/log/master.log
pidfilepath=/home/ec2-user/mongodb/master.pid
directoryperdb=true
logappend=true
#replSet=testrs
bind_ip=127.0.0.1
port=27017
oplogSize=10000
fork=true
noprealloc=true
//启动mongod服务
./bin/mongod -f config.conf
//数据迁移
./mongorestore -h 127.0.0.1 -d nt /home/ec2-user/nt-koa/dump/nt/routes.bson
- 安装PM2
npm install pm2 -g
pm2 start app.js -i max//启动服务
-
配置EC2 入口策略
选择安全组
选择安全组
添加策略
添加策略 -
阿里云域名解析
11.11买的域名,一年十几块钱:
阿里云注册域名
三 大功告成
浏览器输入nextsticker.cn或者https://nextsticker.cn,成功访问!
附录
将本地项目上传至github
- 删除本地仓库
rm -rf .git
- 在本地项目根目录下
git init
git add .
git status
-
git commit
,若出现了很多红色文件,那么就需再次进git add .
-
git remote add origin
+这个项目的github地址 ,当出现fatal: remote origin already exists.
时,使用此命令git remote rm origin
即可 git push -u origin master
搞定收工!
为mongodb增加安全措施
部署于AWS EC2的mongodb中的数据“离奇失踪”了,但是多了一份Readme
数据表,打开一看:
结合搜索引擎的结果来看,我的部署在公网的裸奔数据库怕是受到攻击了,于是亡羊补牢:为mongodb添加用户权限。
- 修改ip地址
默认值(0.0.0.0)是所有的IP地址都能访问,该参数指定MongoDB对外提供服务的绑定IP地址,用于监听客户端 Application的连接,客户端只能使用绑定的IP地址才能访问mongod,其他IP地址是无法访问的。
在config.conf
中修改bind_ip=127.0.0.1
- 修改默认mongodb TCP端口
登录时需要./bin/mongo -port ****
- 创建管理员用户
#登录数据库后
use admin
db.createUser({user:"devildi", pwd:"******",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
其中,userAdminAnyDatabase
为授予在所有数据库上管理User的权限,然后在admin
库下进行授权:db.auth('devildi','******')
,当返回值为1
时,就可以对其他业务数据库授权了。
- 创建单个数据库管理员
db.createUser({user:"woody", pwd:"******",roles:[{role:"readWrite",db:"nt"}]})
#即用户woody对nt数据库有读写权限
- 开启权限认证
在config.conf
中添加auth=true
- 重启mongod服务
pkill mongod
./bin/mongod -f config.conf
- 登录nt数据库
mongo 127.0.0.1:27017/nt -u woody -p ******
通过PM2脚本启动node服务
//在production.yaml中编辑:
apps:
- script: ./SSR/server.js
name: woody
env_production:
NODE_ENV: production
HOST: localhost
之后可以通过pm2 start production.yaml
命令启动脚本。pm2
网友评论