服务器重新部署踩坑记
服务器重新部署踩坑记
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
执行之后会看到类似下面这样的截图:
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
服务器重新部署踩坑记相关推荐
- IdentityServer 部署踩坑记
IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...
- 泛微 linux + mysql 部署+踩坑记
按照文档在数据库服务器上 安装MySQL , 注意: 需要按照文档步骤 端口根据文档默认就可以 需要防火墙开启3306端口 查看或修改防火墙 cat或vim /etc/sysconfig/iptabl ...
- esxi直通 gen8_第三篇:虚拟化层 - MicroServer Gen8 + ESXi Server 6.5u3 部署踩坑记
本文是 HP MicroServer Gen8 2020 改造计划 的一篇,您可以点击对应链接查看该专题下全部文章,谢谢! "前情回顾"之类的就免了,直接进入主题.尽管部署的是HP ...
- 将Hexo个人博客部署到个人云服务器--最详细踩坑教程
将Hexo个人博客部署到个人云服务器–最详细踩坑教程 文章目录 将Hexo个人博客部署到个人云服务器--最详细踩坑教程 一. 背景 *二. 获取体验产品--服务器(选读节) (一)说明 (二)购买体验 ...
- 安装sql server踩坑记【sql2000程序安装配置服务器失败】
安装sql server踩坑记 安装程序配置服务器失败.参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息. 在C:\Program Files\Microsoft SQL ...
- python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django
<>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现
本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...
- Spring @Transactional踩坑记
@Transactional踩坑记 总述 Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务 ...
最新文章
- 计算机ROM的数据可以写入吗,计算机ROM存贮器中的内容只能读出,不能写入。()
- 参考地、保护地、大地的概念
- Mysql常用30种SQL查询语句优化方法
- 国家开放大学2021春1257混凝土结构设计原理题目
- 【更新】火星人敏捷开发手册2012-02-24新增敏捷计划内容
- PenMount Touch显示鼠标指针驱动安装
- Android四大组件之间的交互,Android四大组件每个组件的作用?它们都可以开启多进程吗?...
- 手机滚动截屏软件推荐
- c语言编写生日祝福语大全,C++求高手帮忙写个程序...输出“生日快乐”四个字..用符号拼出来..谢谢啦...
- Nakagami分布
- PHP快递查询接口api和快递单号智能判断PHP代码
- jQuery生成动态表格
- 对于M1卡密钥控制字设置的总结
- 〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询
- 一个简单的加壳解壳程序
- Linux和Windows命令行中使用命令的输出(删除几天前的日志)
- ArcGIS出图时如何制作花式边框
- IMS 紧急服务相关概念
- 修复运营商网站劫持,Win8.1怎么修改DNS
- DataV兼容vue3的方法