服务器配置——内网CentOS7/PHP/Apache/Nginx/SVN/Git/GitLab服务器实战


完整实战,验证通过,可用…..

此文章看着好长,或者逼格好高的样子。其实很简单,只是因为这些是后端开发或者公司负责项目和内部服务器搭建人员必会的!

  • 适合人群:
    • PHP后端开发
    • 小团队或部门组负责人
    • 服务器或相关运营负责人
    • 想要学习PHP或者转型后端开发
    • 业务学习,纯属搞着玩

这里就不对每一个模块和内容做解释了,只用实战记录,方便后期查阅也希望能得到更多前辈的点评和指点!

首先分享一份教程,这是慕课网实战阿里云主机(ECS)与CentOS7教程!

注:本文部分外部操作基于Mac系统

1.U盘制作Centos系统盘

准备

具体制作安装U盘的步骤由于过于简单,这里就过多说明,不知道的请出门左转找度娘。

2.Centos安装

只要U盘正确制作,关于网上教程非常多,也是非常简单的!

有些地方需要注意的:

    1. 可以的话,最好在安装信息摘要的时候连上网,方便一些相关的更新和下载。
    1. 出入学习推荐使用桌面版,当然如果比较喜欢专业或者非入门级的那就使用最小安装,最小安装是基本上很多东西都没有,连网络和相关需求都不支持。
    1. 关于分区可以使用自动分区,或者根据教程做相应的分配,建议不要自己随意配,不然后面难免出现问题。

期间遇到了一个问题

/dev/root does not exist, could not boot

网上都说直接修改

vmlinuz initrd=initrd.imginst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

  • 改为:

vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sda4 quite

试了好几次都不行,最后发现是空格的问题,因为我格式化U盘之后直接命名为了Centos 7,导致产生了空格,而无法读取到U盘

解决方法:
  1. 到windows里面修改U盘名称(例如 ‘Centos7’)
  2. 进入U盘目录 进入 EFI/boot
    • 修改grub.cfg文件,CENTOS\x207 全部修改为U盘名称(CENTOS7)
  3. 重启安装
  4. 正常安装并显示交互界面

总结:名称强烈不建议出现中文空格,容易出bug

安装完成之后,进入Centos命令行查看IP地址,然后在ssh连接工具上尝试连接,并且进行一些操作

  • CentOS7查看ip地址的方式为:
    • ip addr

曹理鹏(iCocos)-梦工厂

这里有一点需要知道的是,阿里云或腾讯云或者其他说明鬼云,都是提供的最新的相关Linux系统,所以一般系统安装是不需要我们来做的,除非有一些特殊的情况。

Ip地址也是直接对外提供,不需要我们去查的,所以就XXX云来说,我们做的事情就是从这里往后操作的流程。甚至有些会给你一些更完整或者更多的功能支持。

如果有需要需要额外配置其他相关功能和服务,推荐看这里:

3.Centos系统配置PHP服务器

注意:以下安装,我都是用的root权限。

一、关闭防火墙

查了资料,说法是,CentOS7用的是Firewall-cmd,CentOS7之前用的是iptables防火墙;要想让外网能访问到apache主目录,就需要做以下的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
停止firewall 
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
/**
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
*/
查看默认防火墙的状态
firewall-cmd --state
/**
not running
*/

或者可以这么做:

1
2
3
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

二、安装Apache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
安装Apache
yum install httpd -y
--- 一下httpd可以直接使用httpd.service ---
启动Apache
systemctl start httpd
停止Apache
systemctl stop httpd
重启Apache
systemctl restart httpd
Apache开机自启
systemctl enable httpd
/**
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd
/system/httpd.service.
*/

在本机浏览器中前面ip addr查到的ip地址,如果看到apache默认的页面–有Testing 123…字样,便是成功安装了apache服务

曹理鹏(iCocos)-梦工厂

三、安装php

1
2
3
4
5
6
安装php
yum install php php-devel或者yum -y install php
安装Php扩展
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
重启Apache:
systemctl restart httpd或者systemctl restart httpd.service

然后,你可以写一个php文件在浏览器中运行一下了;

1
2
vi /var/www/html/info.php
<?php phpinfo(); ?>

然后,在自己电脑浏览器输入 http://172.20.10.2/info.php
运行,会出现php的一些信息,如果出现如下界面,说明已经成功了

曹理鹏(iCocos)-梦工厂

四、安装mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
安装MySQL
yum install mariadb mariadb-server -y
启动MariaDB
systemctl start mariadb
停止MariaDB
systemctl stop mariadb
重启MariaDB
systemctl restart mariadb
设置开机启动
systemctl enable mariadb
/**
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/syste
md/system/mariadb.service.
*/

设置root帐户的密码

1
mysql_secure_installation

然后会出现一串东西,可以仔细读一下,如果你懒得读,就在提示出来的时候,按Enter就好了,让你设置密码的时候,你就输入你想要的密码就行,然后继续在让你选择y/n是,Enter就好了;当一切结束的时候,你可以输入

1
mysql -u root

验证一下,输入密码,正常连接并可进行mysql操作

有时候由于安装命令的问题,会出现下面的报错,建议重现使用上面的操作一遍

1
2
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock
' (2)

五、配置Mysql,设置MySQL密码

1.连接MySQL
1
mysql -u root
2.设置密码
1
2
mysql> set password for 'root'@'localhost' = password('root');
mysql> exit
3.远程授权连接mysql
1
2
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
配置生效:FLUSH PRIVILEGES;
再次连接线使用:
1
mysql -u root -p

然后输入上面的root密码

六、将PHP和MySQL关联起来

1
yum search php

选择你需要的安装:

1
yum -y install php-mysql

七、安装常用的PHP模块

例如,GD库,curl,mbstring,…

1.安装:
1
yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
2.重启apache服务
1
systemctl restart httpd.service

然后,再次在浏览器中运行info.php,你会看到安装的模块的信息;

至此,LAMP环境就搭建好了……

4. nginx安装与配置

Nginx有三种安装方式

  1. 安装包编译安装(相对麻烦)
  2. yum源安装
  3. 使用docker安装

需确认80端口是否开放,如果是阿里云,得在控制台那边设置端口组开放

#确保防火墙是否开放80端口 如果没有
firewall-cmd --permanent --zone=public --add-port=80/tcp 
#重新加载
firewall-cmd --reload
#查看列表
firewall-cmd --list-all

这里推荐直接使用yum源安装,因为比较快捷,方便

#yum安装nginx
sudo yum install -y nginx

#启动nginx
sudo systemctl start nginx.service

#设置开机自启动
sudo systemctl enable nginx.service

#yum安装的nginx配置文件默认存放在 /etc/nginx/nginx.conf 查看
vi /etc/nginx/nginx.conf 

#卸载
yum remove nginx

如果可以你也可以直接使用安装包编译安装

# 下载源码
$ wget http://nginx.org/download/nginx-1.13.0.tar.gz

# 解压源码
$ tar xvf nginx-1.13.0.tar.gz

# 进入源码目录
$ cd nginx-1.13.0
# 配置、编译、安装
$ ./configure
$ make
$ make install

有时候回遇到,输入网址之后不是官方默认界面,可能是因为

有epel源的时候并且用yum install nginx 安装就会显示Welcome to nginx on Fedora!,因为epel源就是Fedora维护的

5.Centos配置Git服务器

1、安装Git

首先需要安装Git,可以使用yum源在线安装:

1
yum install -y git

2、用户操作

创建一个git用户,用来运行git服务

1
2
3
adduser git
passwd git
/*输入git用户密码*/

3、git初始化

初始化git仓库:这里我们选择/git/icocos.git来作为我们的git仓库

1
2
3
mkdir /git -p
cd /git
git init --bare icocos.git #初始化仓库

执行以上命令,会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。

4、然后,把owner改为git

1
chown git:git icocos.git  -R

5、clone远程仓库

在这里,Git服务器就已经搭得差不多了。下面我们在客户端clone一下远程仓库。

Mysql可以直接使用命令行,或者使用Tower

1
2
3
4
5
6
7
git clone git@172.20.10.2:/git/icocos.git
Cloning into 'icocos'...
git@172.20.10.2's password:
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), 2.63 MiB | 1.63 MiB/s, done.

输入git账户对应的密码
曹理鹏(iCocos)-梦工厂

然后就可以根据公司或者具体项目做相应拓展和配置

Git实战记录总结

配置与初始化实战流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@centos /]# yum install -y git                                                                                                    
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.jdcloud.com
* extras: mirrors.163.com
* updates: mirrors.163.com
软件包 git-1.8.3.1-20.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@centos /]# adduser git
[root@centos /]# passwd git
更改用户 git 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos /]# mkdir git
[root@centos /]# cd git
[root@centos git]# ls
[root@centos git]# mkdir SwiftProject
[root@centos git]# cd SwiftProject/
[root@centos SwiftProject]# ls
[root@centos SwiftProject]# git init --bare SwiftProject.git #初始化仓库
初始化空的 Git 版本库于 /git/SwiftProject/SwiftProject.git/
[root@centos SwiftProject]# chown git:git SwiftProject.git -R
内外网访问和Clone
1
git@172.20.10.2:/git/SwiftProject/SwiftProject.git

然后就是根据需求创建项目提交或拉去代码

6.Centos配置SVN服务器

1、subversion安装

1
[root@centos /]# yum install subversion

2、新建一个目录用于存储SVN目录

1
[root@centos /]mkdir /svn

3、SVN方式创建SVN项目目录

1
[root@centos svn]# svnadmin create /svn/SwiftProject/

4、SVN项目目录查看内容

1
2
3
4
5
6
7
8
[root@centos svn]# ll SwiftProject
总用量 8
drwxr-xr-x. 2 root root 54 1月 12 01:09 conf
drwxr-sr-x. 6 root root 233 1月 12 01:09 db
-r--r--r--. 1 root root 2 1月 12 01:09 format
drwxr-xr-x. 2 root root 231 1月 12 01:09 hooks
drwxr-xr-x. 2 root root 41 1月 12 01:09 locks
-rw-r--r--. 1 root root 229 1月 12 01:09 README.txt
  • 以下关于目录的说明:
    • hooks目录:放置hook脚步文件的目录
    • locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
    • format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号
    • conf目录:是这个仓库配置文件(仓库用户访问账户,权限)

5、SVN配置文件

cd conf/进入conf目录(该svn版本库配置文件),一共有三个文件

  • authz文件是权限控制文件
  • passwd是帐号密码文件
  • svnserve.conf SVN服务配置文件
a、编辑用户文件passwd,新增两个用户:svn。

vim conf/passwd

1
2
[users]
svn = svn
b、编辑权限文件authz,用户admin设置可读写权限,guest设置只读权限。

vim conf/authz

1
2
[/]
svn = rw
c,进入所建立仓库的配置目录/svn/project/conf修改文件svnserve.conf

vim conf/svnserve.conf

1
2
3
4
anon-access = none     //匿名访问权限
auth-access = write //认证用户权限
password-db = passwd //密码配置文件路径,默认为同目录的passwd文件
realm = My First Repository //认证标记而已

6、启动SVN服务器

1
svnserve -d -r /svn --listen-host 172.20.10.2

-d表示在后台运行,-r指定了服务器的根目录,这样在SVN客户端就可以用svn://172.20.10.2/SwiftProject来访问SVN服务器

1
2
3
4
svn co svn://172.20.10.2/SwiftProject
Checked out revision 0.
ls
SwiftProject

曹理鹏(iCocos)-梦工厂

注意

使用以下命令可以查看正在运行的SVN进程
ps -ef | grep svn
使用命令 killall svnserve 来停止SVN服务器。

SVN实战记录总结

配置与初始化实战流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@centos /]# yum install subversion                                                                                                
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.jdcloud.com
* extras: mirrors.163.com
* updates: mirrors.163.com
软件包 subversion-1.7.14-14.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@centos /]# svnadmin create /svn/project
[root@centos /]# cd /svn/SwiftProject
[root@centos SwiftProject]# pwd
/svn/SwiftProject
[root@centos SwiftProject]# ls
conf db format hooks locks README.txt
[root@centos SwiftProject]# cd conf/
[root@centos conf]# ls
authz passwd svnserve.conf
[root@centos conf]# vi svnserve.conf
[root@centos conf]# vim authz
[root@centos conf]# vim passwd
[root@centos conf]# cd /
[root@centos /]# svnserve -d -r /svn --listen-host 172.20.10.2
内外网访问和Co
1
svn co svn://172.20.10.2/SwiftProject

然后就是根据需求创建项目提交或拉去代码

7.Centos配置GitLab服务器

    1. 安装依赖软件
1
yum -y install policycoreutils openssh-server openssh-clients postfix
  • 2.设置postfix开机自启,并启动,postfix支持gitlab发信功能
1
systemctl enable postfix && systemctl start postfix

我的是centos7,所以我在https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7中找了个gitlab8.0.0版本,建议下载一个比较新的版本,我这里选了一个比较旧的版本仅仅是实验

1
2
3
下载rpm包并安装:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm
rpm -i gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm
  • 4.修改gitlab配置文件指定服务器ip和自定义端口:

vim /etc/gitlab/gitlab.rb

1
2
3
4
5
## Url on which GitLab will be reachable.                                  
## For more details on configuring external_url see:
## https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566
f0758d4a27857b52a3/README.md#configuring-the-external-url-for-gitlab
external_url 'http://172.20.10.2:8081'

最后,退出并保存

注: 这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放相对应得端口

  • 5.重置并启动GitLab
1
2
gitlab-ctl reconfigure
gitlab-ctl restart

提示“ok: run:”表示启动成功

1
2
3
4
5
6
7
ok: run: gitlab-git-http-server: (pid 3922) 1s
ok: run: logrotate: (pid 3929) 0s
ok: run: nginx: (pid 3936) 1s
ok: run: postgresql: (pid 3941) 0s
ok: run: redis: (pid 3950) 0s
ok: run: sidekiq: (pid 3955) 0s
ok: run: unicorn: (pid 3961) 1s
  • 6.访问 GitLab页面

如果没有域名,直接输入服务器ip和指定端口进行访问,会出现如下页面并提示:You need to sign in before continuing.

曹理鹏(iCocos)-梦工厂

初始账户: root 密码: 5iveL!fe

注意,第一次登录最好修改密码

曹理鹏(iCocos)-梦工厂

修改完成之后,就可以创建项目或者根据具体需求创建分组

曹理鹏(iCocos)-梦工厂

  • 7.设置gitlab发信功能,需要注意一点:

发信系统用的默认的postfix,smtp是默认开启的,两个都启用了,两个都不会工作。

我这里设置关闭smtp,开启postfix

1
2
关闭smtp方法:vim /etc/gitlab/gitlab.rb
找到#gitlab_rails['smtp_enable'] = true 改为 gitlab_rails['smtp_enable'] = false
修改后执行gitlab-ctl reconfigure

另一种是关闭postfix,设置开启smtp

+ 相关教程请参考[官网](https://doc.gitlab.cc/omnibus/settings/smtp.html)

测试是否可以邮件通知:

登录并添加一个用户,我这里使用qq邮箱添加一个用户

曹理鹏(iCocos)-梦工厂

创建成功后,就可以去对应的邮箱查看邮件并设置密码

曹理鹏(iCocos)-梦工厂

登录qq邮箱,可以收到邮件通知(如果收不到,请查看垃圾邮箱或者检查邮件是否被拦截并删除,如果有请添加到白名单并删除用户再重新添加用户就可以收到了,否则请检查邮件日志并做好相关设置)

到此,GitLab就基本配置完毕,如果有需要和可以结合GitLab,Jenkins,Fastlane实现CI和CD,当然这些一般的小公司不太会用到……

错误一:报错502

gitlab报502 Whoops, GitLab is taking too much time to respond

配置启动后,访问gitlab,出现:502 ,Whoops, GitLab is taking too much time to respond. 出现这个问题,一般都是你本机的8080端口已经被其他的应用程序占用。

  • 方法一:

GitLab在使用的过程中,会开启8080端口,但是如果8080端口被其他的应用程序占用,则GitLab的该项服务不能使用,所以访问GitLab会失败。

  • 方法二:

一般是权限问题,解决方法:chmod -R 755 /var/log/gitlab

如果还不行,请检查你的内存,安装使用GitLab需要至少4GB可用内存(RAM + Swap)! 由于操作系统和其他正在运行的应用也会使用内存, 所以安装GitLab前一定要注意当前服务器至少有4GB的可用内存. 少于4GB内存会出现各种诡异的问题, 而且在使用过程中也经常会出现500错误.

错误二:gitlab-ctl reconfigure

报错n itdb: could not obtain information about current user: Permission denied

1
Error executing action `run` on resource 'execute[/opt/gitlab/embedded/bin/initdb -D /var/opt/gitlab/postgresql/data -E UTF8]'

根据报错信息大概锁定用户的权限问题,安装gitlab-ce会自动添加用户四个用户:

1
2
3
4
gitlab-www:x:497:498::/var/opt/gitlab/nginx:/bin/false
git:x:496:497::/var/opt/gitlab:/bin/sh
gitlab-redis:x:495:496::/var/opt/gitlab/redis:/bin/nologin
gitlab-psql:x:494:495::/var/opt/gitlab/postgresql:/bin/sh

google和百度都搜索不到解决方法,既然出错提示到权限问题,那么按照这个方向去查就不会有问题,后来查了文件/etc/passwd的权限是600,给予644权限后,成功解决报错问题

改成8081
1
2
3
4
5
# gitlab-ctl stop 
# vi /etc/gitlab/gitlab.rb (取消注释并修改端口) unicorn['port'] = 8801
# gitlab-ctl reconfigure (重新生成配置)
# gitlab-ctl restart
# lsof -i:8081(check whether unicorn has started properly)

8.Centos配置PHP各种拓展: Composer

推荐composer官方更多教程与配置:https://www.phpcomposer.com/

需要使用到curl,如果没有的话需要

1
yum  -y install curl     ###安装
下载composer.phar
1
curl -sS https://getcomposer.org/installer | php
把composer.phar移动到环境下让其变成可执行
1
mv composer.phar /usr/local/bin/composer
测试composer
1
2
composer -V 
/** 输出:Composer version 1.0-dev (e64470c987fdd6bff03b85eed823eb4b865a4152) 2015-05-28 14:52:12 */
实战操作
1
2
3
4
5
6
7
8
9
10
11
[root@centos /]# curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.8.0) successfully installed to: //composer.phar
Use it: php composer.phar

[root@centos /]# mv composer.phar /usr/local/bin/composer
[root@centos ~]# composer -V
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.8.0 2018-12-03 10:31:16

推荐

坚持原创技术分享,您的支持将鼓励我继续创作!