Ubuntu安装Docker/Redmine/GitLab教程

兴趣所致,使用Docker部署下Redmine和GitLab,体验下Docker的魅力。

一、安装Docker

二、安装Redmie

地址 http://172.20.1.15
账号 admin
密码 admin

三、安装Gitlab

地址 http://172.20.1.16
账号 root
密码 5iveL!fe

集成安装脚本

PS1:安全起见,以下绑定的地址均为本地IP,无法对外提供服务,如需部署到服务器请酌情修改。
PS2:也可以安装 rinetd 软件包,实现任意端口转发。

请下载下面的集成安装脚本,修改password和email参数后,一键安装Redmine/GitLab吧~

#!/bin/bash
#
# Author  Anrip <mail@anrip.com>
# Website http://www.anrip.com/post/1811
# Refs https://github.com/sameersbn/docker-gitlab
# Refs https://github.com/sameersbn/docker-redmine
#

if [ ! `which docker` ]; then
    wget -qO- https://get.docker.com/ | sh
fi

docker network create --subnet=172.20.1.0/24 docker1

docker pull sameersbn/redis:latest
docker pull sameersbn/mysql:latest
docker pull sameersbn/gitlab:latest
docker pull sameersbn/redmine:latest

docker run --name app-redis -d \
    --net docker1 --ip 172.20.1.11 \
    --volume /srv/app-redis:/var/lib/redis \
    sameersbn/redis:latest

docker run --name app-mysql -d \
    --net docker1 --ip 172.20.1.12 \
    --env 'MYSQL_CHARSET=utf8' \
    --env 'MYSQL_COLLATION=utf8_general_ci' \
    --env 'DB_REMOTE_ROOT_NAME=root' \
    --env 'DB_REMOTE_ROOT_PASS=password' \
    --volume /srv/app-mysql:/var/lib/mysql \
    sameersbn/mysql:latest

MYSQL_CHARSET="DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci"
cat > /opt/app-mysql/init.sql <<EOF
    CREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password';
    CREATE DATABASE IF NOT EXISTS gitlabhq_production ${MYSQL_CHARSET};
    GRANT ALL PRIVILEGES ON \`gitlabhq_production\`.* TO 'gitlab'@'%.%.%.%';
    CREATE USER 'redmine'@'%.%.%.%' IDENTIFIED BY 'password';
    CREATE DATABASE IF NOT EXISTS redmine_production ${MYSQL_CHARSET};
    GRANT ALL PRIVILEGES ON \`redmine_production\`.* TO 'redmine'@'%.%.%.%';
EOF

sleep 30
docker exec -it app-mysql mysql "-e source /var/lib/mysql/init.sql"
rm -rf /opt/app-mysql/init.sql

docker run --name app-redmine -d \
    --net docker1 --ip 172.20.1.15 \
    --env 'REDMINE_PORT=80' \
    --env 'REDMINE_RELATIVE_URL_ROOT=/redmine' \
    --env 'SMTP_DOMAIN=anrip.com' \
    --env 'SMTP_HOST=smtp.exmail.qq.com' \
    --env 'SMTP_PORT=587' \
    --env 'SMTP_USER=team@anrip.com' \
    --env 'SMTP_PASS=anrip.2010' \
    --env='DB_ADAPTER=mysql2' \
    --env 'DB_HOST=172.20.1.12' \
    --env='DB_NAME=redmine_production' \
    --env 'DB_USER=redmine' \
    --env 'DB_PASS=password' \
    --volume /opt/app-redmine:/home/redmine/data \
    sameersbn/redmine:latest

docker run --name app-gitlab -d \
    --net docker1 --ip 172.20.1.16 \
    --env 'GITLAB_SSH_PORT=22' \
    --env 'GITLAB_PORT=80' \
    --env 'GITLAB_HOST=team.vmlu.com' \
    --env 'GITLAB_RELATIVE_URL_ROOT=/gitlab' \
    --env 'GITLAB_EMAIL=team@anrip.com' \
    --env 'GITLAB_EMAIL_DISPLAY_NAME=Vmlu Team' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=your-db-key-base' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=your-secert-key-base' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=your-opt-key-base' \
    --env 'GITLAB_USERNAME_CHANGE=false' \
    --env 'UNICORN_TIMEOUT=120' \
    --env 'SMTP_DOMAIN=anrip.com' \
    --env 'SMTP_HOST=smtp.exmail.qq.com' \
    --env 'SMTP_PORT=587' \
    --env 'SMTP_USER=your@anrip.com' \
    --env 'SMTP_PASS=your-mail-pasowrd' \
    --env 'REDIS_HOST=172.20.1.11' \
    --env 'REDIS_PORT=6379' \
    --env 'DB_ADAPTER=mysql2' \
    --env 'DB_HOST=172.20.1.12' \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' \
    --env 'DB_PASS=password' \
    --volume /opt/app-gitlab:/home/git/data \
    sameersbn/gitlab:latest

#sudo aptitude install -y rinetd
#sudo echo "12.34.56.78 22 172.20.1.16 22" >>/etc/rinetd.conf

Ubuntu安装GitLab

系统环境

Ubuntu-Server-14.04

参考文档

http://doc.gitlab.com/omnibus

安装GitLab

# 注册PPA源
wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh && rm script.deb.sh
# 安装必备包
sudo aptitude install -y openssh-server gitlab-ce postfix
sudo gitlab-ctl reconfigure
# 连接数据库
sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d 

Ubuntu/Linux 配置 Vlan

很久以前配置过,后来都是基于管理交换机配置;今天被逼无奈,又一次必须使用,怎么也弄不好,原来配置方式变了,郁闷!!

#开启内核支持
modprobe 8021q
echo "8021q" >>/etc/modules

#安装配置工具
aptitude install vlan

#增加虚拟接口
vconfig add eth1 30

以下内容添加到 /etc/network/interfaces

auto eth1

auto eth1.30
iface eth1.30 inet static
    address 10.20.30.19
    netmask 255.255.255.0
    network 10.20.30.0
    broadcast 10.20.30.255

Ubuntu恢复ext4误删除文件

凌晨的时候,小手一抖,格式化了一块历史备份磁盘,那就恢复一些重要数据吧:

aptitude install extundelete

#恢复/dev/sdc1中所有数据
extundelete /dev/sdc1 --restore-all 

#恢复/dev/sdc2中的归档目录
extundelete /dev/sdc2 --restore-directory /archive

#恢复/dev/sdc2中的密码文件
extundelete /dev/sdc2 --restore-files /oral/passwd

Ubuntu修复EFI+Grub

前段时间帮朋友修复一台服务器,并写了一篇文章 Ubuntu修复grub开机引导,今天自己果断遇到了这个情况,但有有些不同。

在esxi环境中使用efi+gpt模式安装了ubuntu14.04,结果启动后直接跳入grub界面(非诊断模式),无法启动进系统。

此时,感觉十分郁闷,于是只好输入 normal 正常进入系统。

然后,启动修复命令,至此结束(不过,仍莫名奇妙为何grub会无法引导,汗。。。)。

sudo update-grub
sudo grub-install /dev/sda

获取Google的ip段

google越来越难访问了,就算用hosts方法也要不断的修改,而且很容易搜到恶意的ip,劫持你的搜索。
下面给出一段命令来获取google的官方ip段,可以做智能路由,可以验证网上的ip是否为官方ip,等等。。。

nslookup -q=TXT _netblocks.google.com 8.8.8.8

整理结果如下:

64.18.0.0/20
64.233.160.0/19
66.102.0.0/20
66.249.80.0/20
72.14.192.0/18
74.125.0.0/16
173.194.0.0/16
207.126.144.0/20
209.85.128.0/17
216.58.192.0/19
216.239.32.0/19

命令行登录mysql提示Segmentation fault

自己编译的mysql,在使用命令行登录时,提示该错误,经过查阅资料,解决方案如下:

1、在源代码目录中,编辑文件 cmd-line-utils/libedit/terminal.c

2、terminal_set 方法中:
a、注释 char buf[TC_BUFSIZE];
b、把 area = buf; 改为 area = NULL;

3、重新编译

Nginx安装TWiki

一、安装必备的软件包

sudo locale-gen zh_CN
sudo locale-gen zh_CN.UTF-8
sudo dpkg-reconfigure locales
sudo perl -MCPAN -e 'install HTML::Template'
sudo apt-get install nginx fcgiwrap rcs

二、配置Nginx站点

server {

    listen       80;
    server_name  wiki.anrip.com;

    root /srv/webroot/wiki/;
    index index.html;

    rewrite ^/$          /bin/view;
    rewrite ^/([A-Z].*)  /bin/view/$1;
    rewrite ^/edit/(.*)  /bin/edit/$1;

    location / {
        deny all;
    }

    location ~ ^/pub/ {
        allow all;
    }

    location ~ ^/bin/ {
        allow all;
        fastcgi_pass   unix:/var/run/fcgiwrap.socket;
        fastcgi_split_path_info  ^(/bin/[^/]+)(/.*)$;
        include        fastcgi_params;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

}

三、配置TWiki站点

http://wiki.anrip.com/bin/configure
此处比较重要,可能会提示一些缺少的软件包等,务必要解决;
另外,语言等也是在此处设置,无需像网上所讲的需要从源代码修改配置。

纯CSS3实现瀑布流效果

1、该效果使用CSS3的column-width实现,和js版的瀑布流不同:图片将纵向排列。

2、代码中使用了一小段JS,和瀑布流效果无关,主要用来动态插入元素,并实现模拟翻页。

<!Doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>瀑布流(html5,css3,column) - by http://www.anrip.com</title>
<style>
* {
    padding: 0;
    margin: 0;
}
#waterfall {
    margin: 15px 15px -15px 15px;
    position: relative;
    -webkit-column-width: 200px;
       -moz-column-width: 200px;
            column-width: 200px;
}
#waterfall div {
    width: 100%;
    background: #eee;
    margin-bottom: 15px;
    display: inline-block;
}
</style>
</head>
<body>
<div id="waterfall"></div>
<input type="button" onclick="more()" value="加载更多..."/>
<script type="text/javascript">
    var i = 0;
    function more() {
        var w = document.getElementById('waterfall');
        for(var n = i + 30; i < n; i++) {
            height = Math.floor( Math.random()*200 + 200 );
            w.innerHTML += '<div style="height:' + height + 'px;">'+i+'</div>';
        }
    }
    more();
</script>
</body>
</html>

ESXi 5.x 强制识别 ssd 硬盘

1、登录到ESXi 5.x主机的命令行

2、执行如下命令来查看ESXi 5.x识别到的设备列表,执行如下命令

esxcli storage nmp device list

记录要修改的硬盘 VMW_SATP_XXXX 和 naa.xxxxxxxxxx 的值

3、在需要将之配置为SSD盘的设备上,执行如下命令

esxcli storage nmp satp rule add -s VMW_SATP_XXXX -d naa.xxxxxxxxxx -o enable_ssd

命令参数说明:
s – The SATP for which a new rule will be added.
d – Set the device when adding SATP claim rules.
o – Set the option string when adding a SATP claim rule.

4、接着回收一下设备,执行如下命令:

esxcli storage core claiming reclaim -d naa.xxxxxxxxxx

若无法回收设备,请安全重启即可。