Apache Traffic Server

Traffic Server is a high-performance building block for cloud services.
It's more than just a caching proxy server; it also has support for
plugins to build large scale web applications.

1. DIRECTORY STRUCTURE

  trafficserver/ ............ Top src dir
  |-- build/ ................ Custom macros for configure.ac
  |-- ci/ ................... Quality assurance and other CI tools and configs
  |-- configs/ .............. Configurations
  |-- contrib/ .............. Various contributed auxiliary pieces
  |-- doc/ .................. Documentation for Traffic Server
      |-- admin-guide/ ...... Admin guide documentations
      |-- appendices/ ....... Appendices of Traffic Server
      |-- developer-guide/ .. Documentation for developers
      |-- dot/ .............. Graphviz source files for docs pictures
      |-- static/ ........... Static resources
      |-- uml/ .............. Documentation in UML
  |-- example/ .............. Example plugins
  |-- iocore/ ...............
      |-- aio/ .............. Asynchronous I/O core
      |-- cache/ ............ Disk and RAM cache
      |-- dns/ .............. DNS (asynchronous)
      |-- eventsystem/ ...... Event Driven Engine
      |-- hostdb/ ........... Internal DNS cache
      |-- net/ .............. Network
          |-- quic/ ......... QUIC implementation
      |-- utils/ ............ Utilities
  |-- lib/ ..................
      |-- perl/ ............. Perl libraries for e.g. mgmt access and configurations
      |-- records/ .......... Library for config files
      |-- yamlcpp/ .......... Library for YAML of C++
  |-- mgmt/ ................. Management server and tools
  |-- plugins/ .............. Stable core plugins
      |-- experimental/ ..... Experimental core plugins
  |-- proxy/ ................ HTTP proxy logic
      |-- hdrs/ ............. Headers parsing and management
      |-- http/ ............. The actual HTTP protocol implementation
      |---http2/ ............ HTTP/2 implementation
      |---http3/ ............ HTTP/3 implementation
      |-- logging/ .......... Flexible logging
      |-- shared/ ........... Shared files
  |-- rc/ ................... Installation programs and scripts
  |-- src/ .................. Source for all the main binaries / applications
      |-- traffic_cache_tool/ Tool to interact with the Traffic Server cache
      |-- traffic_crashlog/ . Helper process that catches Traffic Server crashes
      |-- traffic_ctl/ ...... Command line management tool
      |-- traffic_layout/ ... Display information on the build and runtime directory structure
      |-- traffic_logcat/ ... Convert binary log file to plain text
      |-- traffic_logstats/ . Log parsing and metrics calculation utility
      |-- traffic_manager/ .. The manager process for Traffic Server
      |-- traffic_server/ ... Main proxy server
      |-- traffic_top/ ...... Top like tool for viewing Traffic Server statistics
      |-- traffic_via/ ...... Tool for decoding the Traffic Server Via header codes
      |-- traffic_wccp/ ..... Program speaking the client side of the WCCP
      |-- tscore/ ........... Base / core library
      |-- tscpp/ ............ C++ api wrapper for plugin developers
      |-- wccp/ ............. WCCP implementation
  |-- tests/ ................ Different tests for Traffic Server
  |-- tools/ ................ Directory of various tools
  |-- INSTALL ............... Build and installation guide
  |-- LAYOUT ................ Traffic Server default layout
  |-- LICENSE ............... Full license text
  |-- NOTICE ................ Copyright notices
  |-- README ................ Intro, links, build info
  |-- README-EC2 ............ Info on EC2 support
  |-- REVIEWERS ............. (Incomplete) list of areas with committer interest
  `-- STATUS ................ Release history and information

2. REQUIREMENTS

  This section outlines build requirements for different OS
  distributions. This may be out of date compared to the on-line
  requirements at

  <https://cwiki.apache.org/confluence/display/TS/Building>.

  As of ATS v7.0.0 and later, gcc 4.8.1 or later is required, since we now use
  and require the C++11 standard.

  Fedora / CentOS / RHEL:
    autoconf
    automake
    libtool
    pkgconfig
    perl-ExtUtils-MakeMaker
    gcc/g++ or clang/clang++
    openssl-devel
    pcre-devel
    ncurses-devel and libcurl-devel(optional, needed for traffic_top)
    libcap-devel (optional, highly recommended)
    hwloc-devel (optional, highly recommended)
    flex (optional, needed for e.g. WCCP)

  Ubuntu / Debian
    autoconf
    automake
    libtool
    pkg-config
    libmodule-install-perl
    gcc/g++ or clang/clang++
    libssl-dev
    libpcre3-dev
    libcap-dev (optional, highly recommended)
    libhwloc-dev (optional, highly recommended)
    libncurses5-dev (optional, required for e.g.: traffic_top)
    libcurl4-openssl-dev (optional, required for e.g.: traffic_top)
    flex (optional, required for e.g. WCCP)

  Alpine Linux
    build-base
    libexecinfo-dev
    pcre-dev
    libressl-dev
    autoconf
    automake
    libtool
    linux-headers

  OSX (we recommend HomeBrew):
    autoconf
    automake
    pkg-config
    libtool
    openssl
    pcre

  FreeBSD
    devel/gmake
    devel/autoconf
    devel/automake
    devel/pkgconf
    devel/libtool
    security/openssl
    devel/pcre
    textproc/flex (optional, install newer version from ports, fix PATH)
    devel/hwloc (optional, highly recommended)

  OmniOS:
    developer/gcc46
    developer/build/gnu-make
    developer/build/autoconf
    developer/build/automake-111
    developer/build/libtool
    library/security/openssl
    library/pcre

3. Building from distribution

You can download the latest source code from the official Apache Traffic
Server site:

       https://trafficserver.apache.org/downloads

(or via the URL shortener: http://s.apache.org/uG). Once downloaded,
follow the instructions:

   tar xf trafficserver-2.1.8-unstable.tar.bz2
   cd trafficserver-2.1.8-unstable
  ./configure            # configure the build environment to create Makefiles
  make                   # execute the compile

This will build with a destination prefix of /usr/local. You can finish
the installation with

  sudo make install

4. BUILDING FROM GIT REPO

  mkdir -p ~/dev         # make yourself a development dir
  cd ~/dev               # enter your development dir
  git clone ...          # get the source code from ASF Git repository
  cd trafficserver       # enter the checkout directory
  autoreconf -if         # generate the configure script and Makefile.in files
  ./configure            # configure the build environment to create Makefiles
  make                   # execute the compile

4b. Instructions for building on EC2
    NOTE: Alternately you may use the scripts under 'contrib' which will
          automate the install for trafficserver under EC2 which is
          HIGHLY RECOMMENDED. See 'README-EC2' for further details.

   # As root do the following when using Ubuntu
   mkdir -p /mnt          #EC2 Storage Mount, where storage is located
   cd /mnt
   git clone ...          # get the source code from ASF Git repo
   cd trafficserver       # enter the checkout dir
   autoreconf -i --force  # generate the configure script and Makefile.in files
   ./configure
   make

   # As root do the following when using Fedora Core 8 kernel
   mkdir -p /mnt          #EC2 Storage Mount, where storage is located
   cd /mnt
   git clone ...          # get the source code from ASF Git repo
   cd trafficserver       # enter the checkout dir
   autoreconf -i --force  # generate the configure script and Makefile.in files
   ./configure --disable-eventfd
   make

4c. Instructions for building on FreeBSD

   The only difference is how to run configure and make:

   MAKE=gmake ./configure # make sure that gmake is the make we use
   gmake

5. INSTALLATION

  DEFAULT DIR                        CONTENTS
  /usr/local/var/log/trafficserver   log files created at runtime
  /usr/local/var/trafficserver       runtime files
  /usr/local/etc/trafficserver       configuration files
  /usr/local/bin                     executable binaries
  /usr/local/libexec/trafficserver   plugins

6. CRYPTO NOTICE

  This distribution includes cryptographic software.  The country in
  which you currently reside may have restrictions on the import,
  possession, use, and/or re-export to another country, of
  encryption software.  BEFORE using any encryption software, please
  check your country's laws, regulations and policies concerning the
  import, possession, or use, and re-export of encryption software, to
  see if this is permitted.  See <http://www.wassenaar.org/> for more
  information.

  The U.S. Government Department of Commerce, Bureau of Industry and
  Security (BIS), has classified this software as Export Commodity
  Control Number (ECCN) 5D002.C.1, which includes information security
  software using or performing cryptographic functions with asymmetric
  algorithms.  The form and manner of this Apache Software Foundation
  distribution makes it eligible for export under the License Exception
  ENC Technology Software Unrestricted (TSU) exception (see the BIS
  Export Administration Regulations, Section 740.13) for both object
  code and source code.

  The following provides more details on the included cryptographic
  software:

    The functionality of OpenSSL <http://www.openssl.org/> is
    utilized in parts of the software.

7. ADDITIONAL INFO

  Web page: https://trafficserver.apache.org/
  Wiki: https://cwiki.apache.org/confluence/display/TS/
  User mailing list: users@trafficserver.apache.org
