站点与服务器维护
本文最后更新于:2022年11月1日 凌晨
由于早年做过论坛,以及一些小网站,因此已经习惯了搞一个VPS,自己折腾。本文主要记录了服务器(Ubuntu 16.04)以及一些站点的快速维护经。
下面的所有配置都是基于Ubuntu 16.04
Ubuntu 16.04环境
服务器环境配置
1. 基本用户配置
2. 修改编辑器
1 |
|
3. 配置sudo不用密码
我个人习惯,新创建的账户不给设置密码,只允许证书登录,并且允许无密码sudo
通过 sudo visudo
进入编辑,然后添加:
1 |
|
4. 配置Shell
由于MacBook上对zsh长期的使用习惯,因此使用统一风格的zsh,并使用oh-my-zsh管理
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
P.S 如果autojump
存在问题,请主动执行:
1 |
|
5. 修改source
如果是海外的VPS 可以忽略这一步。
这里之所以要修改,是因为国内的部分VPS,如阿里云、腾讯云等有篡改ubuntu与相关库的习惯。
先备份/etc/apt/sources.list
文件,然后将其内容全部删除,然后使用下面的源:
配置完后,最好升级下所有的包(sudo -- sh -c "apt-get update && apt-get upgrade"
),这时候你就会发现有哪些被修改过了,我的做法是全部替换为原版(maintainer's version
)
6. 配置10分钟闲置后自动断开
在/etc/ssh/sshd_config
中配置
1 |
|
7. 修改hostname
可以通过命令
hostname
输出当前的hostname
以下以将hostname
修改为new-host-name
为例子:
- 第一步: 通过
sudo hostname new-host-name
,让注销重新登录以后立马生效新的hostname
- 第二步: 通过修改
/etc/hostname
中的hostname
来固化,让重启后依然使用新的hostname
- 第三步: 通过在
/etc/hosts
中修改(添加)new-host-name
到本地127.0.0.1
中,如127.0.0.1 new-host-name
,让通过hostname
访问本地时能够解析到本地
8. 防火墙配置
内对外完全放开,外对内只开启22,80,443端口
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
9. 配置TCP BBR拥塞算法
以下方法只在ubuntu 16.x上测试过,如果是使用ubuntu 22以及更高版本,可以参考这里,实际上只需要做如下操作
也就是只需要在/etc/sysctl.conf
中将对应模式修改即可,因为内核已经支持,不用再执行脚本去升级内核了。修改后同样的用bbr-check.sh
来检测是否生效即可。
快速执行配置,安装与检测安装算法(需要OpenVZ以外虚拟技术的VPS平台):
安装:
执行效果图:
检测安装结果:
检测安装结果时,所执行的脚本:
执行效果图:
10. 配置Swap
考虑到gitlab等应用对内存使用比较多,因此可以通过
top
工具来查看内存的使用情况,考虑到有可能会有内存不足导致500,可以配置Swap来避免该问题的发生
在以前考虑到SSD硬盘的写入次数太过频繁很容易缩短使用寿命,因此不建议使用SSD做Swap,但是现在的SSD已经逐渐改善了类似的情况
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
也可以通过通过下面的命令从检测情况
、安装
、固化
、调优
,手动的一步一步配置Swap,需要注意的是一般来说比较好的Swap大小是等于现有RAM大小或是现有RAM的两倍:
11. 安装与配置Nginx
在ubuntu 22以及更高版本下,可以参考这里 ,只需要用
sudo apt install nginx
就可以完成安装。
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
12. 安装PHP7
快速执行配置:
1 |
|
13. 配置Java
检测版本:
1 |
|
安装默认jdk(OpenJDK):
1 |
|
安装Oracle-JDk-8:
1 |
|
检查可用JAVA_HOME
环境变量的路径:
1 |
|
14. 配置Shadowsocks Client用于国内VPS翻墙
先拉取shadowsocks-client-ubuntu项目:
1 |
|
安装:
1 |
|
创建配置文件:
在项目根目录创建config.json
,然后输入配置:
1 |
|
后台运行并输出日志到log文件:
1 |
|
检测运行:
检测相关进程是否存在
1 |
|
关闭后台运行:
1 |
|
15. 安装sendmail用于发邮件
安装:
1 |
|
检测是否正在运行:
1 |
|
配置php中的sendmail,编辑/etc/php/7.1/fpm/php.ini
:
将其中的:
1 |
|
替换为:
1 |
|
如果使用外部邮件提供商,需要进一步配置:
编辑/etc/mail/sendmail.mc
文件,新增下面两行(将jacksgong.com
替换为你的域名):
1 |
|
然后生效配置:
1 |
|
16. 安装python
先安装依赖:
1 |
|
下载指令:
1 |
|
解压缩:
1 |
|
编译安装:
1 |
|
17. DNS问题处理
如果发现DNS有问题,可以通过以下的方式进行配置,首先添加以下内容到/etc/resolvconf/resolv.conf.d/base
:
1 |
|
DNS服务器如果不知道怎么选择,建议可以直接在这里查找自己想要的DNS服务器。
然后通过执行以下指令进行生效:
1 |
|
站点安装
1. ownCloud
私有云服务搭建
前置条件: 安装与配置好Nginx与PHP7
这边选用Mariadb而非MySQL的原因是,Mariadb对MySQL兼容并且拓展了很多功能,已经修复了MySQL中的一些BUG以及各类优化
整个流程比较简单,可以考虑直接参照: How to Setup ownCloud 9.1 on Ubuntu 16.10 with Letsencrypt SSL
- 创建云用户与表(例子)
- 配置nginx
- 打开页面输入配置
2. gitlab
这边我使用的是omnibus的版本,因为这个版本足够灵活也便于维护。
通过脚本安装gitlab-omnibus版本
快速执行配置:
配置使用自己的Nginx
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
配置Gitlab的HTTPS
- 参考本文下面提到的配置SSL(HTTPS)https来生成对应用于gitlab访问域名的证书
- 将nginx配置文件调整为: gitlab-omnibus-ssl-nginx.conf
- 修改
/etc/gitlab/gitlab.rb
中的external_url
然后执行sudo gitlab-ctl reconfigure
进行生效
各类状态检测与修复
查看当前状态
执行sudo gitlab-ctl status
备份
通过命令sudo gitlab-rake gitlab:backup:create
进行备份,备份完成后备份文件会在/var/opt/gitlab/backups
目录下面,文件名为[TIMESTAMP]_gitlab_backup.tar
。
还原
- 确保目前的版本与备份文件的版本是在同一个版本(检测当前版本:
sudo gitlab-rake gitlab:env:info
) - 将备份文件拷贝到
/var/opt/gitlab/backups
目录下,并且通过chown git:git [backup-file]
确保备份文件所有权是git
用户所有 - 确保
/etc/gitlab/gitlab.rb
与/etc/gitlab/gitlab-secrets.json
这两个配置文件与备份的一致,然后再生效下配置sudo gitlab-ctl reconfigure
- 分别执行
sudo gitlab-ctl stop unicorn
、sudo gitlab-ctl stop sidekiq
,然后通过sudo gitlab-ctl status
检查下状态 - 执行
sudo gitlab-rake gitlab:backup:restore BACKUP=[backup-file-name]
(这里的[backup-file-name]
如:1393513186_2014_02_27
),进行还原 - 执行
sudo gitlab-ctl start
重新启动gitlab,并执行sudo gitlab-rake gitlab:check SANITIZE=true
进行检查与自动修复
升级
执行sudo apt-get update
与sudo apt-get install gitlab-ce
即可,自动会升级到最新的版本。
卸载
执行sudo gitlab-ctl uninstall
3. Phabricator
可以参照我的另外一篇文章: Ubuntu 16.04.2 安装与配置 Phabricator
站点维护
1. 配置SSL(HTTPS)
通过配置如该博客的情况:
使用Let’s Encrypt免费证书
快速执行配置:
快速执行配置时,所执行的脚本:
执行效果图:
安全检验
通过ssladbs站点进行校验即可: https://www.ssllabs.com/ssltest/analyze.html?d=example.com
自动化刷新证书
由于Let’s Encrypt的证书默认有效期是90天, 因此我们可以自己写一个计时器检测更加可靠(每周检查),下面的脚本是每周一上午2:30自动执行certbot-auto renew
,日志会写入/var/log/le-renewal.log
,并且在随后5分钟重新加载nginx:
- How To Set Up a Firewall with UFW on Ubuntu 14.04
- 本博客 Nginx 配置之完整篇
- 一键安装最新内核并开启 BBR 脚本
- How To Secure Nginx with Let’s Encrypt on Ubuntu 14.04
- How To Add Swap Space on Ubuntu 16.04
- How do I terminate all idle incoming ssh connections?
- Add a User to a Group (or Second Group) on Linux
- Ubuntu Linux Change Hostname (computer name)
- Gitlab Backup restore
- Updating GitLab via omnibus-gitlab
- How To Install Java on Ubuntu with Apt-Get
- 各种系统下Shadowsocks客户端的安装与配置
- Ubuntu下shadowsocks 安装与配置(server and client)
- INSTALL SENDMAIL ON UBUNTU
- How do I set my DNS when resolv.conf is being overwritten?
- How do I install the latest Python 2.7.X or 3.X on Ubuntu?