Skip to content

Instantly share code, notes, and snippets.

@jrnickell
Last active March 24, 2017 13:22
Show Gist options
  • Save jrnickell/1b920e59c2e7a5082725 to your computer and use it in GitHub Desktop.
Save jrnickell/1b920e59c2e7a5082725 to your computer and use it in GitHub Desktop.
Nginx server config
#!/usr/bin/env bash
function create_index
{
cat <<- __EOF__
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>$PROJECT</title>
</head>
<body>
<h2>Welcome to $HOSTNAME</h2>
</body>
</html>
__EOF__
}
function create_server
{
cat <<- __EOF__
server {
listen 80;
server_name *.$HOSTNAME;
return 301 \$scheme://$HOSTNAME\$request_uri;
}
server {
listen 80;
server_name $HOSTNAME;
root $HOME/Projects/$PROJECT/$WEBROOT;
index index.html index.php;
charset utf-8;
access_log /var/log/nginx/$PROJECT.log;
error_log /var/log/nginx/$PROJECT-error.log error;
include h5bp/basic.conf;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files \$uri \$uri/ /index.php\$is_args\$args;
}
location ~ \\.php\$ {
fastcgi_split_path_info ^(.+\\.php)(/.+)\$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
server {
listen 443;
server_name *.$HOSTNAME;
ssl on;
ssl_certificate /srv/ssl/certs/$PROJECT.crt;
ssl_certificate_key /srv/ssl/private/$PROJECT.key;
return 301 \$scheme://$HOSTNAME\$request_uri;
}
server {
listen 443;
server_name $HOSTNAME;
ssl on;
ssl_certificate /srv/ssl/certs/$PROJECT.crt;
ssl_certificate_key /srv/ssl/private/$PROJECT.key;
root $HOME/Projects/$PROJECT/$WEBROOT;
index index.html index.php;
charset utf-8;
access_log /var/log/nginx/$PROJECT.log;
error_log /var/log/nginx/$PROJECT-error.log error;
include h5bp/basic.conf;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files \$uri \$uri/ /index.php\$is_args\$args;
}
location ~ \\.php\$ {
fastcgi_split_path_info ^(.+\\.php)(/.+)\$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
__EOF__
}
clear
echo "Project Setup"
echo -n "==> Enter new project name (eg: myproject): "
read PROJECT
echo -n "==> Enter new host name (eg: myproject.dev): "
read HOSTNAME
echo -n "==> Enter webroot folder name (eg: public): "
read WEBROOT
clear
echo "Setting up files for $PROJECT"
sudo mkdir -p /srv/ssl/private
sudo chmod 0700 /srv/ssl/private
sudo mkdir -p /srv/ssl/certs
sudo chmod 0755 /srv/ssl/certs
sudo openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout /srv/ssl/private/$PROJECT.key -out /srv/ssl/certs/$PROJECT.crt -subj "/C=US/ST=/L=/O=/OU=/CN=$HOSTNAME/emailAddress=/"
mkdir -vp $HOME/Projects/$PROJECT/$WEBROOT
create_index > $HOME/Projects/$PROJECT/$WEBROOT/index.php
echo "created $HOME/Projects/$PROJECT/$WEBROOT/index.php"
create_server > $HOME/$PROJECT
sudo mv $HOME/$PROJECT /etc/nginx/sites-available/$PROJECT
echo "created /etc/apache2/sites-available/$PROJECT"
sudo ln -s /etc/nginx/sites-available/$PROJECT /etc/nginx/sites-enabled/$PROJECT
sudo echo "127.0.0.1 $HOSTNAME" | sudo tee -a /etc/hosts
sudo service nginx restart
echo "$PROJECT is ready! Open a browser to $HOSTNAME to test the new project"
exit
#!/usr/bin/env bash
clear
echo "Remove Project"
echo -n "==> Enter the project name to remove (eg: myproject): "
read PROJECT
echo -n "==> Enter the host name to remove (eg: myproject.dev): "
read HOSTNAME
clear
echo "Removing files for $PROJECT"
sudo rm /srv/ssl/certs/$PROJECT.crt
sudo rm /srv/ssl/private/$PROJECT.key
sudo rm -r $HOME/Projects/$PROJECT
echo "removed $HOME/Projects/$PROJECT"
sudo rm /etc/nginx/sites-enabled/$PROJECT
sudo rm /etc/nginx/sites-available/$PROJECT
echo "removed /etc/nginx/sites-available/$PROJECT"
sudo sed -i "/$HOSTNAME/ d" /etc/hosts
sudo service nginx restart
echo "removed $PROJECT"
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment