amandakelake/blog

买了☁️服务器后,第一步要干啥。。。?

amandakelake opened this issue · 1 comments

部署web应用是我们经常需要进行的事情,无论前端还是后端同学都绕不开服务器搭建这一步,而且我们可能会经常换服务器,所有步骤都要重来一遍,此文用作流程梳理,特别适用于前端同学

目录
* 买云服务器,在服务器中安装好CentOS操作系统
* 配置远程SSH免密登录
* 安装常用基础工具
* 配置zsh提高效率
* Node环境
* 开启80和443端口
* HTTPS证书
* 配置Nginx,强制HTTPS
* 数据库 Mysql+MangoDB

一、买云服务器,在服务器中安装好CentOS操作系统

直接云服务器走起,什么阿里云、腾讯云,就跟shopping一样,挑个比较便宜的买就是了,我自己买的是国外的服务器Vultr(需要visa信用卡)
阿里云 - 弹性计算
云产品-腾讯云
Vultr.com
50F5F0EA-4F21-466C-A5DB-41E86F623719

买完后,安装CentOS操作系统也是傻瓜式的,甚至已经内置好了,在网站上点点点就行了

配置远程SSH免密登录

首先在网站上找到你的IP地址、root账号密码
BE9B4B2C-B7DF-4244-8590-B3D52E3D464B

# 把IP地址换成你自己的,然后填写密码,登录成功
ssh root@45.32.33.18

# 在本地生成公钥与私钥,一般本地已有,比如什么github、gitlab这些都需要公钥的
# 没有的话,下面命令可生成,第一个交互询问文件名,默认是id_rsa,后面两个交互询问密码,一般不需要,直接回车即可
ssh-keygen -t rsa
# 生成成功后,本地的~/.ssh目录下会多出 id_rsa、id_rsa.pub两个文件

# 在服务器上生成 ~/.ssh目录,然后新建authorized_keys文件
mkdir -p .ssh
cd .ssh
touch authorized_keys
# 复制本地公钥的id_rsa.pub文件内容到服务器上的authorized_keys文件中,保存退出即可

在linux系统上操作文件需要用vi操作,此处需要简单学几条命令 VIM 基础操作

本机修改ssh配置,

vim ~/.ssh/config

添加内容如下,然后就可以愉快的用ssh amanda登录了

Host amanda
	HostName 45.32.33.18
	User root
	IdentityFile ~/.ssh/id_rsa

3 Steps to Perform SSH Login Without Password - ShellHacks

安装常用基础工具

yum install wget curl git vim iptables-services net-tools lsof
  • wget 不是安装方式,它是一种下载工具,类似于迅雷
  • curl 利用URL语法在命令行工作的文件传输工具,经常用来看网页的访问情况
  • git不说了
  • vim 文本编辑器,vi的升级版,在linux里操作修改文件全靠它
  • iptables 防火墙工具,下面用来开启端口
  • net-tools 网络管理工具
  • lsof 一个列出当前系统打开文件的工具

不理解也没关系,装上就是了,后面简单用到而已

zsh (个人是为了提高效率,也可以选择不装)

# 查看当前可用shell  初始化的服务器一般是没有zsh的
cat /etc/shells
# 查看当前shell
echo $SHELL

# 安装
yum install zsh
# 切换zsh 然后退出重登服务器就看到效果了
chsh -s /bin/zsh root

安装 Oh-my-zsh 参考官网即可GitHub - ohmyzsh/ohmyzsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

必装插件zsh-autosuggestions(强推!!!) ~~
记住曾经敲过的命令,只要输入几个词,自动推荐,提高效率神器
0E449B16-673D-4181-87BD-C929675DDD8A

zsh-autosuggestionsGitHub

# 下载插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

~/.zshrc里加入plugins=(zsh-autosuggestions),然后重启命令行窗口就可以了

安装node环境

首选安装nvm,这是用来管理node版本的

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

然后在~/.zshrc里面加入如下内容,source ~/.zshrc立刻生效,如果用bash的自行查阅

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

重开窗口才生效,使用方法很简单,看下图就知道了
758CAC80-C27D-4865-B0E9-189CA9DD1A16

# 直接安装最新版本
nvm install node
# 安装完node,npm已经自带了
# 安装yarn,用来替代npm吧
npm install -g yarn
# 都安装了node了,pm2也顺手装一发
yarn global add pm2

开启80和443端口

linux默认只开启了22端口以供ssh登录访问,下面需要开启80(http)和443(https)端口,不然http都访问不了,如何称作web服务器

Linux Iptables Setup Firewall For a Web Server - nixCraft
前面我们已经安装了iptables-services,跟着一波操作即可

vi /etc/sysconfig/iptables
vi /etc/sysconfig/ip6tables

# 分别在两份配置文件中加入下面两行,然后重启即可
# -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

2F38E62C-A899-421E-99DB-3DEAD4753D7A

service iptables restart
service ip6tables restart

systemctl restart iptables
# 查看端口  看到80和443都开启了即可
iptables -L -n

99D4ED26-D09D-4DD5-9DAE-B47F053D2B4F

Linux有默认的防火墙firewall,也是可以开启端口的
但用起来不是很爽,所以上面用iptable替代
Linux CentOS7 开启80,443端口外网访问权限 - 杨浪 - 博客园

sudo firewall-cmd --permanent --zone=public --add-service=http

sudo firewall-cmd --permanent --zone=public --add-service=https

sudo firewall-cmd --reload

但是吧,用firewall开启端口后,后面的nginx访问出了点小问题,一怒之下换用iptables

systemctl restart iptables
# 关闭和禁用防火墙,禁止开机启动
systemctl stop firewalld.service
systemctl disable firewalld.service

安装https证书

我们个人的服务器选择免费的Let’s Encrypt就可以了,只是需要3个月更新一次(也可以配置自动更新)
快速入门 - Let’s Encrypt - 免费的SSL/TLS证书
跟着certbot傻瓜式操作即可 Certbot - Centosrhel7 Nginx
环境选nginx+CentOS
F886F700-F45C-4F10-90F2-78CB6AA8D903

yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install certbot python2-certbot-nginx
# 这里选只是生成证书,下面我们自己配nginx
# 生成证书的路径要记下来,下面配nginx我们要用
sudo certbot certonly --nginx

# 自动更新,避免3个月后自己忘了
echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

然后就配置完事了,接下来我们配nignx

配置Nginx,强制HTTPS

首先是安装
How to Install Nginx on CentOS 7 | Linuxize

sudo yum install epel-release
sudo yum install nginx
# 安装完即可看nginx安装路径 出现就成功了
nginx -t

F632CF92-51E5-4A0F-8C0C-B6C2E1CDD6BB

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

通过这个方法安装的nginx会有官方小bug Failed to read PID from file,nginx不生效
8BD0EAFB-A41D-4461-B9B4-99E2FFDCB97D

How to fix the NGINX error “Failed to read PID from file”, quick and easy - Cloud Insidr
Bug #1581864 “nginx.service: Failed to read PID from file /run/n…” : Bugs : nginx package : Ubuntu

mkdir /etc/systemd/system/nginx.service.d

printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf

systemctl daemon-reload

systemctl restart nginx
# 再看看status 问题修复  bingo

9A4ADBDB-A8A7-4A4F-B2F4-7BD428D2C760

这时候我们直接访问http://[ip](我的买了域名),应该已经能看到如下页面,最新版的nginx首页,说明已经成功了
8B2D5BA2-461E-4543-80BD-C1A5C3868FDF

开启https访问

# 查看一下nginx的配置文件在哪,按照前面的方法,路径应该是/etc/nginx/nginx.conf
nginx -t

# 打开配置文件,加入下面的配置
vim /etc/nginx/nginx.conf

开多一个server监听443端口,然后把80端口的访问通过return 301 https://$host$request_uri;强制转发到https

B76BDCCD-D16C-40FE-82EF-C3321667D10E

然后nginx -s relaod重启nginx,这时候访问https://[ip]应该就稳了

这里暂时不说部署项目的location配置,后面会加一篇文章专门讲如何持续集成部署,会有跟nginx相关的配置

到这里为止,如果单纯用来部署前端项目已经够用了,但如果要部署一些后端服务的话,比如node服务,那是离不开数据库的,我们这里也顺手装了吧

数据库 Mysql+MangoDB

How to Step by Step Install MySQL 8 on CentOS 7官方版本

Install MySQL on CentOS 7 | Linuxize 这个更简洁

# 安装
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sudo yum install mysql-community-server

# 允许开机启动
sudo systemctl enable mysqld
sudo systemctl start mysqld
sudo systemctl status mysqld

# 获取初始化密码 记下来 马上用
sudo grep 'temporary password' /var/log/mysqld.log
# 填入上面的密码
sudo mysql_secure_installation
# 然后修改密码,接下来的一系列问题全部填 y

# 进入mysql 看到如下界面 则成功了
mysql -u root -p[密码]

AEFDA468-2772-4716-8D91-3A86ED282F9C

基础使用就不讲了,自行google就好

接下来是MangoDB
Linux 平台安装 MongoDB | 菜鸟教程
官网查找下载链接MongoDB Download Center | MongoDB
AD083115-8523-43D2-A117-DF01AF971196

wget [上面找到的下载链接]  # 下载
tar -zxvf mongodb-linux-x86_64-4.0.8.tgz  # 解压
# 移动到/usr/local/mongodb目录
mv mongodb-linux-x86_64-4.0.8 /usr/local/mongodb  

添加系统变量到~/.zshrc

export PATH=/usr/local/mongodb/bin:$PATH

在根目录建立数据文件夹

mkdir -p /data/db

启动mongod 服务器

mongod

进入mongo交互窗口

mongo

总结

到此为止,这已经是一台成熟的服务器了,可以拿来做好些事情了
可以参考当我有一台云服务器时,我做了些什么 - 掘金
随便举几个例子
* 前端应用部署,CI/CD 持续集成
* 后端服务支持,开发api,做服务端渲染
* Docker
* 新技术实践,比如graphQL

总之,服务器还是以测试,学习和实践居多,特别对于前端同学,意义重大

歪个楼
买了云服务器后第一步:放行安全组登录ssh装宝塔