站点与服务器维护

本文最后更新于:2022年11月1日 凌晨

由于早年做过论坛,以及一些小网站,因此已经习惯了搞一个VPS,自己折腾。本文主要记录了服务器(Ubuntu 16.04)以及一些站点的快速维护经。

下面的所有配置都是基于Ubuntu 16.04

Ubuntu 16.04环境

服务器环境配置

1. 基本用户配置

2. 修改编辑器

1
sudo update-alternatives --config editor

3. 配置sudo不用密码

我个人习惯,新创建的账户不给设置密码,只允许证书登录,并且允许无密码sudo

通过 sudo visudo 进入编辑,然后添加:

1
<用户名> ALL=(ALL) NOPASSWD: ALL

4. 配置Shell

由于MacBook上对zsh长期的使用习惯,因此使用统一风格的zsh,并使用oh-my-zsh管理

快速执行配置:

快速执行配置时,所执行的脚本:

执行效果图:

P.S 如果autojump存在问题,请主动执行:

1
2
3
git clone https://github.com/joelthelion/autojump.git
cd autojump
python install.py

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
2
ClientAliveInterval 600
ClientAliveCountMax 0

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
sudo apt install php7.0-common php7.0-fpm php7.0-cli php7.0-json php7.0-mysql php7.0-curl php7.0-intl php7.0-mcrypt php-pear php7.0-gd php7.0-zip php7.0-xml php7.0-mbstring

13. 配置Java

检测版本:

1
java -version

安装默认jdk(OpenJDK):

1
sudo apt-get install default-jdk

安装Oracle-JDk-8:

1
2
3
4
5
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

sudo apt-get install oracle-java8-installer

检查可用JAVA_HOME环境变量的路径:

1
sudo update-alternatives --config java

14. 配置Shadowsocks Client用于国内VPS翻墙

先拉取shadowsocks-client-ubuntu项目:

1
2
git clone git@git.jacksgong.com:Jacksgong/shadowsocks-client-ubuntu.git
cd shadowsocks-client-ubuntu

安装:

install.sh

1
./install.sh

创建配置文件:

在项目根目录创建config.json,然后输入配置:

1
2
3
4
5
6
7
8
{
"server":"服务器ip地址",
"server_port":8388,
"local_port":10808,
"password":"密码与服务端配置一样",
"timeout":600,
"method":"aes-256-cfb"
}

后台运行并输出日志到log文件:

start.sh

1
./start.sh

检测运行:

检测相关进程是否存在

check.sh

1
./check.sh

关闭后台运行:

stop.sh

1
./stop.sh

15. 安装sendmail用于发邮件

安装:

1
apt-get install sendmail

检测是否正在运行:

1
ps -aux | grep sendmail

配置php中的sendmail,编辑/etc/php/7.1/fpm/php.ini:

将其中的:

1
;sendmail_path=

替换为:

1
sendmail_path = /usr/sbin/sendmail

如果使用外部邮件提供商,需要进一步配置:

编辑/etc/mail/sendmail.mc文件,新增下面两行(将jacksgong.com替换为你的域名):

1
2
define(`MAIL_HUB', `jacksgong.com.')dnl
define(`LOCAL_RELAY', `jacksgong.com.')dnl

然后生效配置:

1
2
sudo sendmailconfig
sudo service sendmail restart

16. 安装python

先安装依赖:

1
2
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

下载指令:

1
2
version=2.7.13
wget https://www.python.org/ftp/python/$version/Python-$version.tgz

解压缩:

1
2
tar -xvf Python-$version.tgz
cd Python-$version

编译安装:

1
2
3
./configure
make
sudo checkinstall

17. DNS问题处理

如果发现DNS有问题,可以通过以下的方式进行配置,首先添加以下内容到/etc/resolvconf/resolv.conf.d/base:

1
2
nameserver 8.8.8.8
nameserver 8.8.4.4

DNS服务器如果不知道怎么选择,建议可以直接在这里查找自己想要的DNS服务器。

然后通过执行以下指令进行生效:

1
sudo resolvconf -u

站点安装

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

还原

  1. 确保目前的版本与备份文件的版本是在同一个版本(检测当前版本: sudo gitlab-rake gitlab:env:info)
  2. 将备份文件拷贝到/var/opt/gitlab/backups目录下,并且通过chown git:git [backup-file]确保备份文件所有权是git用户所有
  3. 确保/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json这两个配置文件与备份的一致,然后再生效下配置sudo gitlab-ctl reconfigure
  4. 分别执行sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq,然后通过sudo gitlab-ctl status检查下状态
  5. 执行sudo gitlab-rake gitlab:backup:restore BACKUP=[backup-file-name](这里的[backup-file-name]如: 1393513186_2014_02_27),进行还原
  6. 执行sudo gitlab-ctl start重新启动gitlab,并执行sudo gitlab-rake gitlab:check SANITIZE=true进行检查与自动修复

升级

执行sudo apt-get updatesudo 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:




站点与服务器维护
https://blog.dreamtobe.cn/maintain-website-server/
作者
Jacksgong
发布于
2017年3月6日
更新于
2022年11月1日
许可协议