Compare commits

...

63 Commits
v16 ... master

Author SHA1 Message Date
Jose Diaz-Gonzalez ec66a23266
Merge pull request #74 from pablobm/explain-mimetypes-file
Document: users can provide their own `mime.types`
2024-01-19 20:11:38 -05:00
Pablo Brasero dfcb3706f3 Doc: users can provide their own `mime.types` 2023-12-19 08:18:45 +00:00
Jose Diaz-Gonzalez 14c274186a
Merge pull request #73 from dokku/deploy-on-ci
feat: always deploy latest on merge to master
2023-08-20 21:48:59 -04:00
Jose Diaz-Gonzalez 863aab6f36 feat: always deploy latest on merge to master 2023-08-20 21:42:53 -04:00
Jose Diaz-Gonzalez 2f08d686ff
Merge pull request #72 from dokku/josegonzalez-patch-1
feat: upgrade nginx to 1.25.2
2023-08-20 21:34:17 -04:00
Jose Diaz-Gonzalez 936c024eac
feat: upgrade nginx to 1.25.2 2023-08-20 21:14:00 -04:00
Jose Diaz-Gonzalez e833f6afad
Merge pull request #71 from dokku/josegonzalez-patch-1
feat: upgrade zlib to 1.3
2023-08-20 21:12:52 -04:00
Jose Diaz-Gonzalez 3221fc1b85
feat: upgrade zlib to 1.3 2023-08-20 20:53:40 -04:00
Jose Diaz-Gonzalez 10d257b7ad
Merge pull request #70 from dokku/josegonzalez-patch-1
feat: upgrade pcre2 to 10.42
2023-08-20 20:22:00 -04:00
Jose Diaz-Gonzalez b701653bda
feat: upgrade pcre2 to 10.42 2023-08-20 20:17:09 -04:00
Jose Diaz-Gonzalez a6dd42bddb
Merge pull request #69 from dokku/josegonzalez-patch-1
feat: upgrade sigil to 0.10.1
2023-08-20 20:16:12 -04:00
Jose Diaz-Gonzalez 130b184ec3
feat: upgrade sigil to 0.10.1 2023-08-20 20:09:55 -04:00
josegonzalez e26103764e
Merge pull request #67 from Firfi/patch-1
Add wasm mime type
2023-05-13 12:43:49 -04:00
Igor Loskutov eeb2caf824
Add wasm mime type
This is needed for support of WASM standard' https://www.w3.org/TR/wasm-web-api-1/#streaming-modules instantiateStreaming and compileStreaming, 

and causes errors like

```
WASM: wasm streaming compile failed: TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.
```

since plain text is returned instead.

It also doesn't seem to be easily fixable even with `nginx.conf.sigil` substitution
2023-04-16 20:33:18 +07:00
josegonzalez 61bfffb6c6
Merge pull request #66 from fc-anjos/docs/nginx_default_request
Fix NGINX_DEFAULT_REQUEST snippet
2023-01-18 15:17:37 -05:00
Felipe dos Anjos bcbf61b1f5 fix NGINX_DEFAULT_REQUEST snippet 2023-01-18 17:09:43 -03:00
Jose Diaz-Gonzalez 8345d0a22a
Merge pull request #65 from dokku/64-catch-bin-error
Ensure we check for the right sigil binary
2022-09-12 10:53:59 -04:00
Jose Diaz-Gonzalez 8560e5b5a9
fix: ensure we check for the right binary
Closes #64
2022-09-12 10:22:04 -04:00
Jose Diaz-Gonzalez aa191df661
Merge pull request #63 from dokku/upgrade-pcre
Upgrade pcre to pcre2
2022-09-10 21:09:31 -04:00
Jose Diaz-Gonzalez 7fe92f4821 chore: remove extra debug statement 2022-09-10 21:05:23 -04:00
Jose Diaz-Gonzalez 25fb7889a5 fix: build against the correct directory 2022-09-10 21:02:04 -04:00
Jose Diaz-Gonzalez 6381244e26 debug: where is the pcre2 output 2022-09-10 20:57:21 -04:00
Jose Diaz-Gonzalez 7874622b04 feat: upgrade pcre to pcre2 2022-09-10 20:54:48 -04:00
Jose Diaz-Gonzalez 0329f9e0ff
Merge pull request #62 from dokku/upgrade-nginx
Upgrade nginx to 1.23.1
2022-09-10 20:50:42 -04:00
Jose Diaz-Gonzalez 043965bc7d feat: upgrade nginx to 1.23.1 2022-09-10 20:46:19 -04:00
Jose Diaz-Gonzalez 3a1e442373
Merge pull request #61 from dokku/upgrade-sigil
Upgrade sigil to 0.9.0
2022-09-10 20:44:47 -04:00
Jose Diaz-Gonzalez 6a99e870e4 fix: copy the new binary into the correct place 2022-09-10 20:42:01 -04:00
Jose Diaz-Gonzalez ad5e831e74 chore: debug 2022-09-10 20:36:01 -04:00
Jose Diaz-Gonzalez ed31137f94 feat: upgrade sigil to 0.9.0 2022-09-10 20:31:57 -04:00
Jose Diaz-Gonzalez a68149bce7
Merge pull request #60 from dokku/upgrade-zlib
Upgrade zlib to 1.2.12
2022-09-10 20:30:21 -04:00
Jose Diaz-Gonzalez 6a592755ff feat: upgrade zlib to 1.2.12 2022-09-10 20:27:47 -04:00
Jose Diaz-Gonzalez 2b95cd179b
Merge pull request #59 from dokku/test-conf
Ensure test runs against vendored app-nginx.conf.sigil and mime.types
2022-09-10 20:23:40 -04:00
Jose Diaz-Gonzalez 9b7f098ced fix: add whitespace 2022-09-10 20:20:44 -04:00
Jose Diaz-Gonzalez 7154c020a1 fix: use GITHUB_HEAD_REF instead 2022-09-10 20:14:49 -04:00
Jose Diaz-Gonzalez a11d1ce303 refactor: use ref name instead of sha 2022-09-10 20:11:49 -04:00
Jose Diaz-Gonzalez 53b41ec631 fix: override commit being deployed 2022-09-10 19:58:50 -04:00
Jose Diaz-Gonzalez c8eef60b09 test: ensure test runs against vendored app-nginx.conf.sigil and mime.types 2022-09-10 18:56:55 -04:00
Jose Diaz-Gonzalez 09fe857895
Merge pull request #58 from dokku/correct-remote-host
fix: use correct remote host
2022-09-10 18:29:17 -04:00
Jose Diaz-Gonzalez 31dc4746e2 fix: use correct remote host 2022-09-10 18:25:08 -04:00
Jose Diaz-Gonzalez 59ea0b94e1
Merge pull request #57 from dokku/review-app-cleanup
Split out workflows so that review app cleanup is properly run
2022-09-10 18:23:10 -04:00
Jose Diaz-Gonzalez 301d00c751 fix: name workflows correctly 2022-09-10 18:20:42 -04:00
Jose Diaz-Gonzalez 28328e4d90 refactor: split out workflows so that review app cleanup is properly run
The old setup - copy-pasted from the internet somewhere - was incorrect based on how github actions works. *sigh*
2022-09-10 18:19:27 -04:00
Jose Diaz-Gonzalez dce20c0a8f
Merge pull request #56 from dokku/auto-deploy
Test this buildpack by deploying to a dokku server
2022-09-10 18:12:48 -04:00
Jose Diaz-Gonzalez 0e7bef86f9 chore: ensure robots do not crawl these test domains 2022-09-10 18:09:55 -04:00
Jose Diaz-Gonzalez faf2a70272 fix: use correct domain name 2022-09-10 18:09:06 -04:00
Jose Diaz-Gonzalez f981b138ed fix: use a dokku.net subdomain to avoid hsts issues 2022-09-10 18:04:40 -04:00
Jose Diaz-Gonzalez 7794c2c36f chore: add some debugging information 2022-09-10 18:02:11 -04:00
Jose Diaz-Gonzalez 22619107ab chore: silence ci hook 2022-09-10 17:58:38 -04:00
Jose Diaz-Gonzalez 1a28ec8509 feat: purge cache on every review app deploy
This ensures we test the currently built nginx binary.
2022-09-10 17:53:46 -04:00
Jose Diaz-Gonzalez e28d2049e5 debug: see what directory we are in 2022-09-10 17:42:55 -04:00
Jose Diaz-Gonzalez 6a73313edb fix: always run the first job 2022-09-10 17:41:00 -04:00
Jose Diaz-Gonzalez 648d73fda6 fix: set current buildpack as the buildpack to use 2022-09-10 17:38:10 -04:00
Jose Diaz-Gonzalez 1769636cc8 tests: test deploys via github action 2022-09-10 17:31:47 -04:00
Jose Diaz-Gonzalez 6a9c79f8d0 feat: add initial files needed to deploy this as a site for testing purposes 2022-09-10 17:24:45 -04:00
Jose Diaz-Gonzalez 7a1b16877d
Merge pull request #55 from dokku/cleanup
chore: run shfmt
2022-09-10 17:16:24 -04:00
Jose Diaz-Gonzalez c50c220ba4 chore: run shfmt 2022-09-10 17:13:33 -04:00
Jose Diaz-Gonzalez c2273de014
chore: drop ssl module 2022-09-10 17:10:30 -04:00
Jose Diaz-Gonzalez 91c41476ae
feat: add ssl module 2022-09-10 16:55:10 -04:00
Jose Diaz-Gonzalez 90c8bd9365
Merge pull request #54 from dokku/53-custom-static-routing
feat: allow overriding default 404 response with custom file
2022-08-07 19:11:02 -04:00
Jose Diaz-Gonzalez 89196adbf1 feat: allow overriding default 404 response with custom file
This allows folks the ability to restore the previous routing functionality used by static sites backed by VueJS (as an example).

Note that all requests routed this way will respond with a '200 OK' on the server, potentially causing SEO issues.

Closes #53
2022-08-07 19:10:31 -04:00
Jose Diaz-Gonzalez dbbbcc2c3e
Merge pull request #52 from joeyates/master
Enable http_auth
2022-08-07 19:08:54 -04:00
Jose Diaz-Gonzalez daa9549fb7 docs: call out customizations separately 2022-08-07 19:08:09 -04:00
Joe Yates 66b91f18e4
Enable http_auth 2021-12-28 20:45:30 +01:00
13 changed files with 215 additions and 25 deletions

26
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,26 @@
---
name: 'review-app'
# yamllint disable-line rule:truthy
on:
push:
branches:
- master
- main
jobs:
review_app:
runs-on: ubuntu-latest
steps:
- name: Cloning repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Push to dokku
uses: dokku/github-action@master
with:
git_remote_url: 'ssh://dokku@dokku.com/nginx-buildpack'
# specify `--force` as a flag for git pushes
git_push_flags: '--force'
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}

View File

@ -0,0 +1,23 @@
---
name: 'review-app-cleanup'
# yamllint disable-line rule:truthy
on:
# onl run this workflow on pull request events
pull_request:
types:
- closed
jobs:
destroy_review_app:
runs-on: ubuntu-latest
steps:
- name: Destroy the review app
uses: dokku/github-action@master
with:
# destroy a review app
command: review-apps:destroy
git_remote_url: 'ssh://dokku@dokku.com/nginx-buildpack'
# specify a name for the review app
review_app_name: nginx-buildpack-${{ github.event.pull_request.number }}
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}

28
.github/workflows/review-app.yml vendored Normal file
View File

@ -0,0 +1,28 @@
---
name: 'review-app'
# yamllint disable-line rule:truthy
on:
# onl run this workflow on pull request events
pull_request
jobs:
review_app:
runs-on: ubuntu-latest
steps:
- name: Cloning repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Push to dokku
uses: dokku/github-action@master
with:
# create a review app
command: review-apps:create
git_remote_url: 'ssh://dokku@dokku.com/nginx-buildpack'
# specify `--force` as a flag for git pushes
git_push_flags: '--force'
# specify a name for the review app
review_app_name: nginx-buildpack-${{ github.event.pull_request.number }}
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}

1
.static Normal file
View File

@ -0,0 +1 @@
.static

View File

@ -22,10 +22,34 @@ heroku buildpacks:set https://github.com/dokku/buildpack-nginx.git
## Configuration
You can override the nginx root via setting the `NGINX_ROOT` environment variable. This should be a relative path in your repository (for example `dokku config:set <app> NGINX_ROOT=_site` if you are deploying a Jekyll site).
### Custom nginx root
You can override the nginx root via setting the `NGINX_ROOT` environment variable. This should be a relative path in your repository.
```shell
# where the app is named `static-app`
# and the root dir is _site
dokku config:set static-app NGINX_ROOT=_site
````
### Default to index for history routing
By default, this buildpack will 404 if a requested file is not found. For static sites that use the browser's history router to show the correct context, setting the `NGINX_DEFAULT_REQUEST` to a specific file will override this.
```shell
# where the app is named `static-app`
# and the desired default response is index.html
dokku config:set static-app NGINX_DEFAULT_REQUEST=index.html
```
### Custom nginx config file
You may completely override the built-in nginx config by placing an `app-nginx.conf.sigil` file in the root, modeled after our own [`conf/app-nginx.conf.sigil`](https://github.com/dokku/buildpack-nginx/blob/master/conf/app-nginx.conf.sigil). This will be used inside of the container, and not by the host Dokku instance. See the [sigil project](https://github.com/gliderlabs/sigil) for more information concerning the sigil format.
### Custom MIME types
Files will be served with a `Content-Type` according to a list of supported MIME types at [`conf/mime.types`](https://github.com/dokku/heroku-buildpack-nginx/blob/master/conf/mime.types). If you need to serve files of a MIME type not included in the list, you can provide your own `mime.types` file in the root.
## Credits and License
`buildpack-nginx` is licensed under the CC0 1.0 Universal license and has been informed by many similar projects on the web.

28
bin/ci-pre-deploy Normal file
View File

@ -0,0 +1,28 @@
#!/bin/sh -l
if [ "$IS_REVIEW_APP" = "true" ]; then
git config --global user.name 'Dokku Bot'
git config --global user.email no-reply@dokku.com
echo "-----> Purging repo cache"
ssh "$SSH_REMOTE" -- repo:purge-cache "$APP_NAME"
echo "-----> Setting the test domain name"
ssh "$SSH_REMOTE" -- domains:set "$APP_NAME" "$APP_NAME.dokku.net"
echo "-----> Ensure test includes vendored app-nginx.conf.sigil"
cp conf/app-nginx.conf.sigil app-nginx.conf.sigil
git add app-nginx.conf.sigil
git commit -qm "feat: specify custom app-nginx.conf.sigil"
echo "-----> Ensure test includes vendored mime.types"
cp conf/mime.types mime.types
git add mime.types
git commit -qm "feat: specify custom mime.types"
echo "-----> Setting the buildpack to the current ref $GITHUB_HEAD_REF"
echo "https://github.com/${GITHUB_REPOSITORY}.git#$GITHUB_HEAD_REF" > .buildpacks
git add .buildpacks
git commit -qm "feat: specify $GITHUB_SHA as buildpack"
git rev-parse HEAD >ci-commit-override
fi

View File

@ -1,25 +1,28 @@
#!/usr/bin/env bash
# bin/compile <build-dir> <cache-dir>
set -eo pipefail; [[ $TRACE ]] && set -x
set -eo pipefail
[[ $TRACE ]] && set -x
NGINX_VERSION="1.17.0"
NGINX_VERSION="1.25.2"
NGINX_TARBALL="nginx-${NGINX_VERSION}.tar.gz"
PCRE_VERSION="8.45"
PCRE_TARBALL="pcre-${PCRE_VERSION}.tar.gz"
SIGIL_VERSION="0.4.0"
SIGIL_TARBALL="sigil_${SIGIL_VERSION}_Linux_x86_64.tgz"
ZLIB_VERSION="1.2.11"
PCRE_VERSION="10.42"
PCRE_TARBALL="pcre2-${PCRE_VERSION}.tar.gz"
SIGIL_VERSION="0.10.1"
SIGIL_TARBALL="gliderlabs-sigil_${SIGIL_VERSION}_linux_amd64.tgz"
ZLIB_VERSION="1.3"
ZLIB_TARBALL="zlib-${ZLIB_VERSION}.tar.gz"
suppress() {
/bin/rm --force /tmp/surpress.out 2>/dev/null
# shellcheck disable=SC2069
/bin/rm --force /tmp/surpress.out 2> /dev/null; "$@" 2>&1 > /tmp/surpress.out || cat /tmp/surpress.out; /bin/rm /tmp/surpress.out;
"$@" 2>&1 >/tmp/surpress.out || cat /tmp/surpress.out
/bin/rm /tmp/surpress.out
}
# parse and derive params
BUILD_DIR=$1
CACHE_DIR=$2
CUR_DIR=$(cd "$(dirname "$0")"; cd ..; pwd)
CUR_DIR=$(cd "$(dirname "$0")" && cd .. && pwd)
mkdir -p "$BUILD_DIR" "$CACHE_DIR"
@ -54,7 +57,7 @@ fi
if [[ ! -d "${PCRE_TARBALL%.tar.gz}" ]]; then
echo "-----> Download and unzip pcre ${PCRE_VERSION} via http"
curl -sSL "https://downloads.sourceforge.net/project/pcre/pcre/${PCRE_VERSION}/${PCRE_TARBALL}" -o "${PCRE_TARBALL}"
curl -sSL "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PCRE_VERSION}/${PCRE_TARBALL}" -o "${PCRE_TARBALL}"
tar xzf "${PCRE_TARBALL}" && rm -f "${PCRE_TARBALL}"
fi
@ -64,14 +67,18 @@ if [[ ! -d "${ZLIB_TARBALL%.tar.gz}" ]]; then
tar xzf "${ZLIB_TARBALL}" && rm -rf "${ZLIB_TARBALL}"
fi
if [[ ! -f "sigil" ]]; then
if [[ ! -f "gliderlabs-sigil-amd64" ]]; then
echo "-----> Download and unzip sigil ${SIGIL_VERSION} via http"
curl -sSL "https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/${SIGIL_TARBALL}" -o "${SIGIL_TARBALL}"
curl -sSL "https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/gliderlabs-sigil_${SIGIL_VERSION}_linux_amd64.tgz" -o "${SIGIL_TARBALL}"
tar xzf "${SIGIL_TARBALL}" && rm -rf "${SIGIL_TARBALL}"
fi
mkdir -p "$BUILD_DIR/sigil"
cp -r sigil "$BUILD_DIR/sigil/"
if [[ ! -f "gliderlabs-sigil-amd64" ]]; then
echo " ! Missing gliderlabs-sigil-amd64 binary"
exit 1
fi
cp -r gliderlabs-sigil-amd64 "$BUILD_DIR/sigil/sigil"
cd "nginx-${NGINX_VERSION}"
if [[ ! -f "${CACHE_DIR}/bin/nginx" ]]; then
@ -80,7 +87,7 @@ if [[ ! -f "${CACHE_DIR}/bin/nginx" ]]; then
suppress ./configure \
--with-cpu-opt=generic \
--prefix="$BUILD_DIR/nginx" \
--with-pcre=../pcre-${PCRE_VERSION} \
--with-pcre=../pcre2-${PCRE_VERSION} \
--sbin-path=. \
--pid-path=./nginx.pid \
--conf-path=./nginx.conf \
@ -94,7 +101,6 @@ if [[ ! -f "${CACHE_DIR}/bin/nginx" ]]; then
--without-http_ssi_module \
--without-http_userid_module \
--without-http_access_module \
--without-http_auth_basic_module \
--without-http_autoindex_module \
--without-http_geo_module \
--without-http_map_module \
@ -131,20 +137,20 @@ fi
# Update the PATH
mkdir -p "$BUILD_DIR/.profile.d"
cat > "$BUILD_DIR/.profile.d/nginx.sh" <<"EOF"
cat >"$BUILD_DIR/.profile.d/nginx.sh" <<"EOF"
export PATH="$PATH:$HOME/nginx"
EOF
cd "$CUR_DIR"
# Add support for app-nginx.conf.sigil
if [ -f "$BUILD_DIR/app-nginx.conf.sigil" ] ; then
if [ -f "$BUILD_DIR/app-nginx.conf.sigil" ]; then
echo "-----> Using user provided app-nginx.conf.sigil"
cp "$BUILD_DIR/app-nginx.conf.sigil" "$BUILD_DIR/nginx/app-nginx.conf.sigil"
# Allow deprecated nginx.conf.erb
elif [ -f "$BUILD_DIR/nginx.conf.erb" ] ; then
echo "-----> DEPRECATED: using user provided nginx.conf.erb"
elif [ -f "$BUILD_DIR/nginx.conf.erb" ]; then
echo "-----> DEPRECATED: Using user provided nginx.conf.erb"
cp "$BUILD_DIR/nginx.conf.erb" "$BUILD_DIR/nginx/nginx.conf.erb"
# ...else, force default file
@ -154,7 +160,7 @@ else
fi
# build mime.types unless overridden by user
if [ -f "$BUILD_DIR/mime.types" ] ; then
if [ -f "$BUILD_DIR/mime.types" ]; then
echo "-----> Using user provided mime.types"
cp "$BUILD_DIR/mime.types" "$BUILD_DIR/nginx/mime.types"
@ -168,7 +174,7 @@ cat <<EOF >"$BUILD_DIR/start_nginx"
#!/usr/bin/env bash
rm -f /app/nginx/nginx.conf
if [[ -f /app/nginx/app-nginx.conf.sigil ]]; then
/app/sigil/sigil -f /app/nginx/app-nginx.conf.sigil NGINX_ROOT="\$NGINX_ROOT" PORT="\$PORT" | cat -s > /app/nginx/nginx.conf
/app/sigil/sigil -f /app/nginx/app-nginx.conf.sigil NGINX_ROOT="\$NGINX_ROOT" NGINX_DEFAULT_REQUEST="\$NGINX_DEFAULT_REQUEST" PORT="\$PORT" | cat -s > /app/nginx/nginx.conf
else
erb /app/nginx/nginx.conf.erb > /app/nginx/nginx.conf
fi

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# bin/detect <build-dir> <cache-dir>
set -eo pipefail; [[ $TRACE ]] && set -x
set -eo pipefail
[[ $TRACE ]] && set -x
# Exit early if app is clearly not an nginx app
if [[ ! -f "$1/.static" ]]; then

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# bin/release <build-dir>
set -eo pipefail; [[ $TRACE ]] && set -x
set -eo pipefail
[[ $TRACE ]] && set -x
cat <<EOF
---

View File

@ -23,7 +23,11 @@ http {
port_in_redirect off;
location / {
try_files $uri $uri/ =404;
{{ if ne $.NGINX_DEFAULT_REQUEST "" }}
try_files $uri $uri/ /{{ $.NGINX_DEFAULT_REQUEST }};
{{ else }}
try_files $uri $uri/ =404;
{{ end }}
}
}
}

View File

@ -39,6 +39,7 @@ types {
application/vnd.wap.wmlc wmlc;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/wasm wasm;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;

45
site/index.html Normal file
View File

@ -0,0 +1,45 @@
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 2em;
background-color: #fdfdff;
border-radius: 0.5em;
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
div {
margin: 0 auto;
width: auto;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

2
site/robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-agent: *
Disallow: /