We have a question about what to do with application state:
- Session storage
- Cache
- Database
Basics
We'll start by installing some server basics just like we did on the other 3 servers:
sudo apt-get update
sudo apt-get install -y git tmux vim curl wget zip unzip htop
Session Storage
The easiest way to handle session storage is to use cookies to store the session data. This puts the storage in users browser, however if we save a lot of state to sessions, this can break - cookies have data limits.
Common state we save to sessions includes form data during validation.
However I typially set session storage to my cache storage, usually Redis.
Cache
We need to use a centralized cache server. We'll use our 4th server for this and install Redis onto it.
sudo apt-get update
sudo apt-get install -y git tmux vim curl wget zip unzip htop
sudo apt-get install -y redis-server
Then we can configure our application servers to use this in the .env
file:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=172.31.3.56
REDIS_PASSWORD=null
REDIS_PORT=6379
Database
For the sake of brevity, we'll put our database on the same server as Redis as well.
sudo apt-get install -y mysql-server
Then set it to listen on the private network:
bind-address = 172.31.3.56
Note that you can still connect to the local mysql over localhost, but not 127.0.0.1 from within this server. We'll also be able to connect to mysql remotely over the private network.
We need to reload MySQL for these changes to take affect:
sudo service mysql restart
Then we can setup the database and user:
# Create a database
create database myapp charset utf8mb4;
# Create a user that can connect over the private network
create user myuser@'172.31.%' identified by 'secret';
# Grant that user to the new database
grant all privileges on myapp.* to myuser@'172.31.%';
And we can ensure our app can use the remote database by updating the .env
file on the application servers:
DB_CONNECTION=172.31.3.56
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myuser
DB_PASSWORD=secret
We should be able to scaffold out our authentication now!
php artisan make:auth
php artisan migrate
And then we should be able to register and log into the server!