分类 服务器架构 下的文章

Ubuntu 14 .04 下安装Gitlab

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

安装依赖

sudo apt-get install curl openssh-server ca-certificates postfix

Postfix 是由于发邮件的邮件服务器,也可以用其他的代替

添加GitLab的包并进行安装

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce

一般来说会很慢,原因你懂的。

可以直接去官方下载安装包
https://about.gitlab.com/downloads/archives/

选择对应版本gitlab-ce_7.10.4~omnibus-1_amd64.deb

下载完成以后,通过dpkg命令安装

sudo dpkg -i gitlab-ce_7.10.5~omnibus-1_amd64.deb

配置和启动GitLab

sudo vim /etc/gitlab/gitlab.rb

smtp1

smtp2

smtp3

完成配置后,重新读取配置

sudo gitlab-ctl reconfigure

然后就可以通过 http://192.168.1.10:8080 来访问gitlab了

默认管理员的账户密码:

Username: root
Password: 5iveL!fe

登录后会提示重置新的管理员密码

参考:http://my.oschina.net/u/160089/blog/421168

[转载]PHP(FastCGI)在Nginx的alias下404的解决方案

在Nginx的官方wiki中如下描述
The alias directive cannot be used inside a regex-specified location. If you need to do this you must use a combination of rewrite and root.

在实际使用中alias下面的php返回404,而html确可以正常显示,解决方法如下

location / {
root /opt/www/htdocs/www;
index index.php index.html index.htm;
}

location /bbs/ {
alias /opt/www/htdocs/bbs/;
index index.php index.html index.htm;
}

location ~ ^/bbs/.+.php$ {
root /opt/www/htdocs;
rewrite /bbs/(.*.php?) /$1 break;
include conf/fcgi.conf;
fastcgi_pass 127.0.0.1:10080;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/www/htdocs/bbs$fastcgi_script_name;
}

即用root加rewrite替换alias

来源:http://blog.tcisv.cn/index.php/2009/06/phpfastcgi%E5%9C%A8nginx%E7%9A%84alias%E4%B8%8B404%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/

使用git部署php应用

之前网站部署,基本用sftp,现打算用上git,实现版本控制,利用hook钩子自动部署。

服务器环境 centOS
本地 win7

首先在服务器安装好git

yum install git

本地安装git for windows
https://git-for-windows.github.io/

在服务器上配置

新加用户git, 该用户将作为所有代码仓库和用户权限的管理者:

useradd git
passwd git

禁用shell登录

vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

初始化Git仓库,建立git 裸仓库,设置hook脚本(web目录需要git用户有权限,否则git的hook脚本将没有办法执行操作)

cd /var
mkdir repo
cd repo
git init --bare xxx.git 
chown -R git:git xxx.git
cd xxx.git/hooks/
vi post-receive
写入以下内容
#!/bin/sh
GIT_WORK_TREE=/home/wwwroot  git checkout -f
chmod +x post-receive

/home/wwwroot 为生产环境网站文件夹位置

本地配置

生成公钥 进入git-bash

ssh-keygen -t rsa -C "admin@xxx.com"

然后一直回车就行
生成的文件C:\Users\Administrator.ssh\id_rsa.pub

配置你的git用户

git-config user.name XXX
git-config user.email XXX@xxx.com

clone服务器上的仓库

clone coding add commit push

$ git clone git@serverip:/var/repo/xxx.git
Cloning into 'xxx'...
warning: You appear to have cloned an empty repository.
$ cat 'hello world!' > index.html
$ git add index.html
$ git commit -m 'first commit'
$ git remote add origin ssh://git@serverip:/opt/git/demosite.git
$ git push origin master

可以在服务器上看到/home/wwwroot/index.html 证明文件已经部署上去

centos6.7 安装 mysql 5.5.48

RPM安装mysql 5.5.48

下载对应的MySQL安装包rpm文件,可以去MySQL官方网站找到对应版本,一般需要下载3个文件
MySQL-server
MySQL-client
MySQL-devel

wget http://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-server-5.5.48-1.el6.x86_64.rpm
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-client-5.5.48-1.el6.x86_64.rpm
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/MySQL-devel-5.5.48-1.el6.x86_64.rpm


rpm -ivh MySQL-server-5.5.48-1.el6.x86_64.rpm
rpm -ivh MySQL-client-5.5.48-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.5.48-1.el6.x86_64.rpm

安装服务端出错:

[root@localhost ~]# rpm -ivh MySQL-server-5.5.48-1.el6.x86_64.rpm
warning: MySQL-server-5.5.48-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                ########################################### [100%]
        file /usr/share/mysql/charsets/Index.xml from install of MySQL-server-5.5.48-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64
        file /usr/share/mysql/charsets/armscii8.xml from install of MySQL-server-5.5.48-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64
        file /usr/share/mysql/charsets/ascii.xml from install of MySQL-server-5.5.48-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64
        file /usr/share/mysql/charsets/cp1250.xml from install of MySQL-server-5.5.48-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64
        file /usr/share/mysql/charsets/cp1256.xml from install of MySQL-server-5.5.48-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64

错误原因:包冲突了
centos6.7 basic server 版本 默认安装了mysql5.1,所以先卸载mysql5.1

yum -y remove mysql-libs-5.1*

再重新安装即可

rpm -ivh MySQL-server-5.5.48-1.el6.x86_64.rpm

启动mysql

[root@localhost ~]# service mysql start
Starting MySQL SUCCESS!

CentOS下安装官方RPM包的MySQL后找不到my.cnf解决办法

复制 /usr/share/mysql/my-medium.cnf 文件到/etc目录,

cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

局域网内mysql连接慢的解决办法

ping都很快,mysql连接慢,
原因是由于mysql对连接的客户端进行DNS反向解析。
有2种解决办法:
1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
2,在 my.cnf 中加入 –skip-name-resolve 。

ubuntu 14.04 LTS 安装nginx+mariaDB+php7+YAF

ubuntu apt-get方式安装nginx

参考
http://nginx.org/en/linux_packages.html

首先

in order to authenticate the nginx repository signature and to eliminate warnings about missing PGP key during installation of the nginx package, it is necessary to add the key used to sign the nginx packages and repository to the apt program keyring.

下载密钥

wget http://nginx.org/keys/nginx_signing.key

然后添加

sudo apt-key add nginx_signing.key

加入nginx的repository

cd /etc/apt/sources.list.d/
sudo vim nginx.list

若安装稳定版本,则输入以下内容

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

若最新版本,则输入以下内容:

deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

然后安装

apt-get update
apt-get install nginx

安装完成

nginx -v
nginx version: nginx/1.8.0

MariaDB数据库安装

MariaDB是一个开源数据库且100%与MySQL兼容,目标是替代MySQL数据库。

MariaDB的背景 :
2008年,MySQL被后来被Oracle在2010年收购的Sun Microsystems收购了。 最初被Sun公司的收购由于符合项目的需要而受到MySQL社区的欢呼,但是这种情绪并没有持续太久,接下来被Oracle的收购,不幸期望远远低于预 期。许多MySql的开发者离开了Sun和Oracle公司开始新的项目。在他们中间就有MySQL的创建者以及项目长期技术带头人之一的Michael ‘Monty’ Widenius。Monty和他的团队创建了MySQL的一个fork版本并且命名它为MariaDB。

默认上MariaDB的包并没有在Ubuntu仓库中。要安装MariaDB,我们首先要设置MariaDB仓库。

设置 MariaDB 仓库

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.3GolFM9PZ5 --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
gpg: requesting key 1BB943DB from hkp server keyserver.ubuntu.com
gpg: key 1BB943DB: public key "MariaDB Package Signing Key <package-signing-key@mariadb.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1

sudo add-apt-repository 'deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main'

安装 MariaDB :

sudo apt-get update
sudo apt-get install mariadb-server

在安装中,你会被要求设置MariaDB的root密码。

从命令行连接到MariaDB :

keyun@ubuntu-server:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 43
Server version: 10.0.23-MariaDB-1~trusty-log mariadb.org binary distribution

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

MariaDB 服务

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

以上只是在Ubuntu上装完MariaDB,下面要设置MariaDB允许远程访问

  1. 如果Ubuntu有设置防火墙或者iptables规则的话,请自行打开
  1. 3306端口是不是没有打开?

    使用nestat命令查看3306端口状态:

    ~# netstat -an | grep 3306

    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

    从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。

    解决方法:修改/etc/mysql/my.cnf文件。打开文件,找到下面内容:

    Instead of skip-networking the default is now to listen only on

    localhost which is more compatible and is not less secure.

    bind-address = 127.0.0.1

    把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。

    重新启动后,重新使用netstat检测:

    ~# netstat -an | grep 3306
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

  1. 把用户权限分配各远程用户。

    登录到mysql服务器,使用grant命令分配权限

    mysql> grant all on . to 你的用户名如root@'%' identified by '你的密码';

    完成后使用mysql命令连接,提示成功,为了确保正确可以再远程登陆测试一下。

安装PHP7

因为是最小化安装的ubuntu,先安装make

sudo apt-get install make

下载源码

sudo wget https://downloads.php.net/~ab/php-7.0.2RC1.tar.gz
sudo tar -zvxf php-7.0.2RC1.tar.gz
cd php-7.0.2RC1

根据鸟哥指示,安装gcc4.8

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline
and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量) 其实GCC
4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update

sudo apt-get install gcc-4.8 g++-4.8

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade

查看版本

gcc --version
gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

先安装依赖

sudo apt-get install libxml2
sudo apt-get install libxml2-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install curl
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libgd-dev
sudo apt-get install libxslt-dev

因本机lib目录在/usr/lib/x86_64-linux-gnu

./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib/x86_64-linux-gnu --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip

sudo make
sudo make install


sudo cp php.ini-development /usr/local/php/etc/php.ini
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
sudo cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

最后一条命令,作用是php-fpm随系统自启动。

利用php自带的php-fpm管理工具,可以很方便的start,stop,restart
把管理工具从源码包里放到php/sbin文件夹里,方便使用

sudo cp ./sapi/fpm/init.d.php-fpm /usr/local/php/sbin/
sudo cd /usr/local/php/sbin/
sudo chmod 755 init.d.php-fpm

配置nginx与php-fpm后,通过phpinfo(),看到如下
QQ图片20151231110549.png

至此,php7安装成功。

安装apache ab压测工具

sudo apt-get install apache2-utils 

压测一下echo "hello world"

ab -n 1000 -c 20 http://10.81.36.158:9528/

QPS 7000左右

接下来开启opcache

sudo vi /usr/local/php/lib/php.ini

找到opcache设置
添加以下内容

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

重启php-fpm

sudo kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

或者

sudo /usr/local/php/sbin/init.d.php-fpm restart

再次测试,QPS上升到8000以上

开启HugePages
参考:http://www.laruence.com/2015/10/02/3069.html

再次测试,QPS偶尔能彪上10000

安装YAF

sudo wget http://pecl.php.net/get/yaf-3.0.2.tgz
sudo tar -zvxf yaf-3.0.2.tgz

解压缩以后, 进入Yaf的源码目录, 依次执行(其中PHP_BIN是PHP的bin目录):

sudo /usr/local/php/bin/phpize

报错:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决办法:

sudo apt-get install m4
sudo apt-get install autoconf
sudo apt-get install libpcre3 libpcre3-dev 

phpize执行后:

sudo ./configure --with-php-config=/usr/local/php/bin/php-config
sudo make
sudo make install

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/

安装成功,修改php.ini,加入yaf扩展

extension=yaf.so

重启php-fpm,查看phpinfo()

QQ图片20151231170054.png

安装yaf成功

PS:

使用PDO过程中,出现 SQLSTATE[HY000] [2002] No such file or directory 错误

经查,是mysql.sock找不到

在phpinfo()中,看到pdo_mysql.default_socket的值是/tmp/mysql.sock

QQ图片20160106110713.png

但是在服务器上并没有这个文件

通过sudo service mysql status 命令

 * /usr/bin/mysqladmin  Ver 9.1 Distrib 10.0.23-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Server version          10.0.23-MariaDB-1~trusty-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 3 min 28 sec

找到sock文件的位置在/var/run/mysqld/mysqld.sock

于是在/tmp下 做个软链接
sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock

问题解决

通过localhost无法访问到数据库,但是通过IP可以
分析:这是典型的socket没有正确设置的情况。
连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127.0.0.1,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127.0.0.1也是分开设置的。当设置为127.0.0.1时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。
根据上面的sudo service mysql status命令
得到sock文件的位置在/var/run/mysqld/mysqld.sock

于是,修改php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

重启php-fpm
问题解决