[Luogu P2771][USACO16JAN]Build Gates S

Posted xzs123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Luogu P2771][USACO16JAN]Build Gates S相关的知识,希望对你有一定的参考价值。

安装前准备工作

系统及应用版本
centos 8.3
nginx 1.18
php 7.4.8
postgresql 12.3
zabbix 5.0.2

安装编译环境依赖包

dnf -y install gd gd-devel gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2-devel libpng-devel curl-devel numactl langpacks-zh_CN.noarch glibc-common net-tools lrzsz readline readline-devel sqlite-devel libzip libzip-devel wget net-snmp-devel libevent-devel

安装包下载

wget http://nginx.org/download/nginx-1.18.0.tar.gz
wget https://www.php.net/distributions/php-7.4.8.tar.gz 
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz
wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz
wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz

安装nginx

解压nginx源码包:

tar -zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0

编译安装:

./configure --prefix=/opt/lnmp/nginx
make && make install

创建nginx用户

useradd nginx
passwd nginx

将nginx命令加入环境变量

#设置环境变量
vim /etc/profile.d/nginx.sh
	PATH=$PATH:/opt/nginx/sbin
	export PATH
:wq!
source /etc/profile         #刷新配置
#修改nginx配置
grep "^s*[^# 	].*$" /opt/lnmp/nginx/conf/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

#启动测试nginx配置文件
/opt/lnmp/nginx/sbin/nginx -t -c /opt/lnmp/nginx/conf/nginx.conf
#启动nginx
/opt/lnmp/nginx/sbin/nginx -c /opt/lnmp/nginx/conf/nginx.conf
#停止nginx
/opt/lnmp/nginx/sbin/nginx -c /opt/lnmp/nginx/conf/nginx.conf -s stop

--------------------------------------
[root@angrymushroom-wk nginx-1.18.0]# nginx -t
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
[root@angrymushroom-wk nginx-1.18.0]# nginx 
[root@angrymushroom-wk nginx-1.18.0]# netstat -lnptu |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      97075/nginx: master 

源码安装postgresql

解压源码包

tar -zxf postgresql-12.3.tar.gz
cd postgresql-12.3

编译安装

./configure --prefix=/opt/lnmp/pgsql
make && make install

创建postgres用户

useradd postgres
passwd postgres

添加环境变量

vim /etc/profile.d/postgresql.sh ## 增加环境变量,不推荐直接在/etc/profile中添加,系统更新升级时会需要merge

cat /etc/profile.d/postgres.sh 
PATH=/opt/lnmp/pgsql/bin:$PATH
export PATH
:wq!
source /etc/profile ## 更新环境变量

将postgresql的库添加到全局

cat /etc/ld.so.conf.d/pgsql.conf 
/opt/lnmp/pgsql/lib
ldconfig              ##更新库
ldconfig -v |grep pg  ## 查看是否添加成功

初始化数据库

su - postgres
/opt/lnmp/pgsql/bin/initdb -D /opt/lnmp/pgsql/data

配置数据库允许远程登录

vim /opt/lnmp/pgsql/data/pg_hba.conf
 # IPv4 local connections:
 host    all             all             127.0.0.1/32            trust
 host  all    all    0.0.0.0/0    md5
vim /opt/lnmp/pgsql/data/postgresql.conf 
 listen_addresses = ‘*‘
 port = 5432

postgresql运行命令

opt/lnmp/pgsql/bin/pg_ctl start -D /opt/lnmp/pgsql/data -l /opt/lnmp/pgsql/logs/server.log
/opt/lnmp/pgsql/bin/pg_ctl stop -D /opt/lnmp/pgsql/data 
/opt/lnmp/pgsql/bin/pg_ctl restart -D /opt/lnmp/pgsql/data 
/opt/lnmp/pgsql/bin/pg_ctl reload -D /opt/lnmp/pgsql/data 
/opt/lnmp/pgsql/bin/pg_ctl status -D /opt/lnmp/pgsql/data 

创建库和用户

psql -h 192.168.253.250 -U postgres                     ## postgres登录数据库
alter user postgres with password ‘postgres‘;           ## 修改postgres密码
create user zabbixus with password ‘zabbixpwd‘;         ## 创建用户设置密码
CREATE DATABASE zabbixdb OWNER zabbuxus;                ## 创建数据库并指定用户
grant ALL privileges on database zabbixdb to zabbixus;  ## 给用户赋数据库权限
psql -h 192.168.253.250 -U zabbix -W zabbixdb           ## 普通用户登录

安装php

php依赖包oniguruma 安装

tar -zxf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4
./autogen.sh
./configure --prefix=/usr --libdir=/lib64
make && make install

编译php

./configure --prefix=/opt/lnmp/php --with-config-file-path=/opt/lnmp/php/etc --with-pdo-pgsql=/opt/lnmp/pgsql/ --with-pgsql=/opt/lnmp/pgsql/ --with-freetype --with-jpeg --with-zlib --enable-bcmath --enable-shmop --enable-sysvsem --with-curl --enable-mbstring --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap-sasl --with-xmlrpc --enable-soap --with-gettext  --enable-fpm --with-zip --enable-gd --with-webp
make && make install

添加php配置文件并修改

cp php.ini-production /opt/lnmp/php/etc/php.ini
cp /opt/lnmp/php/etc/php-fpm.conf.default /opt/lnmp/php/etc/php-fpm.conf
cp /opt/lnmp/php/etc/php-fpm.d/www.conf.default  /opt/lnmp/php/etc/php-fpm.d/www.conf
vim /opt/lnmp/php/etc/php.ini
    date.timezone = Asia/Shanghai
    post_max_size 16M
    max_execution_time 300
    max_input_time 300
vim /etc/profile.d/php.sh
    PATH=/opt/lnmp/php/bin:/opt/lnmp/php/sbin:$PATH
    export PATH
vim /opt/lnmp/nginx/html/test.php    ## nginx访问php测试页面
    <?
    php phpinfo();
    ?>
vim /opt/lnmp/nginx/html/testpg.php  ## php连接postgresql数据库测试页面
<?php
$conn_string  =  "host=localhost port=5432 dbname=zabbixdb user=zabbixus password=zabbixpwd" ;  
$dbconn = pg_connect($conn_string);
if (!$dbconn)
            echo "连接失败!!!!!/r/n";
else
            echo "连接成功!!!!!/r/n";
    pg_close($dbconn);
?>

php运行命令

/opt/lnmp/php/sbin/php-fpm        ## 直接执行启动程序  pkill php-fpm 结束进程  php-fpm -t 检测配置文件是否有错
ps -ef |grep php-fpm
root       23942       1  0 Aug06 ?        00:00:00 php-fpm: master process (/opt/lnmp/php/etc/php-fpm.conf)
nobody     39558   23942  2 05:18 ?        00:00:47 php-fpm: pool www
nobody     40815   23942  2 05:37 ?        00:00:23 php-fpm: pool www
nobody     41628   23942  2 05:50 ?        00:00:05 php-fpm: pool www
netstat -lnptu |grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      23942/php-fpm: mast 

安装ZABBIX5

解压zabbix包

tar -zxf zabbix-5.0.2.tar.gz
cd zabbix-5.0.2

编译安装zabbix

./configure --prefix=/opt/zabbix --enable-server --enable-agent --with-postgresql=/opt/lnmp/pgsql/bin/pg_config --with-net-snmp --with-libcurl --with-libxml2   
make && make install

创建zabbix用户

useradd -d /opt/zabbix -s /sbin/nologin zabbix

导入zabbix表数据

 psql -d zabbixdb -U zabbixus  <database/postgresql/schema.sql
 psql -d zabbixdb -U zabbixus  <database/postgresql/images.sql
 psql -d zabbixdb -U zabbixus  <database/postgresql/data.sql
 psql -d zabbixdb -U zabbixus  <database/postgresql/timescaledb.sql  
 psql -d zabbixdb -U zabbixus  <database/postgresql/double.sql 

修改zabbix_server.conf和zabbix_agent.conf

vim /opt/zabbix/etc/zabbix_server.conf
    LogFile=/opt/zabbix/log/zabbix_server.log    ## 日志文件存放的路径
    PidFile=/opt/zabbix/zabbix_server.pid        ## pid文件存放的路径
    DBHost=localhost                             ## 数据库服务器地址
    DBName=zabbixdb                              ## 数据库名字
    DBUser=zabbixus                              ## 连接数据库的用户名
    DBPassword=zabbixpwd                         ## 连接数据库用户的密码
    #DBSocket=/var/lib/mysql/mysql.sock          ## 指定连接mysql的socket,mysql配置的client sock文件路径
    DBPort=5432                                  ## 数据库端口
    Timeout=10                                   ## 超时时间
    LogSlowQueries=3000                          ## 慢查询记录的时间
mkdir /opt/zabbix/log
chown zabbix.zabbix /opt/zabbix/log
vim /opt/zabbix/etc/zabbix_agentd.conf
    LogFile=/opt/zabbix/log/zabbix_agentd.log
    PidFile=/opt/zabbix/zabbix_agentd.pid
    Server=127.0.0.1                             ## 服务器IP                          
    ServerActive=127.0.0.1                       ## 服务器IP
    Hostname=angrymushroom-os801                 ## agent客户机主机名
vim /etc/profile.d/zabbix.sh 
    PATH=/opt/zabbix/bin:/opt/zabbix/sbin:$PATH
    export PATH
source /etc/profile
vim /etc/ld.so.conf.d/zabbix.conf 
    /opt/zabbix/lib
ldconfig
 

启动zabbix

/opt/zabbix/sbin/zabbix_agentd -c /opt/zabbix/etc/zabbix_agentd.conf
/opt/zabbix/sbin/zabbix_server -c /opt/zabbix/etc/zabbix_server.conf
## ps -ef |grep zabbix 查看进程  netstat -lnptu |grep zabbix 查看端口 pkill 结束进程

配置zabbix web页面

cp -a zabbix-5.0.2/ui/* /opt/lnmp/nginx/html/zabbix/   ## 将web页面cp到nginx的web根下的zabbix目录
## 在Windows C:WindowsFonts 下找一个 .ttf后缀的中文包上传到 /opt/lnmp/nginx/html/zabbix/assets/fonts/下
## 将上传的ttf语言包名替换成原本的语言包名
cd /opt/lnmp/nginx/html/zabbix/assets/fonts/
ls *.ttf
DejaVuSans.ttf  simhei.ttf       ## 这里将DejaVuSans.ttf mv 成DejaVuSans.ttf.bak 然后将simhei.ttf改为DejaVuSans.ttf
## 修改以后在浏览器打开  http://IP:Prot/zabbix 进入配置页面。第一页是个欢迎界面下一步之后会检查环境是否正确。如果有问题根据提示的信息修改然后刷新页面
## 最后完成的时候会让你下载一个zabbix.conf.php的配置文件 把它上传到对应目录 然后刷新页面即可进入zabbix登录页面
## 登录后可以在 user settings里设置中文语言

postgresql补充

列出数据库名(查看已有的数据库)

 l  或  select * from pg_database;

切换数据库

c 数据库名

列出表名

 d 不加参数 或
SELECT  tablename  FROM  pg_tables  WHERE  tablename  NOT  LIKE  ‘pg%‘  AND tablename NOT LIKE ‘sql_%‘ ORDER  BY  tablename;

将数据库的所有权限付给用户

postgres=# GRANT ALL PRIVILEGES ON DATABASE zabbixdb TO zabbixus;  #将数据库 zabbixdb 权限授权于 zabbixus 但此时用户还是没有读写权限,需要继续授权表
GRANT
postgres=# c zabbixdb;
GRANT ALL PRIVILEGES ON all tables in schema public TO zabbixus;
#注意,该sql语句必须在所要操作的数据库里执行
#这一句是将当前数据库下 public schema 的表都授权于 zabbixus
#如果要单独一个权限以及单独一个表,则:
GRANT SELECT ON TABLE mytable TO zabbixus;
------------
postgres=# grant all on database testdb to zabbixus;              #将testdb所有权限赋值给zabbixus
GRANT

导入整个数据库

psql -U username databasename < /data/dum.sql -- 用户名和数据库名

设置用户远程登录

[root@angrymushroom-wk ~]# psql -h 192.168.254.128 -U zabbixus -d zabbixdb
    psql: error: could not connect to server: could not connect to server: 拒绝连接
        Is the server running on host "192.168.254.128" and accepting
        TCP/IP connections on port 5432?

安装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置。

  配置远程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hba.confpostgresql.conf配置文件。

  pg_hba.conf :配置对数据库的访问权限;

  postgresql.conf :配置PostgreSQL数据库服务器的相应的参数。

下面介绍具体配置的步骤:

修改 pg_hba.conf 文件,配置用户的访问权限(#开头的行是注释内容):  

[root@angrymushroom-wk ~]# vim /opt/pgsql12/data/pg_hba.conf
     # TYPE DATABASE  USER    CIDR-ADDRESS     METHOD
     # "local" is for Unix domain socket connections only
     local all    all                     trust
     # IPv4 local connections:
     host  all    all    127.0.0.1/32     trust
     host  all    all    192.168.1.0/24   md5        ## 设置允许某个网段
     host  all    all    0.0.0.0/0        md5        ## 设置允许全部网段
     # IPv6 local connections:
     host  all    all    ::1/128       trust

其中,第6条是新添加的内容,表示允许网段192.168.1.0上的所有主机使用所有合法的数据库用户名访问数据库,并提供加密的密码验证。其中,数字24是子网掩码,表示允许192.168.1.0--192.168.1.255的计算机访问。

修改 ostgresql.conf 文件,将数据库服务器的监听模式修改为监听所有主机发出的连接请求。

  定位到#listen_addresses = "localhost"。PostgreSQL安装完成后,默认只接受来自本机localhost的连接请求。

  将行开头都#去掉,将行内容修改为listen_addresses = "*"来允许数据库服务器监听来自任何主机的连接请求

其他扩展

systemctl
1、启动、关闭、重启防火墙服务。

systemctl start firewalld.service
systemctl stop firewalld.service
systemctl restart firewalld.service

2、显示防火墙的状态。

systemctl status firewalld.service

3、开机启动防火墙。

systemctl enable firewalld.service

4、开机时禁用防火墙。

systemctl disable firewalld.service

5、查看防火墙是否开机启动。

systemctl is-enabled firewalld.service

6、查看已启动的服务列表。

systemctl list-unit-files|grep enabled

7、查看启动失败的服务列表。

systemctl --failed

配置防火墙
1、查看版本。

firewall-cmd --version

2、查看帮助。

firewall-cmd --help

3、显示状态。

firewall-cmd --state

4、查看所有打开的端口。

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

5、重新载入,更新防火墙规则。

firewall-cmd --reload

6、查看区域信息。

firewall-cmd --get-active-zones

7、查看指定接口所属区域。

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

8、拒绝所有包。

firewall-cmd --panic-on

9、取消拒绝状态。

firewall-cmd --panic-off

10、查看是否拒绝。

firewall-cmd --query-panic

11、开启80端口,–permanent永久生效,没有此参数重启后失效。

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

12、查看80端口是否开放。

firewall-cmd --zone=public --query-port=80/tcp

13、删除80端口配置。

firewall-cmd --zone=public --remove-port=80/tcp --permanent










以上是关于[Luogu P2771][USACO16JAN]Build Gates S的主要内容,如果未能解决你的问题,请参考以下文章

luogu P1353 [USACO08JAN]跑步Running

[luogu P2205] [USACO13JAN]画栅栏Painting the Fence

luogu4185 [USACO18JAN]MooTube [并查集]

[luogu p3612] [USACO17JAN]Secret Cow Code S

luogu P3116 [USACO15JAN]会议时间Meeting Time

[Luogu3069][USACO13JAN]牛的阵容Cow Lineup