阿里云 Linux 服务器创建 Swap 分区

服务器有时候会突发需要大量内存(譬如我们有运行一个自动构建工具,当代码某个分支发布新版本,会触发编译打包),若内存不够会导致有些进程被杀掉,严重的时候甚至整个服务器瘫掉。因此,适当设置 swap 分区还是很有必要的。

下面的命令主要是在 CentOS 上创建 4G 大小的 Swap 分区:

sudo dd if=/dev/zero of=/swapfile bs=512 count=8388616
sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
sudo echo "/swapfile swap swap defaults 0 0" >>/etc/fstab
sudo swapon -s sudo sysctl vm.swappiness=10 && sysctl vm.vfs_cache_pressure=80 sudo vi /etc/sysctl.conf

最后那一行,是指如果希望 vm.swappiness 和 vm.vfs_cache_pressure 的设置永久生效,可以修改 /etc/sysctl.conf 文件设置。

以上可参考阿里云的相关文章,如:https://developer.aliyun.com/article/52098

CentOS 6.8服务器给Apache下的站点配置Let’s Encrypt 证书

我们有几个站点,之前用的wosign的免费SSL证书,最近在Chrome中查看站点,都提示是不安全的站点,应该是wosign的不佳的国际声誉连累的。
于是决定换成Let’s Encrypt证书。方法不难,参看:官方文档

有几个注意点:

如果用自动化的配置certbot-auto的话,它会自动找 /etc/httpd/conf.d 文件夹下面的站点配置文件,但只对配置文件里面仅配置了一个80端口的情况有效,如果您的一个配置文件里面配置了多个80端口的站点,则不能自动识别。另外,如果已经自行配置了ssl站点(443端口的virtualhost)的话,也不会再自动识别为需要配置的站点。

我自动化配置了两个站点,先将原来的的配置文件里面的ssl配置(443端口的virtualhost)注释掉了。然后用certbot-auto,选择了识别出来的这两个站点,然后一切自动运行,提示证书生成,且生成了新的配置文件,文件名 www.example.com-le-ssl.conf。

这时候访问网站,是一片空白,服务器端没有输出任何东西。事实证明,自动生成的这个https站点的配置还是有一些问题的:

1,没有指定DocumentRoot;

2,整个配置文件用了<IfModule mod_ssl.c></IfModule>,但其实本机的环境里面没有包含这样的文件,而mod_ssl确实是启用的,在/etc/httpd/modules/文件夹下可以看到有mod_ssl.so。因此果断注释掉了IfModule的语句(本以为也可改为IfModule nod_ssl.so,但发现不起作用),再次打开,网站成功显示,且证书确实已更新为letsencrypt证书。

为基于Docker的Gitlab服务器配置Let’s Encrypt颁发的SSL证书

继之前跨服务器迁移基于Docker的Gitlab之后,这两天又配置了该Gitlab服务器的HTTPS协议,以增加安全性。SSL证书方面,为了一劳永逸,选择Let’s Encrypt解决方案,用CertBot作为ACME的客户端。

服务器是CentOS 7.2 运行着17.03.1版本的Docker,Gitlab容器(基于OMNIBUS的镜像)是9.1.1版本。

文件存储的映射方面,Gitlab的配置及数据,均被映射到了宿主机的/srv/gitlab/文件夹。

首先是要修改Gitlab的external_url,将http://gitlab.example.com 改为 https://gitlab.example.com。具体既可以修改gitlab的配置文件gitlab.rb,也可以删除容器以后,用新的external_url作为命令参数,创建新的容器,此处不详述。

重新运行gitlab以后,暂时是访问不到的,因为需要放置SSL证书。证书位置默认在容器内的/etc/gitlab/ssl/目录,对应的宿主服务器上的地址就是/srv/gitlab/config/ssl/目录。如果这时候放置有效的gitlab.example.com.crt和gitlab.example.com.key文件。就会发现https站点可以访问了。为了访问方便,本机gitlab容器的端口映射之前已经配置成了http是80,https是443。这时候也注意到一件事情:如果访问http站点,会自动307重定向到https站点。

下面配置Letsencrypt证书,这里需要做三件事:

1,安装certbot,配置服务器以便获取证书;
2,安装证书到gitlab容器;
3,自动续期证书以及自动安装证书;

第一件事,参照官方文档安装并配置certbot。按官方推荐,选择webroot插件的方式。这里的要点是,需要在http://gitlab.example.com站点下创建特定的文件夹,以便certbot放置随机生成的文件,来验证你的网站控制权。

这时候,需要先修改gitlab容器的端口映射配置,让出80端口,然后在宿主机上配置nginx服务器(当然也可以是apache或者其他),配置http:/gitlab.example.com站点,并放置用来验证网站控制权的/.well-known目录。当然,考虑到gitab站点的真正内容应该基于https访问,因此可以对http站点的其他内容设置301重定向。

本机的nginx里面该站点的配置如下供参考:

server {
    listen      80;
    server_name gitlab.example.com;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root    /usr/share/nginx/html;
    }

    location = /.well-known/acme-challenge/ {
        return 404;
    }

    location / {
         return 301 https://gitlab.example.com;
    }
}

第二件事,将/etc/letsencrypt/live/gitlab.example.com 文件夹下的fullchain.pem 和 privkey.pem复制到/srv/gitlab/config/ssl/文件夹下且分别命名为gitlab.example.com.crt 和gitlab.example.com.key;

第三件事,如果需要certbot自动续期ssl,只要在cron里面设置自动执行如下语句:

05 12 * * * certbot renew
10 12 * * * cp -u /etc/letsencrypt/live/gitlab.example.com/fullchain.pem /srv/gitlab/config/ssl/gitlab.example.com.crt
11 12 * * * cp -u /etc/letsencrypt/live/gitlab.example.com/privkey.pem /srv/gitlab/config/ssl/gitlab.example.com.key

这里要注意,certbot生成的文件有三个,经过我测试,拷贝证书文件的时候,如果是将cert.pem拷贝成gitlab.example.com.crt,虽然从浏览器访问该https://gitlab站点没问题,但git 做clone、checkout等操作的时候,却会报错:

SSL certificate problem: unable to get local issuer certificate

经测试,用fullchain.pem文件就可以。
当时碰到这个问题的时候,花了点时间,网上的解决办法多半是关掉Git的SSL校验功能,属于不求甚解。现在看来,这种某个特定网站的SSL报错,且证书发行者又是比较常见的发行者的情况,多半是证书文件有问题。

CentOS6.8 下升级php5.3.3 到php7.1

阿里云的ECS,从centos 6.5 镜像安装的,后来升到了6.8。PHP版本一直太低,PHP 5.3.3,对laravel也不支持,ThinkPHP5也不支持,就想干脆升到PHP 7.1吧。

其实没什么,就是先要启用remi源。然后卸载5.3.3, yum remove php* ,然后安装php71及一堆相关配件。

中间曾经虚惊一场,安装完后重启httpd,发现php文件没有被解析,直接输出了PHP代码。当时估计是php插件没安装全,当时有篇帖子里面有一个安装脚本,于是直接copy过来安装了一遍。然后就好了。

是周日晚上操作的,子夜开始操作,凌晨三点半左右才弄好睡觉。可惜当时没记录下来具体漏掉没安装的是哪个包,现在回忆也想不起来了。

CentOS+Apache环境下安装gitlab

环境:CentOS 6.8,  Apache 2.22.15

先根据官方教程,安装omnibus版本的安装包。官方源速度太慢,镜像选择了清华tuna。安装过程一路顺利。

关键是配置,gitlab默认内嵌nginx服务器,如果要使用Apache的话,需要禁用掉先,否则开机会报80端口冲突(话说这两天服务器被我重启了三四次。。。,之前170天左右稳定运行没动过)。

设置workhouse tcp连接,本机 127.0.0.1 端口8181

具体参考:

http://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

看文档,SELinux环境下需要做一些配置,本次安装因为本机SELinux已经禁用,因此没有遇到。

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications

根据使用的gitlab版本及本机apache版本,选择一个合适的配置文件,本机参考了:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-omnibus-apache22.conf

启动服务器,报503错误,查httpd的日志,发现Apache没有与127.0.0.1:8181连上。

如果要配置HTTPS访问,则配置文件参考:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/8-1-stable/web-server/apache/gitlab-omnibus-ssl-apache22.conf

配置编辑完成后重启httpd,结果报错:

Invalid command ‘SSLCompression’, perhaps misspelled or defined by a module not included in the server

查了一下,是因为Apache版本太低(2.22.15)的原因,起码需要2.22.24。针对低版本的临时解决方案如下:

修改 /etc/sysconfig/httpd文件,添加如下语句:

export OPENSSL_NO_DEFAULT_ZLIB=1

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#other-httpd-security-considerations

然后重启结果还是不行。—暂时没解决,谋求升级系统。

参考:

http://serverfault.com/questions/455450/how-to-disable-sslcompression-on-apache-httpd-2-2-15-defense-against-crime-bea

http://serverfault.com/questions/508520/how-to-disable-ssl-tls-compression-in-apache-2-2-16

CentOS+webmin环境安装OpenLDAP和phpldapadmin【未完成】

利用webmin里面的功能,安装了ldap server管理模块,当然了,在它提示下也安装了openldap。遗憾的是,webmin里面ldap server管理模块貌似不是最新,并不能一步到位正确配置openldap,需要手工配置。搞了很久,不少坑。

首先,是webmin里面的模块参数,里面的openldap的执行文件路径、配置文件路径等等,好多都跟我的环境不一样。对模块的参数进行了修改。然后也设置了openLDAP的一些参数:Suffix、RootDN、Rootpw等等。这些知识修改的文件,要配置成功,还得要服务器运行,并且webmin的模块能连上ldap server。但由于不是很熟,一直不能成功连上server。

中间也检查过slapd服务,确实开起来了,用前面设的RootDN和Rootpw去登录,就是不成功,报错“Invalid credential”。后来临机一动,停用了服务,直接执行

slapd -f /etc/openldap/slapd.conf

结果能连上了。研究了一下/etc/init.d/slapd文件,暂时没什么头绪。phpldapadmin安装上了,还没配置好,还不能成功登录。

CentOS中解决Yum Update过程中的依赖冲突

阿里云的CentOS6.7

在系统升级过程中,遇到提示glibc的版本冲突,断断续续折腾了三四天,今天解决了。

主要是不同的源导致的版本冲突。

进入/etc/yum.repos.d/,尝试将不太靠谱的源先移除,基本上centos开头和epel开头的比较可靠。其它的要具体问题具体分析。我应该是过去安装某些程序添加了第三方的源,这次都先备份移除了。

然后rpm –rebuilddb一下

然后再yum update

问题解决。

在CentOS中为vsftp 添加新用户的方法

这个不属于很难的操作,这里记录一下:

主要的要点,是很多时候我们只需要一个ftp账号,用来进行ftp登录及特定目录内的文件操作。不需要赋予这个账号其它权限。

第一步,添加用户:

# useradd –d /var/www -g ftp –s /sbin/nologin myftp

说明:

-s /sbin/nologin 是让其不能登陆系统
-d 是指定用户目录为/var/www ,这里可以替换成任何你需要的目录。
-g ftp 把用户加入到ftp组中(vsftp已创建)
myftp是ftp用户名,在配置时把这个myftp换成你的ftp用户名。

第二步,配置vsftp:

修改/etc/vsftpd/vsftpd.conf如下:

chroot_list_enable=YES //限制访问自身目录
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

编辑 chroot_list文件,将受限制的用户添加进去,每个用户名一行

改完配置文件,不要忘记重启vsFTPd服务器
[root@iconben.com root]# /etc/init.d/vsftpd restart

也可以参考这里:

CentOS 安装vsftp 建新用户的方法

在linux中添加ftp用户,并设置相应的权限

AWS CentOS 6.5上搭建PPTP VPN服务

主要参考了这篇网上文章:
centos 6.4 6.5安装搭建pptp vpn服务

有两个要点:
1,iptables里面要打开1723端口
2,要在AWS管理台里面,将EC2的安全组的inbound rule进行修改,以支持1723端口

另外,在修改 linux 内核文件 #vi /etc/sysctl.conf后执行/sbin/sysctl -p时,报错:
error: “net.bridge.bridge-nf-call-ip6tables” is an unknown key
error: “net.bridge.bridge-nf-call-iptables” is an unknown key
error: “net.bridge.bridge-nf-call-arptables” is an unknown key

解决方法如下:
modprobe bridge
lsmod|grep bridge

在我搭建完了后,发现了这篇文章,看起来有人做了一个自动化脚本,搞定一切:
使用AWS EC2搭建PPTP服务
我没有测试,不知道如何,读者诸君自己判断吧。