阿里云的CentOS主机增加swap文件

在安装gitlab过程中,老是连不上,后来在unicorn的stderr日志看到说unable to allocate memory。于是研究内存问题。这才发现之前一直忽略的问题:阿里云的CentOS主机默认没有设置swap。于是找了方法,设置如下:

利用swap文件的方式增加虚拟的swap空间,不过执行性能会较实际swap分区稍差。
首先,以root身份连接到服务器
选择一个目录,如/var,进入
# cd /var/
创建swap文件,执行dd命令,增加一个1G的swap文件,根据Redhat公司的建议,swap分区最适合的大小是物理内存的1-2倍
# dd if=/dev/zero of=swapfile bs=1024 count=2048000
这条命令是从硬盘里分出一个2G大小的空间,挂在swapfile上
接着再把这个分区变成swap分区
# /sbin/mkswap swapfile
并使其成为有效状态
# /sbin/swapon swapfile
检查是否正确
# free -m
或者
# /sbin/swapon -s
可看到swap分区和大小以及使用情况

最后需要修改/etc/fstab 文件,使其可以随服务器重启时自动启动swap分区
# echo “/var/swapfile swap swap defaults 0 0” >>/etc/fstab
至此,已全部完成添加swap分区。

[转]2016年你应该学习的语言和框架

2016年你应该学习的语音和框架注:原文链接不详,侵删。2015年,软件开发界发生了很多变化。有很多流行的新语言发布了,也有很多重要的框架和工具发布了新版本。下面有一个我们觉得最重要的简短清单,同时也有我们觉得值得你在2016年花时间精力去学习的新事物的一些建议。大趋势在过去的几年里,有一个越来越明显的趋势是web应用的商业逻辑逐步从后端转移到了前端,然后后端变得只需要处理简单的数据API。这就让前端开发框架的选择变得尤为重要了。另外一个重要的改变是2015年发布的 Edge 浏览器。这是IE的替代品,拥有全新的界面和更好的性能。跟IE不一样的是它同样采用了跟 FireFox 和 Chrome 一样的快速发布策略。这让JavaScript 开发者社区能够以周为单位获得最新版JavaScript 和 Web标准特性支持而不是像过去一样需要等很多年。语言和平台Python 3.5 在今年发布了,带来了很多新特性 比如 Asyncio,为你带来了类似 node.js 的事件机制,还有type hints。 鉴于Python 3 终于真正地火起来了我们强烈建议你替换掉 Python 2。几乎所有的库都已经支持 Python 3 了,所以现在是一个升级历史遗留代码的好时机。PHP 7 是一个重要的新版本,这个版本修复了很多问题并且带来了新特性和性能提升(看看概览) 。 PHP 7 大约比 PHP 5.6 快2倍, 这对一些大型项目还有WordPress 和 Drupal之类的CMS系统影响很大。 我们强烈推荐 PHP之道,已经更新到最新的PHP7版本。 如果你需要更快的速度并且不介意换一个解释引擎的话,可以试试Facebook在用的 HHVM。JavaScript 也以ES2015 标准 (大家通常叫做 ES6)的形式发布了更新。 为我们带来了激动人心的新功能。 感谢大多数浏览器版本的快速更新, 对 ES2015 的支持已经非常棒了,并且还有 Babel.js 这样的工具可以让你的新代码跑在低版本浏览器上。Node.js 在这一年变化很多,开发者社区曾经分裂成 Node.js 和 io.js,然后又再度合并。 经历过这些之后的结局就是我们得到了一个有很多代码贡献者积极维护的项目,并且拥有了两个版本的 Node : 一个稳定的LTS (长期支持) 版本,这个版本注重稳定性,比较适合长期项目和大公司,和一个非长期支持但是最快实现新特征的版本。Swift 2 在今年初发布了。 这是 Apple 出品的旨在简化 iOS 和 OS X 开发的现代编程语言。 几周前, Swift 正式开源并已经兼容 Linux。这意味着你可以用它来编写服务端应用了。Go 1.5 在几个月前发布了, 并带来了重大的架构调整。 在 2015 年它变得越来越流行并被早期创业项目和开源项目所采纳。这门语言是 非常简单的,所以花一个周末你就能学会。TypeScript 是一个可编译成 JavaScript 的静态类型语言 。这是由微软开发的,所以跟Visual Studio 和开源的 Visual Studio Code editors 完美地集成了。它很快就要大红大紫了,因为即将到来的 Angular 2 就是用它写的。静态类型对大型团队的大型项目特别有用,所以如果你正在大型团队中做大型项目,或者仅仅出于好奇,你也应该尝试一下 TypeScript 。如果为了好玩儿,你也可以试试某种函数式编程语言比如 Haskell 或者 Clojure。也有有趣的高性能语言比如 Rust 和 Elixir。如果你在找一份程序员的工作的话, 职业开发语言比如Java (在第8版中有一些很好的新特性) 和 C# (感谢 Visual Studio Code 和 .net core 实现了跨平台开发和运行) 都值得你在2016年投入时间。挑一个或几个学习: Python 3, Go, PHP 7, ES2015, Node.js, Swift, TypeScriptJavaScript 框架JavaScript框架是web开发技术栈中非常重要的一部分,所以我们单独拿一小节来说这个。今年有两个新标准—— Service Workers 和 Web Assembly,基本改变了现代 Web APP的开发方式。还有一些我们觉得你在2016年应该保持关注的框架新版本发布。Angular.js 已经成为了大型企业首选的 JavaScript 框架。 这个框架即将发布下一个大版本的消息相信大家已经听过一段时间了, 在今年初的时候 Angular 2 发布了开发者预览版。 相对 Angular 1 而言是一次颠覆性的重构,而对我们而言带来了巨大的改进。一旦正式发布就很有可能成为企业应用开发框架的首选,所以 Angular 2 的开发经验将会是你简历里很好的一个加分项。我们建议再等几个月直到最终版正式发布之后才用于生产,不过你不妨现在就读一读他们的 快速上手指南。React 在2015年里持续升温并且持续升级,越来越多的新项目采用它开发。 几个月前他们发布了新的开发工具 。 Facebook 还发布了用于开发支持 Android 和 iOS 平台原生应用的 React Native 框架,这个框架使用了原生界面配合运行在后台的JavaScript线程实现基于React开发原生应用。 可以参考我们今年发表的React初级教程 。Polymer 1.0 是在5月份发布的。 这是第一个稳定且可用于生产的版本. Polymer 主要是基于 Web Components 标准, 这是一份将 HTML, JS 和 CSS 打包成独立组件并便于快速引用的标准。目前只有 Chrome 和 Opera 支持 Web Components标准,但是 Polymer 搞定了浏览器兼容性问题。Ember.js 也发布了一个新版本。 Ember 2 带来了模块化功能、废弃了一些旧特性并提升了性能。 Ember 遵循语义化版本并且开发团队尽可能保证大家能够平滑升级。如果你需要一个稳定且易于升级的框架的话,Ember是个不错的选择。挑一个或几个学习: Angular 2, React, Ember.js, Polymer, Web Components, Service Workers前端Bootstrap 在过去的一年里变得更加流行了,正在成为Web开发的标配。 使用SASS 并支持 flexbox 的第四版将在几个月之后发布,官方保证可以从V3平滑升级 (不会像2年前从 v2 升级到 v3 那样 ), 所以尽管放心,你学的第3版的相关知识照样会适用于第4版。Foundation 是另一个可替代Bootstrap的前端框架。 第6版在年初的时候发布了,这个版本主要侧重于模块化,你可以根据需要定制自己需要的部分以便缩短加载时间。MDL 是一个Google官方发布的用于开发material design web app 的框架。 这个框架在今年初发布并和Polymer目标相似,但是更容易上手。我们曾经写过一篇 精彩的 MDL 与 Bootstrap 差异总结。CSS预处理器也在持续改良。LESS 和 SASS 是当下最流行的两个,大部分功能都差不多。但是,最新的 Bootstrap 4 都已经转向了 SASS,所以2016年要学的CSS预处理器中 SASS 获得了一些优势。当然了,也还有更新的 PostCSS 工具值得留意,但是我们强烈建议先掌握了预处理器再来学这个。挑一个或几个学习: Bootstrap, MDL, Foundation, SASS, LESS, PostCSS后端这几年的Web开发有一个非常明显的趋势。越来越多的应用逻辑转移到了前端,然后后端仅仅是API。然而传统的后端生成页面的应用依然还有生存空间,所以我们觉得学一个经典的全站框架依然是非常重要的。关键取决于你更喜欢那种语言,可选择的非常多。用PHP你可以选 Symfony, Zend, Laravel (还有 Lumen, 这是新一代专注于API开发的框架), Slim 等。用Python 有 Django 和 Flask 。用 Ruby 有Rails 和Sinatra。用Java有 Play 和 Spark。用Node.js你可以选择 Express, Hapi 和 Sails.js ,还有 Go 语言的Revel。AWS Lambda去年就已经发布了,但是这个概念到现在才稳定并能用于生产。这是一种可无限扩展的完全取代传统后端服务器的云服务。你可以根据API被访问时的特定条件或者路由来定义不同的响应方法。这意味着你可以完全不用管服务器。另一个趋势是静态站点生成器比如 Jekyll 和 Octopress(这里有一个完整的同类清单)。这类工具的主要功能是把一堆文本和图片文件渲染成一个完整的静态网站。那些以前通常自己搭一个Wordpress博客程序的开发者现在更喜欢事先生成并直接上传一个静态网站。这样会更加安全(没有后端服务器也不需要数据库)并且性能非常好。结合 MaxCDN 或 CloudFlare之类的CDN服务可以让用户就近访问,明显减少等待时间。挑一个学习: 传统的全栈后端框架, AWS Lambda, 一种静态生成器内容管理系统(CMS)我们主要介绍两种最流行的 CMS系统。都是用PHP写的并且易于部署和上手。他们都因为PHP7的发布获得了明显的速度提升。最近几年 WordPress 已经变得早就不仅仅是个博客程序了。它是一个成熟的 CMS/框架,配合插件可以做任何一种网站。高质量的 WordPress 皮肤是一个巨大的市场,很多自由职业者以 WordPress 相关开发为生。配合类似 WP-API 之类的项目你可以把Wordpress变成一组 REST API 。Drupal 8 在今年发布了。这是一次侧重现代开发最佳实践的重构。使用了 Symfony 2 组件、 Composer 包管理器 和 Twig 模板引擎。成千上万的网站在使用 Drupal,它确实是以内容为主的门户网站的一个很好的选择。数据库这一年Web开发社区对 NoSQL 数据库失去了一些热情,重新回到了关系型数据库比如 Postgres 和 MySQL 身边。这方面著名的例外是 RethinkDB 和 Redis ,他们都很火,我强烈建议你在2016年都试试。MySQL 是最火并且大部分主机供应商都支持的开源数据库。在5.7版里,MySQL 也提供了JSON columns来存储非关系型数据。如果你刚开始接触后端开发,你可能正在找连接到服务器已安装的数据库的方法。很可能是旧版本的,所以你没办法尝试 JSON 类型数据。MySQL已经包含在了很流行的 XAMPP 或 MAMP 之类的软件包里,所以上手很容易。挑一个学习: Redis, RethinkDB, MySQL/MariaDB, PostgreSQL移动应用移动平台一直在进步并且智能机的硬件配置现在跟低端笔记本的性能差不多了。这对于 hybrid 移动开发框架来说是个好消息,基于web技术开发的移动应用将得到更加顺滑、更像原生的体验了。我们曾经写过一篇不错的 Hybrid应用开发框架概览 你或许会感兴趣。最火的 Ionic 框架 和 Meteor 都在最近发布了1.0版本且都适合做移动应用开发。Facebook 开源的 React Native,可以在后台JavaScript进程里运行 React 组件并更新原生的UI界面,让你可以用几乎同一套代码同时写 iOS和Android应用。挑一个学习: Ionic, React Native, Meteor编辑器和开发工具Atom在今年发布了1.0。它是一款使用web技术开发的免费且功能强大的代码编辑器。它背后有一个很多大开发者社区(译者注:github)提供了很多扩展包。它提供好用的自动完成并集成了代码重构和校验工具。差点忘了它还有很多漂亮的皮肤可以选择,并且你可以自己写 CoffeeScript 和 CSS 来定制自己喜欢的皮肤。Facebook 已经这么干了,并且发布了名为 Nuclide 的编辑器。微软在今年年初发布的 Visual Studio Code 给了大家一个惊喜。这是一款支持多种语言并兼容 Windows, Linux 和 OS X 平台的轻量级IDE。它提供了强大的智能代码检查并集成了 ASP.Net 和 Node.js 的调试工具。NPM,Node.js的包管理器,火得一塌糊涂并已经成为了前端和node开发者的标准包管理器。这是帮你的项目管理 JavaScript 依赖最简单的方法并且上手很容易。目前哪怕是一个人开发也有必要用 Git。它的分布式模型让你可以把任何一个文件夹变成一个版本控制仓库,然后你可以把这个仓库发布到 Bitbucket 或 Github,同步到其他电脑上。如果你还没用过 Git,我们强烈建议你把它加入你2016年需要学习的清单里面。挑一个学习: Atom, Visual Studio Code, NPM, Git搞物联网树莓派基金会提前给我们送来了圣诞礼物,Raspberry PI Zero 一种只卖 5 美金的高性能电脑发布了。它搭载了Linux,所以你可以把它变成一台服务器,一个家用自动化装置,一面智能镜子,或者把它集成到别的电器里面打造一个你梦寐以求的能联网控制的咖啡机。2016年是你应该拥有树莓派的一年。

用CentOS 7和Docker搭建Gitlab环境

先安装好CentOS 7 操作系统

操作之前,先开启ssh,以方便后续操作:
service sshd start
chkconfig sshd on

第一步,系统升级到最新:
yum -y update

第二步,安装docker:
老版本是:yum -y install docker

从Docker官方镜像安装新版本:
https://docs.docker.com/engine/installation/linux/centos/

然后注册自动启动并立即启动:
chkconfig docker on
service docker start

第三步,由于众所周知的原因(Fork the G.F.W.),国内访问Docker Hub常常很慢甚至访问不了,因此可以改用阿里云的Docker Registry(根据服务器选择合适的加速器,阿里云、腾讯都有):

# 系统要求 CentOS 7 以上,Docker 1.9 以上。

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service sudo sed -i “s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon –registry-mirror=https://XXXXX.mirror.aliyuncs.com|g” /etc/systemd/system/docker.service sudo systemctl daemon-reload sudo service docker restart

其中的https://XXXXX.mirror.aliyuncs.com 即是阿里云Docker镜像访问加速器地址。需要自己去申请一下,免费的,路径:管理控制台-容器服务-指南-镜像管理-加速器。

第四步,运行Gitlab-ce Docker镜像:

docker run –detach \
–hostname gitlab.iconben.com \
–publish 443:443 –publish 80:80 –publish 22:22 \
–name gitlab \
–restart always \
–volume /srv/gitlab/config:/etc/gitlab \
–volume /srv/gitlab/logs:/var/log/gitlab \
–volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

以上是用指定参数来运行官方的gitlab(社区版本)的容器。要注意的是,可能在CentOS上默认SELinux是开启的,如果是这样的话,以上命令运行会权限不足,容器运行不成功,此时应该运行如下命令:

docker run --detach \
    --hostname gitlab.iconben.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab:Z \
    --volume /srv/gitlab/logs:/var/log/gitlab:Z \
    --volume /srv/gitlab/data:/var/opt/gitlab:Z \
    gitlab/gitlab-ce:latest

以上的端口映射,如果本机80端口已经被Apache或者Nginx占用,则需要改到另外端口。22端口也是,可能与sshd冲突,一样可以修改。修改方式有三种:

1,Container生成之前,也就是在执行以上命令行之前,修改命令行参数,如:

docker run –detach \
–hostname gitlab.iconben.com \
–publish 443:443 –publish 880:80 –publish 822:22 \
–name gitlab \
–restart always \
–volume /srv/gitlab/config:/etc/gitlab \
–volume /srv/gitlab/logs:/var/log/gitlab \
–volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

2,如果Container已经生成,这时候可以 docker rm gitlab删除该容器,然后用改过端口的命令行重新生成;

3,如果不想删除重建Container,可以停止docker,然后修改Container的配置文件:

docker stop container
service docker stop
vi /var/lib/docker/%container_id%/hostconfig.yml

在这个文件里面可以修改端口映射,改完再启动。
**注意:一定要停用整个service,改完配置文件,再启动service才生效。否则service还开着的时候,配置修改了也不会生效,还会被自动改回去。

第五步,配置与使用Gitlab

以上步骤操作得当的话,这时候浏览器里面输入网址,就应该已经能访问到gitlab了。初始会要求设置新密码。然后就可以做各种新建用户、新建项目、设置权限等操作了。

有些配置如external url要修改的话,需要改gitlab的配置文件。这时候可以停用gitlab,然后修改,方式有两种:

1,由于存储是加载的外部卷,可以根据之前启动Docker的时候指定的存储卷位置,直接在Host中修改对应文件,如前面例子中的参数:–volume /srv/gitlab/config:/etc/gitlab \,说明在docker内的/etc/gitlab文件夹,在宿主机上实际是放在/srv/gitlab/config位置的。

2,就是通过 docker exec gitlab /usr/bin/bash 来进入docker命令行操作,譬如 vi /etc/gitlab/gitlab.rb来修改gitlab配置文件。

3,追加还有一种方式,就是删除容器(不删除配置和数据),然后用新的参数重新运行创建容器的命令,因为OMNIBUS 的Gitlab容器镜像支持通过命令行直接传递配置进去,这些配置会存储在Docker的容器配置里面,并且会在启动容器后自动覆盖容器内文件系统中所保存的Gitlab配置,具体可以参见OMNIBUS关于Gitlab镜像使用说明的官方文档。

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

问题解决。

网站实现HTTPS协议

HTTPS协议的作用和好处就不多说了。

整个过程的步骤,一是要找到一个证书。

二是安装证书,尤其对于一台服务器部署多个虚拟站点的情况。

证书方面,虽然自己也可以制作,但用户访问的时候,会提示需要用户接受该证书,这个很不友好。换成浏览器能接受的CA发行的证书就没有这个问题了。收费的不用说,贵的便宜的都有,一般的主机托管服务商都会有。免费的找到几家公认可以用的,一家是国内的wosign,一家是国外的startcom,应该都好用,免费ssl主要是针对域名进行验证的,申请过程中需要证明对域名的拥有权,可以通过在网站根目录上传特定文件,或者添加特定二级域名来验证。过程中还发现赛门铁克也注册了一个叫freessl.com的网站,里面显示即将推出免费ssl,咱们拭目以待吧。

安装证书一般都有教程,本人是阿里云的ECS服务器,centos6.7 + apache,找到对应教程即可。值得注意的是,阿里云版本的ssl配置文件位置和独立安装的centos的ssl配置文件的位置稍有不一样。

可以参考:https://freessl.wosign.com/aliyun-ssl.html

由于多数免费ssl会有对应的域名限制(譬如wosign上面最多允许一个证书对应5个域名),所以当单台服务器上有超过五个站点都需要启动https的时候,需要再申请另外的ssl。这时候,需要注意ssl配置文件里面的虚拟主机的设置。要考虑用不同的端口来对应不同的证书。