前端部署服务器小结

3,824

在平时工作中对后台有很多的疑惑,虽然前后端分离,但是也不能完全不懂后端的知识,所以在很早之前就像写一个全栈的项目,自己跑一跑,这样会对整个网站的研发过程有一个新的理解。

个人博客呢,是一个功能明了,逻辑不是很复杂的小项目,非常适合用来练手。于是历经三个月,从

node,到数据库,到前端,边学边做,终于是搞出来了。

之所以做的这么慢是怕所学的知识不扎实,所以看完node,看koa,看完koa看egg,因为egg是最新的库,而且最近很火,所以就用egg.js了。

然后恶补linux的命令,发现数据库的sql语句非常看不懂,于是就恶补mysql,又看了mongodb,最后决定用mongodb,因为语法简直和js一样。

前端使用的react,想法很简单,因为工作中用的就是vue,已经很熟了,想再学学react,redux,学完redux以后对状态管用有了新的认识,感觉之前用的vuex简直就是模棱两可,

部署服务器让我对linux命令的系统神秘感淡化了很多,其实只是入门的话,简单的部署,安装个nginx,git什么的没有那么难,对于我这个非专业运维,完全够用了。

后台用的

egg.js

数据库用的

mongodb+mongoose

前端用的

react+react-router-dom+redux

服务器是用的阿里云的,同时也用了阿里云的oss对象存储,以及域名,备案一套全都是阿里云的,因为大品牌,值得信赖,而且备案反馈非常及时,两天时间连拍照带提交资料就已经提交通信管理局了

系统选的Ubuntu系统,配置当然是最便宜的,如果新注册阿里云的童鞋可以领取新手上路里的免费使用6个月的服务器:free.aliyun.com/?spm=5176.8…
是一个很好的学习机会


用cmd链接服务器的方法

ssh root@你的IP地址

部署前端代码我用的Xshell5,用法很简单。

后端代码用的git push 再在服务器上拉取。

然后创建用户,这些其实都可以省略,但是再真实项目中一般都不会用

root账号进行操作,总会给各个人员相应的账号

创建账号

adduser username

添加用户到组

gpasswd -a username sudo

cat查看文件

cat /etc/sudoers(这个文件是权限的配置文件)

cd到这个文件夹,打开文件

vi sudoers

然后将你的权限添加进来

# User privilege specification
root ALL=(ALL:ALL) ALL
username ALL=(ALL:ALL) ALL (在这里添加)

接下来就可以用这个账号来登陆了

ssh username@39.106.133.41

当然还有很多增强安全等级的方法

比如本地生成公钥私钥,把默认

22端口改为别的

本地生成公钥和私钥

ssh-keygen --help
cd ~/.ssh
ssh-keygen -t rsa -b 4096

把本地的公钥上传到服务器授权文件中

vi ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sudo service ssh restart

修改默认端口

vi /etc/ssh/sshd_configPort 2222        (在这里修改端口)
AllowUsers usernamePermitRootLogin yes    (允许root账号登陆,可以改为no)
PasswordAuthentication yes  (允许账号密码登陆,可以改为no)

下次登陆就要指定端口了

ssh -p 2222 username@你的IP

当你设置了公钥以后,关闭了账号密码登陆以及root账号登陆,再把端口好改了,这样安全上基本上已经是目前为止能做到的极限了。

配置完了接下来就是安装软件的时候了

更新软件列表

sudo apt-get update

安装

wget curl git

sudo apt-get install wget curl git

安装nvm(node的包管理工具,可以下载多个node版本)

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

装好以后会提示应用脚本,运行它才能完全的安装完

source /root/.bashrc

安装node

nvm install node

检查是否安装好了

node -v
npm -v

安装

cnpm(用cnpm用惯了,感觉npm下载太慢了)

npm i cnpm -g
linux 遇到的坑

列出子文件

ls

这里加入-a可以查看隐藏文件,比如vi的时候保存没保存成功什么的,可以ls -a 查看到缓存文件,删掉即可正常编辑

-l是查看时间的

ls  -al (查看隐藏问价以及列出最后编辑时间)

vi编辑文件

首先要按一下i进入编辑模式

编辑完了按esc退出编辑后:wq 保存

有时会遇见冲突,或者权限问题

权限问题在命令前面加上sudo就好

:q      //不保存文件退出
:q!     //不保存文件强制退出
:wq     //保存文件并退出
:wq!    //强制保存文件并退出

目录下

ls -a可以查看到未编辑完的文件,删除 rm 文件名 rm -rf慎用(r递归f强制删除)

mv移动文件或者重命名

如果你是普通node服务可以下载pm2守护进程

开启服务器

pm2 start app.js --name 'username'    //起个别名
删除服务

pm2 delete username

最后部署完感觉做的不是很顺溜于是就从新的格式化了一下阿里云
结果报错

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!


是因为有公钥执行

ssh-keygen -R 172.16.152.209

Host 39.106.133.41 found: line 3

证明删了三个公钥

从root启动服务,再用nginx转发nginx

Nginx是一个高性能的HTTP和反向代理服务器,也可以新建端口

安装

apt-get install nginx

查看nginx状态

service nginx configtest

nginx配置文件全在/etc/nginx下

查看

cat nginx.conf

配置服务代理

/etc/nginx/sites-enabled
下新建文件

代理端口

upstream web{
    server 39.96.114.57:3000;
}
server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html; // 文件存放位置
    index index.html index.htm; //文件优先级
    location / {
        proxy_pass http://web;
    }
}

nginx 新增端口

server {
        listen 8080;
        server_name 39.106.133.41;
        root /usr/share/nginx/blog;    (这里是新建的文件夹)
        index index.html index.htm;
}

配置服务器集群

upstream webserver{
    server 39.106.133.41:8080;
    server 39.106.133.41:8090;
}
server {
    listen 80;
    server_name 39.106.133.41;
    location / {
        proxy_pass http://webserver;
    }
}

nginx命令

名称

命令

启动nginx

nginx -c /etc/nginx/nginx.conf

关闭 nginx

nginx -s stop

重读配置文件

nginx -s reload kill -HUP nginx

常用命令

service nginx {start|stop|status|restart|reload|configtest}

安装

mongodb

wget http://.../mongodb.tgz

这里可以去官网找相应的版本

我将mongodb安装到了/user/local中,

data文件夹和log文件夹放在了var中

下载完以后解压,再里面找到bin/mongod这个就是启动文件了

启动mongodb

mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork

如果是

react或者vue项目,打包上传到相应的nginx里面

一开始脑洞很大,总感觉egg的部署摸不着头脑,又不能像react一样build打包。

egg的话可以用git,就像平时上传代码一样,再cnpm i安装依赖

egg官方文档写的很明白,有自带的进城守护。

开启服务器

npm start

关闭服务器

npm stop

修改好egg的响应代理配置以及端口配置,整个服务器就搭建好了,搭建完的第一感觉就是Linux的系统操作的也是文件和文件夹,并无其他的神马何方神圣,也没有我自己认为的那么难了