Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
amandakelake opened this issue Feb 27, 2020 · 1 comment
Open

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

amandakelake opened this issue Feb 27, 2020 · 1 comment

Comments

@amandakelake
Copy link
Owner

amandakelake commented Feb 27, 2020

部署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 [email protected]

# 在本地生成公钥与私钥,一般本地已有,比如什么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

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

@YangYongAn
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants