centos 7 vps 发送gmail邮件(通过postfix与mailx)

用于发送邮件的邮箱必须先开启低安全性登录。

未分类

postfix就是打算替代sendmail的,sendmail删了吧。

yum remove -y sendmail

安装postfix及支持

yum install -y postfix mailx cyrus-sasl-plain

把发邮件的邮箱的账号密码替换后执行。

echo "[smtp.gmail.com]:587 xxxxxxxx@gmail.com:xxxxxxxxx" > /etc/postfix/sasl_passwd

生成sasl_passwd.db

postmap hash:/etc/postfix/sasl_passwd

修改证书年限

cd /etc/ssl/certs/
vi Makefile
#把365改36500,有效期一百年,嘿嘿之后可以按需求改回来。

制作证书及ssl密钥,并移动

make server.pem
mv server.pem /etc/postfix/

修改postfix配置文件 /etc/postfix/main.cf ,清空替换成如下。

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/server.pem
smtp_use_tls = yes

重启postfix

/bin/systemctl restart postfix.service

配置完成

可以通过下面命令查看postfix活动日志,排错就靠它了。

tail -f /var/log/maillog

发送测试邮件xxxx为收信地址

echo | mail -s 'is is a test l' xxxxxxxxx@gmail.com

如果成功那就是成功啦。

Centos 7 Java配置maven+jenkins+git(svn)+tomcat自动编译和部署(持续集成)

目的

在开发中,需要经常频繁的对测试服务器进行部署,而且在多人协同中开发经常遇到的问题就是别人更新了他的代码,而你去更新你的代码时并没有更新到别人的代码,导致测试环境的代码不是最新,当然这个问题也好解决,那就是每次更新的时候先获取版本控制器上面的代码,然后更新,当然每次这样操作都是耗时耗力的,如果是整个项目更新,一般项目至少3、40M上传到服务器也需要一定的时间,而部分更新,也需要找到指定的文件或者整个代码覆盖,然后重启服务器(Tomcat里面直接覆盖class虽然可以配置热加载,但是容易内存溢出),就我工作中的情况而言,是每次都需要先把代码上传到服务器-解压-找到Tomcat进程id(Linux)-kill线程-启动Tomcat,每次下来就需要最少几分钟时间,而且每天有可能多次部署,所以对整个工作效率是有一定影响的。正是因为以上种种,所以才有了本文,而本文最终的结果就是一旦代码上传到Git或者svn的时候,代码能自动部署到服务器上面去,这样我们就只需要吧正确的代码提交的版本控制器,就不用理会服务器的更新了。

jenkins部署

  • Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

  • Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:

    • 持续的软件版本发布/测试项目。

    • 监控外部调用执行的工作。

  • Jenkins能做的东西有很多,不过本文只介绍一个简单的自动编译打包部署,首先下载Jenkins,推荐下载war包, 下载地址: https://jenkins.io/download/

基础准备

配置jdk+tomcat: http://www.okay686.cn/628.html

关闭selinux 以及 firewall 服务。

本文是基于Centos 7,war环境部署的,把下载好的war文件直接放到Tomcat中,然后启动Tomcat,启动成功后访问tomcat的jenkins项目如:

war包下载: http://mirrors.jenkins.io/war-stable/latest/jenkins.war

http://192.168.96.129:8080/jenkins 会看到以下界面:

未分类

注意红色框中的红色文字,那个是初始密码的路径,直接根据路径找到initialAdminPassword文件并打开,把密码复制出来,输入到页面中点击continue按钮,进入下一步: ( /root/.jenkins/secrets/initialAdminPassword )

未分类

Jenkins拥有很多插件,一般在开始我们并不清楚需要什么插件的时候,可以选择自定义安装,把所有基本的插件全部安装好,此页面第一个按钮是安装推荐插件,第二个是自己选择安装,这里我选择第二个按钮。

未分类

此界面是初始化安装插件的界面,先选择All插件,然后点击install

未分类

在这个界面需要多等一下,因为是在网上下载插件,而且是外国的网站,所以经常有下载失败的情况,最好打开V梯P子N,当所有插件安装完成后会有continue按钮出现,如果没有则刷新一下页面,当然也可能存在有插件安装失败,根据自己是否需要自行选择retry或continue,这里因为我的都已经安装完成了,所以进入到了下一个页面.

未分类

在此页面设置用户名和密码,记得点击save and finish按钮,如果选择了Continue as admin,会把用户名重置admin,然后密码也是你设置的密码,而是初始化文件中的密码,设置完成之后的页面.

未分类

点击Start using Jenkins 即可

未分类

Jenkins主界面

未分类

配置Jenkins

创建项目之前先要对Jenkins进行基本的配置,比如jdk的目录,git命令的目录和maven的目录等等

首先点击 系统管理

进入管理页面后如图:

未分类

点击 Global Tool Configuration 进入插件配置页面

配置jdk

(不晓得安装位置,好办,打开 vim /etc/profile 就可以找到!)

未分类

点击新增JDK按钮,会显示jdk配置form,如果电脑上已经安装了jdk则可以去掉自动安装,不过如果是用Tomcat运行的Jenkins那么是肯定已经安装了的,这里我们只需要配置好 jdk别名 和 JAVA_HOME 即可

配置git

未分类

需要将git的正确路径配置到Path to Git executable中。

配置maven

未分类

跟jdk相同,配置好名字和路径即可,当然也可以选择自动安装,不过还是推荐手动安装然后配置,配置好了之后点击save即可

当然还有现在很火的Gradle (有空写个教程,在此,我没有配置)

未分类

安装插件

由于新版默认没有将war部署到Tomcat的插件,所以需要手动安装,在系统管理中选择管理插件,再选择可选插件,搜索 Deploy to Container Plugin ,然后勾选点击直接安装

创建Jenkins任务

点击开始创建一个新任务进入任务创建页面:

未分类

先输入项目名字,然后选择构建一个maven项目,最后点击ok按钮

选择版本控制器

页面中找到源码管理模块,根据项目使用的版本控制器选择,如我们使用的git,则选择git

未分类

选择构建触发器

如果是git的话,可以直接通过GitLab(WebHooks)来实现触发,这样你每次提交到配置编译的分支就会git就会通知,不过目前我知道的是git.oschina.NET的钩子没有作用,当然如果不是git或者钩子没有作用的时候,可以用最简单的,定时查询。

未分类

这样是每10分钟查询一次,如果有更新就构建,具体Poll SCM的参数可以百度,那里更加详细

配置编译命令

编译命令我们可以直接配置最简单的命令编译:

未分类

选择Execute shell,在出来的界面中配置maven命令就行了,比如

mvn install

配置部署到Tomcat

点击新增构建后操作,选择 Deploy war/ear to a container ,然后配置 WAR/EAR files ,这个war的地址,一般都 target/xxx.war ,xxx是war的文件名。

然后点击Add Container,添加Tomcat服务器:

未分类

配置好Tomcat的管理员用户和密码以To及mcat的访问地址就ok了,这样只要你上传了代码,并且是配置编译的分支,一般过几分钟就会自动编译然后部署到Tomcat中了,当然最好还是用git,然后通过GitLab实现,这样不仅不用每隔几分钟查询一次,而且延迟很小!!

CentOS 7 时区、日期时间查看以及设置杂烩

网络时间协议 NTP(Network Time Protocol)

安装

yum install ntp

当前本地时间更新为中国标准时间

ntpdate cn.pool.ntp.org

Timedatectl 命令

查看当前时区、日期、时间状态 timedatectl [status]

Local time: Tue 2017-10-31 15:08:42 CST
Universal time: Tue 2017-10-31 07:08:42 UTC
RTC time: Tue 2017-10-31 15:08:42
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: yes
DST active: n/a

Timedatectl Commands

status                   Show current time settings
set-time TIME            Set system time
set-timezone ZONE        Set system time zone
list-timezones           Show known time zones
set-local-rtc BOOL       Control whether RTC is in local time
set-ntp BOOL             Control whether NTP is enabled

部分命令示例

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 本地时间写入硬件时钟
timedatectl set-local-rtc 1

# 开启 NTP 同步
timedatectl set-ntp 1

# 设置时分秒
timedatectl set-time 13:12:12

# 设置年月日
timedatectl set-time 2017-10-29 # 执行后,时分秒变成 00:00:00

# 设置年月日时分秒
timedatectl set-time '2017-10-29 14:12:12'

timedatectl 使用 set-time 设置时间时,timedatectl 的 ntp 需要为关闭状态

其它杂烩

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
clock -w
date
date -s 13:12:12
date -s 2017-12-12
date -s '2017-11-11 11:11:11'

Centos 7上使用Docker安装Mysql

介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。官网: https://www.licoy.cn/go/?url=https://www.docker.com/

未分类

正文

首先,我们需要一台Centos64位的服务器,建议其内核版本>3.8,然后安装docker

yum install -y docker 

然后可以查看是否安装成功,输入以下命令

docker -v

安装成功之后,直接启动docker服务

service docker start

为了使安装更快,建议使用阿里云加速镜像:点此进入,获取自己的加速镜像地址,然后在终端执行:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

下载mysql镜像:

docker pull mysql

查看所有的镜像,看看是否下载成功:

docker images

建立一个mysql容器:

sudo docker run --name docker_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d docker.io/mysql restart=always  
  • –name 容器的别称。

  • -p 端口映射。格式是 主机的端口:容器的端口。这里2个都是3306,所以是3306:3306

  • -e 设置容器的环境变量。-e MYSQL_ROOT_PASSWORD=123456就代表mysql的root的密码是123456

  • -d 使用镜像包名称,可以通过docker images查看

  • restart=always, 告诉docker,这个容器要自动启动

查看mysql容器是否建立成功并启动:

docker ps -a

如果是以下的内容,则说明容器建立成功,反之失败:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
dfb04d622b50        docker.io/mysql     "docker-entrypoint.sh"   6 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp   docker_mysql 

到这一步,我们就可以使用Navicat等相关工具进行连接,如果连接成功则一切都完成了,如果是使用ecs等云服务器记得开放相关端口。

后记

在这次安装mysql的过程中真的体验到docker的好处,比起传统的mysql的安装方式省去了很多的步骤,而且可以启动通过命令启动多个mysql容器,方便至极!

解决阿里云CentOS 7重启后网站无法访问的问题

摘要

每次阿里云主机重启后,总是无法访问网站。查看进程也发现了 mysqld、php、nginx等都也启动了,ping 也没问题,但就是无法访问。经过一番排查,这是 CentOS 7 最新的 firewalld 防火墙引起的问题。

未分类

参考解决方案

用iptables-services来替代 firewalld

yum -y install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables

然后再修改 iptables 的防火墙规则。修改文件 /etc/sysconfig/iptables,将 80 和 443等 端口放行,问题解决

完整内容如下:

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Centos 7搭建、配置和使用Http代理(Squid服务器)

一、前言

最近搞了一台腾讯云内网服务器(把公网带宽调到了0Mbps),为了使内网服务器也能连上外网,稍微折腾了一下下Http代理。

本文以Squid代理服务器为栗子,简单介绍一下基本用法

二、安装Squid服务器

首先,在一台能同时连接公网和内网服务器的服务器上安装Squid代理服务器

yum install squid -y

然后就安装完了,是不是很简单呢(鬼才懒得编译呢)

三、配置Squid服务器

主要需要配置的是三个部分:

1、配置允许使用代理的IP地址

#此处使用10.0.0.0/16代表的是,整个10.0.x.x IP段都能使用(x代表任意255内的数字)
acl localnet src 10.0.0.0/16

#如果是限定单个IP使用,则是10.0.0.1/32
acl localnet src 10.0.0.1/32

2、配置允许访问的IP列表

第一个步骤是将10.0.0.0/16整个IP段命名标记为localnet,现在要将localnet添加进允许使用的列表中

#此处代表允许访问的列表包括localhost、manager、localnet三个IP段
http_access allow localhost manager localnet

3、配置Squid监听地址

这个步骤是为了进一步加强安全措施,防止代理服务器被滥用(盗用)

#最简便的规则,监听所有IP的3128端口,不安全,不建议使用
http_port 0.0.0.0:3128

#仅监听内网IP的3128端口,相对安全,建议使用
http_port 10.0.0.1:3128

四、使用代理

1、yum代理

#编辑/etc/yum.conf文件
vim /etc/yum.conf

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

proxy=http://10.0.0.1:3128/ 

2、wget代理

#编辑/etc/wgetrc文件
vim /etc/wgetrc

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

http_proxy=http://10.0.0.1:3128/
ftp_proxy=http://10.0.0.1:3128/

3、环境变量

#编辑/etc/profile文件
vim /etc/profile

#查找并修改或追加以下语句(将10.0.0.1修改为你的Squid配置的监听地址或服务器的IP):

http_proxy=http://10.0.0.1:3128/
ftp_proxy=http://10.0.0.1:3128/

export http_proxy
export ftp_proxy

CentOS 7:使用HAProxy实现Nginx负载均衡

HAProxy是一款功能强大、灵活好用的反向代理的开源软件,它提供了负载均衡、服务器代理的功能。HAProxy是Willy Tarreau使用C语言编写的,它支持SSL、压缩、keep-alive、自定义日志格式和header重写。

HAProxy是轻量级的负载均衡和代理服务软件,占用系统资源较少。很多大型的网站都在使用它,例如Github、StackOverflow。

下面我安装配置HAProxy做为两个Nginx服务器的负载均衡。一共需要使用3个服务器,在一台机器上安装HAProxy,另两台机器安装Nginx服务。

未分类

HAProxy的基本概念

4层和7层

HAProxy可以使用两种模式运行:TCP 4层模式和HTTP 7层模式。TCP模式:HAProxy把原始TCP数据包从客户端转向到应用服务器;HTTP模式:解析http请求,然后转向到web服务器。我们将使用HTTP 7层模式。

负载均衡算法

HAProxy使用负载均衡算法决定把请求发送给哪个服务器,使用的算法:
Roundrobin-轮流算法
这是最简单的负载均衡算法。对每个新连接,总是下一个后端服务器处理。如果到达最后一个后端服务器,从头开始。

Lastconn

有最少连接的后端服务器处理新请求。当请求量较大时非常好。

Source

根据客户端IP决定哪个后端服务器处理。如果IP1是server1处理,那么这个IP1的所有请求都由server1处理。根据IP地址的哈希值决定后端服务器。

系统要求

3个CentOS 7服务器:

  • 处理负载均衡的HAProxy服务器:192.168.0.101

  • Nginx1服务器:192.168.0.108

  • Nginx2服务器:192.168.0.109

第一步

编辑HAProxy服务器(102.168.0.101)的/etc/hosts:

vim /etc/hosts

添加Nginx1和Nginx2的主机名:

192.168.0.108    nginx1.your_domain.com     nginx1
192.168.0.109    nginx2.your_domain.com     nginx2

保存退出。

同样,编辑两个Nginx服务器的/etc/hosts,添加:

192.168.0.101    loadbalancer

在两个Nginx服务器上都要设置。

第二步

在HAProxy服务器上安装HAProxy:

# yum update
# yum install haproxy

haproxy的配置文件位于/etc/haproxy/。为了防止出错,先备份原始配置文件:

# cd /etc/haproxy/
# mv haproxy.cfg haproxy.cfg.backup

编辑配置文件:

# vim haproxy.cfg

写入如下内容:

#---------------------------------------------------------------------
# 全局设置
#---------------------------------------------------------------------
global
log         127.0.0.1 local2     # 日志
chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000                
user        haproxy             # Haproxy在haproxy用户和组下运行
group       haproxy
daemon
# 开启 stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# 基本设置
#---------------------------------------------------------------------
defaults
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option forwardfor       except 127.0.0.0/8
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
timeout check           10s
maxconn                 3000
#---------------------------------------------------------------------
# HAProxy Monitoring 配置
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                # Haproxy Monitoring 的使用端口:8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats                            # HAProxy monitoring的网址
stats realm Haproxy Statistics
stats auth testuser:test1234                # 登录Monitoring的用户和密码
stats admin if TRUE
default_backend app-main
#---------------------------------------------------------------------
# FrontEnd 配置
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# 使用roundrobin做为负载均衡算法
#---------------------------------------------------------------------
backend app-main
balance roundrobin                                    # 使用的负载均衡算法
option httpchk HEAD / HTTP/1.1rnHost: localhost    # 检查nginx服务器是否连通- 200状态码
server nginx1 192.168.0.108:80 check                  # Nginx1 
server nginx2 192.168.0.109:80 check                  # Nginx2
配置rsyslog

我们需要使用rsyslog记录HAProxy的日志,编辑rsyslog.conf配置文件,打开UDP的514端口:

# vim /etc/rsyslog.conf

去掉如下行的注释:

$ModLoad imudp
$UDPServerRun 514

如果你想指定特定IP,可以更改如下行:

$UDPServerAddress 127.0.0.1

保存退出。

创建rsyslog配置文件:

# vim /etc/rsyslog.d/haproxy.conf

写入如下内容:

local2.=info     /var/log/haproxy-access.log    # 访问日志
local2.notice    /var/log/haproxy-info.log      # haproxy执行信息

重启rsyslog:

# systemctl restart rsyslog

启动HAProxy:

# systemctl start haproxy
# systemctl enable haproxy

第三步

安装配置Nginx。

Nginx1和Nginx2服务器配置方法相同。

安装epel-release:

# yum install epel-release

安装Nginx:

# yum install nginx

创建index.html测试文件,Nginx1(192.168.0.108):

# cd /usr/share/nginx/html/
# echo "<h1>nginx1.your_domain.com</h1>" > index.html
Nginx2(192.168.0.109):
# cd /usr/share/nginx/html/
# echo "<h1>nginx2.your_domain.com</h1>" > index.html

启动Nginx服务:

# systemctl enable nginx
# systemctl start nginx

测试

测试nginx1、2,使用浏览器访问:

192.168.0.108
192.168.0.109

正常访问网站:http://192.168.0.101,如果有域名,指向这个IP。
登录HAProxy web管理页面:

http://192.168.0.101:8080/stats

你应该可以看到nginx、http请求的转发信息。

CentOS 7 搭建ngrok服务器

IE8和IE9在实现跨域请求的时候使用XDomainRequest自己实现了一套,所以即使是使用jquery1.9.1版本也无法直接兼容IE8,IE9的跨域请求。

一、前提条件

需要一台云服务器和一个域名解析到该IP

二、环境安装

1、安装 gcc

yum install gcc

2、安装 git

yum install git

3、安装 go 语言环境

到网站https://golang.org/dl/查找最新的版本链接

下载

wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

解压安装:

tar -C /usr/local/ -zxvf go1.8.linux-amd64.tar.gz

添加环境变量,编辑:vi /etc/profile,在最后添加:

#go lang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

使环境变量生效

source /etc/profile

检查是否安装成功:

go version

输出:go version go1.8 linux/amd64表示安装成功

三、在服务器搭建 ngrok 服务

1、下载 ngrok 源码

cd /usr/local/src
git clone https://github.com/inconshreveable/ngrok.git

2、生成证书

在自生成证书时需要一个解析到服务器上的主域名,现在以”dogjun.com”为例:

cd ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=dogjun.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=dogjun.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

将新生成的证书,替换掉assets/client/tls下的证书

yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key

3、编译生成ngrokd(服务端)

#这里是交叉编译,linux系统GOOS=linux,64位系统GOARCH=amd64,32位系统GOARCH=386
#当前系统可用go env查看
GOOS=linux GOARCH=amd64 make release-server

编译成功后在当前目录的bin目录下可找到ngrokd文件

启动服务端(/usr/local/src/ngrok目录下)

./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="uboff.com"  -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"

后台运行

nohup ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok.dogjun.com"  -httpAddr=":80" -httpsAddr=":8082" -tunnelAddr=":4443" &

出现下面信息,启动成功

[14:52:23 CST 2017/03/18] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[14:52:23 CST 2017/03/18] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[14:52:23 CST 2017/03/18] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8081
[14:52:23 CST 2017/03/18] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[14:52:23 CST 2017/03/18] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

4、编译生成ngrok(客户端)

这里生成windows下的客户端:

GOOS=windows GOARCH=amd64 make release-client

成功会在bin目录下看到windows_amd64文件夹,复制到windows电脑上即可启动

在windows_amd64目录下新建一个ngrok.cfg文件,内容如下:

server_addr: "ngrok.dogjun.com:4443"
trust_host_root_certs: false

然后就可以启动客户端,我已经把windows_amd64文件夹下载到E盘下,打开CMD输入:

ngrok -subdomain hwj -config=ngrok.cfg 80

看到下面信息则启动成功:

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://hwj.ngrok.dogjun.com -> 127.0.0.1:80
Forwarding                    https://hwj.ngrok.dogjun.com -> 127.0.0.1:80
Web Interface                 127.0.0.1:4040
# Conn                        1
Avg Conn Time                 0.00ms

Linux – CentOS 7网络配置

安装完CentOS 7时,网络是通的。此时网络配置如下:

网络配置文件路径:

/etc/sysconfig/network-scripts/ifcfg-enp0s3

其中“enp03”是你的网卡名称。

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="NO"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="1538d24b-770f-44ee-83af-e1da305dfabc"
DEVICE="enp0s3"
ONBOOT="yes"

此时可以ping通百度,wget也没问题。

后续使用中,发现网络断了—可以ping通同网段的IP,但是ping不通百度,wget一直提示无法解析目标主机。

修改网络配置文件如下图:

未分类

重启网络:

service network restart

仍旧不行。在VM主界面-设备-网络-网络中,将连接方式从“网络地址转换(NAT)”切换成“桥接网卡”。重启网络,正常!

未分类

【FileZilla传文件】

由于上面网络配置文件中分配了固定IP,那么就可以使用FileZilla传文件到VM里面的CentOS 7中。

未分类

CentOS 7 系统配置Apache

现在公司的项目由于一直是一个外包团队在维护,一直运行在Windows Server上,我接手之后从长远考虑以及熟练及安全、性能等方面考虑,我最终决定换成Linux,而由于运行的是公司的正式项目,毫无疑问选择了CentOS,至于版本,我选择了最新的CentOS7。而服务器本打算是用流行的Nginx的,但是几个CGI参数始终无法配置好,出于稳定性考虑,最后选择了Apache。

安装基本软件包

由于CentOS 7 自带的PHP版本才5.4,不能满足我们开发的程序的要求,本着能包管理器安装就不编译安装的原则,选择了webstatic这个源的包,更新系统:

yum update

安装EPEL源:

yum install epel-release

安装webstatic源:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装Apache、安装PHP及Mariadb数据库命令如下:

yum install httpd php56w php56w-mysql php56w-pdo php56w-gd php56w-mcrypt php56w-mbstring php56w-json php56w-xml php56w-openssl mariadb-server -y

对,你没看错,CentOS下的Apache在包管理器中的名字就是httpd。这样就安装好了各个所需要的组件,接下来就是配置了。

Apache基本配置

用 yum 安装的apache,配置文件在 /etc/httpd/ ,我们需要改的各个配置文件都在这个目录下面。

首先,更改/etc/httpd/conf/httpd.conf中的ServerName字段,否则会提示AH00558字段:

[root@localhost ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

接着,在/etc/httpd/conf.d/下面新建一个example.conf文件,这个就是我们需要的虚拟主机配置文件,如果只是想要HTTP服务,复制下面这段并进行相应修改即可:

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example/
ServerAlias example
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.log combined
<Directory /var/www/example>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride FileInfo Options
        Order allow,deny
        allow from all
</Directory>
Header unset X-Powered-By
</VirtualHost>

配置完成之后,用apache自带的工具检查是否有语法错误。

配置Apache提供HTTPS服务

但是由于现在的潮流是提供HTTPS服务,我们这个项目也给App端提供数据接口服务,按照苹果的要求以及处于安全性考虑,确实有必要上HTTPS服务,但是考虑到实际业务情况,我们现阶段不打算强制跳转到HTTPS访问,于是采用的是HTTP和HTTPS都可访问策略,这就要求要准备一份SSL证书了,申请证书这一步按下不表,很多途径都可以申请,我这里只记录下配置步骤。

要使用yum包管理器安装的Apache支持SSL,还需要安装一个Apache模块,命令如下:

yum install mod_ssl

然后是增加对应的SSL配置,在上面那个配置文件末尾增加或者新建一个配置文件都行,相应配置:

<VirtualHost *:443>
ServerName https://www.example.com
DocumentRoot /var/www/example/
ServerAlias example
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.log combined
<Directory /var/www/example>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride FileInfo Options
        Order allow,deny
        allow from all
</Directory>
SSLEngine on
SSLCertificateFile /var/www/example-ssl/xxx.pem
SSLCertificateKeyFile /var/www/example-ssl/xxx.key
</VirtualHost>

复制,更改对应的项即可。

然后再次检查一下语法是否有误:

httpd -t

如果没问题,可以重启httpd服务:

systemctl restart httpd

额外配置

上面有个配置项我这里记录一下,Header unset X-Powered-By这一行是让Apache隐藏对应的http header,处于安全考虑不允许后端暴露太多信息。

同样需要隐藏的还有Apache的版本号以及操作系统信息,在/etc/httpd/conf/httpd.conf文件末尾增加下面两行:

ServerTokens Prod
ServerSignature Off

最后再检查一下是否有语法错误,如果一切正常则可以重启Apache服务或者重新加载配置文件。

由于Apache是以apache用户组下的apache用户运行的,所以,对应的网站目录文件需要给予对应的权限才能使网站正常运行:

chown -R apache.apache /var/www/example

上面的文件路径改成对应的网站文件路径即可。