`
loamy
  • 浏览: 321043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LEMP构建高性能WEB服务器

阅读更多


平台搭建环境 :
CentOS5.2 32/x86_64 GNU/Linux (32/64操作系统均通过,推荐使用 64位操作系统 )

目标: 构建高性的 LEMP环境提供 WEB服务

一、系统安装
1. 系统分区建议
/boot 100M ( 大约 100 左右 )
SWAP          物理内存的 2 ( 如果你的物理内存大于 4G ,分配 4G 即可 )
/             分区 15~20G
/usr/local 20G     ( 用于安装软件 )
/data                  剩余所有空间 .

【注】具体分区请根据相关业务划分,具体安装本文不作介绍安装过程中选择最少的包, 采用文本模式安装请不要安装图形。

2. 系统初始化
系统初始化脚本 (根据具体需求关闭不需要的服务 )
# shinit_network.sh            //下载本文提供的 scripts.tar.gz包,即可找到此脚本 .

二、编译安装基本环境
1. 安装准备
1.1 系统软件包安装规范
系统约定
软件源代码包存放位置       /usr/local/src
源码包编译安装位置 (prefix)    /usr/local/software_name
脚本以及维护程序存放位置    /usr/local/sbin
MySQL 数据库位置      /data/mysql/data(可按情况设置)
网站根目录                 /data/www/wwwroot(可按情况设置)
虚拟主机日志根目录    /data/logs(可按情况设置)
Nginx运行账户            www:www
install_software_name.sh         //存放编译参数脚本习惯将所有编译脚本存放 install_software_name.sh便于升级和更新软件 .

创建网站账号及相关存放目录
#add_user.sh

  1. /usr/sbin/groupadd www
  2. /usr/sbin/useradd -g www www
  3. mkdir -p /data/www/wwwroot
  4. chmod +w /data/www/wwwroot
  5. chown www:www /data/www/wwwroot -R
复制代码



1.2
系统环境部署及调整
检查系统是否正常
#tail -n100 /var/log/messages(检查有无系统级错误信息)
#dmesg (检查硬件设备是否有错误信息)
#ifconfig(检查网卡设置是否正确)
#ping www.linuxtone.org   (检查网络是否正常)

1.3
使用 yum 程序安装所需开发包 (以下为标准的 RPM 包名称)
添加国内镜像源加速软件安装下载速度请参照 :http://bbs.linuxtone.org/thread- 158-1-1.html

  1. yum -y install ntp vim-enhanced gcc gcc-c++gcc-g77 flex bison autoconf automake bzip2-devel  \
  2. ncurses-devel openssl-devel libtool*zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel  \
  3. fontconfig-devel freetype-devel libXpm-develgettext-devel curl curl-devel pam-devel \
  4. e2fsprogs-devel krb5-devel libidnlibidn-devel
复制代码



1.4
定时校正服务器时钟 ,定时与中国国家授时中心授时服务器同步
#crontab -e
加入一行:

  1. 15 3 * * * /usr/sbin/ntpdate 210.72.145.44> /dev/null 2>&1
复制代码



1.5
下载编译相关的源码包 .
#vi list list文件里填入以后下载地址列表 .
官方下载软件包名

:

  1. #nginx
  2. ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
  3. http://sysoev.ru/nginx/nginx-0.7.30.tar.gz
  4. #PHP-GD-LIB
  5. http://www.libgd.org/releases/gd-2.0.35.tar.bz2
  6. http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
  7. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.bz2
  8. http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1228695303&big_mirror=0
  9. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/mcrypt-2.6.7.tar.gz
  10. #MySQL
  11. http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30.tar.gz/from/http://mysql.cdpa.nsysu.edu.tw/
  12. #php
  13. http://cn.php.net/get/php-5.2.8.tar.bz2/from/cn2.php.net/mirror
  14. http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
  15. #PHP-EXT
  16. http://pecl.php.net/get/memcache-2.2.4.tgz
  17. http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
  18. http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
复制代码

#wget -i list

2. 编译安装软件包
源码编译安装所需包 (Source)
1.1 编译安装 Nginx

  1. tar zxvf pcre-7.8.tar.gz
  2. cd pcre-7.8
  3. ./configure && make && makeinstall
复制代码
  1. tar zxvf nginx-0.7.30.tar.gz
  2. cd nginx-0.7.30
  3. ./configure --user=www --group=www--prefix=/usr/local/nginx/ --with-http_stub_status_module
  4. --with-openssl=/usr/lib
  5. make && make install
复制代码

1.2 编译安装 GD 及相关的 LIB.

  1. tar jxvf gd-2.0.35.tar.bz2
  2. cd gd-2.0.35
  3. ./configure --prefix=/usr/local/gd2&& make && make install
  4. tar zxvf libiconv-1.12.tar.gz
复制代码
  1. cd libiconv-1.12
  2. ./configure --prefix=/usr && make&& make install
  3. tar jxvf libmcrypt-2.5.8.tar.bz2
复制代码
  1. cd libmcrypt-2.5.8
  2. ./configure --prefix=/usr && make&& make install
复制代码
  1. tar zxvf mhash-0.9.9.tar.gz
  2. cd mhash-0.9.9
  3. ./configure --prefix=/usr && make&& make install
复制代码

# vi /etc/ld.so.conf
添加 /usr/lib

  1. include ld.so.conf.d/*.conf
  2. /usr/lib
复制代码

# ldconfig
注】 ldconfig 命令的用途 ,主要是在默认搜寻目录 (/lib /usr/lib)以及动态库配置文件 /etc/ld.so.conf内所列的目录 , 而当用户安装了一个新的动态链接库时 ,就需要手工运行这个命令。

  1. tar zxvf mcrypt-2.6.7.tar.gz
  2. [code]
  3. cd mcrypt-2.6.7
  4. ./configure --prefix=/usr && make&& make install
复制代码



1.3
编译安装 MySQL
#sh install_mysql.sh
//具体脚本如下

:

  1. CHOST="x86_64-pc-linux-gnu"
  2. CFLAGS="-march=nocona -O3 -pipe"
  3. CXXFLAGS="${CFLAGS}"
  4. ./configure \
  5. "--prefix=/usr/local/mysql" \
  6. "--localstatedir=/data/mysql/data" \
  7. "--with-comment=Source" \
  8. "--with-server-suffix=-Linuxtone.Org" \
  9. "--with-mysqld-user=mysql" \
  10. "--without-debug" \
  11. "--with-big-tables" \
  12. "--with-charset=gbk" \
  13. "--with-collation=gbk_chinese_ci" \
  14. "--with-extra-charsets=all" \
  15. "--with-pthread" \
  16. "--enable-static" \
  17. "--enable-thread-safe-client" \
  18. "--with-client-ldflags=-all-static" \
  19. "--with-mysqld-ldflags=-all-static" \
  20. "--enable-assembler" \
  21. "--with-plugins=all" \
  22. "--without-ndb-debug"
  23. make
  24. make install
  25. useradd mysql -d /data/mysql -s/sbin/nologin
  26. /usr/local/mysql/bin/mysql_install_db--user=mysql
  27. cd /usr/local/mysql
  28. chown -R root:mysql .
  29. mkdir -p /data/mysql/data
  30. chown -R mysql /data/mysql/data
  31. cp share/mysql/my-huge.cnf /etc/my.cnf
  32. cp share/mysql/mysql.server/etc/rc.d/init.d/mysqld
  33. chmod 755 /etc/rc.d/init.d/mysqld
  34. chkconfig --add mysqld
  35. /etc/rc.d/init.d/mysqld start

  36. cd /usr/local/mysql/bin
  37. for i in *; do ln -s /usr/local/mysql/bin/$i/usr/bin/$i; done
复制代码

【注】编译 mysql前请正确配置好主机名,否则不能正常启动 .
例如 :
[root@lempmysql-5.1.30 ]# cat /etc/hosts

  1. # Do not remove the following line, or various programs
  2. # that require network functionality will fail.
  3. 127.0.0.1   localhost.localdomainlocalhost
  4. 192.168.1.104  lemp.linuxtone.org
复制代码


【注】将本文提供下载的
scripts.tar.gz包中的 my.cnf替换你的 /etc/my.cnf,并根据你的硬件参数做相关调整 ,并可以利用包中的 tuning-primer.sh 做初步性能调优。


1.4 编译安装 PHP-FastCGI

  1. tar jxvf php-5.2.8.tar.bz2
  2. gzip -cd php-5.2.8-fpm-0.5.10.diff.gz| patch -d php-5.2.8 -p1
  3. cd php-5.2.8
复制代码

#sh install_php.sh
//具体脚本如下

  1. CHOST="i686-pc-linux-gnu"
  2. CFLAGS="-march=prescott-O3 -pipe -fomit-frame-pointer"
  3. CXXFLAGS="${CFLAGS}"
  4. ./configure \
  5. "--prefix=/usr/local/php-fcgi" \
  6. "--enable-fastcgi" \
  7. "--enable-fpm" \
  8. "--enable-discard-path" \
  9. "--enable-force-cgi-redirect"\
  10. "--with-config-file-path=/usr/local/php-fcgi/etc" \
  11. "--enable-zend-multibyte" \
  12. "--with-mysql=/usr/local/mysql" \
  13. "--with-libxml-dir" \
  14. "--with-xmlrpc" \
  15. "--with-gd=/usr/local/gd2" \
  16. "--with-jpeg-dir" \
  17. "--with-png-dir" \
  18. "--with-bz2" \
  19. "--with-freetype-dir" \
  20. "--with-iconv-dir" \
  21. "--with-zlib-dir" \
  22. "--with-curl" \
  23. "--with-curlwrappers" \
  24. "--with-openssl" \
  25. "--with-mcrypt" \
  26. "--with-mhash" \
  27. "--enable-pcntl" \
  28. "--enable-sockets" \
  29. "--enable-sysvsem" \
  30. "--enable-inline-optimization" \
  31. "--enable-soap" \
  32. "--enable-gd-native-ttf" \
  33. "--enable-ftp" \
  34. "--enable-mbstring" \
  35. "--enable-exif" \
  36. "--disable-debug" \
  37. "--disable-ipv6"
  38. #sed -i 's#-lz -lm -lxml2-lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
  39. makeZEND_EXTRA_LIBS='-liconv'
  40. make install
  41. cp php.ini-dist/usr/local/php-fcgi/etc/php.ini
复制代码

1.5 编译安装 PHP 扩展

  1. tar zxvf memcache-2.2.4.tgz
  2. cd memcache-2.2.4
  3. /usr/local/php-fcgi/bin/phpize
  4. ./configure--with-php-config=/usr/local/php-fcgi/bin/php-config
  5. make && make install
复制代码
  1. tar jxvf eaccelerator-0.9.5.3.tar.bz2
  2. cd eaccelerator-0.9.5.3
  3. /usr/local/php-fcgi/bin/phpize
  4. ./configure --enable-eaccelerator=shared--with-php-config=/usr/local/php-fcgi/bin/php-config
  5. make && make install
复制代码
  1. tar zxvf PDO_MYSQL-1.0.2.tgz
  2. cd PDO_MYSQL-1.0.2
  3. /usr/local/php-fcgi/bin/phpize
  4. ./configure --with-php-config=/usr/local/php-fcgi/bin/php-config--with-pdo-mysql=/usr/local/mysql
  5. make && make install
复制代码



1.6
配置 php.ini
#sh init_php.sh
//执行 PHP配置脚本
【注】下载包中提供了此脚本 .主要是添加自动添加 PHP扩展及 PHP安全相关设置,用户可以编辑此文件根据具体情况做调整。
#vi /usr/local/php-fcgi/etc/php.ini //在最后加上

  1. [eAccelerator]
  2. extension="eaccelerator.so"
  3. eaccelerator.shm_size="32"
  4. eaccelerator.cache_dir="/cache_tmpfs/eaccelerator"
  5. eaccelerator.enable="1"
  6. eaccelerator.optimizer="1"
  7. eaccelerator.check_mtime="1"
  8. eaccelerator.debug="0"
  9. eaccelerator.filter=""
  10. eaccelerator.shm_max="0"
  11. eaccelerator.shm_ttl="0"
  12. eaccelerator.shm_prune_period="0"
  13. eaccelerator.shm_only="0"
  14. eaccelerator.compress="1"
  15. eaccelerator.compress_level="9"
复制代码



1.7
安装 ZendOptimizer-3.3.3

  1. tar zxvf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
  2. cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
  3. ./install
复制代码


解压后进入目录
./install,安提示选择相关的目录及配置文件存放目录即可 .


1.8 配置 php-fpm.conf
rm -rf /usr/local/php-fcgi/etc/php-fpm.conf
将本文提供的 php-fpm.conf文件上传此目录 .
/usr/local/php-fcgi/sbin/php-fpm start //启动服务查看是否报错 ,不报错继续。

1.9 配置 nginx/conf

  1. #cd /usr/local/nginx
  2. #mv conf conf_old
  3. #mkdir -p conf/{vhost,conf_example}
复制代码


#
将本文提供的 conf 目录替换成当前 conf 目录 . 在下载的 scripts.tar.gz 包里 .

目录结构介绍 :
/usr/local/nginx/conf       //存放主配置文件
/usr/local/nginx/conf/vhost       //存放虚拟主机配置文件 .
/usr/local/nginx/conf/conf_example     //存放一些经典的配置示例 {虚拟主机,防盗链,访问控制 ,重定向,负载均衡等 }

[root@lempmysql]# /usr/local/nginx/sbin/nginx –t     //验证是否有配置语法错误 .

  1. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf syntax is ok
  2. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf was tested successfully
复制代码

#chmod a+x /etc/init.d/nginx      //将文本提供的 nginx脚本上传至 /etc/init.d/目录下
【注】此脚本已经含有 php-fpm的管理 .直接利用此脚本即可管理所有服务

.

  1. # /etc/init.d/nginx stop   //停止nginx服务
  2. # /etc/init.d/nginx start   //启动nginx服务
复制代码



2.0
验证服务环境
配置完成虚拟主机以后,编辑 php.ini disable_functions里的 phpinfo去掉,仍后重启服务,利用 Phpinfo函数查看环环配置。
编写 phpinfo.php

  1. <?php
  2. phpinfo();
  3. ?>
复制代码

http://ip/phpinfo.php
即可查看当前配置环境 . 查看完成后出于安全考虑请再将此函数禁掉 .

三、服务器简单优化
1. 简单优化磁盘 I/O
# vi /etc/fstab   //加入notaime

  1. LABEL=/date             /data                   ext3    defaults,noatime        0 2
复制代码

#mount -oremount  /data           //重新挂载/data分区.

2.
简单优化 Linux 内核参数 (更多的请根据服务器状况做相关调整)
#vi/etc/sysctl.conf

  1. net.ipv4.tcp_fin_timeout = 30
  2. net.ipv4.tcp_keepalive_time = 300
  3. net.ipv4.tcp_syncookies = 1
  4. net.ipv4.tcp_tw_reuse = 1
  5. net.ipv4.tcp_tw_recycle = 1
  6. net.ipv4.ip_local_port_range = 5000 65000
复制代码
  1. #sysctl –p
复制代码



3.
其它优化根据具体情况还有硬件情况做调整 .
更多的优化请参考 : http://www.linuxtone.org/forum-31-1.html 或联系我们 .

四、相关参考及介绍 .
1.Nginx Tips(Nginx 应用技巧含优化 )   http://bbs.linuxtone.org/thread-1241-1-1.html
2.LEMP构建高性能 WEB服务器(第二版) http://bbs.linuxtone.org/thread-123-1-1.html
3. 如果你想构建可用集群方案请参考 http://www.linuxtone.org/thread-1402-1-1.html
4.如果你想学习服务器监控请参考   http://www.linuxtone.org/forum-20-1.html

、相关软件包及脚本下载
http://www.linuxtone.org/lemp/scripts.tar.gz   文中所有脚本及配置范例。
http://www.linuxtone.org/lemp/lemp.tar.gz     所有软件包如果发现不能下载请去官方下载。

六、常见错误(疑问)解答 [ 守住每一天 ] 补充 :
   1、eaccelerator xcache 差在那?
   当缓存的 PHP二进制文件太多,以至于超过 shm_size后, eAccelerator在性能方面要高于 Xcache
 2、按文档安装完成了结果出 502Bad Gateway ?
   请查看 http://www.linuxtone.org 相关版块
 3、 nginxstatus 解释
        active connections -- 对后端发起的活动连接数
        server accepts handled requests -- nginx 总共处理了 43629083 个连接 , 成功创建 43629083 次握手
        (证明中间没有失败的 ), 总共处理了 259552136 个请求
        reading -- nginx 读取到客户端的 Header信息数
        writing -- nginx 返回给客户端的 Header信息数
        waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading +writing),意思就是 Nginx已经处理完成,
      正在等候下一次请求指令的驻留连接。在访问效率高,请求很快被处理完毕的情况下,
Waiting数比较多是正常的。
      如果
reading + writing数较多,则说明并发访问量非常大,正在处理过程中。
  
    4 EA xcache zend 能一起使用?
      可以
    5、按脚本执行 sed -i -e 's/^LANG=.*/LANG="en"/'  /etc/sysconfig/i18n 后。
      可能会遇到如下错误:


perl: warning: Please checkthat your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG ="en_US.UTF-8:en_US:en_US.ISO-8859-1"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
解决办法:
LC_ALL=C;exportLC_ALL ; LC_CTYPE=C ; export LC_CTYPE;

分享到:
评论

相关推荐

    LEMP构建高性能WEB服务器(第三版)配置脚本

    在本文中,我们将深入探讨如何使用LEMP构建高性能的WEB服务器,并且会基于"LEMP构建高性能WEB服务器(第三版)配置脚本"进行详细说明。 1. **Linux操作系统**:作为基础平台,Linux提供了稳定、安全且免费的操作...

    LEMP构建高性能WEB服务器(第三版).pdf

    《LEMP构建高性能WEB服务器(第三版)》一书详细阐述了如何利用Linux、Nginx、MySQL和PHP(或Perl、Python)等组件构建一个高效、稳定的Web服务器环境。LEMP栈是LAMP(Linux、Apache、MySQL、PHP)的替代方案,尤其...

    LEMP构建高性能WEB服务器(第三版)

    新版的介绍: 1.提供完整的配置脚本下载:[url]http://www.linuxtone.org/lemp/scripts.tar.gz[/url] 2.提供NGINX常见配置范例含(虚拟...希望你能通过本文快速构建一个高性能的WEB服务器!欢迎在Linuxtone开启讨论!

    构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器

    本文档旨在详细介绍如何构建一个基于Nginx、PHP(Fastcgi)、MySQL以及Memcache的高性能Web服务器架构(简称LEMP+Memcache)。此架构充分利用了各组件的优势,能够提供稳定且高效的Web服务。 #### 二、关键组件介绍 ...

    LEMP_SetupV1.1.3_Difeye.com.pdf

    LEMP环境指的是Linux、Nginx、MySQL和PHP的组合,常用于构建高性能Web服务器。 ### LEMP环境搭建概述 #### 1. 安装准备 文档中提到了在高并发连接情况下,Nginx相对于Apache具有更好的性能。为了搭建LEMP环境,...

    lemp_lemp_Vagrant_虚拟机_

    2. **Nginx**:是一个高性能的HTTP和反向代理服务器,以其低内存占用和高并发处理能力而闻名。Nginx通常作为Web服务器,负责接收和响应HTTP请求,并根据配置将请求转发给后端的PHP解释器。 3. **MySQL**:是一个...

    k8s-lemp:Kubernetes集群中的LEMP堆栈

    首先,**Nginx** 是LEMP堆栈中的Web服务器,以其高效、稳定和强大的反向代理及负载均衡能力而闻名。在Kubernetes中,Nginx可以作为Deployment或StatefulSet部署,以确保高可用性和可伸缩性。配置Ingress资源可以实现...

    Web-stack-implementation-lemp-stack-

    LEMP Stack是Web开发中常用的一种技术组合,它是Linux、Nginx、MySQL(或MariaDB)和PHP的首字母缩写,用于构建高性能的静态和动态内容服务器。这个组合提供了高效能、低资源消耗以及灵活的架构,常用于构建大型、高...

    基于Linux的Web程序设计——PHP网站开发

    Apache是常见的Web服务器,而Nginx则以其高性能和低内存消耗受到青睐。安装过程中,需掌握基本的命令行操作,如包管理器(如apt或yum)的使用。 接着,进入PHP的学习。PHP语法简洁明了,支持多种数据类型(如字符串...

    开源力量公开课第21期-用开源软件构建App的高效服务端-祈宏

    - **Poco**:一个跨平台的C++网络编程类库,适用于构建高性能的网络服务器和客户端应用程序。 - **HAProxy**:一款提供高可用性、负载均衡及代理功能的软件。 #### 四、服务端架构选型 - **Linux**:不同的Linux...

    nginx服务器软件nginx-1.19.7.zip

    总结来说,"nginx-1.19.7.zip"这个压缩包包含的Nginx服务器软件是网络服务中的重要组件,它不仅能够高效地处理HTTP请求,还可以作为反向代理和缓存服务器,是构建高性能Web服务不可或缺的一部分。通过合理的配置和与...

    vagrant-lemp:无业游民的LEMP堆栈

    通过使用Vagrant-lemp,开发者可以在Ubuntu等Linux发行版上快速配置Nginx作为Web服务器,Nginx以其高性能和稳定性而闻名,常被用来替代Apache。Redis和Memcached则是两种常用的缓存服务,它们可以提高应用性能,减少...

    LEMP-React_TypeScript

    同时,Nginx作为Web服务器,可以配置为处理React应用的静态文件,如JS、CSS和图片,以实现快速的页面加载。 总的来说,LEMP-React_TypeScript项目结合了后端服务器和前端开发的最佳实践,为构建高效、可靠的Web应用...

    vagrant-lemp-box:具有直接LEMP配置的坚如磐石的基于Debian的Vagrant框

    LEMP是Web开发中的一个重要组合,常用于构建高性能的动态网站和应用。 **Linux**:在Vagrant-lemp-box中,操作系统是基于Debian的。Debian是开源的Linux发行版,以其稳定性和安全性闻名,是许多服务器的首选基础...

    Nginx+常见应用技术指南[Nginx+Tips]+第二版.pdf

    - **LEMP环境**:Nginx与Linux、MySQL和PHP/Perl/Python的组合,构建高性能的Web服务环境。 - **服务监控**:通过监控Nginx的状态和日志,可以实时了解服务器健康状况,及时发现问题。 【优化与故障处理】 除了基础...

    macos-lemp-setup:用于启用macOS嵌入式LEMP堆栈的安装脚本

    Nginx 是一个高性能的HTTP和反向代理服务器,以其高效的并发处理能力而闻名。它采用事件驱动的异步非阻塞模型,可以处理大量的并发连接,适合高流量网站。在macOS-LEMP-Setup中,Nginx将作为前端服务器,接收并分发...

    t1lib-5.1.2.tar.gz

    "t1lib-5.1.2.tar.gz"是一个压缩包文件,它包含了一个名为“t1lib”的库,这个库在Linux上安装和配置Nginx(一款高性能的Web服务器和反向代理服务器)、PHP(一种广泛使用的开源脚本语言,主要用于Web开发)以及...

Global site tag (gtag.js) - Google Analytics