服务器

Ubuntu安装 GoAccess 分析 Nginx 日志

对于一个网站而言,网站日志能够反映很多问题,诸如用户访问情况,页面浏览情况,页面命中情况等,可以给我们继续优化网站提供很好的分析支持。

GoAccess 是一个性能优良的网站访问日志开源工具,通过它,我们能以可视化的方式来分析网站日志信息。

下面是在 Ubuntu 上安装 GoAccess 来分析 access.log 文件的一点分享。

安装 GoAccess

  • 使用以下命令安装 GoAccess:

    sudo apt install goaccess
  • 查看 GoAccess 是否安装成功
goaccess -V

GoAccess - 1.2.
For more details visit: http://goaccess.io
Copyright (C) 2009-2016 by Gerardo Orellana

看到上面的输出信息,说明我们已经安装好了 GoAccess

配置 NginxGoAccess 日志格式

  • 配置 Nginx 日志格式

打开 /etc/nginx/nginx.conf 配置文件,在日志文件下添加如下配置信息:

##
# Logging Settings
##

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

保存 Nginx 配置信息并重启 Nginx

  • 配置 GoAccess 日志格式

打开 GoAccess 配置文件: /etc/goaccess.conf,添加以下配置:

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^ %^ [%d:%t %^] "%r" %s %b "%R" "%u" %^

保存配置文件

分析 access.log 文件并输出为 html 文件

使用以下命令,开始分析 access.log 文件,并输出为 html 文件进行可视化分析:

goaccess access_blog.xsir.com.log -o /home/html/logs/report.html --time-format='%H:%M:%S' --date-format='%d/%b/%y' --log-format=COMBINED --real-time-html
access_blog.xsir.com.log 是需要分析的日志文件,因为我在log文件夹下,所以没有带目录
/home/html/logs/report.html 是输出 html 文件路径
--real-time-html 是实时输出

配置目录查看输出的 html 文件

打开 Nginx 配置文件,在站点配置文件下,添加以下配置信息:

location /report.html {
    alias /home/html/test/report.html;
}

现在我们可以通过访问网站 blog.xsir.com/report.html 查看网站的实时日志

后台运行 GoAccess

我们可以借助 tmux 来使 GoAccess 后台运行:

使用以下命令安装 tmux:

apt install tmux

安装好后,输入以下命令,进入 tmux:

tmux

goaccess access_blog.xsir.com.log -o /home/html/logs/report.html --time-format='%H:%M:%S' --date-format='%d/%b/%y' --log-format=COMBINED --real-time-html

一切正常的话 GoAccess 应该开始分析日志文件了,然后显示 “WebSocket server ready to accept new client connections”。
现在按下你 Tmux 的 PREFIX 键(默认是 Ctrl+B),再按 d 从 Tmux 中脱离出来,这样即使 ssh 断开连接了也能保持后台运行。

想查错也可以用以下命令查看刚才编辑的命令:

tmux attach

更多 GoAccess 使用技巧,参考官网手册。https://goaccess.io/

That's All.

Ubuntu查看端口使用情况

Ubuntu 查看指定端口使用情况,可以使用以下命令:

lsof -i:8080

当然,也可以使用下面的命令进行查看:

netstat -ap | grep 8080
PS: 我更喜欢使用上面一种方式,因为他更加好记 ^_^

如果要关闭使用这个端口的程序,使用kill + 对应的pid,如下:

kill -9 PID号
PS: kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
以下命令也是常用的,顺道记下:
// 查看已经连接的服务端口(ESTABLISHED)
netstat -a

// 查看所有的服务端口(LISTEN,ESTABLISHED)
netstat -ap

Ubutnu 安装 Samba 服务器

Samba 是一个共享协议,支持不同主机间进行文件的共享访问

服务器版本:18.04

以下是在 Ubutnu 服务器上安装 Samba 服务器的步骤:

更新软件源

sudo apt update
sudo apt upgrade

安装Samba服务器软件

sudo apt install samba

安装完Samba服务器软件后,可以通过以下命令查看是否安装成功:

samba -V

如果显示以下内容,说明安装成功:

Version 4.7.6-Ubuntu

配置Samba

创建分享目录并配置相应权限

首先我们需要创建一个分享目录,譬如 share,我们执行以下命令创建分享目录:

mkdir /home/xsir/share

在创建了分享目录之后,我们需要给该目录配置相应的权限,这关系到我们对分享目录下文件的操作:

chmod 777 /home/xsir/share

创建分享用户账号

使用以下代码创建一个 Samba 用户,并根据提示信息,初始化密码:

sudo smbpasswd -a xsir

现在我们已经有一个用户名为:xsir 的用户,密码是你刚设置的密码。

配置 Samba 的配置文件

现在我们开始配置 Samba,使用以下命令打开 Samba 的配置文件并进行编辑:

sudo vim /etc/samba/smb.conf

在配置文件最后添加以下代码:

[share]
   comment = share folder
   browseable = yes
   path = /home/xsir/share
   create mask = 0700
   directory mask = 0700
   valid users = xsir
   force user = xsir
   force group = xsir
   public = yes
   available = yes
   writable = yes

这样我们对 Samba 的所有配置就都完成了。接下来我们需要重启下 Samba 服务器使刚才的配置生效即可。使用以下命令对 Samba 服务器进行重启:

sudo service smbd restart

下面我们就可以愉快的访问刚配置好的 Samba 文件服务器进行愉快的玩耍了。

  • Mac 使用快捷键 CMD + K 进入前往面板,在地址栏里输入 smb://192.168.0.89/share 输入用户名和密码就可以进行文件分享操作。
  • Windows 下使用快捷键 Windows徽标+R 进入运行窗口,在地址栏里输入 \\192.168.0.89 输入用户名和密码就可以进行文件分享操作。
PS: 我们可以对 Samba 共享文件夹映射网络驱动器,这样就可以在下次双击映射好的文件夹进入共享目录。
Mac 下直接将刚才的文件夹拖到左侧个人收藏下,Windows 选中文件夹右键进行映射操作

Link:

Debian用Nginx搭建Webdav Server

Debian用Nginx搭建Webdav Server

安装 Nginx

sudo apt install nginx nginx-extras
mkdir -p /var/www/webdav/files # Webdav根目录

创建配置文件 /etc/nginx/conf.d/webdav.conf

server {
    listen       8080; # 端口
    server_name  webdav.Your_domain; #域名
    root /var/www/webdav/files; # 根目录,如果是其他的目录,需要注意目录权限
    client_body_temp_path /var/www/webdav/tmp;
    access_log  /var/log/nginx/webdav_access.log;
    error_log   /var/log/nginx/webdav_error.log;
    location / {
      #auth_basic "Not currently available";
      #auth_basic_user_file /etc/nginx/conf.d/.htpasswd; # htpasswd验证文件

      dav_methods PUT DELETE MKCOL COPY MOVE;
      dav_ext_methods PROPFIND OPTIONS;

      create_full_put_path on;
      dav_access user:rw group:r;

      autoindex on; # 可以在浏览器打开

      #limit_except GET {
      #  allow 115.115.0.0/32; # 允许访问的IP段,可以填自己家的IP,这样就只有你家的IP可以访问,大大增加安全性。
      #  deny  all;
      #}
   }
}

创建 .htpasswd,这是简单密码验证,因为限制了IP,所以安全性足够了。

htpasswd -c /etc/nginx/conf.d/.htpasswd UserName #自己用户名,然后输入密码

配置防火墙

如果你的防火墙默认放过所有包,可以忽略此步骤。
iptables -A INPUT -p tcp -m tcp --dport 8080 -m state --state NEW -j ACCEPT

如果想重启后防火墙依然生效,请看 这里

然后 service nginx restart 应该可以跑起来了。在浏览器输入 http://webdav.Your_domain:8080 如果要求登陆就说明成了,只需要将文件放在你设置的webdav根目录就可以访问,也可以用支持webdav的客户端访问。

Link:

crontab 每小时运行一次

先给出crontab的语法格式

对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法:

00 *   * * *  #每隔一小时执行一次
00 */1 * * *  #与上面是相同的任务

这种是正确的吗?对照最前面给出的语法格式来看,这个定时任务在0分、每小时、每天、每月、每星期执行,看起来似乎很合理啊?前一个小时的0分和后一个小时的0分不就是相隔一个小时吗?这样的话不就是每隔一个小时执行吗?再仔细看看,好像有点不对劲,为什么是每小时的0分?如果我在11:55创建了定时任务,希望每小时执行一次,那么接下来这个定时任务是在12:55执行,还是在12:00执行?很显然,它是每小时的0分执行,也就是在12:00执行。

似乎没区别?那么请思考下,每隔3小时执行如何写?

网上给出的写法如下:

0 */3 * * * #错误的每隔3小时执行一次写法

这种也是错误的写法,这种能充分展示前面一小时执行一次带来的迷惑感,这种写法其实是每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行,并不是真正意义上每隔3个小时执行,如同前面类似,如果你在11:56创建这种每3小时的定时任务,那么它会在12点就开始执行,而不是14:56执行。请看如下验证:

11:56分创建上面所谓的“每3小时执行一次”的定时任务:

4分钟后而不是3小时后,crontab执行了该定时任务:

事实上,对于这种 "0 /3 " 这种分钟时间点固定,小时按每小时或者每3小时的写法,都是从1点开始算倍数,比如每一小时就是1点、2点、3点,而每2小时就是2点、4点、6点,每3小时就是3点、6点、9点等等,以此类推。

除此之外,网上还有人给出这种的每小时执行一次的定时任务写法:

* */1 * * * #错误的每隔一小时执行一次,事实上每分钟执行一次

这种比前面那种还不如,它压根不是每小时执行,而是每分钟执行!为什么?因为分钟要求的是每分钟执行,而小时却要求每一个小时执行,这2个分明是冲突的时间策略。最终以分钟为准,所以它是每分钟执行一次。

真正的每隔一小时、每隔105分钟执行的定时任务应该如何写呢?如下:

*/60  * * * * #每60分钟即每小时执行一次
*/105 * * * * #每105分钟执行一次

原文链接:crontab每小时运行一次

Ubuntu18.04 永久修改 DNS

使用过Ubuntu18.04的朋友们应该会遇到域名无法解析的问题,这个时候要设置dns,但是比较恶心的是,18版本不能简单地修改/etc/resolv.conf,因为一旦重启,就恢复默认值了。
也不能修改 /etc/resolvconf/resolv.conf.d/base,因为无法保存修改。

解决办法:

sudo vi /etc/systemd/resolved.conf

如图所示,把DNS取消注释,添加DNS,保存退出,重启即可。

原文链接:Ubuntu18.04 永久修改 DNS

Ubuntu 18.04 修改 DNS

编辑以下文件:

sudo vim /etc/systemd/resolved.conf

修改如下:


[Resolve]
 
DNS=119.29.29.29

保存退出后

重新启动服务:

systemctl restart systemd-resolved.service

Swift 在命令行下使用及退出方法

一直在做 iOS 开发,习惯了在 Xcode 里面进行代码编写,今天使用命令行感受了下 Geeker 们的不一样的代码编写
  • 在启动台打开终端
  • 进入 Swift 命令行
swift

Welcome to Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2). Type :help for assistance.
  • 在命令行输入语法命令
1 + 1

回车

$R0: Int = 2
  • 退出命令行
:q   或者  :quit

Ubuntu 安装 Swift

一直想尝试下 swift 的服务器开发,但碍于工作时间问题,没有如愿。

环境:

Ubuntu 16.04.2 LTS

Swift : Swift 4.0.3

  • 下载 Swift 包 并解压
mkdir swift
cd swift

wget https://swift.org/builds/swift-4.0.3-release/ubuntu1604/swift-4.0.3-RELEASE/swift-4.0.3-RELEASE-ubuntu16.04.tar.gz

tar zvxf swift-4.0.3-RELEASE-ubuntu16.04.tar.gz
  • 配置环境变量
export PATH="$PATH:/root/swift/swift-4.0.3-RELEASE-ubuntu16.04/usr/bin"
  • 更新源
sudo apt-get update
  • 安装依赖库
sudo apt-get install clang
  • 测试是否安装成功
swift --version

Swift version 4.0.3 (swift-4.0.3-RELEASE)
Target: x86_64-unknown-linux-gnu

PS :

  • 安装问题及解决方法:

Ubuntu 16.0.4 安装 Swift 后提示 error while loading shared libraries: libpython2.7.so.1.0

  • Swift 命令使用及退出方法:

Swift 在命令行下使用及退出方法