CentOS 7的web环境等

原则:尽量使用yum repo安装

CentOS 官方对第三方repo的说明  https://wiki.centos.org/zh/AdditionalResources/Repositories

nginx

使用nginx 官方提供的repo,配置文件 /etc/yum.repos.d/nginx.repo 文件内容如下

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

更多参看 http://nginx.org/en/linux_packages.html

php(fastcgi版)

因为要配合nginx,所以要选择fastcgi版的php-fpm, 这里选择remi源,这也是centos 官方推荐的php源之一。如下命令配置repo,将会配置好几个repo文件,但只有remi-safe.repo 是默认激活的,其他repo中的包有可能与系统文件冲突,所以在需要使用时在临时激活。

rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-7.rpm

如下命令安装php-fpm

yum --enablerepo=remi-php73 install php-fpm

remi维护了多个php版本,选用目前最新的7.3,通过--enablerepo临时激活该源。注意包名带 "-fpm" 否则是apache的模块版。注意一下安装进程,没有自动安装httpd。

按需要安装其他php扩展,下面是常用扩展的参考

yum --enablerepo=remi-php73 install php-gd php-gmp php-igbinary \
  php-mbstring php-mcrypt php-memcached php-mysqli php-odbc \
  php-pdo php-xml php-zip php-zlib

配置php-fpm。主要是文件  /etc/php-fpm.d/www.conf ,默认fastcgi进程数是动态管理的,根据机器内存、负载等控制进程数,下面是微小站点的配置,其中user/group 不改默认apache也行。(或许默认的apache与后面提到的session文件目录默认权限是相符的,待确定 TODO )

user = nobody
group = nobody
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5

修改php默认的session文件存储目录权限,按前面php-fpm用户设置为

chown nobody:nobody /var/lib/php/session

在nginx启用php

nginx主配置文件为 /etc/nginx/nginx.conf,站点配置文件在 /etc/nginx/conf.d/*.conf ,默认参看主配置文件结尾处 include /etc/nginx/conf.d/*.conf 一行。

推荐习惯:把web站点文件放在 /var/www/html/ 目录下,每个站点一个子目录,下面以默认站点文件的配置为例,其他站点参考即可。更多参考nignx官方文档,尤其是其中core模块 ngx_http_core_module

为默认站点 default.conf 创建目录 mkdir -p /var/www/html/default ,备份一下自带的的站点文件 cp /etc/nginx/conf.d/default.conf{,__original} ,参考下面示例修改 /etc/nginx/conf.d/default.conf 文件。有更多站点,用default.conf 作模板修改。选项说明:

  • 其中 listen 80 default; 一行表示这是默认站点,其他站点就不能加了。
  • 原来在location / {...} 中的root 指令; 推荐直接放到server{...}节点中,目的是,在php 配置fastcgi_param中使用$document_root 变量,而不是像默认配置文件里的再写一遍绝对路径,其中也可以省略掉root指令了。
  • try_files $uri $uri/ /index.php; 一行是wordpress的伪静态rewrite规则;
  • rewrite ^/feed /license.txt; 是把url重写到指定文件上
  • 如果配置ssl/https,可以使用Let’s Encrypt免费证书,步骤及设置参数可参看这里
server {
    listen 80 default;
    server_name blog.path8.net;
    #server_name blog.path8.net www.path8.net; #多域名
    root /var/www/html/default;
    #autoindex on;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location /robots.txt {
        log_not_found off;
        access_log off;
    }

    location / {
    #    root   /usr/share/nginx/html;
        index  index.html index.htm;
        #try_files $uri $uri/ /index.php;
        #rewrite ^/feed /license.txt;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    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;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

修改完成后,nginx -t 测试配置文件,无误后启动(start)nginx及php-fpm,并设置自动启动(enable)

nginx -t
systemctl start nginx
systemctl status nginx
systemctl enable nginx
systemctl start php-fpm
systemctl status php-fpm
systemctl enable php-fpm

如果静态文件正常,php请求报错 File not found ,并且nginx error日志中有如下错误 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream 可去检查web文件权限与php-fpm用户是否匹配,还有是不是开着SELinux且没配置好规则。

数据库MySQL/MariaDB安装

遵循CentOS7的改变,使用Mariadb替换MySQL,这二者差别并不大,基本上完全沿用MySQL,除了改个名字。yum安装服务端及客户端

yum install mariadb mariadb-server

先不急着启动服务,修改一下配置文件,参考下面,放到[mysqld]节点后,大概第10行。这是适合微小型服务器的配置参数,可以按实际调整。的话添加下面几行。

#add by fengyqf start 161105
skip-name-resolve

innodb_log_buffer_size=32M
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_additional_mem_pool_size=16M

server-id=301
log-bin=mysql-bin
log-error=mysql-bin.err
expire_logs_days=30
open_files_limit=10240
#add by fengyqf end

其中server-id起的4行,是配置复制功能用的,不要MySQL复制功能的话不要加,它们会生成一系列二进制文件,多占用磁盘。复制是自动同步把数据到其他服务上,还要其他配置才行,只这几行不够的。保存好启动服务。

systemctl start mariadb
systemctl status mariadb
systemctl enable mariad

如果在修改配置前启动过服务,启动会失败,删除日志文件再启动即可 rm /var/lib/mysql/ib_logfile*

new section

amazon lightsail使用记录及主要配置项(CentOS 7实例)

从朋友处得知amazon的lightsail,有东京机房而且网络质量还不错,价格还公道(512M最低配3.5刀),于是想换掉已经使用了7年的linode,正在用的早已绝版的东京1也4年了,网络抽风的频率有点高。试用过一段时间的东京2,网络质量确实有待改善。好几年前试用过aws的1年免费,啥都没干而浪费掉了,那时还跟linode一样是20刀1月。

英文国际版 https://aws.amazon.com/lightsail/

中国优化版 https://amazonaws-china.com/cn/lightsail/

网上有人说lightsail中文页面价格比英文高,可能是以前吧,现在并不是,所以跟随aws的提示进优化过的中文版,而且英文版可能还要科学上网(否则页面加载不完整)。

直接购买,目前最低配的首月免费,位置选择东京,平台选Linux/Unix,蓝图选仅操作系统-CentOS ,实例计划选最低的3.5刀版本,创建即可。关于系统版本,不选用预装应用(如Wordpress, Nginx等)的版本,是希望拿到干净的系统,按自己的需要定制。其实这点全看个人喜好了。

VPS实例初始化很快,搞一个静态IP地址,关联上去,免费的。

用户登录

默认不允许用户名/密码的登录方式,使用密钥对登录,按照提示进行即可。自带的用户名是centos,也可以先使用Web版SSH连接到服务器。关于用户方案推荐如下:

  • 先用web版ssh登录,添加一个新用户,设置密码,默认用户centos不去动它,似乎lightsail管理后台要用。useradd {yourname}; passwd {yourname}
  • 如果你使用linux/cygwin/maxosx,推荐把你的ssh公钥添加上去,以便直接ssh公钥登录,这比密码更安全,注意要 chmod 600 /home/{yourname}/.ssh/authorized_keys
  • 按后台提示创建适合putty用的密钥对,保存好不要泄漏。
  • 开启密码登录(只使用ssh密钥可略过):修改/etc/ssh/sshd_config 找到其中 PasswordAuthentication no 一行,删除或改成 PasswordAuthentication yes
  • (接上条)增强ssh,不允许root用户直接登录、只允许指定用户(默认用户centos及前面新建用户)登录,/etc/ssh/sshd_config 结尾追加如下两行
    AllowUsers {yourname} centos
    PermitRootLogin no

    记得systemctl restart sshd 重启sshd

防火墙/iptables

lightsail后台防火墙默认只开了几个端口,而iptables则完全开放(添加一条规则“所有TCP+UDP” 即可),推荐防火墙全开,而开启linux的iptables。

yum install iptables-services
systemctl start iptables
systemctl enable iptables

这样 iptables -L就显示默认规则了,按需要开启端口

iptables -I INPUT 5 -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT

[tip] lightsai防火墙没有开启ping或icmp的选项,但当允许了“所有TCP+UDP” 后,就可以ping了

其他

lightsail的CentOS 7默认是开启SELinux的,玩不来还是关了的好. 临时关闭setenforce 0,修改配置文件/etc/selinux/config永久关闭。

 

python3.x下pip安装 MySQL-python报错No module named 'ConfigParser'

cygwin下virtual-env的python3.6下安装 MySQL-python报错,错误消息如后,提示找不到ConfigParser模块,而事实上该模块在python3.x后改名了。那就照旧名做个包,引用进去。

文件 /path-to-you-python/site-packages/ConfigParser.py

内容如下(事实上只要第二行就行),再运行正常了。(当然mysql-python的其他依赖包之前已经安装过。)

"""compatible configparser"""
from configparser import *
$ pip install MySQL-python
Looking in indexes: https://mirrors.ustc.edu.cn/pypi/web/simple
Collecting MySQL-python
  Downloading https://mirrors.ustc.edu.cn/pypi/web/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip (108kB)
    100% |████████████████████████████████| 112kB 799kB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "", line 1, in 
      File "/tmp/pip-install-pasqnywc/MySQL-python/setup.py", line 13, in 
        from setup_posix import get_config
      File "/tmp/pip-install-pasqnywc/MySQL-python/setup_posix.py", line 2, in 
        from ConfigParser import SafeConfigParser
    ModuleNotFoundError: No module named 'ConfigParser'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-pasqnywc/MySQL-python/
(py36)

dokuwiki经验总结

设置

尽量不要直接修改doku程序源码(原因:容易出错,官方发布更新后还得麻烦一次);除非你对php程序足够自信、且不怕麻烦。

fnencode

linux/unix环境下,推荐在 管理-配置管理器-高级设置  里把 fnencode 改成utf-8,这样服务器上的中文文件名也将显示为原始文件名,会方便很多。(不要像网上有些文章里说的直接修改代码)。如果已经有非ascii文件名,可以先将它们改成英文文件名,改过fnencode后再从英文文件名改回来;否则非ascii码文件在前台将全部不可见。如果media附件也有非ascii码,好像没办法改。

扩展(插件/主题)

douku的扩展有两大类,插件与主题。以下都是插件,并且都可以在dokuwiki后台在线安装。尽量不要从别处下载扩展,以免夹带不好的私货。后台扩展管理界面,

  • Move 页面改名,并能自动修正所有相关链接
  • edittable 可视化编辑表格;从excel、网页等复制表格后,可以直接在可视化编辑界面粘贴
  • IPGroup 可以把某个ip的用户直接授权为相应的用户组。doc
  • WordPress authentication  允许使用wordpres站点的用户作为doku用户。

修改git提交的历史

前言

如果是团队协合中的git仓库,其历史最好不要修改;但如果是没有别人参与的个人项目,那就随便了,自己开心就好。以下所有操作前,都最好把整目录备份一下,方便出错时从头再来。

删除文件

假设要删除passwords.txt的文件,让在整个git历史像不存在过一样

git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

单个文件改名/单目录改名

git filter-branch --tree-filter 'if [ -f old-name.txt ]; then mv old-name.txt new-name.txt; fi' HEAD
git filter-branch --tree-filter 'if [ -d old-name ]; then mv old-name new-name; fi' HEAD

如上两行,分别是对单文件改名(old-name.txt  -> new-name.txt), 单目录改名(old-name -> new-name) 。

注意 .git/refs/original/refs/heads 目录要为空。否则会报错说"Cannot create a new backup. A previous backup already exists in refs/original/  Force overwriting the backup with -f",然而加-f参数似乎并没有用。  似乎执行一次这个命令,就会出现一次.git/refs/original/refs/heads/master,大概是filter-branch的后悔药(备份目录)

如果有多个分支,可以强行将分支们合并,改过名后再滚回到合并前,这样通常更方便些:可一次完成所有分支里的改名,同时避免被一大堆各种分支搞晕。(方法来源于stackoverflow,具体链接忘了)。

子目录变根目录

要把某个子目录foodir/ 下的所有文件(包含其历史),独立出去,成为一个单独的项目。其它文件自然被丢弃了,所以操作前要把整个仓库备份一下,或者在克隆的新仓库上操作。

git filter-branch --subdirectory-filter foodir -- --all

整个项目作为项目的子目录(根目录改子目录)

因为功能扩充、重构等原因,要把项目所有文件移到子目录里,git mv 不能被真正的跟踪。按如下操作,可移到newsubdir子目录中

git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

参看git联机文档 git filter-branch --help

合并提交(把多次commit合并成一个)

变基(rebase)相关操作,如 git rebase -i HEAD~3 更多参考git-book 重写历史

修改提交历史中的邮箱地址

git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then
GIT_AUTHOR_NAME="Scott Chacon";
GIT_AUTHOR_EMAIL="schacon@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD

删除指定姓名的所有提交历史

这个作法似乎不好

git filter-branch --commit-filter '
       if [ "$GIT_AUTHOR_NAME" = "Darl McBribe" ];
       then
               skip_commit "$@";
       else
               git commit-tree "$@";
       fi' HEAD

 

firefox多版本独立共存、同时运行方案

firefox升级到57以后,改进步子有点大,旧扩展失效,所以希望:多个版本互不影响的共存、并且可以同时运行,经过多数次反复折腾,基本上完美达成目标。

原理及要点

  1. 通过about:profiles创建多个配置文件,每个版本使用自己独立的配置文件
  2. 启动firefox时指定 --no-remote 参数,这样可以多版本同时运行
  3. 禁用旧版本的自动更新,最好再把其配置文件目录打包备份,配置文件被破坏时可以快速恢复(针对“自动更新”这个大敌)。

操作步骤

当前已经更新到最新的 firefox ESR 60.x,是为主要版本。另新安装一个ESR 52.x 作为第二版本。即平时使用60.x,需要兼容旧应用或扩展时再启动52.x。毕竟新版本速度更快,是未来的趋势。

  1. 启动一个firefox 60,地址栏输入 about:profiles 回车,按照提示创建新建一个配置文件,命名为esr52,完成后,新配置文件将默认创建到在 AppData\RoamingAppData\Local 下各一个子目录。示例如后图
  2. 安装firefox 52 ,注意要自定义安装,并修改安装目录(推荐安装到C:\Program Files\Mozilla Firefox_ESR52),否则将把默认版本覆盖掉! 安装完毕后不要直接启动。
  3. 把进入目录 C:\Program Files\Mozilla Firefox_ESR52 ,把firefox.exe发送到桌面快捷方式,然后修改快捷方式属性:目标增加两个参数 --no-remote -P esr52  其中--no-remote即是允许多版本启动,-P 参数指定的是配置文件名,即前面第1步的命名。
  4. 通过上面修改后的快捷方式启动firefox 52,进入 选项 - 高级-更新,选中“不检查更新”。按您的需要做其他设置(这里建议不要使用firefox同步功能,避免新旧两个版本同步扩展带来的混乱;如果执意要用的话可以注册两个同步账号)。
  5. 在firefox 52中打开about:profiles,确认当前使用的是esr52的配置文件。打开该配置的“根目录”文件夹,把该文件夹整体打包备份。

杂项附注

附图

新建配置文件

about:profiles 中显示配置文件信息

多个profile版本示例,及firefox 52启动快捷方式设置示例

 

CentOS 7下安装pptp服务端手记

环境,初装的阿里云ECS最低配机型,CentOS 7 x64  (兼及linode的CentOS 7)

主要配置步骤

1. 安装前检查系统支持

a. 在安装之前查看系统是否支持PPTP

modprobe ppp-compress-18 && echo success

应该输出:success

yum install kernel-devel

b. 是否开启TUN/TAP

cat /dev/net/tun

应该输出:cat: /dev/net/tun: File descriptor in bad state

c. 是否开启ppp

cat /dev/ppp

应该输出:cat: /dev/ppp: No such device or address

如果环境不满足上面3个条件,表示很可能不支持pptp。  例外:linode的xen、kvm服务器,也是支持的pptp的。可能是linode内核是定制的,并不是外部ko模块,与原版CentOS表现有所不一致。

2. 安装必要包

a. 首先安装epel源

yum install epel-release

b. 安装pptp相关包

yum install ppp pptpd net-tools iptables-services

3. 修改相关配置文件

a. 主配置文件 /etc/pptpd.conf

结尾处增加如下两行,分别是pptp服务的虚拟网段网关,及分配给客户端的地址范围。

localip 192.168.9.1
remoteip 192.168.9.101-199

b. pptpd配置文件/etc/ppp/options.pptpd,结尾增加两行,给虚拟网段用的dns服务,可以使用主机商提供的dns服务器地址。

ms-dns 100.100.2.136
ms-dns 100.100.2.138

如果是linode等海外服务器,可以使用谷歌的公共dns服务器地址

ms-dns 8.8.8.8
ms-dns 8.8.4.4

c. 设置pptpd vpn服务器用户名密码,编辑文件 /etc/ppp/chap-secrets, 每行一套帐号,该文件默认有简短说明。一行帐号行示例如下,以空格分隔的4个字段:第1、3是用户名密码,其他两字段是星号

user1 * 111222333 *

d. 服务器允许ip转发内核,编辑配置文件/etc/sysctl.conf,增加如下一行

net.ipv4.ip_forward=1

4. 设置开机自动启动 pptpd, iptables,

ln -s /usr/lib/systemd/system/pptpd.service /etc/systemd/system/multi-user.target.wants/
ln -s /usr/lib/systemd/system/iptables.service /etc/systemd/system/multi-user.target.wants

 

5. iptables配置网络

a. iptables配置,配置虚拟网段NAT支持。如果pptp客户端不需要上网,可以忽略本步骤。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

,注意其中的eth0是本机网卡设备名,按实际情况修改;按虚拟网段设置NAT,如下

iptables -t nat -I POSTROUTING -s 192.168.9.0/24 -o eth0 -j MASQUERADE

b. 开放pptp端口1723,允许转发

iptables -I INPUT 7 -m state --state NEW -p tcp --dport 1723 -j ACCEPT
iptables -P FORWARD ACCEPT

c. 保存iptables规则

service iptables save

6. 阿里云ECS可能还需要几项特别设置

a. 如果windows下连接pptp,如果遇到519错误,是因为缺少内核模块 ip_nat_pptp ,运行modprobe ip_nat_pptp 即可加载,但最好设置开机自动加载:新建文件 /etc/modules-load.d/ip_nat_pptp.conf 内容为如下一行

ip_nat_pptp

b. 可能还要重建ppp文件:

rm /dev/ppp
mknod /dev/ppp c 108 0

c. 阿里云机器还要修改mtu:修改文件/etc/ppp/ip-up,在exit 0 前加入一行:

ifconfig $1 mtu 1500

d. 阿里云控制台里的安全区域,看上去跟防火墙或iptables类似的东西,要开启相应的端口。

7. 启动服务,加载相关匹配文件等

sysctl -p
systemctl start pptpd

或者单粗暴的reboot重启机器也行

centos 6 安装simple-obfs缺失及需要更新包

以下是依赖包,其中几个包centos本身不带,要到epel源中安装。autoconf, automake要更新为新版本

[root@vc6 feng]# yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y
[root@vc6 feng]# yum install epel-release
[root@vc6 feng]# yum install libev-devel libsodium-devel mbedtls-devel

 

 

下面几个文件中,#include <ev.h> 改成  #include <libev/ev.h>

[feng@vc6 simple-obfs-0.0.3]$ vim src/server.h
[feng@vc6 simple-obfs-0.0.3]$ vim src/resolv.c
[feng@vc6 simple-obfs-0.0.3]$ vim src/local.h

 

rpm打包参考

http://blog.csdn.net/chengfei112233/article/details/7641923

http://hlee.iteye.com/blog/343499

域名服务商、注册续费优惠码等

国内注册商有很多,但已经很多年不用了,多方面原因,可以自行google. 这里只说国外注册。更便宜,随便迁移,经常有有优惠码,更便宜。

最广为人行的是godaddy(狗爹),号称全球最大域名商。不过他们家域名续费价格通常有点高。还有name.com, namecheap等无数多个。

通常各域名商的初注册、域名转入,价格会比较便宜,所以一个捡漏的办法:每年换一次注册商!虽然有点不厚道,但确实节省了成本。其实转入60天后就可以下一次转入,这样多转几次,也相当于折腾着续费多年,不至于忘续费而丢掉。

域名商 name.com WHOIS隐私保护 优惠码 PRIVACYPLEASE  ,效果是隐私保护免费!

excel公式实现:根据当前单元格偏移位置引用计算、多条件查找

根据当前单元格偏移位置引用计算

直接上公式示例

=INDIRECT(ADDRESS(ROW()-1,COLUMN()))

作用:引用当前单元格上一行同列的值。
原理:自己查excel自带帮助的公式说明。
特点:可以无脑的将该公式粘贴到任意位置,即做相对引用,不受表格其他内容、位置的影响。
使用场景示例:如下图所示,尾行是计算周变化值/比例。选中格事实就是=B706-B698。每周会插入8行数据。使用了上面偏移位置方案,就不用每次更新下面公式,省心且不出错。

 

多条件查找

本方法来源于:https://www.zhihu.com/question/41820039/answer/93329442 在此表示感谢。

通用公式

=lookup(1,0/((条件1)*(条件2)*(条件3)),结果区域)

原理:参看出处说明

另外还有更多方法

Pages: 1 2 3 4 5 6 7 8 9 10 ... 46 47 48 Next