-
-
Notifications
You must be signed in to change notification settings - Fork 376
Developing Locally
This needs to be expanded
Shopify as of 2016 required all apps to be loaded over HTTPS. Theres several ways to accomplish this; wheather it be with WAMP/AMP, Docker, Vagrant, Homestead, etc. Below is a quick guide for setting up with Docker to develop an app locally.
This guide assumes you've setup Laravel locally and have this package installed successfully.
The easeist way to develop locally with SSL is to self-sign a certificate.
Example:
openssl req -new -sha256 \
-key ssl/domain.key \
-subj "/C=US/ST=CA/O=Acme, Inc./CN=localhost.ssl" \
-reqexts SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:localhost.ssl")) \
-out ssl/domain.csrReplace localhost.ssl with a domain you wish to use for the app. If you're on OSX, change /etc/ssl/openssl.cnf with /System/Library/OpenSSL/openssl.cnf.
This will save ssl/domain.key and ssl/domain.csr. You can then add the domain.csr file to your OS/browser as a trusted root certificate so you do not receieve browser warnings.
As well, add 127.0.0.1 localhost.ssl to your /etc/hosts file.
Next, you can use Laravel's Homestead or a simple Docker setup to use the SSL certificate and accept HTTPS traffic.
After generating the above certificate into ssl directory, and accepting it as a trusted root certificate, we can build a Docker setup to use it.
Create default.conf in the root of your Laravel project with:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name _;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
add_header X-Frame-Option ALLOWALL;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header p3p 'CP="Not used"';
root /var/www/html/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
In the above, we are setting up PHP-FPM, certificate serving, redirecting :80 to :443, pointing root to Laravel's public directory, and setting up some headers.
Create a docker-compose.yml in the root of your Laravel project with:
nginx:
image: nginx:latest
ports:
- '8000:443'
volumes:
- $PWD/default.conf:/etc/nginx/conf.d/default.conf
- $PWD:/var/www/html
- $PWD/ssl:/etc/nginx/ssl
links:
- php
restart: always
php:
image: php:7-fpm
volumes:
- $PWD:/var/www/htmlIn the above we do the following:
- Pull the
nginximage - Bind port 8000 on host to 443 on Docker
- Mount the
default.confwe created earlier to Nginx - Mount our code to
/var/www/html - Mount our certificates created previouly in
ssldirectory - Pull the
phpimage - Mount our code to
/var/www/htmlso PHP-FPM can see the code as well
You may optionally add in the MySQL or Postgres images for a database, if not, you can setup Laravel to use a SQLite file. Be sure to adjust your app's .env file to use the SQLite file or other database credentials.
If you choose not to pull in a database image for Docker, its easy to just use SQLite.
touch databases/database.sqlite and change .env to have DB_CONNECTION=sqlite
You will now have a database to use.
Once above two steps are done, see the README.md on installing this package.
You should now have:
- Package installed
- Self-signed certificate setup and installed
-
docker-compose.ymlfile -
default.conffile
When finished installing this package, run docker-compose up.
You should be able to access https://localhost.ssl:8000/login and see the app login screen.
Again, this is very basic and to be used as a guide. You can achieve the same results using Homstead, Vagrant, etc.
road map
Welcome to the wiki!
Please see the homepage for a list of relevant pages.