买了☁️服务器后,第一步要干啥。。。?
amandakelake opened this issue · 1 comments
部署web应用是我们经常需要进行的事情,无论前端还是后端同学都绕不开服务器搭建这一步,而且我们可能会经常换服务器,所有步骤都要重来一遍,此文用作流程梳理,特别适用于前端同学
目录
* 买云服务器,在服务器中安装好CentOS操作系统
* 配置远程SSH免密登录
* 安装常用基础工具
* 配置zsh提高效率
* Node环境
* 开启80和443端口
* HTTPS证书
* 配置Nginx,强制HTTPS
* 数据库 Mysql+MangoDB
一、买云服务器,在服务器中安装好CentOS操作系统
直接云服务器走起,什么阿里云、腾讯云,就跟shopping一样,挑个比较便宜的买就是了,我自己买的是国外的服务器Vultr(需要visa信用卡)
阿里云 - 弹性计算
云产品-腾讯云
Vultr.com
买完后,安装CentOS操作系统也是傻瓜式的,甚至已经内置好了,在网站上点点点就行了
配置远程SSH免密登录
# 把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(强推!!!) ~~
记住曾经敲过的命令,只要输入几个词,自动推荐,提高效率神器
# 下载插件
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
# 直接安装最新版本
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
service iptables restart
service ip6tables restart
systemctl restart iptables
# 查看端口 看到80和443都开启了即可
iptables -L -n
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
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
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
通过这个方法安装的nginx会有官方小bug Failed to read PID from file
,nginx不生效
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
这时候我们直接访问http://[ip]
(我的买了域名),应该已经能看到如下页面,最新版的nginx首页,说明已经成功了
开启https访问
# 查看一下nginx的配置文件在哪,按照前面的方法,路径应该是/etc/nginx/nginx.conf
nginx -t
# 打开配置文件,加入下面的配置
vim /etc/nginx/nginx.conf
开多一个server监听443端口,然后把80端口的访问通过return 301 https://$host$request_uri;
强制转发到https
然后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[密码]
基础使用就不讲了,自行google就好
接下来是MangoDB
Linux 平台安装 MongoDB | 菜鸟教程
官网查找下载链接MongoDB Download Center | MongoDB
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装宝塔。