服务器重新部署踩坑记

Intro

之前的服务器是 Ubuntu 18.04 ,上周周末想升级一下服务器系统,从 18.04 升级到 20.04,结果升级升挂了... 后来 SSH 始终连不上,索性删除重新部署了一个,新部署了一个 Centos 8 的系统,新部署之后很多东西需要配置,折腾了好几天,简单记录一下容易踩的坑。

虚拟机配置

Azure 上的服务器默认新建的时候需要配置网络安全组(NSG),这次新建之后想着使用之前的网络安全组配置,这样就不需要再配置一下端口白名单了,结果这样部署了之后,SSH 经常超时,但是从内网走的话会很快,没有问题,使用 Azure Cloud Shell SSH 没有超时的问题,从另外一个服务器上 SSH 也是正常的。后来删除了,又重新建了一个,这次完全是新建的,没有用之前的网络安全组配置,这次 SSH 再没有超时的问题了……

新建的时候可以指定服务器要开放的端口,一般 22,80,443 先打开,SSH以及 web server 的端口先开放

服务器新建完成后,修改 IP 地址,默认是动态 IP,修改为静态 IP,这样可以方便做 DNS 解析

新建的服务器和之前的 IP 不一致,需要修改域名解析,将原来的域名解析配置修改为新的服务器的 IP

有几个应用使用的是云数据库,需要修改数据库服务器防火墙,把原来服务器的 IP 修改为新的服务器 IP 地址

Nginx 配置

使用 suo yum install nginx -y 来安装 nginx,安装完成之后可以通过上面配置的域名解析或者直接用 IP 地址在浏览器中访问,应该可以看到 nginx 的默认页面

执行 sudo systemctl enable nginx 来配置开机启动

安装之后默认的配置是 /etc/nginx 目录,默认的 nginx 配置修改 /etc/nginx/nginx.conf 文件,如果要新增配置可以添加在 /etc/nginx/conf.d 目录下面

修改默认的 nginx 配置,将默认站点转发到后端服务中,修改 location 配置,添加 proxy_pass

location / {proxy_pass http://172.18.0.2:31230;
}

添加了之后发现服务转发有问题,后来终于在网上找了解决方案,原来默认 nginx 不能进行 Http 的转发,要转发需要配置一下 selinux 的一个配置 httpd_can_network_connect

可以参考:https://stackoverflow.com/questions/27435655/proxy-pass-isnt-working-when-selinux-is-enabled-why

后来在配置 HTTPS 的时候读取证书文件的时候出现了 Permission Denied 的情况,后来排查下来也是 SELinux 的问题,关掉 SELinux 之后就可以了,后来在网上看了看,很多人推荐直接关掉 SELinux,于是就索性直接把 SELinux 给关掉了。

HTTPS 配置

HTTPS 证书使用的是免费的 Let's Encrypt 的证书,使用 acme.sh 进行配置,安装好 acme.sh,配置好 DNS 的 Access Key 执行一行命令就可以了,而且还会生成一个 crontab 定时任务定期会更新证书(Let's Encrypt 免费证书默认 90 天内有效)

通过执行 curl https://get.acme.sh | sh 来安装 acme.sh

安装成功之后配置 DNS 的配置,我的域名在阿里云上,从阿里云生成 AccessKey 来更新域名配置,会添加或更新一个 _acme-challenge 的域名解析记录

我的域名在阿里云上,就以阿里云为例子,将下面的 Key 和 Secret 替换成自己实际的 Key 和 Secret

export Ali_Key="111111"
export Ali_Secret="222222"

申请泛域名证书,泛域名证书需要指定两个 domain,如下面的示例:

acme.sh --issue --dns dns_ali -d *.weihanli.xyz -d weihanli.xyz

执行之后会看到类似下面这样的截图:

acme.sh

Nginx 配置:

listen       443 ssl default_server;
listen       [::]:443 ssl default_server;
ssl_certificate            /home/liweihan/.acme.sh/*.weihanli.xyz/*.weihanli.xyz.cer;
ssl_certificate_key      /home/liweihan/.acme.sh/*.weihanli.xyz/*.weihanli.xyz.key;if ($scheme = http) {return  301 https://$host$request_uri;
}

SELinux 配置

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。但是配置起来很是繁琐,很容易因为这个导致很多问题,浪费很多时间,所以还是直接关掉好了。

SELinux 有三种状态,分别是:

  • Enforcing: 默认的配置,默认强制使用,发生权限问题的时候就直接报错,阻止应用程序的执行

  • Permissive:允许访问,当出现权限问题的时候不会阻止应用程序的执行,但是会记录一条 Wanring 级别的日志

  • Disabled: 完全禁用,应用程序的执行不会被 SELinux 所影响,也不会有任何日志

通过 sestatus 可以查看 SELinux 当前的状态

如果要临时修改 selinux 的状态可以通过命令 sudo setenforce 0 禁用 selinux 或 sudo setenforce Permissive

如果要永久性的修改 selinux 状态需要修改配置文件 /etc/selinux/config

Docker 配置

参考 docker 官方文档或者参考 Centos 安装 docker

需要注意的是,你可能会需要配置 docker group,把需要的用户配置到 docker 这个用户组里以免每次 docker ps 的时候都要使用管理员权限 sudo

K8S 配置

自己玩 k8s 的话推荐使用 kind 部署 k8s,我自己就是在使用 kind 部署 k8s,具体的安装步骤可以参考之前的文章介绍

https://www.cnblogs.com/weihanli/p/12831225.html

之前的 kind 都会有一个问题,每次系统重启或 docker daemon 重启的时候会导致原来的创建的集群不可用,需要重新创建才可以,从 0.8 版本开始,kind 不再需要重新创建集群了,基于这个集群的资源部署也会自动重启,无需再手动重新部署了,非常方便了

SSR 配置

SSR 的配置在 Github 上找了一个基于 docker 部署的,可以参考 https://github.com/winterssy/SSR-Docker

开启 BBR

首先可以执行 lsmod | grep bbr 命令,如果已经有 bbr 则证明已经开启了 BBR 加速,如果没有进行下面的配置

sudo echo "net.core.default_qdisc=fq" | sudo tee --append /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee --append /etc/sysctl.conf
sudo sysctl -p

执行之后再执行 lsmod | grep bbr 命令,如果已经有 bbr 则证明已经开启了 BBR 加速

安装 docker-compose

如果没有安装 docker-compose 可以执行下面的命令来进行安装

compose_version=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
sudo curl -L "https://github.com/docker/compose/releases/download/${compose_version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

配置

可以将项目 clone 到服务器上,如果没有安装 Git,可以 sudo yum install git -y 来安装,之后 git clone https://github.com/winterssy/SSR-Docker.git

克隆到本地之后可以根据自己需要修改 /etc/config.json 文件中的配置

config.json 配置可以参考:https://github.com/winterssy/SSR-Docker/blob/f0439c232add3a4addbbce68f3c1be32464e0d18/etc/README.md

可以根据需要修改 docker-compose 映射到本地的端口

配置好之后执行 docker-compose up -d 即可启动 SSR 服务,启动之后在虚拟机对应的网络安全组配置中开放需要的端口

More

还有一些配置,脚本需要准备一下来部署服务,索性大多数的服务我都是有 k8s deploy yaml 的,只是有些 configMap 里的数据要更新一下。整理一下放在服务器上,最后整理出一个 k8s 服务部署脚本

如果出现了什么意外情况或者要重新部署 k8s 只要执行一下这个脚本即可~

其他服务的 Nginx 配置,需要新增服务配置的时候只要在 /etc/nginx/conf.d 目录下增加对应服务的配置即可

server {listen 443;server_name sparktodo.weihanli.xyz;location / {proxy_pass http://172.18.0.2:31256;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

Reference

  • https://linoxide.com/linux-how-to/how-to-disable-selinux-on-centos/

  • https://www.zhihu.com/question/20559538

  • https://baike.baidu.com/item/SELinux

  • https://github.com/winterssy/SSR-Docker

  • https://github.com/acmesh-official/acme.sh

服务器重新部署踩坑记相关推荐

  1. IdentityServer 部署踩坑记

    IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...

  2. 泛微 linux + mysql 部署+踩坑记

    按照文档在数据库服务器上 安装MySQL , 注意: 需要按照文档步骤 端口根据文档默认就可以 需要防火墙开启3306端口 查看或修改防火墙 cat或vim /etc/sysconfig/iptabl ...

  3. esxi直通 gen8_第三篇:虚拟化层 - MicroServer Gen8 + ESXi Server 6.5u3 部署踩坑记

    本文是 HP MicroServer Gen8 2020 改造计划 的一篇,您可以点击对应链接查看该专题下全部文章,谢谢! "前情回顾"之类的就免了,直接进入主题.尽管部署的是HP ...

  4. 将Hexo个人博客部署到个人云服务器--最详细踩坑教程

    将Hexo个人博客部署到个人云服务器–最详细踩坑教程 文章目录 将Hexo个人博客部署到个人云服务器--最详细踩坑教程 一. 背景 *二. 获取体验产品--服务器(选读节) (一)说明 (二)购买体验 ...

  5. 安装sql server踩坑记【sql2000程序安装配置服务器失败】

    安装sql server踩坑记 安装程序配置服务器失败.参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息. 在C:\Program Files\Microsoft SQL ...

  6. python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django

    <>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...

  7. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  8. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  9. Spring @Transactional踩坑记

    @Transactional踩坑记 总述 ​ Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务 ...

最新文章

  1. 计算机ROM的数据可以写入吗,计算机ROM存贮器中的内容只能读出,不能写入。()
  2. 参考地、保护地、大地的概念
  3. Mysql常用30种SQL查询语句优化方法
  4. 国家开放大学2021春1257混凝土结构设计原理题目
  5. 【更新】火星人敏捷开发手册2012-02-24新增敏捷计划内容
  6. PenMount Touch显示鼠标指针驱动安装
  7. Android四大组件之间的交互,Android四大组件每个组件的作用?它们都可以开启多进程吗?...
  8. 手机滚动截屏软件推荐
  9. c语言编写生日祝福语大全,C++求高手帮忙写个程序...输出“生日快乐”四个字..用符号拼出来..谢谢啦...
  10. Nakagami分布
  11. PHP快递查询接口api和快递单号智能判断PHP代码
  12. jQuery生成动态表格
  13. 对于M1卡密钥控制字设置的总结
  14. 〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询
  15. 一个简单的加壳解壳程序
  16. Linux和Windows命令行中使用命令的输出(删除几天前的日志)
  17. ArcGIS出图时如何制作花式边框
  18. IMS 紧急服务相关概念
  19. 修复运营商网站劫持,Win8.1怎么修改DNS
  20. DataV兼容vue3的方法

热门文章

  1. (转)WebSphere的web工程中怎么获取数据源
  2. python实现批量压缩文件夹
  3. django源码简析——后台程序入口
  4. Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结
  5. ASP.NET 连接MySql数据库
  6. Mac OS使用技巧之十四:自定义文件图标
  7. 如何使用Amazon Echo控制您的Eero Wi-Fi网络
  8. Https 加密原理分析
  9. Oracle即将发布的全新Java垃圾收集器 ZGC
  10. 3四则运算软件2016011992