【项目0->1】最详细Ubuntu建站实录

1,979 阅读5分钟

阅读本文,你将从我的项目中得到:快速搭建Ubuntu server平台的傻瓜教程。

适用对象:后端初学者

搭建环境:电脑是windows10,server是ubuntu18.04

1、本地ssh免密登录

如果不需要ssh免密登录的,请忽略掉这一步。

如果需要使用ssh在本地免密登录请参考我的博文

2、创建新的用户

一般平台会自动化好这一步,如果需要自己创建的可以参考本步骤,如果不需要,请忽略掉。

下面的步骤要确保登录到root根目录下,具体的操作可以参考我之前的博文。为了账户的安全,建议根据我下面的步骤一一执行:

  1. 更新软件

目的:时常保证软件的更新,是网络更新的常用策略

方法:

apt update
apt upgrade

安装时出现的窗口选择第一个

  1. 创建新的用户

目的:网络安全铁则——不能在root下面操作,被别人劫持了root,server就算完了。创建一个新的用户,在这个账户下操作,最后在屏蔽掉root。

方法:

//用你想命名的直接替换username
adduser username
  1. 添加sudo权限

目的:sudo的意思是超级权限,可以行使和root一样的权力,给用户添加sudo权限,它才能运行root的命令,否则会被deny掉。

方法:

//添加sudo权限
usermod -aG sudo YOUR_USERNAME
//切换用户
su YOUR_USERNAME
  1. 给新的用户添加本地登录的权限

方法:

//这是在server端的操作
//回到home目录下
cd ~
//创建.ssh隐藏目录,ls -a查看隐藏目录
mkdir -p ~/.ssh
//把ssh文件复制粘贴到authorized_keys文件下
vi ~/.ssh/authorized_keys
//连续exit返回到本机的目录上输入以下命令行,看看能不能ping通
ssh -i yourkeysname username@ip_address
//配置权限,只有管理员有读写权力,别的登录者只能只读
chmod 644 ~/.ssh/authorized_keys

chmod是linux系统配置文件权限的命令,具体数字代表什么意思,参考命令码的cheatsheet

  1. 屏蔽掉root登录

目的:为了安全,防止别人获取到root的权限,随意更改你的配置和密码。

方法:

//屏蔽掉ssh的root登录
sudo vi /etc/ssh/sshd_config 

//重启服务
sudo service sshd restart

3、安装nginx

nginx可以粗暴的理解成比较轻的apache。

sudo apt install nginx
sudo service nginx start

访问ip出现上面的画面就表示安装成功了。

4、配置node环境——安装node,npm,git

sudo apt install nodejs npm

关于版本的说明:这条语句安装的node版本是v8,最好升级到v10方便使用 。server端使用life time support版本,再往上的edge版本自己开发没什么问题,作为server的架构会由于过新而遭遇未知bug的风险。

升级到v10

curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs

如果你想使用最新的稳定版本

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

安装git

sudo apt install git

5、架构后台的文件结构

这个根据每个人的个人习惯来,我下面展示的是我个人比较喜欢的逻辑架构,仅供参考。

  1. 创建文件夹
//把/var/www下所有文件的访问权给当前的user
sudo chrown -R $USER:$USER /var/www
//创建下列文件夹结构
mkdir /var/www/app
cd /var/www/app
mkdir -p ui/js ui/html ui/css

2. 初始化

目前的位置要在/var/www/app下

git init
//创建app.js
touch app.js
npm init

npm init初始化是生成package.json的配置文件,需要输入name,version等等信息,按着指示做就可以。

6、创建简单的后台——测试通没通

先安装express

npm i express --save
vi app.js

写一个示例demo

const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => {
 res.send("hello try try!");
});

app.listen(port, () =>
 console.log(`Example app listening at http://localhost:${port}`)
);
//启动后台
node app.js

设置nginx的proxy

重点来了,目前去访问网站的话,不会出现hello try try!的字样,应该还是默认的nginx欢迎页。原因是因为nginx默认的route是从/var/www/html/下的index进。

如果想访问3000,需要重新添加一条proxy_pass规则。

sudo vi /etc/nginx/sites-available/default

按照下图修改。

//刷新重启服务
sudo service nginx reload

访问网站,如出现hello try try !表示成功。

如果没有语法错误,却显示不出来,可试一下如下方法:

  • 再重启一下后台 node app.js
  • 再次执行sudo service nginx reload
  • 浏览器disable cache,多刷新几遍。

7、保证后台一直运行

如果长时间不登陆server,server会自动关闭掉后台app.js,此时再访问会出现502 bad gate

使用pm2来保证后台app.js的进程一直在运行。

//安装pm2
sudo npm i -g pm2
//hook住后台
pm2 start app.js
pm2 save
//刷新后台
pm2 reload app.js

到这步后台的环境配置全部完成。

8、创建工作流——git版本控制

以后在app.js的基础上编写我的小后台,少不了就是版本控制。配置过程如下:

  1. 配置server与git间的ssh免密通讯
github-->用户-->settings-->ssh and GPG keys

  • 在github上创建一个新的repo,注意ignore选择node,不然每次都传node_module😂。
  • 在server端添加remote 复制ssh地址
git remote add origin git@YOUR_SSH_ADDRESS
git add .
git commit -am "your first commit comment"
git push origin master
  1. 如果发生了git的conflict,提供一些解决手段

首次pull一下,merge一次。如果因为history的conflict,merge不动,执行下面的语句。

git pull origin master --allow-unrelated-histories
  1. 电脑端git基操,忽略。
  2. 工作流程解释

在本地编写后台app.js -->上传到github-->server获取在github上的更新。

这样就完成了边编写边更新,又有版本控制的工作流。

[注]上一步是第一次操作,同步代码,才会有server端有push,以后只执行pull

git pull origin master
pm2 reload app.js

总结

本文的主要目的是记录我初创后台的实录,保证后台完成:

  1. 拥有后台的功能基底(ubuntu,nginx,pm2)
  2. 拥有后台的代码环境(node,express)
  3. 初步形成版本控制和工作流(git)