使用 supervisor 管理 logkit-pro

对于logkit-pro这样的服务,我们推荐使用supervisor作为守护进程进行管理,这样即使程序由于某种原因异常关闭,还能通过supervisor自动重启。

logkit-pro在设计上保证了即使异常重启也保证数据不会丢失,最坏情况是意外中断后重启导致出现部分数据重复,正常情况都是不重不漏发送

Supervisor是用Python开发的Linux/Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外终止,supervisor监听到进程不存活时,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写脚本来控制。

安装supervisor

如果您的机器已经安装了 supervisor,可以跳过这一步。

supervisor 是 python 编写的,所以机器上首先要安装 python,一般的 Linux 发行版都已经自带 python 了。

supervisor 官方推荐的安装方式,第一种是使用 easy_install 工具安装。

所以如果您机器上没有easy_install,需要先安装一下。

安装 easy_install

wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python

通过easy_install安装supervisor

easy_install supervisor

Ubuntu用户安装supervisor

只需执行如下命令:

sudo apt-get install supervisor

配置logkit-pro

安装完成后,supervisor的主配置文件一般存放在 /etc/supervisor/supervisord.conf

打开可以看到

[include]
files = /etc/supervisor/conf.d/*.conf

会监听 /etc/supervisor/conf.d/ 下的配置文件。

如果没有这个主配置文件,你就要创建一个/etc/supervisor文件夹,然后用如下命令生成

echo_supervisord_conf > /etc/supervisor/supervisord.conf

根据实际情况对supervisor的配置文件做修改。

也可以将下列配置文件手动写入到 /etc/supervisor/supervisord.conf 中。

; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf

修改配置文件后,重启下supervisord

service supervisord restart

如果service中没有supervisord,参考文档https://serverfault.com/questions/96499/how-to-automatically-start-supervisord-on-linux-ubuntu

至此,supervisor守护进程已经安装完毕。

我们假设logkit已经下载并解压缩到 /home/qiniu/logkit-pro/ 目录下,并包含了运行所需的所有文件,如下所示。

$ ls /home/qiniu/logkit-pro/
auths.conf      logkit-pro      logkit-pro.conf public

我们编写配置文件 logkit_supervisor.conf 并放置到 /etc/supervisor/conf.d/ 目录,编写的配置内容如下所示。

[program:logkit-pro]
command=/home/qiniu/logkit-pro/logkit-pro -f /home/qiniu/logkit-pro/logkit-pro.conf
directory=/home/qiniu/logkit-pro/
priority=999
autostart=true
startsecs=3
stopwaitsecs=200
autorestart=true
user=qiniu
redirect_stderr=true
log_level=info
stdout_logfile=/home/qiniu/logkit-pro/logkit-pro.log
stdout_logfile_maxbyte=200MB
stdout_logfile_backups=2

其中

  • program 表示使用supervisor管理时进程的名称
  • command 表示运行的命令
  • directory 表示启动的工作目录,即进程运行时的当前目录。
  • user 表示运行进程的用户组
  • stdout_logfile 表示程序输出的日志文件路径
  • startsecs 表示启动时等待程序程序运行的世界
  • stopwaitsecs 表示正常关闭后等待时间,如果超过等待时间则发送SIGKILL强制关闭,因为logkit关停需要时间结束发送等过程,建议设置时间稍长,supervisor默认配置的时间为10s

supervisor重载配置并启动logkit-pro

配置完成后,我们要让supervisor载入当前的新配置,执行如下命令:

supervisorctl reread

supervisor感知到新配置后,我们就可以将logkit-pro加入到管理中,执行如下命令:

supervisorctl add logkit-pro

然后程序就已经正常运行了,可以通过supervisor查看

supervisorctl status

通过supervisor停止、启动、重启的命令如下:

supervisorctl stop logkit-pro
supervisorctl start logkit-pro
supervisorctl restart logkit-pro

详细的命令可以参考supervisor的官方文档

查看日志

根据我们的supervisor配置,logkit-pro的日志存放在

/home/qiniu/logkit-pro/logkit-pro.log

而supervisor本身的日志可以在supervisor的主配置文件中查看

cat /etc/supervisor/supervisord.conf

默认情况下存放在

/var/log/supervisor/supervisord.log

postgresql 导入sql,out等sql文件

假设postgresql安装位置

未分类

然后,使用dos窗口
进入这个位置

未分类

导入(本地和默认端口可以不用属性)

psql -d 数据库名 -h ip地址 -p 数据库端口 -U 用户名 -f 文件地址

未分类

完成

未分类

知识只有共享才能传播,才能推崇出新的知识,才能学到更多,这里写的每一篇文字/博客,基本都是从网上查询了一下资料然后记录下来,也有些是原滋原味搬了过来,也有时加了一些自己的想法

Postfix软件使用分析

Postfix简介:

在IBM的GPL协议下开发的MTA(邮件传输代理)软件,Postfix更快更容易管理,更安全,同时与sendmail保持兼容。
官网地址:http://www.postfix.org/

邮件服务器发信原理图:

未分类

postfix构建组成图:

未分类

要点:

Postfix mail queue(Postfix队列):
1 maildrop queue
maildrop queue 是通过Postfix sendmail 命令发送但是还未被Postfix pickup 服务加到postfix 主队列的邮件所处的队列
2 hold queue
smtpd access 策略或者是cleanup的检查可以将部分邮件长时间的放置在hold queue队列
3 incoming queue
所有进入postfix队列的邮件都会由cleanup放置到incoming queue里。
4 active queue
准备发送的邮件队列
瓶颈:CPU、I/O
5 deferred queue
一些发送失败的邮件队列

Postfix收件流程图:

未分类

Postfix基本配置:

Postfix的配置项大概有100个,所以这还真是个问题
1、myorigin 参数指明发件人所处的域
2、mydestination 参数指明Postfix接收邮件中收件人所处的域
3、myhostname 参数指明Postfix运行的主机名
4、mynetworks 参数指定Postfix所在的网络地址
5、inet_interfaces 参数指定postfix系统监听的端口

Postfix内容检查模块:

1、内置检查
2、前置队列检查
3、后置队列检查(简单设置、高级设置):
简单Filter:效率低,鲁棒性低,命令行调用
高级Filter:效率高,鲁棒,SMTP协议调用

Postfix性能调优

在postfix已经能够正常工作之后进行的性能优化工作。

  1. 邮件接收
    可以使用性能调优工具ashape,来查看maildrop queue,incoming queue,和activequeue的状态,根据情况调节DNS查找性能:可以运行一个本地DNS server 用来提高DNS查找所需要的时间消除不必要的LDAP查询当Postfix对客户端的响应过慢时:通过debug的方式查找日志排查问题,postfix收发邮件失败或成功都会记录日志关闭header_checks和body——checks模式关闭chroot_operation如果日志中记录client unkown则可能是因为DNS出错smtpd的进程数达到了master.cf中的限制
    更多关于smtpd server processes的性能问题:
    postfix2.0或更新的版本在想smtp client 报告一个错误的时候会暂停,这会造成延迟,可以通过关闭错误邮件回复的延时设定来规避这个问题。通过以上设定,postfix或者更新的版本在同样数目的SMTP server 进程数的基础上能够更多的处理SMTP客户端的链接。其他…

  2. 邮件分发
    可以使用性能调优工具ashape,来查看maildrop queue,incoming queue,和activequeue的状态,根据情况调节通过qshape检查每个消息提交多个收件人。而不是分条多个提交使用SMTP协议提交邮件,而不是使用“sendmail”命令,调整smtpd_recipient_limit设置通过优化提交mail的并行参数或者打开postfix 的in_flow_delay设置,使得邮件的提交速度不要超过硬盘的I/O新建一个本地的DNS server减少smtp_connect_timeout and smtp_helo_timeout 的值,以减少发送邮件到没有回复SMTP server 所消耗的时间为有问题的邮件设置专用的邮件传输策略对第一次投递失败的右键使用fallback_relay加大缓存使用固态硬盘调整递延邮件传递尝试的频率调整同时投递的数量调整每次投递的收件人数量

  3. 其他
    调整Postfix 的进程数调整系统上的进程数调整打开的文件数和sockets数(节约资源)

Postfix瓶颈分析

Postfix系统内置了性能分析工具qshape,通过qshape能够定位导致Postfix性能问题的位置。
该分析的关注点在Postfix queue队列拥塞问题上,可以查看各个队列的统计信息

qshape的使用:

运行在root账号下的qshape能够提供一个Postfix 队列信息的表格视图,在横轴上它为当前消息提供了细粒度队列年龄,为旧消息提供了粗粒度的队列年龄薪资,纵轴提供了消息的目的地址,对于域名消息数最多的最先显示。

比如我们可以查看一下前十名的垃圾邮件信息:
命令qshape -s hold | head

未分类

用qshape做问题定位:
qshape incomingqshape activeqshape deferred | headetc..

Postfix SASL认证

配置SASL需要两部,一是配置SASL认证列表和认证所需的后端,比如密码文件或其他数据源,二是配置postfix使其启用SASL。

目前Postfix 支持Cyrus SASL和Dovecot SASL两种认证的实现方式。

以Dovecot为例(Dovecot配置):

未分类

Postfix启用SASL:
如果Dovecot使用Unix 套接字
/etc/postfix/main.cf:
smtpd_sasl_type = dovecot

如果Dovecot使用TCP套接字(将127.0.0.1改成远端IP可进行远程认证)
/etc/postfix/main.cf:
smtpd_sasl_path = inet:127.0.0.1:12345

启用SASL认证:
/etc/postfix/main.cf:
smtpd_sasl_auth_enable = yes
配置好之后重启或reload Postfix即可

验证:

未分类

其他SMTP server SASL可选的配置参数:
单点登录默认验证域可指定网段免认证在邮件头添加SALS认证用户名客户端SASL认证配置:略..

Postfic TLS 支持
(TLS能够提供基于证书的加密和认证会话)

开启Postfix 的TLS支持,不仅意味着获得了加密邮件加密远程SMTP客户端认证信息的能力,还意味着打开了成千上万行代码(意味着会有性能损失或者产生BUG)

Postfix TSL工作流程:

未分类

smtpd8实现了基于TLS的SMTP服务端smtp8实现了基于TLS的SMTP 客户端tlsmgr8负责生成伪随机数,保持会话
配置TLS:

生成证书文件指定证书文件/etc/postfix/main.cf:
smtpd_tls_cert_file = /etc/postfix/server.pem

smtpd_tls_key_file = $smtpd_tls_cert_file启用TLS/etc/postfix/main.cf:
smtpd_tls_security_level = may

其他:
telnet 25 端口加密发件

Centos7防火墙firewalld配置常用命令

1. firewalld的基本使用方法

启动命令如下

systemctl start firewalld

状态查看

systemctl status firewalld

停止运行

systemctl stop firewalld

禁止开机运行

systemctl disable firewalld

允许开机允许

systemctl enable firewalld

2. 配置firewalld-cmd

查看版本

firewall-cmd --version

查看帮助

firewall-cmd --help

显示状态

firewall-cmd --state

查看所有打开的端口

firewall-cmd --zone=public --list-ports

更新防火墙规则

firewall-cmd --reload

查看区域信息

firewall-cmd --get-active-zones

查看指定接口所属区域

firewall-cmd --get-zone-of-interface=eth0

拒绝所有包

firewall-cmd --panic-on

取消拒绝状态

firewall-cmd --panic-off

查看是否拒绝

firewall-cmd --query-panic

3. 规则添加

单端口添加如下

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=80/udp --permanent

端口范围添加如下

firewall-cmd --zone=public --add-port=80-100/tcp --permanent
firewall-cmd --zone=public --add-port=80-100/udp --permanent

添加完毕,请执行如下命令,重新载入配置

firewall-cmd --reload

Container技术之cgroup入门

What is Cgroup?

Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO 等等)的机制。最初由 google 的工程师提出,后来被整合进 Linux 内核。Cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段,可以说没有 cgroups 就没有 LXC。

What Cgroup can do?

1.限制进程组可以使用的资源数量,限制进程最大使用的内存等
2.进程组的优先级控制,比如为某个进程组分配特定的cpu share
3.记录进程组使用的资源数量,比如记录某个进程CPU的使用时间
4.进程组隔离,比如通过namespace以达到隔离的目的
5.进程组控制,比如可以将进程组挂起或恢复

Cgroup Model

进程模型

在说Cgroup的模型之前,先回顾下进程模型,在linux系统上,所有的进程都有一个共同的父进程,叫做init进程,这个进程在内核启动的时候开始执行,然后通过init进程启动其他的进程,这些进程都是init的子进程。因为所有的进程都有一个共同的父进程。那么linux的进程模型就是一个单继承层次的模型,或者称之为树状模型。除此之外每一个linux进程但是除了init进程,都继承了一些环境变量(例如PATH环境变量)

Cgroup Model

Cgroup其实和进程类似:

Cgroup也是继承体系,并且子cgroup继承其父cgroup的某些属性,两者最基本的差别在于,进程是单继承体系。而Cgroup可以存在多个不同的继承体系.(意思就是可以有多个单继承体系,每个单继承体系互不影响)

Some concepts of Cgroup

在Cgroup中有这样四个概念,可以说理解了这四个概念,那么对于如何使用cgroup,将会是如鱼得水。

  • Subsystems: 称之为子系统,一个子系统就是一个资源控制器,比如 cpu子系统就是控制cpu时间分配的一个控制器。

  • Hierarchies: 可以称之为层次体系也可以称之为继承体系,指的是Control Groups是按照层次体系的关系进行组织的。

  • Control Groups: 一组按照某种标准划分的进程。进程可以从一个Control Groups迁移到另外一个Control Groups中,同时Control Groups中的进程也会受到这个组的资源限制。

  • Tasks: 在cgroups中,Tasks就是系统的一个进程。

Subsystems

在Red_Hat_Enterprise_Linux-6系列的linux中,默认提供了如下子系统。

  • blkio这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等) 。
  • cpu这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
  • cpuacct这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
  • cpuset这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
  • devices这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
  • freezer这个子系统挂起或者恢复 cgroup 中的任务。
  • memory这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
  • net_cls这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。
  • ns名称空间子系统。

Relationships Between Subsystems, Hierarchies, Control Groups and Tasks
这个部分恐怕是这篇文章的重点了吧,这个部分我主要参考红帽的关于资源管理的手册在这个部分通过引入4条规则,来帮助我们更好的去理解这个四者的关系。

  • 规则1,一个单继承体系(单层次体系)可以附加1个或者多个子系统

未分类

在上面的这个图中,Cpu和Memory两个子系统附加到了cpu_mem_cg的这个继承体系中cg1和cg2是两个Control Groups,但是需要注意的是,如果此前有Cpu或者Memory子系统附加到q其它继承体系中的,那么Cpu或者Memory就不能再次附加到cpu_mem_cg这个继承体系中了。

  • 规则2,一个子系统,不能被附加到多个继承体系中。

未分类

其实这条规则我已经在规则1中简单的进行了阐述,上面的这副图中,可以看出CPU子系统已经被附加到左侧的cpu_cg这个继承体系中了,当cpu子系统要再次被附加到cpu_mem_cg的时候,会发生附加失败。

  • 规则3,每当在系统中创建一个继承体系的时候,会默认再创建一个control groups,并且这个control groups被称之为root cgroup,此时整个系统中的tasks(进程)都属于这个root cgroup。系统中的进程,在一个继承体系中都明确的属于一个control groups,并且这个进程可以从一个control groups移动到另外一个control groups中,但是需要主要的是,在一个继承体系中一个进程是没办法同时属于两个control groups的,但是一个进程可以同时属于两个不同的继承体系中的control groups。

未分类

在上面的这副图中可以看出httpd这个进程无法同时属于A继承体系中的cg1和cg2这两个control groups,但是httpd进程却可以同时属于A继承体系中的cg1和B继承体系中的cg3。

  • 规则4,系统上的任何task(进程)通过fork创建子task(进程)的时候,这个子task(进程),自动继承其父task(进程)的control groups,成为这个control groups的一员。此后这个子task(进程)可以移动到其他control groups中,父task(进程)和子task(进程)完全独立。

未分类

在上面的这副图中,可以看出httpd进程fork出来的子进程仍然是属于cg1这个control group的。

服务器端口转发-Haproxy安装及端口转发配置

简介

haproxy是一款功能强大、灵活好用反代软件,提供了高可用、负载均衡、后端服务器代理的功能,它在7层负载均衡方面的功能很强大(支持cookie track, header rewrite等等),支持双机热备,支持虚拟主机,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入;同时还提供直观的监控页面,可以清晰实时的监控服务集群的运行状况。

方法

1、安装haproxy

yum -y install haproxy

2、然后清空haproxy.cfg文件内容

cd /etc/haproxy/
> haproxy.cfg

3、把下面的内容写入到haproxy.cfg文件中

global
ulimit-n  51200
defaults
log global
mode    tcp
option  dontlognull
timeout connect 1000ms
timeout client 150000ms
timeout server 150000ms
listen status
bind 0.0.0.0:1080
mode http
log global
stats refresh 30s
stats uri /admin?stats
stats realm Private lands
stats auth admin:password
stats hide-version
frontend ssin
bind *:1000-2000
default_backend ssout
backend ssout
server server1 11.22.33.44 maxconn 204800

说明:bind *:1000-2000这里指的是1000-2000端口,11.22.33.44为需要转发的服务器的IP。

4、启动haproxy服务

service haproxy start

最后别忘了在你的服务器里开放转发的端口。

Ubuntu/Debian/CentOS系统安装Node.js软件教程

老蒋在”Ubuntu 18.04 LTS系统安装Node.js运行环境”文章中有分享到在Ubuntu环境中安装Node.js,且顺带一并安装NPM工具的教程。但是今天在给一个网友解决问题的时候,其需要在CentOS中安装Node.js,因为其默认的CentOS7版本Node.js低于5.0的,且某个软件是需要在高版本中运行。

所以,在这篇文章中,直接整理比较全的Ubuntu/Debian/CentOS系统,安装最新版本Node.js的教程,目前最新的版本是10.0,但是一般我们也不要太追求最新,我们可以安装8.0或者9.0差不多。

第一、Ubuntu

curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
apt-get install -y nodejs

第二、Debian

curl -sL https://deb.nodesource.com/setup_9.x | bash -
apt-get install -y nodejs

第三、CentOS

curl -sL https://rpm.nodesource.com/setup_9.x | bash -
yum install nodejs -y

安装过程都是差不多的。

未分类

看到如图,然后会指示我们下面执行哪个命令。

未分类

我们可以看到最新版本Node.JS和npm。

一次Ubuntu+nginx搭建wordpress的经历

一. 前言

开学之初,我发现Azure上有一个100刀的学生优惠。但在领取这个优惠之后,我却一直没有使用的机会,一是自己不会用,二是没有多余的时间。现在等来了放假,终于可以好好搞一搞了。:joy:

这次搭博客可谓是踩了不少坑:

  • 百度的教程基本上都是废的,只有谷歌的英文教程才是能用的,好气啊
  • apache2是真难用
  • php各个版本让人混乱

二. 接下来就是搭博客的过程

1、进入Azure的门户,添加一个Ubuntu的主机,学生优惠的主机为B1S,我使用的是公钥登陆,生成公钥的过程就不说了

未分类

2、在网络安全组的入站规则中添加443和80端口

3、接下来是连接主机。可以使用PuTTY或者是MobaXterm,输入ip和用户名,再加上私钥就可以连接了。

未分类

4、安装Nginx

sudo apt-get update 
sudo apt-get install nginx

安装完成后可以用以下命令操作nginx

sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

打开网页看看是否有这样的页面出现,如果有的话就可以进行下一步操作了

未分类

5、安装MariaDB

sudo apt-get install mariadb-server mariadb-client

对于Ubuntu 16.04有以下命令

sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service

输入

sudo mysql_secure_installation

然后进行以下操作

Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

测试以下密码是否能登陆

sudo mysql -u root -p

6、安装PHP7.2 / PHP-FPM

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.2-fpm php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-gd php7.2-xml php7.2-intl php7.2-mysql php7.2-cli php7.2-zip php7.2-curl

7、重启nginx和php

sudo systemctl restart nginx.service
sudo systemctl restart php7.2-fpm.service

8、创建WordPress的数据库

sudo mysql -u root -p
    CREATE DATABASE yourDBname;
    CREATE USER 'yourDBusername'@'localhost' IDENTIFIED BY 'new_password_here';
    GRANT ALL ON yourDBname.* TO 'yourDBusername'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    EXIT;

9、安装wordpress

cd /tmp && wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz
sudo mv wordpress /var/www/html/wordpress
sudo chown -R www-data:www-data /var/www/html/wordpress/
sudo chmod -R 755 /var/www/html/wordpress/

10、配置http服务

我用的是vim

sudo vim /etc/nginx/sites-available/wordpress

找到这个东西的位置, 将example.com 换为自己的网址

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

     client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }
}
PHPCopy

11、开启网站

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

12、对网站进行配置

1)先是将示例配置文件复制一份

sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

2)获取secure key,打开下面的网站。

https://api.wordpress.org/secret-key/1.1/salt/

3)再进行配置

sudo vim /var/www/html/wordpress/wp-config.php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'yourDBname');

/** MySQL database username */
define('DB_USER', 'yourDBusername');

/** MySQL database password */
define('DB_PASSWORD', 'user_password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
PHPCopy

4)再找到secure key的相应位置,将自己获取到的key放进去

不要直接复制!!!
define('AUTH_KEY',         'zP}sLq>K[Q}6+-QS !Fc,wBD%373RYo.C<c=%lnE.!xY:kloSyJ@qIQ`2iVy{Sd[');
define('SECURE_AUTH_KEY',  'Zrw|4{)0]tE}bcHa8@nwM]SC:17b}-IDd)Z%1d}a}cMqI}h@|Kf>oLRL`pXdySLN');
define('LOGGED_IN_KEY',    ',Nl,:NNP+R)%Y$gjpOI8~X?<;?}eTvaI4;l?T@S}V]BwsNT{*e!y.YB^#X=QI@qx');
define('NONCE_KEY',        'n2Z2|H>r|-C-y(yzG*-1btopL;N|);8lZQvIP( Dhy}xtc2vs#(2#ec,C%])Bf~[');
define('AUTH_SALT',        '>`nL:waCX!k~-(9!A2.?PJpKd&,D[r}w(i;~Ck^q1M`YCWF2.fTR%;V7_+}QI76 ');
define('SECURE_AUTH_SALT', 'nshMJqJv2Z_EVt|Wtw?qJCI6N&>^{L-.ig(]Pc.3M!*,sR8i[WZg.5pQP1-t8a$z');
define('LOGGED_IN_SALT',   '-nDGM,|-PWtNy02}0r^,rsJlC5#si%W{@6W]<<#PR}T)9Izv7Rc[]HKk`yk)1v38');
define('NONCE_SALT',       'QzZF]GjCkgNC;,m&jc=~gX-gWo^oUj{W]N+s5-kG?Fq?KQ^ESNhI<+xa-m+;e|?(');

13、配置ssl

1)安装 Let’s Encrypt Client

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

2)获取免费的ssl证书

将example.com 全部更换为自己的域名

sudo certbot --nginx -m [email protected] -d example.com -d www.example.com

3)接下来的东西按照步骤走

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A


Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

最后一个一定要选择2

4)重新对配置文件进行配置

sudo nano /etc/nginx/sites-available/wordpress
server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

     client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

  listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Redirect non-https traffic to https
    # if ($scheme != "https") {
    #     return 301 https://$host$request_uri;
    # } # managed by Certbot

}

三、大功告成

直接打开你的网址,看看是否出现这个页面,出现了就说明成功啦

未分类

Centos实现端口转发:Rinetd部署笔记

前言

虽然Linux本身自带的iptables可以实现端口转发功能,但其配置相对复杂。因此本文介绍另一个端口转发工具Rinetd,其安装和配置都更为简单。

Rinetd部署环境

本文是基于Centos7系统部署Rinetd端口转发工具。

Rinetd安装

到官网下载最新版,得到安装包rinetd.tar.gz :

官网地址:https://boutell.com/rinetd/

上传到Linux,本文上传位置为:

/usr/local/

解压安装包:

tar -zxvf rinetd.tar.gz

由于Rinetd需要编译安装,先安装gcc编译环境:

yum install gcc

进入Rinetd安装目录:

cd /usr/local/rinetd

检查安装配置文件:

vi Makefile

注意配置文件中涉及到两处安装路径,一般情况下保持默认值即可:

CFLAGS=-DLINUX -g

rinetd: rinetd.o match.o
        gcc rinetd.o match.o -o rinetd

install: rinetd
        install -m 700 rinetd /usr/sbin
        install -m 644 rinetd.8 /usr/man/man8

但是若 /usr/man/man8 目录不存在,需要先手建:

mkdir -p /usr/man/man8

编译并安装:

make && make install

至此Rinetd安装完成。

Rinetd配置

配置端口转发规则(该文件可能不存在,直接创建即可):

vi /etc/rinetd.conf

该文件每行一个转发规则,配置格式为:

[source_address] [source_port] [destination_address] [destination_port]

即:

[本机IP(若非多网卡直接设为0.0.0.0)] [转发端口] [服务IP] [服务端口]

如:

0.0.0.0 9527 192.168.64.22 9527

Rinetd使用

Rinetd的启动需要指定规则配置文件,而停止需要杀掉进程:

启动:rinetd -c /etc/rinetd.conf
停止:killall rinetd

查看端口转发状态:

netstat -tanulp|grep rinetd

资源下载

https://download.csdn.net/download/lyy289065406/10551468

CentOS 7安装MariaDB 10详解以及相关配置

第一步:添加 MariaDB yum 仓库

首先在CentOS操作系统中/etc/yum.repos.d/目录下添加 MariaDB 的YUM配置文件MariaDB.repo文件。

vim /etc/yum.repos.d/MariaDB.repo

在该文件中添加以下内容保存:

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.2/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

第二步:安装 MariaDB

通过yum命令轻松安装 MariaDB。

yum install MariaDB-server MariaDB-client -y

MariaDB 安装完毕后,立即启动数据库服务守护进程。

systemctl start mariadb

设置 MariaDB 在操作系统重启后自动启动服务。

systemctl enable mariadb

查看 MariaDB 服务当前状态。

systemctl status mariadb

第三步:对 MariaDB 进行安全配置

通过以下命令进行安全配置,根据实际情况用Y/N回复以下问题:设置 MariaDB 的 root 账户密码,删除匿名用户,禁用 root 远程登录,删除测试数据库,重新加载权限表。

mysql_secure_installation

本人全都是选择了Y,然后按回车。

在配置完数据库的安全配置后,可以通过以下命令查看版本,确认 MariaDB已安装成功。

mysql –version

可以通过 MariaDB 命令行登录,然后对数据库进行sql查询操作。

mysql -u root -p

第四步:为 MariaDB 配置远程访问权限

在第三步中如果禁用 root 远程登录选择 Y 的话就不能在别的电脑通过navicat等工具连接到数据库,这时就需要给对应的 MariaDB 账户分配权限,允许使用该账户远程连接到MariaDB。可以输入以下命令查看账号信息:

select User, host from mysql.user;

root账户中的host项是localhost表示该账号只能进行本地登录,我们需要修改权限,输入命令:

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;        

修改权限。%表示针对所有IP,password表示将用这个密码登录root用户,如果想只让某个IP段的主机连接,可以修改为:

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’192.168.71.%’ IDENTIFIED BY ‘my-new-password’ WITH GRANT OPTION;

最后别忘了:

FLUSH PRIVILEGES;

保存更改后,再看看用户账号信息:

这个时候发现相比之前多了一项,它的host项是%,这个时候说明配置成功了,我们可以用该账号进行远程访问了。

第五步:CentOS 7 开放防火墙端口

在第四步后如果还是不能远程连上数据库的话应该就是3306端口被防火墙拦截了,这时我们就需要关闭防火墙或者开放防火墙端口。

关闭防火墙:

systemctl stop firewalld.service            #停止firewall

systemctl disable firewalld.service        #禁止firewall开机启动

开放防火墙端口,开启后要重启防火墙:

firewall-cmd –zone=public –add-port=3306/tcp –permanent

firewall-cmd –reload

第六步:设置数据库字母大小写不敏感

vim /etc/my.cnf.d/server.cnf

在[mysqld]下加上】

lower_case_table_names=1

默认是等于0的,即大小写敏感。改成1就OK了。如果之前已经建了数据库要把之前建立的数据库删除,重建才生效。

第七步:设置MariaDB数据库默认编码

MariaDB的默认编码是latin1,插入中文会乱码,因此需要将编码改为utf8。

1.登录,使用以下命令查看当前使用的字符集,应该有好几个不是utf8格式。

SHOW VARIABLES LIKE ‘character%’;

2.修改的配置文件

vim /etc/my.cnf.d/client.cnf

在[client]字段里加入

default-character-set=utf8
vim /etc/my.cnf.d/server.cnf

在[mysqld]字段里加入

character-set-server=utf83

重启 MariaDB 配置生效。

systemctl restart mariadb