- Create droplet with Ubuntu 18.04
ssh root@[DROPLET IP ADDRESS]- Get password from your email
- Change password on first login
adduser laravel- Enter password and other information
usermod -aG sudo laravel
- In your local machine,
ssh-keygen - Generate a key, if you leave passphrase blank, no need for password
ls ~/.sshto show files in local machine- Get the public key,
cat ~/.ssh/id_rsa.pub - Copy it
cd ~/.sshandvim authorized_keys- Paste key
- Repeat steps for laravel user
sudo - laravelthenmkdir ~/.sshfix permissionschmod 700 ~/.sshvim ~/.ssh/authorized_keysand paste keychmod 600 ~/.ssh/authorized_keysto restrict this from being modifiedexitto return to root user
sudo vim /etc/ssh/sshd_config- Find PasswordAuthentication and set that to
no - Turn on
PubkeyAuthentication yes - Turn off
ChallengeResponseAuthentication no - Reload the SSH service
sudo systemctl reload sshd - Test new user in a new tab to prevent getting locked out
- View all available firewall settings
ufw app list- Allow on OpenSSH so we don't get locked out
ufw allow OpenSSH- Enable Firewall
ufw enable- Check the status
ufw status
sudo apt updateenter root passwordsudo apt install nginxenter Y to installsudo ufw app listFor firewallsudo ufw allow 'Nginx HTTP'to add NGINXsudo ufw statusto verify change- Visit server in browser
sudo apt install mysql-serverenter Y to installsudo mysql_secure_installationto run automated securing script- Press N for VALIDATE PASSWORD plugin
- Set root password
- Remove anonymous users?
Y - Disallow root login remotely?
N - Remove test database and access to it?
Y - Reload privilege tables now?
Y sudo mysqlto enter MySQL CLISELECT user,authentication_string,plugin,host FROM mysql.user;to verify root user's auth methodALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'STRONG_PASSWORD_HERE';to set a root passwordSELECT user,authentication_string,plugin,host FROM mysql.user;to verify root user's auth methodFLUSH PRIVILEGES;to apply all changesmysql -u root -pto access db from now on, enter passwordSTRONG_PASSWORD_HERE
sudo add-apt-repository universeto add software reposudo apt install php-fpm php-mysqlto install the basic PHP softwaresudo vim /etc/nginx/sites-available/YOUR.DOMAIN.COM
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name YOUR.DOMAIN.COM;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
sudo ln -s /etc/nginx/sites-available/YOUR.DOMAIN.COM /etc/nginx/sites-enabled/to create symlink to enabled sitessudo unlink /etc/nginx/sites-enabled/defaultto remove default linksudo nginx -ttest the whole configsudo systemctl reload nginxto apply all changessudo vim /var/www/html/info.phpto start a new PHP file, fill it with <?php phpinfo();sudo rm /var/www/html/info.phpoptional command to get rid of test file
sudo apt-get install php7.2-mbstring php7.2-xml composer unzipmysql -u root -pLogin to create the Laravel DBCREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;GRANT ALL ON laravel.* TO 'laraveluser'@'localhost' IDENTIFIED BY 'password';FLUSH PRIVILEGES;exitcd /var/www/html,sudo mkdir -p first-projectsudo chown laravel:laravel first-projectgit clone https://github.com/coderstape/laravel-58-from-scratch.git .composer installcp .env.example .env, and thenvim .env
APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://YOUR.DOMAIN.COM
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=root
DB_USERNAME=laravel
DB_PASSWORD=STRONG_PASSWORD_HERE
. . .
php artisan migratephp artisan key:generateto generate the keysudo chgrp -R www-data storage bootstrap/cachefix permissionssudo chmod -R ug+rwx storage bootstrap/cachefix permissionssudo chmod -R 755 /var/www/html/first-projectfix permissionschmod -R o+w /var/www/html/first-project/storage/fix permission
sudo vim /etc/nginx/sites-available/YOUR.DOMAIN.COM
server {
listen 80;
listen [::]:80;
root /var/www/html/first-project/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name YOUR.DOMAIN.COM;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
sudo nginx -tsudo systemctl reload nginxreload Nginx
sudo add-apt-repository ppa:certbot/certbotto get reposudo apt install python-certbot-nginxto installsudo certbot certonly --webroot --webroot-path=/var/www/html/quickstart/public -d example.com -d www.example.comsudo certbot certonly --webroot --webroot-path=/var/www/html/first-project/public -d YOUR.DOMAIN.COM
sudo vim /etc/nginx/sites-available/YOUR.DOMAIN.COM
server {
listen 80;
listen [::]:80;
server_name YOUR.DOMAIN.COM;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name YOUR.DOMAIN.COM;
root /var/www/html/first-project/public;
ssl_certificate /etc/letsencrypt/live/YOUR.DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR.DOMAIN.COM/privkey.pem;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
sudo nginx -tsudo ufw app listFor firewallsudo ufw allow 'Nginx HTTPS'to add NGINXsudo ufw statusto verify changesudo systemctl reload nginxreload Nginx
Let's make the prompt pretty
sudo apt-get install zshto install ZSHzsh --versionto confirm installwhereis zshto find out where it issudo usermod -s /usr/bin/zsh $(whoami)to make Zsh defaultsudo rebootto reapply all changes2to populate a default filesudo apt-get install powerline fonts-powerlineto install powerlinesudo apt-get install zsh-theme-powerlevel9kto install Themeecho "source /usr/share/powerlevel9k/powerlevel9k.zsh-theme" >> ~/.zshrcto enable the theme in your Zshrcexitand login again to see the new themesh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"for Oh My Zshecho "source /usr/share/powerlevel9k/powerlevel9k.zsh-theme" >> ~/.zshrcto re-enable 9K